C语言程序设计第五次作业——循环结构
(一)改错题
1.题目:输出华氏摄氏温度转换表:输入两个整数lower和upper,输出一张华氏摄氏温度转换表,华氏温度的取值范围是{lower,upper},每次增加2℉。计算公式如下:
c = 5×(f-32)/9
其中,c表示摄氏温度,f表示华氏温度。
错误一
错误原因:for语句括号后面不能够加分号

改正方法:去掉括号后面的英文半角分号
错误二
错误原因:for语句后面的,for语句包含的程序需要加大括号

改正方法:在程序第13行前面,和17行后面加上括号
错误三
错误原因:for语句里面的符号错误,不能使用逗号

改正方法:将逗号改为英文半角分号
编译成功,程序没有语法,格式错误

输入数据,查看结果
错误四
错误原因:输入数据“32 35”,运行结果错误,

经查证,16行输出时,符号错误,应该与前面int定义的整形变量保持一致

改正方法:将%f符号改为%d

编译后,重新输入数据
错误五
错误原因:输入数据后,程序依然错误

经查证,计算式出现错误

改正方法:将计算式改正,如图

编译后,重新输入数据

错误六
错误原因:输出结果多一组数据,原因是for语句中fahr ++的意义为,fahr +1

改正方法:将fahr ++改为fahr =fahr +2
编译后,重新输入数据
运行结果如下:


程序无误,符合题目要求
附上改正后的程序
#include <stdio.h>
int main(void)
{
int fahr , lower, upper; /* fahr表示华氏度 /
double celsius; / celsius表示摄氏度 */
printf("Enter lower:");
scanf("%d",&lower);
printf("Enter upper:");
scanf("%d",&upper);
printf("fahr celsius\n"); /* 显示表头 */
/* 温度转换 */
for (fahr = lower ; fahr <= upper; fahr = fahr + 2)
{
celsius = 5 * (fahr - 32.0)/9;
printf("%d %6.1f\n", fahr, celsius);
}
return 0;
}
(二)学习总结
1.分析代码
源代码如下
#include <stdio.h>
int main()
{
int i,num,odd,even;
odd = 0;
even = 0;
for(i = 1; i <= 10;i++)
{
scanf("%d",&num);
if(num % 2 == 0)
{
even++;
}
else
{
odd++;
}
}
printf("%d %d",even,odd);
return 0;
}
此程序与其他C语言程序 一样,都是按照从上至下的顺序来执行,开头部分为程序的固定格式,具体的方面是分部执行每一行写的程序,如下:
①定义了四个整形变量,即i,num,odd,even,
②将odd赋初值为零
③将even赋初值为零
④进入for循环,表达式1为i=1,表达式2为i<=10,表达式3为i++
⑤输入一个整型变量num。
⑥进入选择语句。判断输入的值能否被2整除。
⑦若判断结果为假,执行else语句。即odd++,此时odd的值为1。
⑧回到for循环。i=2.条件为真。继续执行for循环
⑨进入选择语句,若判断为真,执行even++,此时even = 1.
......................................
⑩当输入的整形数据数量大于i的时候,跳出for循环语句
输出even和odd最后的结果
程序结束
该程序的功能是输入10个整型数据,由系统判断该数值是奇数还是偶数,10个数输入完毕后统计奇数与偶数的个数,并输出结果。
2.增量运算符
(1)运行下面程序,结果是什么?增量运算符在单独使用时,前缀和后缀形式有区别吗?
#include <stdio.h>
int main()
{
int i,j;
i = 2;
j = 2;
i++;
++j;
printf("i = %d\n",i);
printf("j = %d\n",j);
return 0;
}
运行结果如下:

输出结果,i和j的值均为3,所以,即可说明增量运算符在单独使用时,前缀和后缀形式没有区别
(2)运行下面的程序,结果是什么?两条输出语句的执行过程是怎样的?说明什么问题?这两条输出语句执行完后,i和j的值分别是多少?
#include <stdio.h>
int main()
{
int i,j;
i = 2;
j = 2;
printf("%d\n",i++);
printf("%d\n",++j);
return 0;
}
本题意在提问增量运算符前缀与后缀的作用与区别
此程序首先定义了两个变量i和j,并且赋初值为2,只是i的增量运算符为后缀型,而j的增量运算符为后缀型。当执行i的增量运算符时,先执行输出语句,再对i执行增量操作层,所以b的值输出为2,即为增量前的值;而执行j的增量运算符时,首先对j执行增量操作,再执行输出命令,因此j输出的值为3。
说明的问题是:前缀形式的增量,先对被赋予增量的变量的值执行增/减量操作再执行后续运算;而后缀则相反,先执行其他运算,再将变量的值执行增/量操作。因此,在编程序等实际应用中,要注意变量的增量运算符的使用方法。
3.有些循环语句后面有{},有些没有,有些语句有缩进,运行下面的四个小程序,运行结果有什么不同?循环体的认定与缩格形式是否有关?与{}是否有关?那么,应该如何正确判断一个循环语句中的循环体?下面的程序中,哪几种格式是正确的缩进格式。
①程序
运行结果如下:

②程序
运行结果如下:

③程序
运行结果如下:

④程序
运行结果如下:

将四个程序与运行结果相比较,分析问题:
1 2 之间的差别为缩格的不同,再通过运行结果分析,结果上二者完全相同,效果完全相同,因此证明循环体的认定与缩格并没有关系。
2 3之间的差别为括号的不同,再通过运行结果分析,结果上二者完全不同,一个为横排,一个为竖排,二者的区别在于大括号括起的位置不同
3 4之间的差别为在于括号的位置不同,结果导致4没有换行
问题总结:
循环体的认定与缩格形式是无关
输出格式与括号的位置与包含关系有密切关系
所以我们在判断循环语句的循环体的时候,要观察括号与输出语句,即printf语句的位置关系以及包含关系来判断循环体
4.对其他你认为需要进行总结的内容进行总结。
早就听学长们说过循环比较难,刚刚接触循环结构,确实有点觉得晦涩难懂,可以算是学习C语言的第一个重难点,所以需要注意的知识点比较繁多,琐碎。以这次作业为例,要注意增量运算符的前后缀问题,前缀和后缀的执行顺序会有很大的差别,所以编写程序时,一定要予以注意。还有就是for语句的格式问题,里面的三段顺序不能够颠倒,符号运用的为分号而不是逗号,并且要注意让循环停下来的语句怎样编写,这里容易出现问题。输出语句与括号的位置关系直接关系到输出结果的格式,所以这里需要我们提起注意。
(三)实验总结
1.统计学生平均成绩与及格人数
(1)题目
本题要求编写程序,计算学生们的平均成绩,并统计及格(成绩不低于60分)的人数。题目保证输入与输出均在整型范围内。
(2)源代码
#include <stdio.h>
int main()
{
int i,t=0,N=0,a=0,sum=0;
double c=0.0,average=0.0;
scanf("%d",&N);
if(N==0)
{
c = 0,t = 0;
printf("average = %.1f\ncount = %d",c,t);
}
else
{
for(i=1;i<=N;i++)
{
scanf("%d",&a);
if(a >= 60)
{
t=t+1;
}
sum=sum+a;
}
c=(double)sum/N;
printf("average = %.1f\ncount = %d",c,t);
}
return 0;
}
(3)流程图


(4)实验分析
问题:学生为零的时候输出遇到问题
解决办法:理清思路,解决问题
(5)pta提交列表

