C语言程序设计第五次作业——循环结构(1)

(一)改错题

输出华氏摄氏温度转换表:输入两个整数lower和upper,输出一张华氏摄氏温度转换表,华氏温度的取值范围是{lower,upper},每次增加2℉。计算公式如下:++c = 5×(f-32)/9++。

其中,c表示摄氏温度,f表示华氏温度。

  • 输入输出样例1:

     Enter lower:32

       Enter upper:35

       fahr celsius

       32 0.0

       34 1.1

      

  • 输入输出样例2:

       Enter lower:40   Enter upper:30

      fahr celsius

源程序(有错误的程序)

  1. #include <stdio.h>
  2. int main(void)
  3. {
  4. int fahr , lower, upper; /* fahr表示华氏度 */
  5. double celsius; /* celsius表示摄氏度 */
  6. printf("Enter lower:");
  7. scanf("%d",&lower);
  8. printf("Enter upper:");
  9. scanf("%d",&upper);
  10. printf("fahr celsius\n"); /* 显示表头 */
  11. /* 温度转换 */
  12. for (fahr = lower , fahr <= upper, fahr ++) ;
  13. celsius = 5 /9 * (fahr - 32.0);
  14. printf("%3.0f %6.1f\n", fahr, celsius);
  15. return 0;
  16. }

错误信息 1:

错误原因 :

for括号中前俩个只能是分号而不是逗号

改正方法:

把括号里面的逗号改成分号,把括号外面的分号去掉。

编译正确,继续运行:

错误信息 2:

错误原因:

输出结果不正确,回头发现for后面缺少了俩个大括号“{}”。

错误信息 3:

错误原因:

加入了大括号{}还是和上一个错误一样,输出结果不正确。判断是输出的时候出现了问题。

改正方法:

把%3.0f, %6.1f改成%d和%:1f。

错误信息 4:

错误原因:



应该把 “/9”放在后面,下面的是给出的正确的计算公式。

改正方法:

把公式按照格式来写。

错误信息 5:

错误原因:

输出的组距多出来了,循环应该是+2而不是+1。

改正方法:把fahr++改成fahr+=2。

输入样例2: 40 30

符合结果,给出正确的源程序

  1. #include <stdio.h>
  2. int main(void)
  3. {
  4. int fahr , lower, upper; /* fahr表示华氏度 */
  5. double celsius; /* celsius表示摄氏度 */
  6. printf("Enter lower:");
  7. scanf("%d",&lower);
  8. printf("Enter upper:");
  9. scanf("%d",&upper);
  10. printf("fahr celsius\n"); /* 显示表头 */
  11. /* 温度转换 */
  12. for (fahr = lower ; fahr <= upper; fahr +=2)
  13. {
  14. celsius = 5* (fahr - 32.0)/9;
  15. printf("%d %.1f\n", fahr, celsius);
  16. }
  17. return 0;
  18. }

(二)学习总结

  • 1
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int i,num,odd,even;
  5. odd = 0;
  6. even = 0;
  7. for(i = 1; i <= 10;i++)
  8. {
  9. scanf("%d",&num);
  10. if(num % 2 == 0)
  11. {
  12. even++;
  13. }
  14. else
  15. {
  16. odd++;
  17. }
  18. }
  19. printf("%d %d",even,odd);
  20. return 0;
  21. }

第一步:定义变量i,num,odd,even

第二步:赋值odd = 0

第三步:赋值even = 0

第四步:定义i = 1

第五步:运行i<=10

第六步:输入num

第七步:判断是否 num % 2 == 0

第八步:运行even加1,或者odd加1

第九步:运行i++

第十步:判断是否i<=10

第十一步:输入sum

第十二步:判断是否 num % 2 == 0

第十三步:运行even加1,或者odd加1

  1. .
  2. .
  3. .

最后一步:i=11,判断i>10,然后输出even和odd的结果

功能:实现10个数的奇数偶数分类
  • 2 增量运算符

(1)

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int i,j;
  5. i = 2;
  6. j = 2;
  7. i++;
  8. ++j;
  9. printf("i = %d\n",i);
  10. printf("j = %d\n",j);
  11. return 0;
  12. }



运行结果:



运行结果:

增量运算符在单独使用时没有影响。

(2)

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int i,j;
  5. i = 2;
  6. j = 2;
  7. printf("%d\n",i++);
  8. printf("%d\n",++j);
  9. return 0;
  10. }

