C语言程序设计-实验第二次上机实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

3.第二次实验
C语言程序设计实验报告
专业计算机科学与技术班级信安1302班日期2014.3.29 成绩
实验组别第 2 次实验流程控制实验指导教师周时阳学生姓名学号同组人姓名
实验名称流程控制实验
3.1实验目的
1.掌握复合语句,if语句,switch语句的使用,熟练掌握for,while,do-while 三种基本的循环控制语句的使用,掌握重复循环技术,了解转移语句与标号语句。

2.掌握运用for,while,do-while语句来编写程序。

3.练习转移语句和标号语句的使用。

4.使用集成开发环境的调试功能:单步执行,设置断点,观察变量值。

3.2实验内容
(一)计算个人所得税。

源程序如下:shangji2\chengxu9
#include <stdio.h>
int main()
{
double x,y;
do
{printf("请输入工资数:");
scanf("%lf",&x);
}while(x<0);
if(x<1000)y=0;
else if(x<2000)y=0.05*x;
else if(x<3000)y=0.1*x;
else if(x<4000)y=0.15*x;
else if(x<5000)y=0.2*x;
else y=0.25*x;
printf("个人所得税为:%.2lf",y);
return 0;
}
实验步骤:
步骤一:输入工资数。

步骤二:用if条件句划分好范围,使输入的数据能被计算机读取并归入到相应的范围中。

步骤三:根据对应范围的计算公式计算出个人所得税并进行输出。

调试及编译过程:
测试数据:1500(第二类范围)
测试数据:3500(第四类范围)
测试数据:6000(第六类范围)
出现的不足及修改:无运行结果:输出预期结果。

(二)计算两数的最大公约数和最小公倍数
源程序如下:shangji2\chengxu10
#include <stdio.h>
int main()
{
int x,y,m,n,r;
do
{printf("input two numbers:");
scanf("%d%d",&x,&y);
}while((x<0)||(y<0));
m=x;n=y;
while((r=(x%y))!=0)
{
x=y;
y=r;
}
printf("最大公约数为:%d\n",y);
printf("最小公倍数为:%d",(m/y)*(n/y)*y);
return 0;
}
实验步骤:
步骤一:定义两个整型变量,并输入两数赋值到这两个变量。

步骤二:定义一个中间变量,用来实现辗转相除法的过程中对余数的控制,设置一个循环语句用来寻求最大公约数,其中循环结束的标志为余数为0,即能整除。

循环过程中不断将y的值赋给x,再将r的值赋给y。

步骤三:退出循环后得出最大公约数,再通过最大公约数得到最小公倍数,最后将这两数分别输出。

调试及编译过程:
测试数据:12,30(一般情况)
测试数据:12,6(两个成倍数的数)
测试数据:7,13(两个互质的数)
出现的不足及修改:无运行结果:输出预期的结果。

(三)判断一个数是否为素数。

源程序如下:shangji2\chengxu11
#include <stdio.h>
#include<math.h>
int main()
{
int n,r,i;
do
{
printf("input a number:");
scanf("%d",&n);
}while(n<2);
for(i=2,r=1;i<=sqrt(n);i++)
r=n%i;
if(r)printf("%d is a prime",n);
else printf("%d is not a prime",n);
return 0;
}
实验步骤:
步骤一:定义三个整型变量,分别用来存放该数,控制循环的标志数,以及余数。

步骤二:设置循环,将i从2开始直到该数的算数平方根,若余数为0或已到循环结束的标志则退出循环。

步骤三:在循环结束后判断余数的值,若不为0,则判断该数为素数,否则该数不为素数。

调试及编译过程:
测试数据:2(特殊情况)
测试数据:7(质数)
测试数据:12(不是质数)
(四)输出2到100间的素数。

源程序如下:shangji2\chengxu12
#include <stdio.h>
#include<math.h>
int main()
{
int i,j,r,t;
t=0;
for(i=2;i<=100;i++)
{
for(j=2,r=1;(j<=sqrt(i))&&r;j++)
r=i%j;
if(r)
{
printf("%4d",i);
if(!(++t%5))printf("\n");
}
}
return 0;
}
实验步骤:
步骤一:定义四个整型变量,分别控制内层循环,外层循环,余数及保证一行5个的数。

步骤二:外层循环为2到100间的数,内层循环为逐个检查它们是否为素数,若是,则输出,且t+1,当t为5的倍数是输出换行符即可保证一行5个。

调试及编译过程:
出现的不足及修改:编写程序工程中if后没有加花括号,导致输出错误。

后检查并得知,if只控制一条语句,若要控制多条语句,需加上花括号形成复合语句。

(五)输出九九乘法表
源程序如下:shangji2\chengxu13
#include <stdio.h>
int main()
{
int i,j;
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
printf("%d*%d=%-4d",i,j,i*j);
printf("\n");
}
return 0;
}
实验步骤:
步骤一:定义两个整形变量,分别用来控制外层循环和内层循环。

步骤二:输出当前的乘法公式。

调试及编译过程:
出现的不足及修改:最开始编写时内层循环里的结束标志为j<=9,于是输出的不是九九乘法表,而是它的两倍,即有了多余的乘法公式。

调试出来后将标志改为j<=i,于是多余的不被输出。

(六)课程设计教材52面3(3).
输出杨辉三角
源程序如下:shangji2\jiaocai52.3(3)
#include <stdio.h>
int c(int m,int n);
int main()
{
int i,j1,j2;
for(i=0;i<=9;i++)
{
for(j1=1;j1<=20-i;j1++)
printf(" ");
for(j2=0;j2<=i;j2++)
{
printf("%d",c(i,j2));
if(c(i,j2)>=1&&c(i,j2)<=9) printf(" ");
else if(c(i,j2)>=10&&c(i,j2)<=99) printf(" ");
else printf(" ");
}
printf("\n");
}
return 0;
}
int c(int m,int n)
{
if(!n) return 1;
else return(c(m,n-1)*(m-n+1)/n);
}
实验步骤:
步骤一:定义一个子函数用来计算需要输出的数的值
步骤二:设置一个循环用来控制前导空格的数目,通过条件语句的判断在一位数后输出三个空格,在两位数后输出两个空格,在三位数后输出一个空格。

调试及编译过程:
出现的不足及修改:为了使杨辉三角看起来比较整齐,需要控制空格的数量,不断调整每行前导空格减少的数量来调整整齐度。

(七)教材52.(1)面源程序改错
源程序中scanf语句中n前没有加&符号,且程序末尾的return 0没有放到花括号中去。

修改后为:shangji2\jiaocai52.1
#include<stdio.h>
int main()
{
int i,n,s=1;
printf("please enter n:");
scanf("%d",&n);
for(i=1;i<=n;i++)
s=s*i;
printf("%d!=%d",n,s);
return 0;
}
调试及编译过程:
测试数据:0(特殊情况)
测试数据:8
出现的不足及修改:无运行结果:出现预期的结果。

(八)教材52面2(1)
分别用while和do while语句改写程序
下面是用while替换的情况:
源程序如下:shangji2\jiaocai52.2(1)
#include <stdio.h>
int main()
{
int i=1,n,s=1;
printf("please enter n:");
scanf("%d",&n);
while(i<=n)
{
s*=i;
i++;
}
printf("%d!=%d",n,s);
return 0;
}
下面是用do while替换的情况:
#include<stdio.h>
int main()
{
int i=1,n,s=1;
printf("please enter n:");
scanf("%d",&n);
do
{
s*=i;
i++;
}while(i<=n);
printf("%d!=%d",n,s);
return 0;
}
调试及编译过程:
测试数据:0(特殊情况)
测试数据:8
出现的不足及修改:无运行结果:出现预期的结果。

(九)教材52面2(2)
输出满足n!>=s的最小n值,s由键盘端输入。

源程序如下:shangji2\jiaocai52.2(2)
#include <stdio.h>
int j(int n);
int main()
{
int i,s;
printf("enter s:");
scanf("%d",&s);
for(i=0;;i++)
{
if(j(i)>=s)
break;
}
printf("i=%d",i);
return 0;
}
int j(int n)
{
int i,s=1;
for(i=1;i<=n;i++)
s*=i;
return (s);
}
调试及编译过程:
测试数据:1(特殊情况)
测试数据:40310
出现的不足及修改:无运行结果:出现预期结果。

(十)教材52面3.(2)
将一行字符复制输出,其中一个以上的空格用一个空格代替。

源程序如下:shangji2\jiaocai52.3(2)
#include <stdio.h>
int main()
{
char c,s[81];
int r=1,i=0;
printf("enter :\n");
while((c=getchar())!='\n') {
if(c!=' ')
{
r=1;
s[i]=c;
i++;
}
else if(r==1)
{
r=0;
s[i]=c;
i++;
}
else
;
}
s[i]='\0';
puts(s);
return 0;
}
调试及编译过程:
测试数据:前导多个空格的情况:
测试数据:前导一个空格的情况:
测试数据:前导没有空格的情况:
出现的不足及修改:无运行结果:出现预期的结果。

3.3实验总结
1.本次实验进行流程控制的实践,期间运用到了顺序语句,循环语句和条件语句,在高中时数学方面打下过一点基础,对设计算法方面也有一定的帮助。

2.通过本次实验,主要是解决数学问题,为以后解决实际问题做好铺垫,期间用到的语句结构虽然比较简单,却是写大型应用软件不可缺少的基石。

3.在编写这些程序的过程中,相比之前又是一次大的进步,由简单的语句过渡到简单的程序。

4.可以通过数学的推导简化过程,如在杨辉三角里可以通过数学关系轻松的写出程序.
5.要熟练运用for,while,do-while语句,通过反复的使用与组合可以实现一些复杂的算法
6. 加强了对循环语句的运用能力,即分析循环结束标志的能力,选择更好的循环条件和循环结束标志,可以节省空间,也使得程序看上去更简洁。

7. 将循环语句嵌套使用,加强了对for语句的运用能力,它作为while语句的进化形式,具有简洁优美清晰方便的优点。

相关文档
最新文档