实验三循环结构程序设计实验课程名:高级语言程序设计(C)专业班级:电气工程及其自动化学号:201140220209 姓名:郑朝栋实验时间:2012.4.19 实验地点:K4—202 指导教师:吴建设一、实验目的1. 熟练掌握用while语句、do while语句和for语句实现循环的方法。
2. 掌握在程序设计中用循的方法实现一些常用算法。
并进一步学习调试程序的方法。
3. 掌握一维数组和二维数组的定义、赋值和输入输出的方法。
4. 掌握字符数组和字符串函数的使用。
5. 掌握与数组有关的算法。
二、实验内容和步骤1.程序求和:1+…+100,填空,实现该功能。
#include <stdio.h>void main(){int s,i;s=0; /* 第5行*/for( )s=s+i;printf("1+...+100=%d\n",s);}思考:(1)第5行能不能去掉?其作用是什么?(2)不用for语句,用while语句改写该程序,实现同样的功能。
(1)#include <stdio.h>void main(){int s,i;s=0; /* 第5行*/for(i=1;i<=100;i++ )s=s+i;printf("1+...+100=%d\n",s);printf("09 郑朝栋实验三第一题\n");}第5行不能去掉,其作用是给S赋初值。
运行结果:(2)#include <stdio.h>void main(){int s,i;s=0;i=1; /* 第5行*/while(i<=100 ){s=s+i;i++;}printf("1+...+100=%d\n",s);printf("09 郑朝栋实验三第一题\n");}运行结果:2.比较下列两个程序。
(验证)/* 第一个程序*/#include <stdio.h>void main(){ int i,n,sum=0;scanf("%d",&i);n=i;while(i<=10){ sum+=i;i++;}printf("%d+...+10=%d",n,sum);}/* 第二个程序*/#include <stdio.h>void main(){ int i,n,sum=0;scanf("%d",&i);n=i;do{ sum+=i;i++;} while(i<=10);printf("%d+...+10=%d",n,sum);}分别运行这两题,若输入7,这两个程序的结果分别是多少?若输入12,这两个程序的结果又分别是多少?比较为什么会有这样的区别?/* 第一个程序*/#include <stdio.h>void main(){ int i,n,sum=0;scanf("%d",&i);n=i;while(i<=10){ sum+=i;i++;}printf("%d+...+10=%d\n",n,sum); printf("09 郑朝栋实验三第二题\n"); }运行结果:/* 第二个程序*/#include <stdio.h>void main(){ int i,n,sum=0;scanf("%d",&i);n=i;do{ sum+=i;i++;} while(i<=10);printf("%d+...+10=%d\n",n,sum); printf("09 郑朝栋实验三第二题\n"); }运行结果:区别:程序一是当循环 特点是先判断条件表达时,后执行循环体。
程序二是直到型循环 特点是先执行循环体,后判断循环条件是否成立。
3. 预习下面程序,若输入12345,分析输出结果是多少?上机验证。
#include <stdio.h> void main( ){ long data;scanf("%ld",&data);while(data){ printf("%ld,",data%10); data=data/10; }}分析输出结果:5,4,3,2,1 #include <stdio.h> void main( ){ long data;scanf("%ld",&data); while(data){ printf("%ld,",data%10); data=data/10;}printf("\n");printf("09 郑朝栋 实验三 第三题\n"); }运行结果:4. 实现求Fibonacci 数列的前n 个数。
(验证、调试) ⎩⎨⎧≥+===--321121n F F n n F n n n 或运行程序,写出运行结果;采用单步跟踪技术运行该程序,观察一下变量的变化。
#include <stdio.h>void main( ){ long int f1, f2;int i,n;printf("Input n:"); /* 第5行*/scanf("%d",&n); /* 第6行*/f1=f2=1;for(i=1;i<n;i++){ printf("%ld\t%ld\n",f1,f2); /* 第9行*/f1=f1+f2;f2=f2+f1;}}思考:(1)f1、f2这两个变量为什么定义为long int 型?(2)第5行和第6行的相互作用,你会用这种方式来实现输入吗?(3)注意第9行的输出“%ld”中的“1”是字母“L”的小写形式,不是数字1。
#include <stdio.h>void main( ){ long int f1, f2;int i,n;printf("Input n:"); /* 第5行*/scanf("%d",&n); /* 第6行*/f1=f2=1;for(i=1;i<n;i++){ printf("%ld\t%ld\n",f1,f2); /* 第9行*/f1=f1+f2;f2=f2+f1;}printf("09 郑朝栋实验三第四题\n");}运行结果:#include <stdio.h>void main( ){ long int f1, f2;int i,n;printf("Input n:"); /* 第5行*/scanf("%d",&n); /* 第6行*/f1=f2=1;for(i=1;i<n;i++){ printf("%ld\t%ld\n",f1,f2); /* 第9行*/f1=f1+f2;f2=f2+f1;}printf("09 郑朝栋实验三第四题\n");}运行结果:5.预习下面程序,写出预习结果并上机验证。
(验证)#include <stdio.h>void main( ){ int i,j,x;for(i=0,x=0;i<2;i++){ x++;for(j=0;j<3;j++){ if(j%2) continue;x++;}x++;}printf("x=%d\n", x);}思考:用一句话概括if(j%2)语句的作用。
#include <stdio.h>void main( ){ int i,j,x;for(i=0,x=0;i<2;i++){ x++;for(j=0;j<3;j++){ if(j%2) continue;x++;}x++;}printf("x=%d\n", x);printf("09 郑朝栋实验三第五题\n");}运行结果:6.输入一批考试分数,用 1作为结束标志,若输入大于100分,则提示重新输入,然后计算最高分、最低分与平均分。
请调试、检查程序中的错误,并改正之。
#include <stdio.h>void main( ){ int mark;int n=0 ; sum=0 ;int max=100 ; min=0 ;for ( ; ; ) ;{ scanf("%d", &mark);if ( mark > 100 ){ printf(" Mark > 100 , Please reinput \n ");break;}if ( mark=-1)break;n ++ ;sum=sum + mark ;if( mark > max )max = mark ;if( mark < min )min = mark ;}sum=sum/ n ;printf("max =%d , min = %d, aver = %d \n", max , min , sum);}提示:该程序有很多错误,下面给出某些错误的说明。
当求一批数中的最大值时,若已知一批数的最小值,则将这个最小值作为最大值的初始值;当求最小值时,情况相反,即若已知这批数的最大值,则将这个最大值作为最小值的初始值。
本例中求一批分数的最高分,则最高分的初始值应该设为0,然后在程序循环中逐渐地升高,直至求出最高分;本例中还要求这批分数的最低分,则最低分的初始值设为100,然后在程序循环中逐渐地降低,直至求出最小值。
实现“若输入大于100分,则提示重新输入”功能的语句有错;实现“用 1作为结束标志”功能的语句有错。
思考:(1)“一批数据”是几个数据?输入的数据如何结束?程序中哪一行是实现结束这个要求的,写出该语句。
(2)程序中哪个语句是实现”若输入大于100分,则提示重新输入”这个要求的,写出该语句。
(3)写出您的测试数据及运行结果,注意输入的数据序列中最后一个应是-1。
#include <stdio.h>void main( ){ int mark;int n=0 , sum=0 ;int max=0 , min=100 ;for ( ; ; ){ scanf("%d", &mark);if ( mark > 100 ){ printf(" Mark > 100 , Please reinput \n ");continue;}if ( mark==-1)break;n ++ ;sum=sum + mark ;if( mark > max )max = mark ;if( mark < min )min = mark ;}sum=sum/ n ;printf("max =%d , min = %d, aver = %d \n", max , min , sum);printf("09 郑朝栋实验三第六题\n");}运行结果:7.编程:输入20个1~90的整数,分类统计1~30、31~60、61~90的数各有多少个?编程点拨:(1)count1计1~30的个数,count2计31~60的个数,count3计61~90的个数。