运行结果:

最后的结果是:i=2,j=3。i++为后缀的形式,先执行的是输出i=2,然后再执行i ++,所以输出的是i=2;++j为前缀,先执行j=2,j+1,然后再执行输出,所以输出的结果是j=3。这说明前缀和后缀在语句里面的时候所表达的含义是不同的,当它们单独使用时没有区别,所以在我们用的时候我们要注意是在语句里面还是在语句外面。
  • 3 循环语句后面有{}是否有影响?
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int i;
  5. for(i = 1;i <= 5;i++)
  6. printf("*");
  7. printf("\n");
  8. return 0;
  9. }

运行结果:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int i;
  5. for(i = 1;i <= 5;i++)
  6. printf("*");
  7. printf("\n");
  8. return 0;
  9. }

运行结果:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int i;
  5. for(i = 1;i <= 5;i++)
  6. {
  7. printf("*");
  8. printf("\n");
  9. }
  10. return 0;
  11. }

运行结果:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int i;
  5. for(i = 1;i <= 5;i++)
  6. {
  7. printf("*");
  8. }
  9. printf("\n");
  10. return 0;
  11. }

运行结果:

1,2,4输出的一行5,而3输出的是一列5,但是1,2属于一类for后面没有{},3,4属于一类for后面有{}。
为什么会有不同的结果,这是因为跟{}有关,3输出一列的5 *是因为在大括号里面有循环,并且输出换行在括号里面,所以每输入一次就换一次行;而4则与3不同的地方就是输出换行在括号外面,所以每次输入就存在了里面,最后直接输出的是一行5 *。
1和2在缩格上面不同,但是输出的结果一样;1和4都输出了5 *,则证明循环体的判定与缩格没有关系,而与大括号{}有关系。3和4是正确的缩进格式。
所以在我们判断的时候我们要看for后面有没有大括号在进行运行。
  • 4 其他总结:
  1. 1.在进行逗号运算的时候要从左往右一次运算。
  1. 2.循环语句的控制条件是breakcontinuebreak只能终止并跳出最近一层的结构。
  2. break只能用于循环语句和switch语句中。
  3. 在循环语句中,break语句一般都是与if语句一起使用。
  4. continue语句只结束本次循环,而不是终止整个循环的执行。
  1. 3.无限循环中,通过在循环体中加break语句对循环进行控制。

(三)实验总结

(1)题目

7-1求奇数分之一序列前N项和:

(2)流程图

(3)源代码
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int denominator, i, N;
  5. double item, sum;
  6. while (scanf("%d", &N) != EOF)
  7. {
  8. denominator = 1;
  9. sum = 0;
  10. for (i = 1; i <= N; i++)
  11. {
  12. item = 1.0/denominator;
  13. sum = sum+item;
  14. denominator = denominator+2;
  15. }
  16. printf("sum = %f\n", sum);
  17. }
  18. return 0;
  19. }
(4)实验分析

问题1:输出的结果不相等。

原因:item为浮点型,而这样输出的整型所以不相等。

解决办法:把1改成1.0,或者在denominator前面加double()。

(5)本题PTA提交列表

(1)题目

7-3奇偶分家

(2)流程图

(3)源代码
  1. #include <stdio.h>
  2. int main(void)
  3. {
  4. int N,i,n,a = 0,b = 0;
  5. scanf("%d",&n);
  6. for(i = 0;i < n;i++)
  7. {
  8. scanf("%d",&N);
  9. if(N % 2 == 0)
  10. {
  11. a++;
  12. }
  13. else
  14. {
  15. b++;
  16. }
  17. }
  18. printf("%d %d",b,a);
  19. return 0;
  20. }
(4)实验分析

问题1:在写流程图的时候碰到输入0的时候就直接退出。

原因:赋值为"n"和"N",但是它俩代表的是同一个值,所以输入0的时候不能判断是赋给谁,最后就按照第一个来输出。

解决办法:第二个变量赋值成别的字母就可以了。

(5)本题PTA提交列表

(1)题目

7-5 统计字符

(2)流程图

