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

一:改错题
先将源程序(有错程序)复制粘贴到Devc++中如图

进行第一次编译发现有错误信息(1)如图:

发现代码第13行中误将“;”写成“,”且“()”后有“;”存在
将“,”改为“;”,“()”后的“;”删除
进行第二次编译寻找错误,发现编译正确如图

现进行运行指令,按输入样例1输入数据发现并不符合预期如图:

返回源程序再次寻找错误,发现错误(2)for后没有“{}”

现在“for()”后添加“{}”
进行编译,运行指令,按输入样例1输入发现运行结果仍不符合题意如图:

发现错误(3):fahr定义为int型,而输出却是浮点型


将“%3.0f”改为“%3d”
进行编译,运行,按输入样例1输入,发现仍不符合预期如图:

对照题目,发现错误(4),赋值语句错误

原题意设应为celsius = 5×(f-32)/9
改正为如图:

进行编译,运行指令,按输入样例1进行输入发现仍不符合预期如图:

错误原因:原题设为每次循环,华氏度的温度增加2,而在源代码的for语句中,每次循环华氏度只增加1.
改正方法:将循环后华氏度的增量改变为+2
进行编译运行发现样例1符合题意如图:

进行编译运行,按输入样例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 += 2) 
{ 
    celsius = 5 * (fahr - 32.0) / 9 ; 
    printf(" %3d     %6.1f\n", fahr, celsius); 
} 

return 0; 
}

二:学习总结

1:详细描述程序的执行过程,即说明程序的每一步是执行的哪条代码,执行顺序如何。循环需描述前两次循环和最后一次循环的详细执行过程。最后说明程序实现的功能是什么

①定义整形常量i,num,odd,even
②给odd和even赋值为0
③开始for循环语句,表达式1为i=1,表达式2为i<=10,表达式3为i++
④开始输入变量数值num
⑤开始进入了选择语句当num和2求余为0 时even的数值+1
⑥如果num和2 求余为0 时odd的值+1
⑦i<=10成立程序继续循环
⑧再次输入一次变量num
⑨重复上面的循环过程,如果num和2求余为0,even再次+1,如果num和2 求余为0 时odd的值再次+1
⑩直到当i>10的时候跳出循环输出even和odd,程序结束。

程序实现的功能:输入10个数据,判断他们的奇偶性;并分别统计奇数和偶数的个数。

2.增量运算符
(1)运行下面程序,结果是什么?增量运算符在单独使用时,前缀和后缀形式有区别吗?

运行程序结果如下:

有区别,++i是先加后使用,而i++是先使用后加。

(2)运行下面的程序,结果是什么?两条输出语句的执行过程是怎样的?说明什么问题?这两条输出语句执行完后,i和j的值分别是多少?

运行结果如下:

只是第一条先i++是先使用后加,而++j是先加后使用,其他都一样,在单独作为表达式的时候无影响,但是在语句中有影响

i=2 j=3

3.有些循环语句后面有{},有些没有,有些语句有缩进,运行下面的四个小程序,运行结果有什么不同?循环体的认定与缩格形式是否有关?与{}是否有关?那么,应该如何正确判断一个循环语句中的循环体?下面的程序中,哪几种格式是正确的缩进格式。

(1)如图:

(2)如图:

(3)如图:

(4)如图:

运行结果(1)(2)(4)相同,都是五个“”并成一行
而运行结果(3)也为五个“
”但分成五行排列

首先看第一个和第二个程序就只有两个printf这个语句有区别,第二个有缩格,但是输出的结果是一样的,所以循环体的认定与缩格形式无关。

其次再看第二个和第三个程序,区别在于多了一个花括号{},但是输出结果不同,在比较一下第三个和第四个程序都有花括号{}但是括号的范围不同,结果不同,当printf("\n")在花括号外面时,就不参与循环,结果就不会换行,所以与{}有关。

最后,我认为要想准确的判断循环语句的循环体,首先就得看最后的输出格式是什么,根据输出格式和花括号{}括起来的范围来看在括号外的语句便不参与循环。

