C循环结构程序设计实验报告
韩师
实验(五) 循环结构程序设计
实验时间: 2013.5.07 同组人员: 实验目的
1.熟悉掌握用while语句、do…while语句和for语句实现循环的方法;
2.掌握在程序设计中用循环的反方法实现一些常用的算法;
3.进一步学习调试程序。
实验内容和实验步骤
实验(1)
①输入一行字符,分别统计出其中的英文字母、空格、数字和他字符的个数。
#include
int main()
{
char c;
int letters=0,space=0,digit=0,other=0;
printf("请输入一行字符:\n");
while((c=getchar())!='\n')
{
if(c>='a'&&c='A'&&c
letters++;
else if(c==' ')
space++;
else if(c>='0'&&c
digit++;
else
other++;
}
printf("字母数:%d\n空格数:%d\n数字数:%d\n其他字符数:%d\n",letters,space,digit,other);
return 0;
}
运行结果:
②添加修改程序使之能分别统计出大小写字母的个数。
#include
int main()
{
char c;
int da=0,xiao=0,space=0,digit=0,other=0;
printf("请输入一行字符:\n");
while((c=getchar())!='\n')
{
if(c='A')
da++;
else if(c='a')
xiao++;
else if(c==' ')
space++;
else if(c>='0'&&c
digit++;
else
other++;
}
printf("大写字母数:%d\n小写字母数:%d\n空格数:%d\n数字数:%d\n其他字符数:%d\n", da,xiao,space,digit,other);
return 0;
}
运行结果:
实验(2)
输出所有的“水仙花数”。
#include
int main()
{
int i,j,k,n;
printf("parcissus numbers are");
for(n=100;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");
return 0;
}
运行结果:
实验(3)
① 猴子吃桃问题。猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想吃时,见只剩下一个桃子了。求第1天共摘了多少桃子。
#include
int main()
{
int day,x1,x2;
day=9;
x2=1;
while(day>0)
{x1=(x2+1)*2;
x2=x1;
day--;
}
printf("total=%d\n",x1);
return 0;
}
运行结果:
②改为猴子吃了前一天剩下的一半后,再吃两个。
#include
int main()
{
int day,x1,x2;
day=9;
x2=1;
while(day>0)
} {x1=(x2+2)*2; x2=x1; day--; } printf("total=%d\n",x1); return 0;
运行结果:
实验(4)
①用牛顿迭代法求方程2x3-4x2+3x-6=0在1.5附近的根。
#include
#include
int main()
{double x1,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("The root of equation is%5.2f\n",x1);
return 0;
}
运行结果:
②修改程序使所设的x初值由1.5改变为100,1000,10000。
(1)#include
#include
int main()
{double x1,x0,f,f1;
x1=100;
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("The root of equation is%5.2f\n",x1);
return 0;
}
运行结果:
(2)#include
#include
int main()
{double x1,x0,f,f1;
x1=1000;
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("The root of equation is%5.2f\n",x1);
return 0;
}
运行结果:
(3)#include
#include
int main()
{double x1,x0,f,f1;
x1=10000;
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("The root of equation is%5.2f\n",x1);
return 0;
}
运行结果:
分析:
不同的x初值对结果没有影响。因为牛顿迭代法是利用近似方法求根的计算方法,当后一个近似根减前一个近似根的绝对值小于10 5时,视后一个近似根为该方程的根,方程的根是唯一的,x的初始赋值对此没有影响。
③修改程序,使之能输出迭代的次数和每次迭代的结果。
#include
#include
int main()
{double x1,x0,f,f1;
int i=0;
printf("请输入x的初始赋值:");
scanf("%d",&x1);
do
{x0=x1;
f=((2*x0-4)*x0+3)*x0-6;
f1=(6*x0-8)*x0+3;
x1=x0-f/f1;
i++;
printf("第%d次迭代的结果为: %5.2f\n",i,x1);
}while(fabs(x1-x0)>=1e-5);
printf("迭代次数为%d\n",i);
return 0;
}
运行结果:
分析:
不同的x初始值对迭代的次数和结果并无影响。
指导教师评阅
1、实验态度:不认真( ),较认真( ),认真( )
2、实验目的:不明确( ),较明确( ),明确( )
3、实验内容:不完整( ),较完整( ),完整( )
4、实验步骤:混乱( ),较清晰( ),清晰( )
5、实验结果:错误( ),基本正确( ),正确( )
6、实验结果分析:无( ),不充分( ),较充分( ),充分( )
7、其它补充:
总评成绩:
评阅教师(签字):
评阅时间: