实 验 四 循环结构程序设计
- 格式:doc
- 大小:82.50 KB
- 文档页数:5
实验四循环结构程序设计
一、实验目的
1. 熟练掌握用while、do…while语句和for语句实现循环的方法
2. 掌握在程序设计中用循环的方法实现一些常用算法(如穷举、迭代、递
推等)
3. 进一步学习调试程序。
二、实验环境:VC++ 6.0
三、实验学时:4学时
四、实验内容及步骤
提示:请同学们每完成一道题目,都搞清楚循环语句(while、do_while、for)的执行流程,进而分析出该循环语句的功能及实现策略。
题目1:使用for循环计算:1+2+3+…+100=?写出程序及运行结果。
题目2:用while循环求n!,其中n的数值从键盘输入(1--9)。程序填空,并分析代码。#include
#include
void main( )
{
int n ; //定义整型变量n,用于输入数据
int i ; //定义整型变量i,用于控制循环执行次数
long fac ; //定义长整型变量fac,用于存放结果
【1】; //为变量fac赋初值
do
{ printf(“请输入一个1-9的自然数: “);
scanf(“%d” , &n) ;
}while( n<1 || n>9) ; //如果输入的n小于1或大于9,重新执行循环体
//以上do-while循环可以保证输入的n为1-9的自然数,才进行下边的计算
i=1;
while(i<=n) //注意,此处没有分号
{
fac=fac*i;
i++;
}
printf(“ %d ! = %ld\n” , n , fac ) ;
}
某次运行结果见图:
题目3:找出所有的水仙花数。(水仙花数是三位正整数,其各位立方和等于该数本身)
本题采用穷举法来解决,将所有的三位数(100-999)逐一进行判断,看是否满足要求。
#include
#include
void main( )
{
int num;
int a,b,c ; //分别表示待判断数据num的个位、十位、百位
for( num=100; num<1000;num++)
{
a= num % 10 ;
b=(num/10)%10;
c=num/100 ;
if (【1】) //如果满足条件,就是水仙花数
printf(“%5d” , num ) ;
}
}
运行结果见图:
题目4:输入一行字符,分别统计出其中大小写英文字母、空格、数字和其他字母的个数。要求:程序填空并写出1组运行结果。
#include
#include
#include
main( )
{
char c;
int letter=0,capital=0,lower=0,space=0,digital=0,other=0;
printf("\ninput a line character :\n");
while((c=getchar())!='\n') //逐个采集字符,知道遇到回车为止
{
if(isalpha(c)) /*统计大小写字母的个数*/
{
letter++;
if ( islower(c) ) //等价于c>=’a’ && c<=’z’,使用了库函数islower( )
lower++; /*统计小写字母的个数*/
}
else if( c==' ' )
space++; /*统计空格的个数*/
else if( isdigit(c) )
digital++; /*统计数字的个数*/
else
other++; /*统计其他字符的个数*/
}
capital=letter-lower;
printf("Letter: %d (Capital: %d Lowercase: %d)\n", letter, capital, lower);
printf("Spaces: %d\nDigital : %d\nOther : %d\n",space,digital,other);
getch();
}
某次运行结果见图:
题目5:在屏幕上打印出下三角的乘法表,如图。试着完成下面的程序,并查看运行结果是否正确。
#include
#include
main( )
{
int i,j;
for(i=1;i<=9;i++)
{
for(j=1; 【1】;j++)
printf("%d*%d=%-4d",i,j, 【2】);
printf("\n");
}
getch();
}
题目6:打印出如图所示图案。
要求:程序填空并写出运行结果。
#include
#include
main()
{
int i,j;
char space='';
for(i=0;i<=3;i++)
{
for(j=1; 【1】;j++)
printf("%c",space);
for(j=1;j<=3;j++)
printf("*");
for(j=1; 【2】;j++)
printf("%c",space);
for(j=1;j<=3;j++)
printf("*");
【3】;
}
}
题目7:求两个正整数的最大公约数和最小公倍数。
分析:求两个正整数的最大公约数采用辗转相除法:
①输入正整数m和n;
②如果n≠0,则求r=m%n,然后m=n,n=r;重复此操作直到n=0;
③如果n=0,则此时m就是最大公约数,而最小公倍数是这两数之积除以这两数的最
大公约数得到的商。
要求:程序填空并写出2组运行结果。
#include
#include
main( )
{
int m,n,r,a;
printf("\nInput 2 positive integer:\n");
scanf("%d%d", 【1】);
a= 【2】; //a中保存最初m和n的乘积
while(n!=0)
{
r= 【3】;
m=n;
n=r;
}
printf("The largest divisor is : %d\n", 【4】); /*输出最大公约数*/
printf("The smallest common multiple is : %d\n",a/m); /*输出最小公倍数*/ getch();
}