当前位置:文档之家› 实验2-循环结构程序设计

实验2-循环结构程序设计

实验2 循环结构程序设计一、实验目的1.学习循环语句for、while和do-while语句的使用方法。

2.学习用循环语句实现各种算法,例如穷举法、迭代法等。

3.进一步熟悉C语言集成环境的使用方法二、实验内容1.用while循环实现数据统计问题。

:从键盘输入一批任意数量的整数,统计其中不大于100的非负数数值的个数。

2.编写并调试程序,使用do-while循环控制语句实现上面的数据统计问题。

调试数据仍参照上面给出的几种情况设计使用。

3.编写并调试程序,使用for循环控制语句实现上面的数据统计问题。

4.阶乘累加问题。

编写程序,求1+2!+3!+…+n!的值。

三、实验指导1.用while循环实现数据统计问题。

⏹编程分析由于输入数据个数是不确定的,因此每次执行程序时,循环次数都是不确定的。

在进行程序设计时,确定循环控制的方法是本实验的一个关键问题。

循环控制条件可以有多种确定方法:(1).使用一个负数作为数据输入结束标志。

(2).输入一个数据后通过进行询问的方式决定是否继续输入下一个数据。

⏹参考程序参考程序一/* 使用负数作为数据输入结束标志的程序 */#include "stdio.h"void main(){int m,counter=0;while(1){printf("请输入一个整数:");scanf("%d",&m);if(m<0)break;if(m<=100)counter++;printf("\n");}printf("符合要求的整数个数为: %d\n",counter);}参考程序二/* 通过进行询问的方式决定是否继续输入下一个数据的程序 */ #include <stdio.h>int main(){int m,counter=0;char ask;while(1){printf("请输入一个整数:");scanf("%d",&m);getchar();if(m>=0&&m<=100)counter++;printf("继续输入下一个数据?(Y/N)");ask=getchar();getchar();if(ask!='y'&&ask!='Y')break;printf("\n");}printf("符合要求的整数个数为: %d\n",counter);}程序调试这里只对“参考程序一”的调试数据进行设计。

该程序输入数据时,应考虑多种数据组合,对每一组数据察看并分析结果。

例如:(1).输入的一组数据之间全部以空格分隔,只有最后一个数为负数,以回车键结束。

如:16 35 7 –-10(2).输入的一组数据之间全部以空格分隔,在负数之后又有正数数据,最后一个数不为负数,以回车键结束。

如:16 35 7 –-10 96 17(3).输入的一组数据之间全部以空格分隔,输入数据中有多个负数,以回车键结束。

如:16 35 7 –-10 96 17 –-87 7(4).输入的数据中有大于100的整数。

如:16 35 7 –10 96 117 –87 267 66(5).数据之间既用空格分隔,也用回车键分隔。

如:76 35 376 22 71796 6796 17 –87 719 66 98 2 -16 31(6).每输入一个数据后均按回车键。

(7).输入的第一个数据即为负数。

(8).在输入的数据中使用数值很大的整数。

如:17 66778 98765 17 899 -109 87⏹在上面的“参考程序一”中,使用了常数“1”作为循环控制的条件,这是常用的循环控制方式。

请修改上面的程序,不使用常数循环条件,仍然使用while语句实现数据统计问题。

2.编写并调试程序,使用do-while循环控制语句实现数据统计问题。

⏹参考程序/* 使用负数作为数据输入结束标志的程序 */#include <stdio.h>int main(){int m,counter=0;do{printf("请输入一个整数:");scanf("%d",&m);if(m<0)break;if(m<=100)counter++;printf("\n");}while(1);printf("符合要求的整数个数为: %d\n",counter);return 0;}⏹调试指导调试数据仍参照上面给出的几种情况设计使用。

3.编写并调试程序,使用for循环控制语句实现上面的数据统计问题。

