华中科技大学计算机科学与技术学院23.docx
《华中科技大学计算机科学与技术学院23.docx》由会员分享,可在线阅读,更多相关《华中科技大学计算机科学与技术学院23.docx(12页珍藏版)》请在冰豆网上搜索。
华中科技大学计算机科学与技术学院23
华中科技大学计算机科学与技术学院
《C语言实验与课程设计》实验报告
实验名称:
流程控制实验
专业:
计算机科学与技术
班级:
1203班
学号:
U201214869
姓名:
余云凯
指导教师:
甘早斌
成绩:
日期:
2013年4月6日
1、实验目的
(1)掌握复合语句、if语句、switch语句的使用,熟练掌握for、while、do-while三种基本的循环控制语句的使用,掌握重复循环技术,了解转移语句与标号语句。
(2)熟练运用for、while、do-while语句来编写程序。
(3)练习转移语句与标号语句的使用。
(4)使用集成开发环境中的调试功能:
单步执行、设置断点、观察变量值。
2、实验内容
1、源程序改错
下面是计算s=n!
的源程序,在这个源程序中存在若干语法和逻辑错误。
要求在计算机上对这个例子源程序进行调试修改,使之能够正确完成指定任务。
例如,8!
=40320.
源程序:
#include
intmain()
{inti,n,s=1;
printf("Pleaseentern:
");
scanf("%d",n);
for(i=1,i<=n,i++)
s=s*i;
printf("%d!
=%d",n,s);
}
return0;
2、源程序修改替换
(1)修改上述计算s=n!
的源程序,要求分别用while和do-while语句替换for语句。
(2)修改上述计算s=n!
的源程序,要求输入改为“整数s”,输出改为“满足n!
s的最小整数n”。
例如输入整数为40310,输出结果为n=8。
3、程序设计
编写并上机调试运行能实现以下功能的程序:
(1)假设工资税金按以下方法计算:
x<1000元,不收取税金;1000
x<2000,收取5%的税金;2000
x<3000,收取10%的税金;3000
x<4000,收取15%的税金;4000
x<5000,收取20%的税金;x>5000,收取25%的税金。
编写一个程序,输入工资金额,输出应收取税金额度,要求分别用if语句和switch语句来实现。
(2)编写一个程序,将输入的一行字符复制到输出,复制过程中将一个以上的空格字符用一个空格代替。
(3)编写一个程序,打印如下的杨辉三角形。
1/*第0行*/
11/*第1行*/
121/*第2行*/
1331
14641
15101051
1615201561
172135352171
18285670562881
193684126126843691
每个数据值可以由组合
计算(表示第i行第j列位置的值),而
的计算如下:
说明:
本程序为了打出金字塔效果,要注意空格数目。
一位数之间是3个空格,两位数之间有2个空格,三位数之间有1个空格,程序编写过程中要注意区分。
(4)编写一个程序,将用户输入的任意正整数逆转。
例如,输入1234,输出4321。
4、选做题
编写并上机调试运行能实现以下功能的程序:
编写一个程序,用牛顿迭代法求方程f(x)=
=0满足精度e=
的一个近似根,并在屏幕上输出所求近似根。
牛顿迭代法求方程近似根的迭代公式为:
其中,f’(x)是函数f(x)的导函数。
牛顿迭代法首先任意设定的一个实数a来作为近似根的迭代初值
,然后用迭代公式计算下一个近似根
。
如此继续迭代计算
,直到
精度e,此时值
即为所求的近似根。
3、实验步骤及结果
1、源程序改错
源程序错误:
(1)scanf句法错误,n前面应该加上“&”;
(2)for语句内部的表达式必须用分号隔开,而不是逗号;
(3)return0;语句应该放在main函数主体内部。
正确程序:
#include
intmain()
{
inti,n,s=1;
printf("Pleaseentern:
");
scanf("%d",&n);
for(i=1;i<=n;i++)
s=s*i;
printf("%d!
=%d",n,s);
return0;
}
输出结果为:
2、源程序修改替换
(1)while源程序:
#include
intmain()
{
inti=1,n,s=1;
printf("Pleaseentern:
");
scanf("%d",&n);
while(i<=n)
{
s=s*i;
i++;
}
printf("%d!
=%d\n",n,s);
return0;
}
输出结果为:
do-while源程序:
#include
intmain()
{
inti=1,n,s=1;
printf("Pleaseentern:
");
scanf("%d",&n);
do{
s*=i;
i++;
}while(i<=n);
printf("%d!
=%d\n",n,s);
return0;
}
输出结果为:
(2)源程序:
#include
intmain()
{
intn=1,s,m=1;
printf("Pleaseenteranintegers:
");
scanf("%d",&s);
while(m
{
n++;
m*=n;
}
printf("theminn=%d\n",n);
return0;
}
输出结果为:
3、程序设计
(1)if源程序
#include
intmain(void)
{
floatx,fee;
printf("inputx:
");
scanf("%f",&x);
if(x<1000)
{
fee=x*0/100;
printf("fee=%.2f\n",fee);
}
if(x>=1000&&x<2000)
{
fee=x*5/100;
printf("fee=%.2f\n",fee);
}
if(x>=2000&&x<3000)
{
fee=x*10/100;
printf("fee=%.2f\n",fee);
}
if(x>=3000&&x<4000)
{
fee=x*15/100;
printf("fee=%.2f\n",fee);
}
if(x>=4000&&x<5000)
{
fee=x*20/100;
printf("fee=%.2f\n",fee);
}
if(x>5000)
{
fee=x*25/100;
printf("fee=%.2f\n",fee);
}
return0;
}
输出结果为:
switch源程序:
#include
intmain(void)
{
floatx,fee;
printf("inputx:
");
scanf("%f",&x);
switch((int)(x/1000))
{
case0:
printf("fee=%.2f\n",fee=x*0/100);break;
case1:
printf("fee=%.2f\n",fee=x*5/100);break;
case2:
printf("fee=%.2f\n",fee=x*10/100);break;
case3:
printf("fee=%.2f\n",fee=x*15/100);break;
case4:
printf("fee=%.2f\n",fee=x*20/100);break;
default:
printf("fee=%.2f\n",fee=x*25/100);break;
}
return0;
}
输出结果为:
(2)源程序:
#include
#defineIN1
#defineOUT0
intmain(void)
{
intstate=OUT;
charc;
printf("inputatextendwithctrl+z:
\n");
while((c=getchar())!
=EOF)
{
if(state==OUT)
{
putchar(c);
if(c=='')state=IN;
}
if(state==IN&&c!
='')
{
state=OUT;
putchar(c);
}
}
return0;
}
输出结果为:
(3)源程序:
#include
//#defineN10
intf(intx)
{
inty;
if(x==1||x==0)
y=1;
else
y=x*f(x-1);
returny;
}
intmain()
{
inti,j,m,N;
inty;
printf("inputN:
");
scanf("%d",&N);
printf("杨辉三角形前%d行:
\n",N);
for(i=0;i{
for(j=0;jprintf("");
for(m=0;m
printf("%3d",f(i)/f(m)/f(i-m));
printf("\n");
}
return0;
}
输出结果为:
(4)源程序:
#include
intmain(void)
{
intx;
printf("inputaninteger:
\n");
scanf("%d",&x);
do
putchar(x%10+'0');
while((x/=10)!
=0);
printf("\n");
return0;
}
输出结果为:
4、选做题
源程序:
#include
#include
#defineEPS1e-6
intmain(void)
{
doublex,d;
printf("inputinitialroot:
\n");
scanf("%lf",&x);
do{
d=-(((3*x-4)*x-5)*x+13)/((9*x-8)*x-5);
x+=d;
}while(fabs(d)>EPS);
printf("x=%lf\n",x);
return0;
}
输出结果为:
四、实验体会
C语言程序的流程控制确实有难度。
首先,在编写程序之前必须清楚的知道程序所要实现的功能是什么,要有清晰的逻辑结构;其次,还要有清楚的设计思路,要寻找到一个好的算法,这样,在编写程序时就可以节省大量的时间,少走弯路。