(3)源代码
  1. #include<stdio.h>
  2. int main()
  3. {
  4. char str[10];
  5. int i=0,letter=0,blank=0,digit=0,other=0;
  6. while(i<10)
  7. {
  8. str[i++]=getchar();
  9. }
  10. for(i=0;i<10;i++)
  11. {
  12. if(str[i]==' ')
  13. {
  14. blank++;
  15. }
  16. else if(str[i]=='\n')
  17. {
  18. blank++;
  19. }
  20. else if(str[i]>='0'&&str[i]<='9')
  21. {
  22. digit++;
  23. }
  24. else if(str[i]>='A'&&str[i]<='Z')
  25. {
  26. letter++;
  27. }
  28. else if(str[i]>='a'&&str[i]<='z')
  29. {
  30. letter++;
  31. }
  32. else
  33. {
  34. other++;
  35. }
  36. }
  37. printf("letter = %d, blank = %d, digit = %d, other = %d",letter,blank,digit,other);
  38. return 0;
  39. }
(4)实验分析

在统计字符的时候我们要用到循环里面的镶嵌,我们既可以用字母来表示也可以用asllc码来表示但是建议用字母来表示这样好记。在实验过程中遇到问题就是多注意注意细节,比如:' '英文半角单引号。

(5)本题PTA提交列表

(1)题目

7-7 求交错序列前N项和

(2)流程图

(3)源代码
  1. #include <stdio.h>
  2. int main(void)
  3. {
  4. int n;
  5. while(scanf("%d",&n)!=EOF)
  6. {
  7. int i;
  8. double j,k; /*j分母,i分子*/
  9. double sum=1; /*sum表示总和*/
  10. j=1;
  11. for(i=2;i<=n;i++)
  12. {
  13. if(i%2==0)
  14. {
  15. j+=2;
  16. k=-i/j;
  17. }
  18. else
  19. {
  20. j+=2;
  21. k=i/j;
  22. }
  23. sum+=k;
  24. }
  25. printf("%.3f\n",sum);
  26. }
  27. return 0;
  28. }
(4)实验分析

在我们求交错序列前N项和的时候,我们要注意一正一负,所以要在循环的时候用(-1)的n-1次幂来求比较好。例如:

  1. k=(-1)^(n-1)/j
(5)本题PTA提交列表

(四)博客互评

(1) 针对陈魔的博客园:
  1. (1).首先打开界面是比较醒眼的,因为文字比较大还有截图,这样可以看的很
  2. 清楚,但是我觉得如果截图都弄那么大整体看就不整齐了。
  1. (2).建议你源代码用Markdowwn的形式来写,这样看起来就比较好看而且知道缩格的形式,也能够练习一下写程序注意的点。
  1. (3).总体内容完整,值得我么学习,希望我们能够一起交流。
(2)针对孤寂一粒沙的博客园:
  1. (1).建议你在循环是否和{}有影响的那道题,写完源程序然后配上结果图这样更明了。
  2. 在增量运算符那道题应该把输出的结果截图下来,你这样输入俩个数容易被别人看的时候漏掉。
  1. (2).流程图比较模糊。
  2. 实验分析的时候应该把部分正确详细的写出来,别人不知道你哪儿不正确,应该写出来大家一起交流。
  1. (3).博客互评应该写出你评论了谁,只给一个链接不知道是谁。总体挺好但是需要改善。
(3)针对曲儿说的博客园:
  1. (1).整体看起来不错,格式整齐,内容完整,值得我们学习。
  2. 但是,有些格式需要改正,就像运行结果1和后面附一张图片需要空一行,这样就会汉字在图片上方,这样看起来就整齐了。
  1. (2).学习总结这一块总结的很好,值得我学习,尤其是如何运算的步骤写的很详细希望我们能够一起交流学习。

^ - ^欢迎大家来评论我的博客园!

