回首页 回首页 ◎ 设为首页  
◎ 收藏本站  
◎ 给我留言  
  
  首 页  C/C++教程  C++之父的FAQ  C/C++动向  C/C++源代码  C/C++误区  Unix/Linux  下载中心  乱七八糟  蚂蚁的Blog  
  当前位置:首 页 >> C/C++教程 >> C 语言基础教程 >> 44. 循环应用实例 1
最 近 更 新
54. goto 语句
53. switch 语句推荐
52. continue 和 break
51. 条件运算符(?:)
50. if 语句嵌套推荐
49. 逻辑运算符推荐
48. 在循环中使用 if 语句推荐
47. if 和 else 连用推荐
46. if 语句
45. 循环应用实例 2
最 新 推 荐
53. switch 语句推荐
50. if 语句嵌套推荐
49. 逻辑运算符推荐
48. 在循环中使用 if 语句推荐
47. if 和 else 连用推荐
44. 循环应用实例 1推荐
43. 循环嵌套推荐
40. for 循环推荐
37. 关系运算符推荐
36. while 循环推荐
热 门 排 行
2. 第一个 C 程序推荐
31. 预处理指令 #define..推荐
1. C 语言简介
11. 基本数据类型:整型..推荐
24. 运算符的优先级和结..推荐
5. 如何编写函数
13. 标识符命名规则
30. 字符串字面量推荐
36. while 循环推荐
7. 第三个 C 程序推荐
站 内 搜 索

Web stdcpp.cn
关键词

搜索方式

搜索范围

精确匹配
广 告

44. 循环应用实例 1


来源:蚂蚁的 C/C++ 标准编程 作者:antigloss 等级:精品
发布于2006-11-04 22:41 被读2820次 【字体:

题目:假设某位老师需要分别统计若干个班某项考试的平均分,但每个班的人数都不相同,请写个程序辅助他尽快完成任务。要求保留两位小数。

    在往下看之前,请读者先自己试着写一个,说不定您写的比我下面写的那个要好得多。

解答:

        #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.\n\n"
                   "Please tell me the score of each student:\n",
                   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\n"
                   "Average score  : %.2f\n",
                   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.\n\n"
           "Please tell me the score of each student:\n"

       等同于

           "Got it! ...(略) class.\n\nPlease ... student:\n"

       为了便于排版,我对上面这个字符串作了一些省略。除了这点,您肯定还发现了另一个
       特别之处:num_of_students); 明明不是字符串字面量呀,怎么也可以另起一行书写?没错!
       的确可以另起一行书写!C 语言的书写格式非常自由,可以把很多句语句写在同一行上
       也可以把一句语句分开几行来写。语句之间空多少格空多少行,都无所谓,对目标代码
       的生成毫无影响。唯一影响的是代码的可读性。例如:

           #include <stdio.h/* 注意,预处理指令需要一行写完!*/
                int main(  void  ) { int four; four
           =
                  4

 

           ;

 

                                printf(

                 "%d\n",

            four); return 0;}

       这样写是完全合法的,但是非常难看,毫无可读性可言!我们应该利用这种自由来书写
       美观易读的代码;切不可滥用,写出乱七八糟的代码!本例中,为了使代码美观易读,
       我们把第二个 printf 调用分成三行来写。

    3. 通过循环算出总分。该循环每次获取用户输入的一个分数,每获取一个分数都和前面已
       获取了的分数的总和进行累加,直到获取到的分数数目等于学生数目为止。

    4. 输入分数时,分数之间可用空格隔开,也可用回车隔开。本例同时使用了这两种方法。

    5. 也许您注意到了,程序运行时,我输入了 6 个分数,但算出来的结果只是前 5 个分数
       的和。这是因为我前面输入的学生数目是 5,所以循环次数只有五次,仅获取了前面
       那五个分数。

    6. 输入的数据会先被放入缓冲区中,等到按了回车键之后才会被送到我们编写的程序里。
       这点我们以后会详细讲解。

    7. 输入非数字字符(如 abc#@,.?=-+ 等)会导致该程序出问题,解决办法我们以后会详细
       讲解。

参考资料:C Primer 5th Edition
          The C Programming Language 2nd Edition
          C99 标准

本文版权归 蚂蚁的 C/C++ 标准编程 以及 作者 antigloss 共同所有,转载请注明原作者和出处。谢谢。



相关专题:C 循环语句
45. 循环应用实例 2
43. 循环嵌套

上一篇:43. 循环嵌套
下一篇:45. 循环应用实例 2

共有评论 9 条 网友评分 1分 查看全部评论

游客:Ruibi
评分:1
不错,对于提高我编写代码的可读性有了很大帮助,谢谢~!
希望多发点好文章,你的网站我几乎每天都会来看有没有更新~!
游客:antigloss
评分:0
谢谢你的支持。不过不用每天都来看。每周日来一次就够了,我一般就周六更新一下。
游客:taxue
评分:0
不错,很有帮助,我也想在你这里发些,和你们高手一起讨论,好像发不了啊。
游客:antigloss
评分:0
taxue 你好。如果你想发文章的话,可以先发给我,由我来发。antigloss@163.com
游客:SDR_zrd
评分:4
老大
怎么我在机子上试你这程序
回车后 直接推出DOS窗口了
游客:antigloss
评分:0
     windows/dos 环境下,用 system("pause"); 可以暂停。前提是系统中要有 pause 这个命令。

        #include <stdlib.h>  // C
        system("pause");     // windows/dos
游客:妮雅
评分:5
             printf("Got it! %u students in this class.\n\n"
                   "Please tell me the score of each student:\n",
                   num_of_students);

这里,最后一个 \n 如果不写的话,可以运行 但数据老是出错  是内存泄露的问题么?
游客:antigloss
评分:0
请把出错情况发上来。

查看全部评论

【发表评论】 评分:1分 2分 3分 4分 5分


验证码:

Powered By Www.Xydw.COM Ver1.14 管理
Copyright © 2005-2006 蚂蚁的 C/C++ 标准编程 All Right Reserved. XCMS
粤ICP备06014124号   站长:Antigloss