4.对其他你认为需要进行总结的内容进行总结

(1)简易的表达方式:i=i+1 可以简写成i++,但是一定要注意区别 i++ 和 ++i 的加减先后顺序;

(2)for语句的用法,注意for()后不加“;”()中用“;”而不是“,”

三:实验总结

本人杨若飞,学号末位为03所以完成总 成循环结构(1)中的1、3、5、7题
总结如下:

1:求奇数分之一序列前N项和
(1)题目:本题要求编写程序,计算序列 1 + 1/3 + 1/5 + ... 的前N项之和。
(2)流程图:

(3)源代码:

#include<stdio.h> 
int main()
{
int i,N;
double sum,S;
scanf("%d",&N);
for(i=1;i<=N;i++)
{
    S=S+(double)1/(2*i-1);
}
printf("sum = %.6f",S);

return 0;
}

(4)实验分析
问题:误将“ printf("sum = %.6f",S);”放在了循环结构里面。
解决办法:把输出语句放在循环结构后面。
(5)本题PTA提交列表

3:奇偶分家
(1)题目:给定N个正整数,请统计奇数和偶数各有多少个?
(2)流程图:


(3)源代码:

#include<stdio.h>
int main()
{
int N,i,S,J,O;
double H;
scanf("%d",&N);
J=0;
O=0;
for(i=1;i<=N;i++)
{
    scanf("%d",&S);
    H=S%2;
    if(H==0)
    {
        O=O+1;
    }
    else
    {
        J=J+1;
    }
}
printf("%d %d",J,O);

return 0;
}

(4)实验分析
问题:做实验室脑子一时短路,不知该怎么来记就数的个数
解决办法:通过询问同学得知,在“for”语句中镶嵌“if else”语句
(5)本题PTA提交列表

5: 统计字符
(1)题目:本题要求编写程序,输入10个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。
(2)流程图:



(3)源代码:

# include <stdio.h>
int main()
{
char a;
int s,letter = 0,blank = 0,digit = 0,other = 0,i;
for(i = 0;i < 10;i++)
{
    scanf("%c",&a);
    s = a;
    if(s >= 65 && s <= 90)
    {
        letter++;
    }
    else if(s >= 97 && s <= 122)
    {
        letter++;
    }
    else if(s == 32 || s == 10)
    {
        blank++;
    }
    else if(s >= 48 && s <= 57)
    {
        digit++;
    }
    else
    {
        other++;
    }
}
printf("letter = %d, blank = %d, digit = %d, other = %d",letter,blank,digit,other);

return 0;
}

(4)实验分析
问题:总编译错误出现一些小问题,细节“==”写成“=” “&&”当“||”用
解决办法:自己反复检查解决了问题
(5)本题PTA提交列表

7:求交错序列前N项和
(1)题目:本题要求编写程序,计算交错序列 1-2/3+3/5-4/7+5/9-6/11+... 的前N项之和。
(2)流程图:


(3)源代码:

# include <stdio.h>
int main()
{
int N,i,y;
double sum;
scanf("%d",&N);
for(i = 1;i <= N;i++)
{
    y = i%2;
    if(y == 1)
    {
        sum = sum + i/((2.0*i)-1);
    }
    else
    {
        sum = sum - i/((2.0*i)-1);
    }
}
printf("%.3f",sum); 

return 0;
}

(4)实验分析:
问题:忘记题目要求,sum定义为了"int"型导致错误
解决方法:将“sum”重新定义成“double”型
(5)本题PTA提交列表:

四:博客互评
1.许天笑:http://www.cnblogs.com/snxtx/p/7812139.html
2.范凯华:http://www.cnblogs.com/fkh1/p/7812032.html
3.马阳光:http://www.cnblogs.com/myg123/p/7802056.html

本次作业如上

posted @ 2017-11-11 19:02  杨伯伯  阅读(545)  评论(2编辑  收藏  举报