C语言实验八循环结构程序设计.docx
《C语言实验八循环结构程序设计.docx》由会员分享,可在线阅读,更多相关《C语言实验八循环结构程序设计.docx(16页珍藏版)》请在冰点文库上搜索。
C语言实验八循环结构程序设计
实验八:
循环结构程序设计
一、实验目的:
1、熟悉掌握用while语句、do···while语句和for语句循环的方法。
2、掌握在程序设计中用循环的方法实现一些常用算法(如穷举、迭代、递推等)。
3、进一步学习调用程序。
二、实验内容:
1、输入一个字符,分别统计出其中的英文字母、空格、数字和其他字符的个数。
(本题是教材第5章第4题)在得到正确结果后,请修改程序使之能分别统计大小写字母、空格、数字和其他字符的个数。
程序如下:
#include
intmain()
{
charc;
intletters=0,space=0,digit=0,other=0;
printf("请输入一行字符:
\n");
while((c=getchar())!
='\n')
{
if(c>='a'&&c<='z'||c>='A'&&c<='Z')
letters++;
elseif(c=='')
space++;
elseif(c>='0'&&c<='9')
digit++;
else
other++;
}
printf("字母数:
%d\n空格数:
%d\n数字数:
%d\n其他字符数:
%d\n",letters,space,digit,other);
return0;
}
输出结果:
2、输入两个正整数m,n,求其最大公约数和最小公倍数。
程序如下:
#include
intmain()
{
intp,r,m,n,temp;
printf("请输入两个正整数m,n:
");
scanf("%d,%d",&m,&n);
if(m>n)
{
temp=n;
n=m;
m=temp;
}
p=m*n;
while(m!
=0)
{
r=n%m;
n=m;
m=r;
}
printf("它们的最大公约数为:
%d\n",n);
printf("它们的最小公约数为:
%d\n",p/n);
return0;
}
输出结果:
3、输出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。
例如,153是一水仙花数,因为153=1^3+5^3+3^3(本题是教材第5章第8题).
程序如下:
/*Note:
YourchoiceisCIDE*/
#include"stdio.h"
intmain()
{
inti,j,k,n;
printf("parcissusnumbersare");
for(n=100;n<1000;n++)
{
i=n/100;
j=n/10-i*10;
k=n%10;
if(n==i*i*i+j*j*j+k*k*k)
printf("%d",n);
}
printf("\n");
return0;
}
输出结果:
4、有一分数序列:
求出这个数列的前20项之和。
程序如下:
#include
intmain()
{
inti,n=20;
doublea=2,b=1,s=0,t;
for(i=1;i<=n;i++)
{
s=s+a/b;
t=a,
a=a+b,
b=t;
}
printf("sum=%16.10f\n",s);
return0;
}
输出结果:
5、求
。
(书上的6题)
程序如下:
#include
intmain()
{
doubles=0,t=1;
intn;
for(n=1;n<=20;n++)
{
t=t*n;
s=s+t;
}
printf("1!
+2!
+3!
+...+20!
=%22.15e\n",s);
return0;
}
输出结果:
6、求
。
(课后第7题)
程序如下:
#include
intmain()
{
doublek,s1=0,s2=0,s3=0;
for(k=1;k<=100;k++)//计算1~100的和
{s1=s1+k;}
for(k=1;k<=50;k++)
{s2=s2+k*k;}
for(k=1;k<=20;k++)
{s3=s3+1/k;}
printf("%lf\n",s1+s2+s3);
return0;
}
输出结果:
7、一个数如果恰好等于它的因子和,这个数就称为“完数”。
例如,6的因子为1,2,3,而6=1+2+3,因此6是“完数”编程序找出1000之内的所有完数,并按下面格式输出其因子:
6itsfoctorsare123(课后第9题)。
方法1:
程序如下;
#defineM1000//定义寻找范围
#include
intmain()
{
intk1,k2,k3,k4,k5,k6,k7,k8,k9,k10;
inti,a,n,s;
for(a=2;a<=M;a++)//a是2~1000之间的整数,检查它是否完数
{n=0;//n用来累计a的因子的个数
s=a;//s用来存放尚未求出的因子之和,开始时等于a
for(i=1;iif(a%i==0)//如果i是a的因子
{n++;//n+1,表示新找到一个因子
s=s-i;//s减去已找到的因子,s的新值是尚未求出的因子之和
switch(n)//将找到的因子赋给k1~k9,或k10
{
case1:
k1=i;break;//找出的第1个因子赋给k1
case2:
k2=i;break;//找出的第2个因子赋给k2
case3:
k3=i;break;//找出的第3个因子赋给k3
case4:
k4=i;break;//找出的第4个因子赋给k4
case5:
k5=i;break;//找出的第5个因子赋给k5
case6:
k6=i;break;//找出的第6个因子赋给k6
case7:
k7=i;break;//找出的第7个因子赋给k7
case8:
k8=i;break;//找出的第8个因子赋给k8
case9:
k9=i;break;//找出的第9个因子赋给k9
case10:
k10=i;break;//找出的第10个因子赋给k10
}
}
if(s==0)
{
printf("%d,Itsfocatorsare",a);
if(n>1)
printf("%d,%d",k1,k2);//n>1表示a至少有2个因子
if(n>2)
printf(",%d",k3);
if(n>3)
printf(",%d",k4);
if(n>4)
printf(",%d",k5);
if(n>5)
printf(",%d",k6);
if(n>6)
printf(",%d",k7);
if(n>7)
printf(",%d",k8);
if(n>8)
printf(",%d",k9);
if(n>9)
printf(",%d",k10);
printf("\n");
}
}
return0;
}
运行结果:
方法2:
程序如下:
#include
intmain()
{
intm,s,i;
for(m=2;m<1000;m++)
{s=0;
for(i=1;iif((m%i)==0)
s=s+i;
if(s==m)
{printf("%d,itsfactorsare",m);
for(i=1;iif(m%i==0)
printf("%d",i);
printf("\n");
}
}
return0;
}
运行结果:
8、一个求从100m高度自由落下,每次落地后反跳回原高度的一半,在落下,在反弹,求它在第10次落地时,共经过多少米,第10次反弹多高?
(课后第11题)。
程序如下:
#include
intmain()
{
doublesn=100,hn=sn/2;
intn=10;
for(n=2;n<=10;n++)
{
sn=sn+2*hn;
hn=hn/2;
}
printf("第10次落地时共经过%f米\n",sn);
printf("第10次反弹%f米n",hn);
return0;
}
运行结果:
9、用
公式求
的近似值。
程序如下:
#include
#include
intmain()
{
doublepi=1.0,n=1.0,a,b,term=1.0;
while(n<=100000000)
{pi=pi*term;
a=(n+1)*(n+1);
b=n*(n+2);
term=a/b;
n=n+2;
}
pi=pi*2;
printf("pi=%10.8f\n",pi);
return0;
}
显示结果:
10、译密码。
C=(c+4-‘a’)%26+’a’/c=(c+4-‘A’)%26+’A’
程序如下:
#include
intmain()
{charc;
c=getchar();
while(c!
='\n')
{if(c>='a'&&c<='z'||c>='A'&&c<='Z')
{
if(c>='a'&&c<='z')
c=(c+4-'a')%26+'a';
if(c>='A'&&c<='Z')
c=(c+4-'A')%26+'A';
}
printf("%c",c);
c=getchar();
}
printf("\n");
return0;
}
显示结果:
11、将一元钱分别换成1(0~100)分、2(0~50)分、5(0~20)分的硬币,编写求出有多少种不同的分法及每种分法各种硬币的数量。
程序如下:
#include
Intmain()
{
intx,y,z,n=0;
for(x=0;x<=100;x++,n++)
for(y=0;y<=50;y++)
for(z=0;z<=20;z++)
if(x+2*y+5*z==100)
printf("x=%d,y=%d,z=%d\t",x,y,z);
return0;
}
运行结果:
12、用牛顿迭代求下面方程在1.5附近的根:
(书上的14题)。
程序如下:
#include
#include
intmain()
{
doublex1,x0,f,f1;
x1=1.5;
do
{x0=x1;
f=((2*x0-4)*x0+3)*x0-6;
f1=(6*x0-8)*x0+3;
x1=x0-f/f1;
}
while(fabs(x1-x0)>=1e-5);
printf("Therootofequationis%5.2f\n",x1);
return0;
}
运行结果: