NOIP第12讲需要注意的问题

关于上周课程需要注意的一些小问题:

一. 关于scanf和printf的使用:

scanf和printf实际上是c语言的标准输入和标准输出方法,c++作为c语言的升级版本,在可以使用自己的cin和cout外,也可以使用scanf和printf,那这两者既然可以实现同样的功能,为什么还要学习呢?这是因为我们在竞赛的过程中,如果要涉及到输入大量的数据,那么使用scanf和printf的话效率会更高,就不会出现读取超时或者输出超时而被扣分的问题,所以这点是需要注意的。那么,使用scanf和printf的格式是什么呢?
格式:scanf(“占位符” ,存储地址);
格式:printf(“占位符” ,变量名);
那什么是占位符:
占位符,如其名字,就是帮变量占位置的意思。那为什么要帮变量占位置呢?原因有二:

1.方便调整变量的格式

这更多应用在变量的输出上,我们有时候希望在输出某一变量的时候对其进行一定的优化,比如:输出一个小数点为2的按四舍五入进位的浮点数,如果按照cout的做法,尽管可以实现,但过程需要进行转化的步骤很多,对程序的运行时间造成很大的影响,并且容易出现逻辑问题,导致错误的发生。因此,这种情况下更应当使用占位符进行解决。我们先占着这么一个位置,然后跟编译器说明我们需要什么样的数据,编译器把数据进行处理后,再在占位符的位置进行输出,这个过程是不需要我们去编写的,因而更快速有效。

2.提高效率

我们平时用cout输出的时候,遇到变量的时候,往往要隔开用(<<)符号隔开,最后把所有的输出内容再一段一段的拼接成一个完整的输出。这个过程是比较耗内存的。而使用占位符的话,就不需要多次拼接,只是一个数据的替换即可,在执行效率上方便很多。
常见的占位符有哪些:

占位符对应格式
%dint
%cchar
%ffloat
%lfdouble(lf为LF的小写)
%sstring

注意1:

如果要输出特定位数的浮点数,这在%后符号前加 . 号以及位数。比如 %.2lf(注意没有空格)

注意2:

如果要输入多个数据的时候,需要注意以下几个场景:
scanf(“%d%c%f”,&a,&b,&c) —->输入的数据不需要加空格(10c4.56),但是如果格式相同会产出一些问题,不建议使用
scanf(“%d %d %d”,&a,&b,&c ) —->输入的数据间需要加空格(10 200 30)
scanf(“%d ,%d, %d”,&a,&b,&c) —->输入的数据间需要加逗格(10 ,200 ,30)
也就是说,除了占位符之外,在scanf里面写上的一些非占位符信息,都需要在数据输入的时候写上一遍,否则会得不到正确的数据

注意3:

使用scanf需要注意用&符号(取址,以后会说到),使用printf则直接使用变量

二、关于文件输入和文件输出

文件输入和输出是竞赛中必定使用的数据录入和结果输出工具,毕竟一场比赛可能需要上百个数据,人家总不会让你一个数字一个数字地输入,因此熟练掌握文件的输入和输出是竞赛的必备技能。本次有介绍两种方法:

1.freopen方法:

freopen方法一般和scanf和printf方法一起使用。具体的步骤为:

1-1.打开输入文件和输出文件

   freopen("file.in","r",stdin);  

打开输入文件,三个参数,第一个文件名,第二个表明为可读”r”read简写 第三个标准输入流 stdin(std为标准standard的缩写,in代表输入)

 freopen("file.out","w",stdout);  

打开输出文件,三个参数,第一个文件名,第二个表明为可写”w”write简写 第三个标准输入流 stdout(std为标准standard的缩写,out代表输出)

1-2.输入或者输出文件

用scanf或者printf实现,执行1-1后,会直接从文件读取数据或者直接将信息输出到文件中,不需要再在窗口上
敲入数据,也不能再在窗口上显示结果。要查看执行结果,要打开输出文件

1-3关闭输入输出文件

 fclose(stdin);
 fclose(stdout);

2.引入头文件fstream

fstream是c++中用于处理文件输入和文件输出的文
件,特点是简单,缺点是效率没有freopen快,并且不能进行格式处理
使用方法如下:

2-1:引入头文件 #include

2-2: 定义输入输出流

ifstream cin("输入文件名");
ofstream cout("输出文件名");

2-3使用cin 输入文件,使用cout输出文件

注意:

1.不管是哪种方法,输入文件和输出文件都要和执行文件放在一起(建议cpp文件也放在一起,dev编译时会在cpp文件的同级目录生成执行文件(.exe文件))

2.使用引用头文件的方法时,定义文件输入输出流要放在using namespace std;之后

3.引用了fstream头文件之后,就不能再引用iostream头文件,注意啦!

4.以上两种方法可以混用,比如引用头文件,定义cin输入数据,然后使用freopen打开输出文件,用printf方法输出结果,一般用于输出规定格式的浮点数

三:结构体

结构体可以理解为我们自己定义的一个数据类型,实际上是基本数据类型的一个集合:其格式为:
struct 结构体名字{
基本数据类型 变量名;
…. ….;
} ;

 struct student{
   string name;
   int      age;
   int      score
};

注意:
1.相同的结构体可以直接整体交换,比如
student st1,st2,
可以直接这样:
st1=st2;
而不需要像下面这样,但注意是相同的结构体才可以
st1.name = st2.name;
st1.age = st2.age;
st1.score = st2.score;

总结:

从这一节课开始,接下来的课程会越来越重要,对于编程的逻辑训练要求比较高,因此切记一定要认真听课,及时跟着老师练习。反复去模拟程序的运行过程,从而提高编程的逻辑思维。另外,要养成一些竞赛的习惯,文件输入和输出是竞赛的基础要求,必须要牢固掌握。不然数据没法录入,就会连分数都没有。
平时练习的要求:
1.不要使用自定义头文件

2.每次都要导入cstdio头文件,NOIP竞赛的编译器没有这个头文件会出现不能读取数据的问题,要注意了

最后:多练,勤问,更要多思考,加油。坚持是为了最后的成功。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页