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

(一)改错题
错误信息(1):

错误原因:用do while循环语句在while后面要加分号,这个语句特殊需牢记

改正方法:在while后面加上分号

错误信息(2):

错误原因:item = 1/ n;次语句中n定义为整型,所以1/n不会出现小数

改正方法:把 item = 1/ n; 改为 item = (double)1/ n;

错误信息(3):

错误原因: }while( item < eps);此语句错误;因为该循环语句中的循环条件是当 item < esp 条件满足是输出,而源代码中误解为item > esp时输出

改正方法:把}while( item < eps);改为}while( item > eps);

错误信息(4):

错误原因:题干中要求把最后一项小于eps的那一项也加上

改正方法:在循环语句结束后输出语句前加上该语句s = s + flag * item;

错误信息(5):

错误原因: double变量的输入引号内,如果是小数,输出用%f,而输入用%lf

改正方法:把 scanf("%f",&eps);语句改为 scanf("%lf",&eps);

(二)学习总结

1.语句while(1)和for(;;)是什么意思?,如何保证这种循环能正常执行?
答:都是无限循环;在循环语句中if语句后面加上break;就可以正常跳出,从而正常执行了

2.一般情况下,设计循环结构时,使用for、while、do while三种语句都可以,并且三种语句可以相互转换,但是,在某些特定情况下,我们应该优先选择某种语句来快速实现循环设计。如果有如下情况:
(1)循环次数已知
(2)循环次数未知,但循环条件在进入循环时明确
(3)循环次数未知,且循环条件在进入循环时未知,需要在循环体中明确
针对上面三种情况,分别采用什么循环语句实现比较好?对每种情况,用我们完成的两次循环结构作业中的题目加以说明。

答:(1)循环次数已知使用for循环语句实现比较好

(2)循环次数未知,但循环条件在进入循环时明确使用while循环语句实现比较好

(3)循环次数未知,且循环条件在进入循环时未知,需要在循环体中明确使用do while循环语句实现比较好

①用for的循环结构来写。例如:
循环结构(1)中 7-2 统计学生平均成绩与及格人数, 7-3 奇偶分家 7-8 找出最小值,给出7-3的源程序:

#include <stdio.h>
int main(void)
{
int N,i,n,a = 0,b = 0;
scanf("%d",&n);
for(i = 0;i < n;i++)
{
   scanf("%d",&N); 
   if(N % 2 == 0)
 {
    a++;
 }
   else
 {
    b++;
 }

}
  printf("%d %d",b,a);
  return 0; 
}

②可以用while和do while的循环结构来写。例如:循环结构(2)中 7-5爬动的蠕虫,循环结构(1)中 7-4 到底是不是太胖了 给出7-5的源程序:

#include <stdio.h>
int main(void)
{
    int N,U,D,head=1,time=0;
    scanf("%d %d %d",&N,&U,&D);
    while(1) 
    {
        head+=U;
        time++;
        if(head>N)break;
            head-=D;
            time++;
    }
    printf("%d",time);
    return 0;
}

③可以用do while的循环结构来写。例如:循环结构(2)中 7-1 求给定精度的简单交错序列部分和 7-3 求奇数和,给出7-3的源程序:

#include <stdio.h>
int main()
{
    int n = 0, sum = 0;
    do
    {
        scanf("%d", &n);
        if (n % 2 == 1) 
        sum += n;
    } while (n > 0);

    printf("%d\n", sum);
    return 0;    
}

3.有如下问题:输入一批学生成绩,以-1作为结束,计算学生的平均成绩。
要求分别用for语句、while语句、do while语句三种循环语句实现,并说明你认为哪种形式更合适?

答:while好些。结束条件直接写在括号里就行,而且一上来就可以结束

4.运行下面程序,输入1到10,结果分别是什么?为什么?
(1)

(2)

答:这俩个源程序看上去基本一样,但是不同的地方就是第一个用的是break,而第二个用的是continue。结果一个输出1,一个输出25,因为第一个就执行一次s=s+n,而s为0,n为1,当第一次输入1的时候就直接跳出循环就进行s=s+n,所以最后输出1;而第二个流程图用continue俩控制循环条件,他进行判断后不会跳出而是直接进行下一个,并且把能整除2的数过滤掉,所以最后输出的是25。

(三)实验总结

(1) 题目

7-1 求给定精度的简单交错序列部分和

(2) 流程图

(3)源代码

#include <stdio.h>  
#include <math.h>  


int main(){  
    int i=1,k=1;  
    double sum=0,t,n;  

    scanf("%lf",&n);  


    do{  
        t=k*1.0/(3*i-2);  
    
        sum+=t;  
        k=-k;  
        i++;  
    }while(fabs(t)>n);  

    printf("sum = %f\n", sum);  


    return 0;  
}

(4)实验分析
问题1:答案错误,输入0.02经常不对

原因:循环判断条件出问题

解决办法:fabs(t)>n,不是>=

(5)本题PTA提交列表

(1) 题目:

7-2 猜数字游戏

(2) 流程图

(3) 源代码

#include <stdio.h>
int main(void) {
    int number, n;
    int count = 0;
    int value;
    scanf("%d%d", &number, &n);
    while(count <= n) {
	    scanf("%d", &value);
	    if(value < 0) {
		    printf("Game Over\n");
		    break;
	    }
	    ++count;
	    if(value > number)
		    printf("Too big\n");
	    else if(value < number)
		    printf("Too small\n");
	    else {
		    if(count == 1)
			    printf("Bingo!\n");
		    else if(count <= 3)
			    printf("Lucky You!\n");
		    else if(count <= n)
			    printf("Good Guess!\n");
		    break;
	    }
    }
    if(count > n)
	    printf("Game Over\n");	
    return 0;
}

(4) 实验分析

错误信息:一开始输入产生随机数,用了数学函数rand(),但是结果输出错误。

原因:理解题意错误,不用函数就可以,直接输入俩个数再进行循环就可以。

需要注意的:循环结束可以用break来实现。在本题需要定义一个量flag=0,如果后面的跟前面所定义的相等就判断为真,如果不相等就判断为假,并且在break的条件下进行跳出进行下一步的运算。

(5)本题PTA提交列表

(1) 题目

7-3 求奇数和

(2) 流程图

(3)源代码

# include <stdio.h>
int main()
{
    int x,sum = 0;
    do
    {
	    scanf("%d",&x);
	    if(x%2)
	    {
		    sum = sum + x;
	    }
	
    }while(x > 0);
    x = -x;
    if(x%2)
    {
	    sum = sum + x;
	    printf("%d",sum);
    }
    else
    {
	    sum = sum;
	    printf("%d",sum);
    }



    return 0;
}

(4)实验分析
问题1:答案错误

原因:if里判断条件习惯性写得shu*1.0/2!=0

解决办法:改成shu%2!=0

(5)本题PTA提交列表

(四)博客互评
(1)http://www.cnblogs.com/bilililili/p/7842022.html
(2)http://www.cnblogs.com/wsd-lian/p/7860213.html
(3)http://www.cnblogs.com/zxh980818/p/7842242.html

posted @ 2017-11-19 16:49  折翼之舞、  阅读(304)  评论(1编辑  收藏  举报