⏹参考程序/* 用for循环控制语句实现的数据统计问题程序 */#include<stdio.h>int main(){int m,counter;for(counter=0;1;){printf("请输入一个整数:");scanf("%d",&m);if(m<0)break;if(m<=100)counter++;printf("\n");}printf("符合要求的整数个数为: %d\n",counter);return 0;}注意:for循环控制语句的一般格式通常有三个表达式,本参考程序中使用的for循环控制语句在格式上只有两个表达式。

请读者注意学习这种用法。

⏹请修改程序,使用完整格式的for循环控制语句实现上面的数据统计问题。

4.阶乘累加问题。

⏹编程分析(1).本实验内容是求解阶乘问题。

(2).求n!用一个循环即可实现。

(3).求1+2!+3!+…+n!的值,需要在求n!程序之外增加一个外重循环。

⏹参考程序/* 求1+2!+3!+…+n!程序 */#include <stdio.h>int main(){long int s=1,t;int i,j,n;printf("n=");scanf("%d",&n);for(i=2;i<=n;i++){for(t=1,j=1;j<=i;j++)t*=j;s+=t;}printf("s=%ld\n",s);return 0;}⏹程序调试(1).输入一个不大的正整数,分析程序执行结果。

(2).输入一个零或者负数,分析程序执行结果。

(3).输入一个很大的正整数,分析程序执行结果。

(4).当程序结果不符合要求时,修改程序,直到对任何输入数据都能输出正确的执行结果,或者给出一个明确的提示信息。

例如,当输入数据非法时,给出一个恰当的提示信息。

四、预习题(选择题)1、下面程序段int k=2;while (k=0) {printf(“%d”,k);k--;}则下面描述中正确的是A.while循环执行10次B.循环是无限循环C.循环题语句一次也不执行D.循环体语句执行一次2、以下程序段的循环次数是for (i=2; i==0; ) printf(“%d” , i--) ;A.无限次B.0次C.1次D.2次3、下面程序的输出结果是#include"stdafx.h"int _tmain(int argc, _TCHAR* argv[]){char c='A';int k=0;do {switch (c++) {case'A' : k++ ; break ;case'B' : k-- ;case'C' : k+=2 ; break ;case'D' : k%=2 ; continue ;case'E' : k*=10 ; break ;default : k/=3 ;}k++;} while (c<'G') ;printf ("k=%d",k) ;return 0;}A.k=3B.k=4C.k=2D.k=04、下面程序的输出结果是int _tmain(int argc, _TCHAR* argv[]) {int x=9;for (; x>0; x--) {if (x%3==0) {printf(“%d”,--x);continue ;}}return 0;}A.741B.852C.963D.8754215、下述程序段的运行结果是int _tmain(int argc, _TCHAR* argv[]){ int a=1,b=2, c=3, t;while (a<b<c) {t=a;a=b;b=t;c--;}printf("%d,%d,%d",a,b,c);return 0;}A.1,2,0B.2,1,0C.1,2,1D.2,1,16、下面程序的功能是从键盘输入一组字符,从中统计大写字母和小写字母的个数,选择填空。

main ( ){ int m=0,n=0;char c;while ((【】) ! ’\n’){if (c>=’A’ && c<=’Z’) m++;if (c>=’a’ && c<=’z’) n++;}}A.c=getchar( )B.getchar( )C.c==getchar( )D.scanf(“%c”,&c)7、下述语句执行后,变量k的值是int k=1;while (k++<10);A.10B.11C.9D.无限循环,值不定8、下面程序的输出结果是int _tmain(int argc, _TCHAR* argv[]) {int k=0,m=0,i,j;for (i=0; i<2; i++) {for (j=0; j<3; j++)k++ ;k-=j ;}m = i+j ;printf("k=%d,m=%d",k,m) ;return 0;}A.k=0,m=3B.k=0,m=5C.k=1,m=3D.k=1,m=59、下面for循环语句int i,k;for (i=0, k=-1; k=1; i++, k++)printf(“***”);A.判断循环结束的条件非法B.是无限循环C.只循环一次D.一次也不循环10、执行语句for (i=1;i++<4;) ; 后变量i的值是A. 3B. 4C. 5D.不定11。

相关主题