C语言程序设计第五次作业——循环结构(1)
一、改错题
1.题目
输出华氏摄氏温度转换表:输入两个整数lower和upper,输出一张华氏摄氏温度转换表,华氏温度的取值范围是{lower,upper},每次增加2℉。计算公式如下:c = 5×(f-32)/9
其中,c表示摄氏温度,f表示华氏温度。
源程序(有错误的程序)
#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 ++) ;
celsius = 5 /9 * (fahr - 32.0);
printf("%3.0f %6.1f\n", fahr, celsius);
return 0;
}
错误信息1:
错误原因:for (fahr = lower ; fahr <= upper; fahr ++)后面多了一个“;”
改正方法:删掉for (fahr = lower ; fahr <= upper; fahr ++)后面的“;”
错误信息2:
错误原因:for (fahr = lower ; fahr <= upper; fahr ++)中括号里的表达式用了“,”隔离
改正方法:for (fahr = lower ; fahr <= upper; fahr ++)中括号里的“,”全部换成“;”
错误信息3:
错误原因:前面声明变量时fahr为整型,但输出时fahr的格式化输出符号错误,并且celsius的格式化输出格式也是有问题的,如图:
改正方法:将printf("%3.0f %6.1f\n", fahr, celsius)改成printf("%d %.1f\n", fahr, celsius);
错误信息4:
错误原因:经检查for语句后有多条语句,但是for后并未添加“{}”
改正方法:在13行和第16行插入“{}”
错误信息5:
错误原因:原题为每次循环的华氏度的温度增加2,而在错误的源代码的for语句中,每次循环中华氏度只增加1.
改正方法:将for语句中的“fahr++”改为“fahr += 2”
错误信息5:
错误原因:回过头检查计算公式不对
改正方法:celsius = 5 /9 * (fahr - 32.0)改为celsius = 5 * (fahr - 32.0) / 9
输入样例数据“32 35”,结果如图:
符合期望。
输入另一组样例数据“40 30”,结果如图:
符合期望。
与样例一样,再次输入两组数据检验,如图:
符合期望,认为改正完毕。
附上改正后的源代码:
#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 += 2)
{
celsius = 5 * (fahr - 32.0) / 9;
printf("%d %.1f\n", fahr, celsius);
}
return 0;
}
二、学习总结
1.详细描述程序的执行过程,即说明程序的每一步是执行的哪条代码,执行顺序如何。循环需描述前两次循环和最后一次循环的详细执行过程。最后说明程序实现的功能是什么。
执行步骤:
(1)执行int的整型定义;
(2)给odd,even赋初值为0;
(3)执行for语句
①首先执行i = 1;
②输入num;
③进入if语句,若为真则执行 even++,若为假,则执行else语句中的odd++;
④回到for循环执行i++,此时的i=2;
⑤执行i <= 10为真;
⑥继续执行②③④;
⑦输入十次之后,i = 11,此时i <= 10为假,则跳出for循环语句,执行下一步;
(4)执行printf("%d %d",even,odd);
说明程序实现的功能:
此程序主要是让用户输入十个整数,然后程序判断,输出十个数中偶数有多少个,奇数有多少个。
2.增量运算符
(1)运行下面程序,结果是什么?增量运算符在单独使用时,前缀和后缀形式有区别吗?
①运行结果如下:
②在此程序中增量运算符的前缀和后缀并不影响程序的运算,但是如果单独看的话,i++是先拿自身去用,再自身加一,++j是先自身加一,再把结果拿去用
(2)运行下面的程序,结果是什么?两条输出语句的执行过程是怎样的?说明什么问题?这两条输出语句执行完后,i和j的值分别是多少?
①运行结果如下:
②执行过程:
- 首先执行整型定义;
- 第二步执行i = 2,j = 2;
- 第三步执行输出语句,先输出i的值,再执行i++;
- 第四步执行++j,将j的值加1,再输出j,也就是输出为3。
③说明问题:
i++是先拿自身去用,再自身加一,++j是先自身加一,再把结果拿去用。执行完输出语句后i和j的值都是3。
3.有些循环语句后面有{},有些没有,有些语句有缩进,运行下面的四个小程序,运行结果有什么不同?循环体的认定与缩格形式是否有关?与{}是否有关?那么,应该如何正确判断一个循环语句中的循环体?下面的程序中,哪几种格式是正确的缩进格式。
运行源程序(1)的结果如下图:
运行源程序(2)的结果如下图:
运行源程序(3)的结果如下图:
运行源程序(4)的结果如下图:
实验分析:
(1)(2)两程序的运行结果一致,所以从结果看循环体的认定与缩格形式无关
(3)(4)两程序比较,“{}”中所包含的内容并不相同,输出结果也不一样,所以认为循环体的认定与“{}”有关,因为循环结构执行的是“{}”里的内容
如果循环语句后加了“{}”则一个循环语句中的循环体为“{}”中的内容,如果循环语句后没有加“{}”则认为循环语句后的第一条语句为循环体语句
(1)(3)(4)为正确,(2)为错误,原因:
因为(1)并没有“{}”,所以循环体只执行for语句后面的第一个语句,所以那个语句可以缩进表示循环体
(2)中的第二个printf语句并不是循环体,所以没必要缩进,所以(2)为错误
(3)(4)都有“{}”来表示循环体,所以正确
4.其他你认为需要进行总结的内容进行总结
(1)我们需要掌握的
①自增自减运算符,并且知道“++” 或“--”在数据前和在数据后区别及用法;
②复合赋值运算符;
③逗号运算符;
④for语句;
⑤为什么要使用循环,实现循环时,如何确定循环条件和循环体?
(2)我们在写程序时需要注意的
①for循环的()中表达式用“;”隔开,而不是用“,”;
②当利用循环求和时不要忘记给定义的和的变量赋初值;
③for循环语句里可以嵌套选择语句;
④当我们执行循环体语句时一定要看看题目有没有要求输出时换行,如果有要求一定要加上“\n”。
三、实验总结
1.求奇数分之一序列前N项和
(1)题目
本题要求编写程序,计算序列 1 + 1/3 + 1/5 + ... 的前N项之和。
(2)流程图
(3)源代码
#include <stdio.h>
int main()
{
int N,i,a;
double S,sum;
scanf("%d",&N);
a=N+N;
sum = 0;
for(i = 1;i <= a;i = i+2)
{
sum = sum + 1.0 / i;
}
printf("sum = %.6f",sum);
return 0;
}
(4)实验分析
问题1:
原因:在for语句的()中的表达式2写成了“i <= N”,忽略了i每次是加2的,所以执行次数不对,答案也与题目不符
解决办法:将“i <= N”改成“i <= N + N”
问题2:
原因:将“sum = sum + 1.0 / i”写成了“sum = sum + 1 / i”,导致运算为整型运算,运算不正确
解决办法:将“1”改成“1.0”,转换成小数
(5)本题PTA提交列表
2.奇偶分家
(1)题目
给定N个正整数,请统计奇数和偶数各有多少个?
(2)流程图
(3)源代码
#include <stdio.h>
int main()
{
int N,n,a,b,i;
scanf("%d",&N);
a = 0;
b = 0;
for(i = 1;i <= N;i++)
{
scanf("%d",&n);
if(n % 2 == 0)
{
a = a + 1;
}
else
{
b =b + 1;
}
}
printf("%d %d",b,a);
return 0;
}
(4)实验分析
问题1:
原因:忘记了if语句的()中的等于号应该用两个
解决办法:将“if(n % 2 = 0)”改成“if(n % 2 == 0)”
(5)本题PTA提交列表
3. 统计字符
(1)题目
本题要求编写程序,输入10个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。
(2)流程图
(3)源代码
#include <stdio.h>
int main()
{
int c = 0,d = 0,e = 0,f = 0,i;
char a;
for(i = 1;i <= 10;i++)
{
scanf("%c",&a);
if((a >= 'a' && a <= 'z') || (a >= 'A' && a <= 'Z'))
{
c = c + 1;
}
else if(a == '\n' || a == ' ')
{
d = d + 1;
}
else if(a >= '0' && a <= '9')
{
e = e + 1;
}
else
{
f = f + 1;
}
}
printf("letter = %d, blank = %d, digit = %d, other = %d",c,d,e,f);
return 0;
}
(4)实验分析
问题1:
原因:字符判断没有给字符加“''”
解决办法:将错误程序改成if((a >= 'a' && a <= 'z') || (a >= 'A' && a <= 'Z'))
问题2:在数字字符判断时将else if(a >= '0' && a <= '9')写成了else if(a >= '0' && a < '0')导致输出结果错误,如图:
原因:没有认识到数字字符就是一位数,而是以为不管几位数字,只要是数字就是一个字符
解决办法:将错误的程序改成else if(a >= '0' && a <= '9')
(5)本题PTA提交列表
1.求交错序列前N项和
(1)题目
本题要求编写程序,计算交错序列 1-2/3+3/5-4/7+5/9-6/11+... 的前N项之和。
(2)流程图
(3)源代码
#include <stdio.h>
#include <math.h>
int main()
{
int N,i,a;
double sum = 0;
scanf("%d",&N);
for(i = 1;i <= N;i++)
{
sum = sum - i * pow(-1,i) / (2 * i - 1);
}
printf("%.3f",sum);
return 0;
}
(4)实验分析
问题1:第一次运行出现编译错误,错误如下:
原因:用了数学函数,但是没有写数学头文件
解决办法:在第二行写入#include <math.h>
此问题解决后并无其他问题,运行正常
(5)本题PTA提交列表
四、博客互评
我的评论同学的博客链接
程晓磊
http://www.cnblogs.com/8426224ll/p/7813670.html
评论内容:
①建议改错题改正完毕后再输入两组其他与样例不一样的数据测试程序的正确与否;
②raptor的截图最好不要把程序边框也截上,这样会显得raptor流程图模糊,也显得乱;
③第三个raptor流程图不对,这样写的话“0”和第一个选择结构里的条件无法比较,会出现程序错误;
④总体不错,看的出来用心,老铁,不客气!
刘恺煊
http://www.cnblogs.com/liukaixuan/p/7812027.html
评论内容:
①第三个raptor流程图不对,这样写的话“0”和第一个选择结构里的条件无法比较,会出现程序错误;
②其他方面不错,整体观看性非常好,非常工整,值得学习;
③老铁,不客气!
郭玉霖
http://www.cnblogs.com/HBQ521/p/7803633.html
评论内容:
①改错题的错误程序说一下错的原因包括解决方法,让人一看就明白;
②改错题改正完毕后再输入两组其他与样例不一样的数据测试程序的正确与否;
③文章中的源程序打字输入,这样要比截图整齐一点,给人的感觉会好很多;
④老铁,总体还是不错哒,加油,不客气!
这是我此次的博客作业
祝评论我博客的人当你想买东西的时候,打开钱包一看 钱够!
C语言程序设计第五次作业——循环结构(1)的更多相关文章
- C语言程序设计第五次作业——循环结构
(一)改错题 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 一.学习要点 掌握关系运算符和关系表达式 掌握如何判断两个实数相等 掌握常用数学函数的使用 掌握逻辑运算符和逻辑表达式 理解逻辑运算的短路特性 掌 ...
随机推荐
- 分布式系统之消息中间件rabbitmq
分布式系统之消息中间件rabbitmq 博客分类: 感谢: 一般php 用rabbitmq java 用activemq http://spartan1.iteye.com/blog/11802 ...
- vue.js+socket.io+express+mongodb打造在线聊天
vue.js+socket.io+express+mongodb打造在线聊天 在线地址观看 http://www.chenleiming.com github地址 https://github.com ...
- node express将请求重定向为https
项目开发时,由于服务器只接受https请求(运维说了算...),所以在生产环境时,要把所有http请求全都重定向为https,具体操作是在app.js文件里加入以下代码: var express = ...
- jenkins 简单实现php集成上线部署
基于公司git版本控制,搭建jenkins实现php集成部署(没有用gitlab,测试服配置较低,gitlab卡的不要不要的了-) 一.安装jenkins相关依赖 wget -O /etc/yum.r ...
- CentOS7.4下的 JDK1.8 安装
一.卸载老的JDK 如果需要卸载OpenJDK,执行以下操作: [root@localhost ~]# rpm -e --nodeps tzdata-java-2014i-1.el7.noarch[r ...
- IDE-Ecplise-代码注释 模版 编码规范 配色
说明: 代码注释主要用于方便代码后期维护,编码规范,增加代码阅读性和维护性.因网上看到的很多博客中片段局多,故整理后重写一篇,方便交流学习. 先看下加过注释模版后的效果. 如上图所示,创建类,方法和继 ...
- JS for循环小题2
********** for(var a = 1; a<=4;a++){ //外循环定义循环4次,4行 for(var i= 1;i<=a;i++){ //内循环控制*的打印次数,循环一次 ...
- django关闭调试信息,打开内置错误视图
1 内置错误视图 Django内置处理HTTP错误的视图,主要错误及视图包括: 404错误:page not found视图 500错误:server error视图 400错误:bad reques ...
- CSS属性操作/下
CSS属性操作/下 1.伪类 anchor伪类 跟<a>/</a>有关:专用于控制链接的显示效果 a:link(没有接触过的链接),用于定义了链接的常规状态. a:hover( ...
- requests-文件上传
import requests files = {'file':open('D://tomas.jpg','rb')}#设定一个files,打开文件对象 response = requests.pos ...