2.到底是不是太胖了
(1)题目
据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。真实体重与标准体重误差在10%以内都是完美身材(即 | 真实体重 − 标准体重 | < 标准体重×10%)。已知市斤是公斤的两倍。现给定一群人的身高和实际体重,请你告诉他们是否太胖或太瘦了。
(2)源代码
#include <stdio.h>
#include <math.h>
int main()
{
int a=0,i = 0;
double SW = 0.0,H = 0.0,W = 0.0;
scanf("%d",&a);
for(i = 1;i <= a;i++)
{
scanf("%lf%lf",&H,&W);
SW=(H - 100) * 0.9 * 2;
if(fabs(SW - W) < SW * 0.1)
{
printf("You are wan mei!\n");
}
else if(SW - W < SW * 0.1)
{
printf("You are tai pang le!\n");
}
else
{
printf("You are tai shou le!\n");
}
}
return 0;
}
(3)流程图


(4)实验分析
问题:输出太胖了时,数据输出越到问题
解决办法:左右两边都成10 使其变成整数在比较。
(5)pat提交列表

3.统计学生成绩
(1)题目
本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则:
大于等于90分为A;
小于90且大于等于80为B;
小于80且大于等于70为C;
小于70且大于等于60为D;
小于60为E。
(2)源代码
#include <stdio.h>
int main()
{
int N=0,m=0,i=0,A=0,B=0,C=0,D=0,E=0;
scanf("%d",&N);
for(i=1;i<=N;i++)
{
scanf("%d",&m);
switch(m/10)
{
case 10:
case 9:A++;break;
case 8:B++;break;
case 7:C++;break;
case 6:D++;break;
default :E++;
}
}
printf("%d %d %d %d %d",A,B,C,D,E);
return 0;
}
(3)流程图


(4)实验分析
问题:if语句里面的符号用错,耽误了很长时间
解决办法:和同学讨论,解决问题
(5)pta提交列表

4.找出最小值
(1)题目
本题要求编写程序,找出给定一系列整数中的最小值。
(2)源代码
#include <stdio.h>
#include <limits.h>
int main()
{
int n=0,i=0,a=0,min=0;
a=INT_MAX;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&min);
if(min<=a)
{
a=min;
}
}
printf("min = %d",a);
return 0;
}
(3)流程图


(4)实验分析
问题:头文件
#include <limits.h>
不会用
解决办法:请教同学,解决问题
(5)pta提交列表

