第5章 循环结构程序设计
上机实验
实验题目:循环结构程序设计
实验目的:
1、掌握关系运算符、逻辑运算符、条件运算符及其表达式在循环中的应用。
2、掌握转向语句(goto语句、break语句和continue语句)在循环中的使用。
3、掌握使用while语句、do…while语句、for语句编写循环结构程序的方法。
实验内容及要求:
【上机实验ch5S-1】求n!(即:计算p=1×2×3×…×n的值)
思路提示:求阶乘与求累加的运算处理过程类似,只要把“+”变为“*”。把i当作乘数),初值为1,终值为n(n是循环控制终值,需要从键盘输入);p当作累乘器,每次循环求p=p*i。
参考程序代码:
#include “stdio.h”
main( )
{ int i,n;
long p;
p=1;
printf(“Enter n:”);
scanf(“%d”,&n);
for (i=1; i<=n; i++)
p=p*i;
printf(“p=%ld\n”,p);
}
运行结果:
Enter n:10
p=3628800
程序分析:(略)
〖强化练习〗从键盘输入n值,求:1!+2!+3!+…+n!的和。
思路提示:因为n!=(n-1)!*n,所以(n-1)!的值要保留在sum中,从1!开始的每个阶乘的值也要累加到sum中,最后得到所有阶乘的和。
参考程序代码:
#include “stdio.h”
main( )
{ int i,n;
long p,sum=0;
p=1;
printf(“Enter n:”);
scanf(“%d”,&n);
for (i=1; i<=n; i++)
{
p=p*i;
sum+=p;
}
printf(“sum=1!+2!+…+%d!=%ld\n”,n,sum);
}
运行结果:
Enter n:10
sum=1!+2!+…+10!=4037913
【上机实验ch5S-2】验证实验。
思路提示:熟练应用关系运算符、逻辑运算符、条件运算符并正确书写表示判断的表达式;正确使用for语句、while语句、do-while语句实现循环结构程序设计;学习goto语句、break语句和continue语句三种转向语句在循环控制中的运用。
操作步骤:
1、输入并运行【例ch5-2】、【例ch5-3】和【例ch5-4】的程序代码,分析使用for语句、while语句、do-while语句实现循环控制的结果。
2、分别输入并运行【例ch5-1】和【例ch5-5】中所涉及到的程序代码,分析实现程序跳转、终止循环以及循环嵌套使用等结果。
【上机实验ch5S-3】输入并运行下列程序代码,分析结果。
程序代码:
#include <stdio.h>
main( )
{ int i, j;
for ( i=1; i<10; i++ )
for ( j=1; j<=i; j++ )
printf ((j==i)?”%4d\n”:”%4d”,i*j);
}
运行结果:
1
2 4
3 6 9
4 8 12 16
5 10 15 20 25
6 12 18 24 30 36
7 14 21 28 35 42 49
8 16 24 32 40 48 56 64
9 18 27 36 45 54 63 72 81
程序分析:使用循环嵌套实现了程序控制,外循环控制行数,内循环控制每一行有多少列的数值。同一行不同列的数字变化,取决于变量i和j在表达式的使用,其格式也由格式输出函数来控制。
【上机实验ch5S-4】 某班第七小组现有3名学生,每一名同学都考了3门相同课程,编程统计这个小组每一名同学3门课程的平均分。
思路提示:使用循环嵌套可以实现程序控制,外循环控制人数,内循环控制每一位同学的3门课程成绩。
参考程序代码:
#include<stdio.h>
main( )
{
int i,j,score,sum;
float aver;
j=1;
while(j<=3)
{
sum=0;
for(i=1;i<=3;i++)
{
printf(“Enter NO.%d the score %d:”,j,i);
scanf(“%d”,&score);
sum=sum+score;
}
aver=sum/3.0;
printf(“NO.%d aver=%5.2f\n”,j,aver);
j++;
}
}
运行结果:
Enter NO.1 the score 1:89
Enter NO.1 the score 2:67
Enter NO.1 the score 3:78
NO.1 aver=78.00
Enter NO.2 the score 1:64
Enter NO.2 the score 2:78
Enter NO.2 the score 3:56
NO.2 aver=66.00
Enter NO.3 the score 1:78
Enter NO.3 the score 2:35
Enter NO.3 the score 3:50
NO.3 aver=54.33
程序分析:
(1)定义i、j、score、sum为整型变量,aver为浮点型变量,并为j赋初值1。
(2)while(j<=3)语句中表达式可以控制学生人数,for(i=1;i<=3;i++)语句中3个表达式控制课程及其成绩。
(3)在内循环,循环一次就相当于对每一名学生的3门课成绩累计求和;在外循环中,先对每一名同学的3门课总成绩求平均后,控制循环的变量增加1,又到下一次循环,即下一名同学。
(4)通过使用输入输出格式控制函数实现各变量数据的格式控制。
【上机实验ch5S-4】任意输入一行字符,分别统计出其中的英文字母、空格、数字和其他字符个数。
思路提示:由于输入的字符个数不确定,通过设置循环条件while((ch=getchar())!=’\n’)来实现回车键结束字符输入,并且回车符不计入。
参考程序代码:
#include<stdio.h>
int main(void)
{
char ch;
int char_num=0,space_num=0,digit_num=0,other_num=0;
printf(“Please input:\n”);
while((ch=getchar())!=’\n’)
{
if(ch>=’a’&&ch<=’z’||ch<=’Z’&&ch>=’A’)
{
char_num++;
}
else if(ch==’ ‘)
{
space_num++;
}
else if(ch>=’0’&&ch<=’9′)
{
digit_num++;
}
else
{
other_num++;
}
}
printf(“Char=%d\nSpace=%d\nDigit=%d\nOther=d\n”,char_num,space_num,digit_num,other_num);
return 0;
}
运行结果:
Please input:
hjdkk GFGFHGHG 65576.;;..’
Char= 13
Space= 3
Digit= 5
Other= 6
程序分析:
(1)定义char_num、space_num、digit_num、other_num为整型变量,并为它们赋初值0。
(2)从键盘输入字符行,直到输入特殊的字符(回车键)结束。
(3)对字符行中每一个字符,进行循环判断并作计数累计,分别使用上述已定义的初始化变量存储各类字符的计数值。
评论0