一、改错题

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)的更多相关文章

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

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

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

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

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

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

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

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

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

    (一)改错题 序列求和:输入一个正实数eps,计算序列部分和 1 - 1/4 + 1/7 - 1/10 + ... ,精确到最后一项的绝对值小于eps(保留6位小数). 输入输出样例: Input e ...

  6. C语言程序设计第六次作业--循环结构2

    (一)改错题 序列求和:输入一个正实数eps,计算序列部分和 1 - 1/4 + 1/7 - 1/10 + ... ,精确到最后一项的绝对值小于eps(保留6位小数). 输入输出样例: Input e ...

  7. C语言第五次作业——循环结构

    C语言程序设计第五次作业--循环结构(1) (一)改错题 输出华氏摄氏温度转换表:输入两个整数lower和upper,输出一张华氏摄氏温度转换表,华氏温度的取值范围是{lower,upper},每次增 ...

  8. C语言程序设计第五次作业

    一.实验内容     1.输入两个正整数m和n(要求m<=n), 求m!+(m+1)!+(m+2)!-+n!    2.输出1000以内的所有完数.所谓完数是指这个数恰好等于除他本身外的所有因子 ...

  9. C语言程序设计第三次作业--选择结构(1)

    Deadline: 2017-10-29 22:00 一.学习要点 掌握关系运算符和关系表达式 掌握如何判断两个实数相等 掌握常用数学函数的使用 掌握逻辑运算符和逻辑表达式 理解逻辑运算的短路特性 掌 ...

随机推荐

  1. JAVA_SE基础——17.方法的重载

    方法重载: 方法重载就是方法名称重复,加载参数不同. 具体规范: 一.方法名一定要相同. 二.方法的参数表必须不同,包括参数的类型或个数,以此区分不同的方法体. 1.如果参数个数不同,就不管它的参数类 ...

  2. datable转xml

    /// <summary> /// datatable转换xml /// </summary> /// <param name="xmlDS"> ...

  3. Python-函数-Day4

    1.函数 1.1.集合 主要作用: 去重 关系测试, 交集\差集\并集\反向(对称)差集 a = {1,2,3,4} b ={3,4,5,6} a {1, 2, 3, 4} type(a) <c ...

  4. JMeter入门(01)概念和样例

    一.概念 JMeter 是一款专门用于功能测试和压力测试的轻量级测试开发平台,实现了许多和互联网相关的网络测试组件,同时还保留着很强的扩展性. JMeter可以用来测试诸如:静态文件,Java Ser ...

  5. CTF中常见密码题解密网站总结

    0x00.综合 网站中包含大多编码的解码. http://web2hack.org/xssee/ https://www.sojson.com/ http://web.chacuo.net/ 0x01 ...

  6. python当中的生成器

    最近身边的朋友都在问我迭代器是什么回事,经常跟大家一起讨论python的迭代器,一点点的我觉着自己有了更深一层的理解.我写下这篇文章,希望能对懵懵懂懂的好伙伴有些帮助~ 我也不是什么能人,难免说错一些 ...

  7. Java Servlet(十一):一个servlet被10个浏览器客户端访问时会创建几个servlet实例?

    一般Servlet只初始化一次(只有一个实例).对于更多的客户端请求,Server创建新的请求和响应对象,仍然激活此Servlet的service()方法,将这两个对象作为参数传递给该方法.如此重复以 ...

  8. Struts(十八):通过CURD来学习PrepareInterceptor拦截器

    PrepareInterceptor拦截器的用法: 1.若Action实现了Preparable接口,则Action方法需实现prepare()方法: 2.PrepareInterceptor拦截器S ...

  9. 28.C++- 单例类模板(详解)

    单例类 描述 指在整个系统生命期中,一个类最多只能有一个实例(instance)存在,使得该实例的唯一性(实例是指一个对象指针)  , 比如:统计在线人数 在单例类里,又分为了懒汉式和饿汉式,它们的区 ...

  10. Java 微服务框架选型(Dubbo 和 Spring Cloud?)

    微服务(Microservices)是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成.系统中的各个微服务可被独立部署,各个微服务之间是松耦合的.每个微服务仅关注于完成一件任务并很好地完成该任 ...