(四)博客互评
1.许天笑http://www.cnblogs.com/snxtx/p/7812139.html
2.李晓晓http://www.cnblogs.com/Reloaded/p/7795161.html
3.马阳光http://www.cnblogs.com/myg123/p/7802056.html
C语言程序设计第五次作业——循环结构的更多相关文章
- C语言程序设计第五次作业——循环结构(1)
一.改错题 1.题目 输出华氏摄氏温度转换表:输入两个整数lower和upper,输出一张华氏摄氏温度转换表,华氏温度的取值范围是{lower,upper},每次增加2℉.计算公式如下:c = 5×( ...
- C语言程序设计第五次作业--循环结构(1)
(一)改错题 输出华氏摄氏温度转换表:输入两个整数lower和upper,输出一张华氏摄氏温度转换表,华氏温度的取值范围是{lower,upper},每次增加2℉.计算公式如下: c = 5×(f-3 ...
- C语言程序设计第五次作业——循环结构1
(一)改错题 输出华氏摄氏温度转换表:输入两个整数lower和upper,输出一张华氏摄氏温度转换表,华氏温度的取值范围是{lower,upper},每次增加2℉.计算公式如下: c = 5×(f-3 ...
- C语言程序设计第六次作业——循环结构(2)
C语言程序设计第六次作业--循环结构(2) 之前的博客园图片没处理好,对大家说一声抱歉.希望大家能够多多指出我的错误,我来认真修改 ^ - ^ !. (1)改错题 序列求和:输入一个正实数eps,计算 ...
- C语言程序设计第六次作业--循环结构(2)
(一)改错题 序列求和:输入一个正实数eps,计算序列部分和 1 - 1/4 + 1/7 - 1/10 + ... ,精确到最后一项的绝对值小于eps(保留6位小数). 输入输出样例: Input e ...
- C语言程序设计第六次作业--循环结构2
(一)改错题 序列求和:输入一个正实数eps,计算序列部分和 1 - 1/4 + 1/7 - 1/10 + ... ,精确到最后一项的绝对值小于eps(保留6位小数). 输入输出样例: Input e ...
- C语言第五次作业——循环结构
C语言程序设计第五次作业--循环结构(1) (一)改错题 输出华氏摄氏温度转换表:输入两个整数lower和upper,输出一张华氏摄氏温度转换表,华氏温度的取值范围是{lower,upper},每次增 ...
- C语言程序设计第五次作业
一.实验内容 1.输入两个正整数m和n(要求m<=n), 求m!+(m+1)!+(m+2)!-+n! 2.输出1000以内的所有完数.所谓完数是指这个数恰好等于除他本身外的所有因子 ...
- C语言程序设计第三次作业--选择结构(1)
Deadline: 2017-10-29 22:00 一.学习要点 掌握关系运算符和关系表达式 掌握如何判断两个实数相等 掌握常用数学函数的使用 掌握逻辑运算符和逻辑表达式 理解逻辑运算的短路特性 掌 ...
随机推荐
- python的模块和包
==模块== python语言的组织结构层次: 包->模块->代码文件->类->函数->代码块 什么是模块呢 可以把模块理解为一个代码文件的封装,这是比类更高一级的封装层 ...
- c#动态加载卸载DLL
前段时间工作的时候遇到一个问题.就是需要每次启动程序的时候动态替换掉某个dll,所以就百度了这方面的资料.这次记录下来让自己以后可以看. 根据自己的理解,动态卸载dll需要有以下条件: 1:dll在加 ...
- Electron的代码调试
刚接触Electron,尝试调试程序时,竟无从下手,所以把这个过程做了下记录 参考工程 根据Electron的官方文档:使用 VSCode 进行主进程调试:https://electronjs.org ...
- OAuth2.0学习(1-12)开源的OAuth2.0项目和比较
OAuth2.0学习(2-1)OAuth的开源项目 1.开源项目列表 http://www.oschina.net/project/tag/307/oauth?lang=19&sort=t ...
- Python/零起点(一、数字及元组)
Python/零起点(一.数字及元组) int整型 int()强行转换成整型数据类型 int整型是不可变,且是不可迭代的对象 一.整型数字用二进制位数表示案例: age=7 #设定一个数字赋值给age ...
- python 类知识点总结
python 类知识点总结 面向对象思想: 1.设计的时候,一定要明确应用场景 2.由对象分析定义类的时候,找不到共同特征和技能不用强求 1.简述类.对象.实例化.实例这些名词的含义: 类:从一组对象 ...
- python/匿名函数和内置函数
1 匿名函数 匿名函数是lambda定义的没有名字的具有一些小功能的函数 具体形式是 lambda 参数列表:返回值表达式 lambda x: X**2 # 求平方操作 lambda x: x> ...
- python打包压缩文件夹zip+组装文件夹
无意间想到的一个需求,然后就顺手写了写,留下来,方便以后用 列表版:(基本没用,仅提供思路,字典版稍微改动可以直接用) 大体需求: 把重复的文件名进行改名,达到浏览器下载相同文件的效果 下载完成后再把 ...
- c# IPC实现本机进程之间的通信
IPC可以实现本地进程之间通信.这种用法不是太常见,常见的替代方案是使用wcf,remoting,web service,socket(tcp/pipe/...)等其他分布式部署方案来替代进程之间的通 ...
- 1102mysql关于SOCK文件的认识
自己原创,只为记录. 当本地登录MySQL的时候提示"Can't connect to local MySQL server through socket"的问题,其实代码是MyS ...