C语言第五次作业——循环结构的更多相关文章

  1. C语言程序设计第五次作业——循环结构

    (一)改错题 1.题目:输出华氏摄氏温度转换表:输入两个整数lower和upper,输出一张华氏摄氏温度转换表,华氏温度的取值范围是{lower,upper},每次增加2℉.计算公式如下: c = 5 ...

  2. C语言程序设计第五次作业——循环结构(1)

    一.改错题 1.题目 输出华氏摄氏温度转换表:输入两个整数lower和upper,输出一张华氏摄氏温度转换表,华氏温度的取值范围是{lower,upper},每次增加2℉.计算公式如下:c = 5×( ...

  3. C语言程序设计第五次作业--循环结构(1)

    (一)改错题 输出华氏摄氏温度转换表:输入两个整数lower和upper,输出一张华氏摄氏温度转换表,华氏温度的取值范围是{lower,upper},每次增加2℉.计算公式如下: c = 5×(f-3 ...

  4. C语言第02次作业--循环结构

    1.本章学习总结 1.1思维导图 1.2本章学习体会及代码量学习体会 1.2.1学习体会 1- 经过这两周的学习,我深切地体会C语言非常的难(对于我而言).大部分情况都是题目不理解和没有思路,或者编译 ...

  5. C语言程序设计第五次作业——循环结构1

    (一)改错题 输出华氏摄氏温度转换表:输入两个整数lower和upper,输出一张华氏摄氏温度转换表,华氏温度的取值范围是{lower,upper},每次增加2℉.计算公式如下: c = 5×(f-3 ...

  6. 网络1911、1912 C语言第2次作业--循环结构 批改总结

    一.评分规则 伪代码务必是文字+代码描述,直接反应代码,每题扣1分 提交列表没内容,或者太简单,每题得分0分.注意选择提交列表长的题目介绍. 代码格式不规范,继续扣分. 代码互评,内容简单,0分. 原 ...

  7. 网络1911、1912 C语言第5次作业--循环结构 批改总结

    如题 一.评分规则 1.伪代码务必是文字+代码描述,直接反应代码,每题扣1分 2.提交列表没内容,或者太简单,每题得分0分.注意选择提交列表长的题目介绍. 3.代码格式不规范,包括命名随意.继续扣分. ...

  8. C语言程序设计第六次作业——循环结构(2)

    C语言程序设计第六次作业--循环结构(2) 之前的博客园图片没处理好,对大家说一声抱歉.希望大家能够多多指出我的错误,我来认真修改 ^ - ^ !. (1)改错题 序列求和:输入一个正实数eps,计算 ...

  9. C语言程序设计第二次作业--顺序结构

    C语言程序设计第二次作业--顺序结构 1.输出带框文字:在屏幕上输出以下3行信息. ************* Welcome ************* 源程序 #include <stido ...

随机推荐

  1. Centos6.7的在虚拟机virulBox下的lamp平台的搭建

    实验环境: linux:小甲鱼带你学C语言,带你飞的提供的体积比较小的centos6.7和virtualBox mysql,apahce,php是燕十八在Linux基础进阶中提供的安装方式: 结果,安 ...

  2. WPF 自定义DataGrid控件样式

    内容转自https://www.cnblogs.com/xiaogangqq123/archive/2012/05/07/2487166.html 一.DataGrid基本样式(一) 小刚已经把Dat ...

  3. 新概念英语(1-99)Ow!

    Lesson 99 Owl! 啊哟! Listen to the tape then answer this question. Must Andy go to see the doctor?听录音, ...

  4. xftp上传文件失败,执行程序发现磁盘满了:No space left on device

    参考链接 No space left on device 解决Linux系统磁盘空间满的办法http://www.cnblogs.com/aspirant/p/3604801.html如何解决linu ...

  5. Linux背景知识(1)RedHat和Centos

    Redhat有收费的商业版和免费的开源版,商业版的业内称之为RHEL(Red Hat Enterprise Linux)系列, 而这个CentOS(Community ENTerprise Opera ...

  6. ELK学习总结(2-2)单模式CRUD操作

    ------------------------------------------------------ 1.查看索引信息 请求命令: GET /library/_settings GET /li ...

  7. 详解Windows Server 2008 R2下安装Oracle 11g

    本篇文章转载 http://www.it165.net/database/html/201212/3385.html 一.安装前的准备工作: 1. 修改计算机名: 服务器的计算机名称对于登录到Orac ...

  8. setInterval()使用时易疏忽的点

    举个例子: 一道题目 这两个程序的区别就在于我向setInterval的参数一function写入了参数.这就是导致运行结果不尽如人意的原因. setInterval()方法可以接收三个参数,此参数会 ...

  9. JavaScript中的 原型 property 构造函数 和实例对象之间的关系

    1 为什么要使用原型? /* * javascript当中 原型 prototype 对象 * * */ //首先引入 prototype的意义,为什么要使用这个对象 //先来写一个构造函数的面向对象 ...

  10. python基础——类名称空间与对象(实例)名称空间

    python基础--类名称空间与对象(实例)名称空间 1 类名称空间 创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性 而类的良好总属性:数据属性和函数属性 其中类 ...