编程提示:先定义一个字符型的变量(如c),再定义4个整型变量作为计数器,作为
计数器的变量要先赋初值0。在循环中每次从键盘上读入一个字符,在循环体中对读入的字符进行判断,相应的计数器加1,当读入的字符为’\\n’时结束。
编程中可使用如下的循环结构: while((c=getchar())!=’\\n’)) { if(??) ??; else if(??) ??; ??; else ??; }
/* c4-5.c 统计字符串中指定字符的个数 */ #include \ void main( ) { }
注意: 1.while( (c=getchar( ))!=’\\n’) )中括号的使用,第二层的小括号不能省略,想一想为什么?
2.字符常量’0’与数值常量0是不同的。
(六)下面程序的功能是:计算1到100之间的奇数之和及偶数之和,并输出。请在程序中的横线上填入适当的内容,将程序补充完整并运行。
/* c4-6.c 计算1到100之间的奇数之和及偶数之和 */ #include \ void main( ) { int a,b,c,i;
_____________; /*变量初始化*/ for(i=0; i<=100; i+=2)
{ a+=i; /*变量a存放偶数的和*/ ____________;
c+=b; /*变量c存放奇数的和*/ }
printf(\
printf(\ }
(七)编程打印出所有的“水仙花数”,所谓水仙花数是指一个3位数,其各位数字的立方和等于该数本身。如153=1+3+5。
3
3
3
编程提示:定义一个变量作为循环变量,再定义3个变量分别存放三位数的每位数字,
在循环体中将一个三位数拆分成个位、十位、百位后判断循环变量的值是否为水仙花数,如果是则输出,否则不输出。程序的基本结构为: /* c4-7.c 打印出所有的“水仙花数” */ #include \ void main( )
18
{ 定义4个整型变量;
for( j=100; j<=999; j++ )
{ a=j/100; /*分离出百位数*/ b=j/10-a*10; /*分离出十位数*/ c=___________; /*分离出个位数*/ if(j==a*a*a+b*b*b+c*c*c) 输出j ; }
printf(\ }
(八)以下程序的功能是:从键盘上输入若干个学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入。请将程序补充完整。
/* c4-8.c 求最大值最小值程序 */ #include \ void main( )
{ float x,amax,amin; scanf(\ amax=x; amin=x;
while ( _______________ ) { if (x>amax) amax=x;
if ( _______________ ) amin=x; scanf(\ }
printf(\ }
(九)求两个正整数[m,n]之间所有既不能被3整除也不能被7整除的整数之和。
编程提示:定义两个变量m,n和t,再定义一个循环变量和结果变量s,从键盘输入m
和n的值,判断两个变量的值,如果m>n,则交换两个变量。然后用循环依次判断m和n之间的每一个数,在循环体中通过条件语句来判断这个数是否既不能被3整除也不能被7整除,如果满足条件,累加求和,如果不满足,则继续循环。
程序的基本结构如下:
/* c4-9.c 按条件求数列和 */ #include \ void main( ) { 定义变量; 变量赋初值; 输入m,n的值; if( m>n )
m和n交换;
for ( _______________ ) if ( i%3 != 0 && i%7 != 0 ) 变量 s 累加求和 ;
printf(\ }
(十)下面程序的功能是:计算正整数num的各位上的数字之和。例如,若输入:252,则输出应该是:9;若输入:202,则输出应该是:4。请将程序补充完整。
19
/* c4-10.c 求整数各位数字和 */ #include \ void main( ) { int num,k;
_______________; /* k赋初值 */ printf(\ scanf(\ do
{ k=_______________ ; /* 取最低位并累加 */
num/=10; /* 去掉最低位 */ } while(num) ;
printf(\ }
五、实验注意事项
(一)while,do-while,for语句中应有使循环趋向于结束的语句,否则就可能构成死循环。
(二)while,do-while语句什么情况下的运行结果是相同的,什么情况下不同。 (三)注意在循环结构程序设计中,正确使用{ }构成复合语句。
六、思考题
(一)求两个正整数x和y的最大公约数,请填空。 /* 求最大公约数程序 */ #include \ void main( ) { int x,y,t,i;
printf(\请输入两个数: \
scanf(\ /*注意scanf语句中间用“,”隔开*/ if (x > y) {t = x; x = y; y = t;} for( _______________ ) { if( x%i==0 && y%i==0 ) break; }
printf(\最大公约数是 : %d\\n\ }
(二)计算1到100之间的奇数之和及偶数之和。请填空。 /* 计算1到100之间的奇数之和及偶数之和 */ #include \ void main( ) { int a,b,c,i;
a=0, c=0; /* 变量赋初值 */ for(i=0;i<=100;i+=2)
{ a+=i; /* 变量a存放偶数的和 */ _______________ ;
c+=b; /* 变量c存放奇数的和 */ }
printf(\
printf(\ }
20
(三)下面程序的功能是:计算正整数num的各位上的数字之和。例如,若输入:252,则输出应该是:9;若输入:202,则输出应该是:4。请将程序补充完整。
/* 计算整数各位数字和 */ #include \ void main( ) { int num,k=0;
printf(\请输入一个整数: \ scanf(\ do
{ k=____________ ; num/=10; } while(num) ;
printf(\ }
(四)求两个正整数[m,n]之间所有既不能被3整除也不能被7整除的整数之和。请填空。
/* 按条件求数列和 */ #include \ void main( ) { int m,n,i,t; long int s=0;
scanf(\ if( m>n )
{ t=m; m=n; n=t;}
for ( _______________ ) if ( i%3 != 0 && i%7 != 0 ) s += i;
printf(\ }
21
实验五 循环结构程序设计(二)
一、实验学时
2学时
二、实验目的
(一)掌握使用for,while,do-while语句实现循环嵌套的方法; (二)巩固break和continue语句的使用。
三、预习内容
预习教材中有关用for,while,do-while语句实现循环嵌套的方法以及循环嵌套的执行过程。
四、实验内容
(一)根据公式:sum=1?111????,计算sum的值。 2!3!n!注意:根据题目,考虑所定义的各个变量应该为何种类型。
编程提示:定义一个变量存放最后的求和结果(假设为sum),sum的数据类型应为实型,
定义变量t计算整数的阶乘。使用双重循环,程序的基本结构为:
for(i=1,sum=0; i<=20; i++) { t赋初值1 ;
for( j=1; j<=i; j++ ) 变量t连乘求积; 变量sum累加t的倒数; }
注意上述程序结构和内循环变量的终值。想一想是否可以将t=1放在外循环之前? /* c5-1.c 求数列和 */ #include \ void main( ) { }
(二)编程输出九九乘法表。
编程提示:我们日常看到的乘法表是:
1×1=1 1×2=2 2×2=4 1×3=3 2×3=6 3×3=9 ?
22