Board logo

标题: 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