贵州大学C语言实验报告-Ex05-循环控制
实验课程名称 C语言实验报告
实验项目名称 循环控制
专 业 班 级 电子信息科学与技术08级1班
学 生 姓 名
学 号
指 导 教 师
理 学 院
实验时间:2010年5月13日
实验5 循环控制
实验目的
熟悉掌握用while语句,do-while语句和for语句实现循环的方法。
掌握在程序设计中用循环的方法实现一些常用算法(如穷举、迭代、递推等)。
进一步学习调试程序。
2.实验内容和步骤
编程序并上机调试运行。
输人两个正整数rn和n,求它们的最大公约数和最小公倍数。(本题是教材第6章习题6.l)
程序如下:
#include
void main()
{
int p,r,n,m,temp;
printf("Please input two positive integers:\n");
scanf("%d,%d",&n,&m);
if(n
{temp=n;n=m;m=temp;}
p=m*n;
while(m!=0)
{r=n%m;n=m;m=r;}
printf("The greatest common divisor is:%d\n",n);
printf("The lease common multiple is:%d\n",p/n);
}
分析:
这段程序是以if的条件语句和while的当型循环语句共同实现的。先将输入的两个正整数按大小排序,之后将乘积保存在p中,然后当m不为0时做循环,将n对m取余,由于r为整型,故r为余数的整数部分,再将m的值赋给n,r的值赋给m,当m为0时,跳出循环,此时的n就是最大公约数,p/m为最小公倍数,最后将结果输出。
在运行时,输人的值m>n,观察结果是否正确。
再输入时,使m
结果是正确的。
修改程序,不论m和n为何值(包括负整数),都能得到正确结果。
修改程序为:
#include
#include
void main()
{
int p,r,n,m,temp;
printf("Please input two integers:\n");
scanf("%d,%d",&n,&m);
n=fabs(n);m=fabs(m);
if(n
{temp=n;n=m;m=temp;}
p=m*n;
while(m!=0)
{r=n%m;n=m;m=r;}
printf("The greatest common divisor is:%d\n",n);
printf("The lease common multiple is:%d\n",p/n);
}
分析:由于最大公约数和最小公倍数都是正值,因此只要将输入的任意整数取绝对值之后再进行之前的程序运算即可。
输入一行字符,分别统计出其中的英文字母、空格、数字和其他字符的个数。(本题是教材第6章习题6.2)
程序如下:
#include
void main()
{
char c;
int letters=0,space=0,digit=0,other=0;
printf("Please input a row char:\n");
while((c=getchar())!='\n')
{
if(c>='a'&&c<='z'||c>='A'&&c<='Z') letters++;
else if(c==' ') space++;
else if(c>='0'&&c<='9') digit++;
else other++;
}
printf("letters:%d\nspace:%d\ndigit:%d\nother:%d\n",letters,space,digit,other);
}
分析:
本程序也是用当型循环来实现的,该算法是将从键盘输入的一行字符进行逐个扫描,当字符为\0时跳出循环。如果不是\0则执行循环体里面的程序,对每个字符判断如果是字母,则字母数加1,如果是空格,则空格数加1,如果是数字,则数字数加1,如果是其它字符,则其它字符数加1,最后将结果输出。
在得到正确结果后,请修改程序使之能分别统计大小写字母、空格、数字和其他字符的个数.
程序修改为:
#include
voi