实验八 循环结构程序设计(1)
实验八 循环结构程序设计(1)
一、实验目的和要求:
1. 掌握循环结构程序的设计思想,以及程序执行过程;
2. 掌握while、do…while、for结构程序设计方法。
3. 掌握循环嵌套程序设计方法。
二、实验内容:
1.输入两个正整数,求其最大公约数和最小公倍数。
2. 输入一行字符,分别统计出英文字母、数字、空格和其它字符的个数。
3. 求三位数中的“水仙花数”个数。
4. 编程找出1000以内的所有完数。完数是指一个数恰好等于它的因子之和,例如,6=1+2+3,6是完数。
5. 求。
6. 求数列的前20项之和:
三、实验步骤与结果
1.输入两个正整数,求其最大公约数和最小公倍数。
(1)设计思路
理解好最小公因数,最大公倍数的含义
运用数学里面的辗转相除法
(2)程序源码(加注释)
#include<stdio.h>
int main()
{
int a,b,t,r; //定义数据类型
printf("请输入两个数字:\n"); //提醒输入
scanf("%d %d",&a,&b); //键盘输入
if(a<b) //判断输入的数的大小
{
t=b; //进行除数和被除数的换位
b=a;
a=t;
}
r=a%b; //大的数 模 小的数
int n=a*b; //计算两数之积,整型
while(r!=0) //当模的结果一直不等于0就一直模下去
{
a=b;
b=r; //一直把最小的数和商进行除法运算
r=a%b;
}
printf("这两个数的最大公约数为%d,最小公倍数为%d\n",b,n/b); //两数之积除以最大公约数就是最小公倍数
return 0;
}
(3)运行结果与分析
2.输入一行字符,分别统计出英文字母、数字、空格和其它字符的个数。
(1)设计思路
针对输入的字符串进行if判断,并统计个数,只判断自己知道的数据,剩下的都定义为其他
(2)程序源码(加注释)
#include<stdio.h>
int main()
{
char c; //定义数据类型为字符型,接收的字符串只能是定义为char
int letters=0,spaces=0,digits=0,others=0; //定义数据类型为整型
printf("请输入一串任意的字符:\n"); //提醒输入
while((c=getchar())!='\n') //循环获取键盘输入的字符串,不等于换行符就继续获取
{
if((c>='a'&&c<='z')||(c>='A'&&c<='Z')) //判断获取的字符串里大小写字母的个数
letters++;
else if(c>='0'&&c<='9') //判断获取的字符串里的数字的个数
digits++;
else if(c==' ') //判断获取的字符串里的空格的个数
spaces++;
else
others++; //剩下的就都是其他字符的个数
}
printf("字母有%d个,数字有%d个,空格有%d个,其他有%d个",letters,digits,spaces,others);
return 0;
}
(3)运行结果与分析
3.求三位数中的“水仙花数”个数。
(1)设计思路
“水仙花数”是指一个三位数其各位数字的立方和等于该数本身,例如153是“水仙花数”,因为:153 = 13 + 53 + 33。
(2)程序源码(加注释)
#include<stdio.h> //标准输入输出头文件
#include<stdlib.h> //将 stdlib.h 里的函数包含到程序里面
int main() {
int a = 0; //定义数据,并赋值0
int b = 0;
int c = 0;
int sum ; //定义一个变量来承载和
for (sum = 100; sum < 1000; sum++) { //三位数的水仙花个数限制,并统计个数
if (sum % 100 > 1) //当满足取模之后的余数大于1 之后
{
a = sum / 100; //求百位
b = sum %100/10; //求十位
c = sum % 10; //求个位
}
if (sum == a*a*a + b*b*b + c*c*c) { //三位数每位数的立方和等于本身就是水仙花数
printf("%d\n", sum);
system("pause"); //程序暂停
}
}
return 0;
}
(3)运行结果与分析
4.编程找出1000以内的所有完数。完数是指一个数恰好等于它的因子之和,例如,6=1+2+3,6是完数。
(1)设计思路
运用数组去承载需要比对的数据,让数据能快速的取出比对,求和之后与每一个数进行比对,再数组取出打印每个和的组成
(2)程序源码(加注释)
#include<stdio.h> //标准输入输出头文件
#define N 1000 //定义一个常数为1000
int main()
{
int i,j,k,n,sum; //定义数据类型,都为整型
int a[256]; //定义一个数组
for(i=2;i<=N;i++) //循环语句去求出1000以内的符合条件的数
{
sum=a[0]=1;
k=0;
for(j=2;j<=(i/2);j++) //循环统计每一个数的和
{
if(i%j==0)
{
sum+=j;
a[++k]=j;
}
}
if(i==sum) //统计的和与每一个数判断
{
printf("%d=%d",i,a[0]); //如果相等直接输出
for(n=1;n<=k;n++) //并把统计好的每一个数的和的组成数打印
printf("+%d",a[n]);
printf("\n");
}
}
return 0;
}
(3)运行结果与分析
5.求
(1)设计思路
运用循环对数据进行运算
(2)程序源码(加注释)
#include <stdio.h> //标准输入输出头文件
int main()
{
float s=0,t=1; //定义数据类型,怕数据长度过大
int n;
for (n=1;n<=20;n++) //循环判断并跳出
{
t=t*n; //求n!
s=s+t; //将各项累加
}
printf("%f\n",s);
return 0;
}
(3)运行结果与分析
6.求数列的前20项之和:
(1)设计思路
(2)程序源码(加注释)
#include <stdio.h> //标准输入输出头文件
void main()
{
int n,t,number=20; //定义数据类型
float a=2,b=1,s=0; //数据类型为浮点数是为了满足分子的要求
for(n=1;n<=number;n++) //循环判断,并跳出
{
s=s+a/b; //计算
t=a;
a=a+b;
b=t; //用t来更换分子分母位置
}
printf("sum is %9.6f\n",s); //打印的时候需要注意数据的长度的选择
}
(3)运行结果与分析
四、实验总结与心得
总结:
审题是关键,对题意理解了,然后就是设计程序。
心得:
自己一定要记住一些模型,才能更快的编辑程序。