标题:
C语言循环语句应用实例
[打印本页]
作者:
苹果也疯狂
时间:
2015-3-7 12:27
标题:
C语言循环语句应用实例
题目:假设某位老师需要分别统计若干个班某项考试的平均分,但每个班的人数都不相同,请写个程序辅助他尽快完成任务。要求保留两位小数。
在往下看之前,请读者先自己试着写一个,说不定您写的比我下面写的那个要好得多。
解答:
#Include <Stdio.H>
Int Main(Void)
{
Unsigned Num_of_students, I;
Double Score, Total_score, Avg_score;
Printf("Please Tell Me How Many Students Are There In This Class: ");
/* 读取用户输入的学生数目。因为 Num_of_students 是 Unsigned 类型的, */
/* 所以必须用 %U,切记不要用错了,否则可能导致意想不到的结果。 */
Scanf("%U", &Num_of_students);
Printf("Got It! %U Students In This Class.
"
"Please Tell Me The Score Of Each Student:
",
Num_of_students);
For ( I = 0, Total_score = 0; I != Num_of_students; ++I )
{
/* 读取用户输入的学生分数。因为 Score 是 Double 类型的,所以 */
/* 必须用 %Lf,切记不要用错了,否则可能导致意想不到的结果。 */
Scanf("%Lf", &Score);
Total_score += Score; /* 计算总分 */
}
/* 计算平均分 */
Avg_score = Total_score / Num_of_students;
/* 输出总分和平均分 */
Printf("Total Score : %.2f
"
"Average Score : %.2f
",
Total_score, Avg_score);
}
运行结果:
Please Tell Me How Many Students Are There In This Class: 5
Got It! 5 Students In This Class.
Please Tell Me The Score Of Each Student:
90 85 60 88
78 68
Total Score : 401.00
Average Score : 80.20
程序重点:
1. 要算出平均分,就必须知道学生数目。学生数目需要由用户(本例中是老师)输入,
而通过 Scanf 函数可以获取用户输入。故本例使用 Scanf 获取老师输入的学生数目。
2. 您可能已经发现了,本例第二个 Printf 调用写得有点奇怪,也许您会觉得我写错了。
其实不然,这样写是完全正确的。因为仅由空格或者换行隔开的字符串字面量会自动
被连接成一个字符串字面量,所以本例中的
"Got It! %U Students In This Class.
"
"Please Tell Me The Score Of Each Student:
"
等同于
"Got It! ...(略) Class.
Please ... Student:
"
为了便于排版,我对上面这个字符串作了一些省略。除了这点,您肯定还发现了另一个
特别之处:Num_of_students); 明明不是字符串字面量呀,怎么也可以另起一行书写?没错!
的确可以另起一行书写!C 语言的书写格式非常自由,可以把很多句语句写在同一行上,
也可以把一句语句分开几行来写。语句之间空多少格,空多少行,都无所谓,对目标代码
的生成毫无影响。唯一影响的是代码的可读性。例如:
#Include <Stdio.H> /* 注意,预处理指令需要一行写完!*/
Int Main( Void ) { Int Four; Four
=
4
;
Printf(
"%D
",
Four); Return 0;}
这样写是完全合法的,但是非常难看,毫无可读性可言!我们应该利用这种自由来书写
美观易读的代码;切不可滥用,写出乱七八糟的代码!本例中,为了使代码美观易读,
我们把第二个 Printf 调用分成三行来写。
3. 通过循环算出总分。该循环每次获取用户输入的一个分数,每获取一个分数都和前面已
获取了的分数的总和进行累加,直到获取到的分数数目等于学生数目为止。
4. 输入分数时,分数之间可用空格隔开,也可用回车隔开。本例同时使用了这两种方法。
5. 也许您注意到了,程序运行时,我输入了 6 个分数,但算出来的结果只是前 5 个分数
的和。这是因为我前面输入的学生数目是 5,所以循环次数只有五次,仅获取了前面的
那五个分数。
6. 输入的数据会先被放入缓冲区中,等到按了回车键之后才会被送到我们编写的程序里。
这点我们以后会详细讲解。
7. 输入非数字字符(如 Abc#@,.?=-+ 等)会导致该程序出问题,解决办法我们以后会详细
讲解。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0