训练题目来源包括不限于:力扣、PTA、HDU Online Judge System、蓝桥杯训练题库。
基础练习篇适用于蓝桥本科BC组、有简单基础C/C++编程知识、有兴趣自学提高等朋友阅读讨论。
续上篇C++算法入门训练记录——基础语法练习(一)-CSDN博客
答上篇遗留问题:
题目1疑点答疑:
1、读取完首行数字后需不需要使用getchar();吃掉后面的回车?
一般来说需要用getchar();进行处理。但是此题中由于后面也是用了cin>>输入。篇一末尾已经提过,cin>>输入的时候会自动跳过前面的空格、制表符、回车。所以此题中不用专门处理。但养成良好习惯很有必要。
2、直接在循环里面输出会不会导致程序运行时出现问题?
一般来说,在实际应用中,可能会需要再最后进行统一输出。即:将输入与输出分离。中间可能会用数组之类的形式暂存数据。但是在算法练习中,这不是主要关注点,即可以边输入边输出,最后只会统计输出的内容。例如此题中,按照所给程序实际运行结果如下黑图所示:
但是题库验证时,默认输出为白图所示:
3、有没有必要在末尾补上else的空行?
个人认为是有必要的,因为哪怕在else中空指令,也体现出了编程代码的完整性。
题目2疑点答疑:
1、为什么score数组要取10005,而不是10000?
因为只取10000可能会面临数组越界的问题,所以在算法比赛中一般图省事直接取最大值+5即可。当然取10001,10002,10010等一般都可以。
2、为什么在第一种方法输出时,计算的时候要+0.5?
因为在强制类型转换的时候,直接取整了。没有四舍五入的过程。所以如果想直接输出整数int的话,就需要自己手动操作一下。+0.5是一种手动四舍五入的方法,例如对69.2和75.7,四舍五入之后应为69、76。若直接int转换则输出69、75。+0.5之后再取整则为69.7和76.2取整,输出69、76。
题目3疑点答疑:
1、为什么要使用getchar()
这里就是为了吃掉cin遗留下来的回车。因为后面的输入用的不是cin>>。所以不会跳过回车。用getchar()进行处理。
2、为什么要使用cin.getline()
gets函数在VS2015之后就不支持使用了,可以用gets_s进行替换。
具体为:gets(数组名)gets_s(数字名,STLEN),STLEN为数组最大长度。
eg:
char a[100];
gets(a);gets_s(a, 100);
如果你的编译器连gets_s都不支持,可以使用函数cin.getline
具体为:cin.getline(数组名,STLEN,结束标志),STLEN为数组最大长度。
第三个参数可以省略,当第三个参数省略之后,系统默认为’\0’。
3、为什么要在cin.getline(str, 55);之后写flag = 0;
在循环中将标志反复置为有效,避免标志使用一次后就无法起到作用了。
题目4:
Give you the width and height of the rectangle,darw it.
Input
Input contains a number of test cases.For each c