一、改错题

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. WPF 自定义ItemsControl/ListBox/ListView控件样式

    一.前言 ItemsControl.ListBox.ListView这三种控件在WPF中都可作为列表信息展示控件.我们可以通过修改这三个控件的样式来展示我们的列表信息. 既然都是展示列表信息的控件,那 ...

  2. hadoop原理

    MapReduce工作原理图文详解 前言:   前段时间我们云计算团队一起学习了hadoop相关的知识,大家都积极地做了.学了很多东西,收获颇丰.可是开学后,大家都忙各自的事情,云计算方面的动静都不太 ...

  3. 如何修改chrome记住密码后自动填充表单的黄色背景 ?

    input:-webkit-autofill, textarea:-webkit-autofill, select:-webkit-autofill { background-color: rgb(2 ...

  4. AOP及专有名词通俗解答

    AOP面向切面编程,是一种编程思想,并不是Spring专有,Spring是封装代理模式完成,之前的博客中也写到了关于AOP的文章,Filter和代理,请见<以此之长,补彼之短----AOP(Fi ...

  5. hdu1022 Train Problem I---模拟栈

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1022 题目大意: 车的进出站问题,先给出N个火车,再按序列一的方式进站,判断能否以序列二的方式出站,若 ...

  6. freeplane使用指南

    网上freeplane的详细使用好像比较少,全面的也就官方的英文版文档. 喜欢freeplane的原因仅仅是因为大标题的文字与内边距可以调节,xmind等其他的导图好像都是不能调节的. 心一狠,凭着半 ...

  7. C++ 多态的实现及原理

    C++的多态性用一句话概括就是:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数.如果对象类型是派生类,就调用派生类的函数:如果对象类型是基类 ...

  8. windows汇编环境配置

    原文地址 软件下载 需要的软件已经打包,包括dosbox和MASM.如果没有这两个软件可以在下面的地址下载. http://hjwblog.com/game/汇编环境.zip 点击下载 安装dosbo ...

  9. [LeetCode] Judge Route Circle 判断路线绕圈

    Initially, there is a Robot at position (0, 0). Given a sequence of its moves, judge if this robot m ...

  10. mv&cp

    mv [选项] [源] [目标] 当目标不存在时,重命名源为目标 当目标存在时,若目标为目录文件,将源移动到目标文件里: 若目标为非目录文件,将源重命名为目标,并强制覆盖目标.   mv -b 1 2 ...