C语言实验报告模板完成版.docx
《C语言实验报告模板完成版.docx》由会员分享,可在线阅读,更多相关《C语言实验报告模板完成版.docx(32页珍藏版)》请在冰豆网上搜索。
C语言实验报告模板完成版
《高级语言程序设计》
学
生
实
验
报
告
专业:
计算机科学与技术(非师范)
学号:
12600120姓名:
李奕
实验一C程序的运行环境和使用方法
1.实验目的
1)了解所用的计算机系统的基本操作方法,学会独立使用该系统。
2)了解在该系统上如何编辑、编译、连接和运行一个C程序。
3)通过运行简单的C程序,初步了解C程序的特点。
2.实验程序清单及运行结果
课后习题1.5
编写一个C程序,输出以下信息:
**************************
VeryGood!
**************************
Source
#include
intmain()
{
printf("**************************\n");
printf("VeryGood!
\n");
printf("**************************\n");
}
课后习题1.6
编写一个程序,输入a、b、c三个值,输出其中最大值。
Source
#include
intmain
{intmax,a,b,c;
scanf(“%d%d%d”,&a,&b,&c);
max=a>=b?
a:
b;
printf(“%d”,max>=c?
max:
c);
}
实验二顺序结构程序设计
1.实验目的
1)掌握C语言的数据类型,熟悉如何定义整型、字符型和实型的变量,以及对它们赋值的方法。
2)掌握不同类型的数据之间赋值的规律。
3)学会用C的有关算术运算符,以及包含这些运算符的表达式。
4)掌握C语言中使用最多的一种语句——赋值语句的使用方法。
5)掌握scanf()函数、printf()函数的调用方法,掌握各种类型数据的输入输出的方法,能正确使用各种格式转换符。
6)掌握字符输入输出函数getchar()、putchar()函数的调用方法。
2.运行程序及填空
(一)输入并运行下面的程序,写出运行结果。
#include
intmain()
{
charc1,c2;
c1=97;c2=98;
printf(“%c,%c\n”,c1,c2);
printf(“%d,%d\n”,c1,c2);
return0;
}
运行结果:
a,b
97,98
【思考题】若将第四行改为:
intc1,c2;再使之运行,输出结果一样吗?
为什么?
答:
一样,因为第六行的printf输出的是%c即字符,任然将c1,c2按照ASCII码字以符形式输出。
(二)程序填空:
输入一个十进制整数,输出与之相应的八进制数与十六进制数。
例如:
输入31,输出37(八进制)和1F(十六进制)。
源程序如下:
#include
intmain()
{
longn;
printf("输入一个十进制整数:
");
scanf("%d",&n);
printf("对应的八进制整数是%o\n",n);
printf("对应的十六进制整数是%X\n",n);
return0;
}
运行程序,输入1234567,显示结果如何?
答:
输入一个十进制整数:
1234567
对应的八进制整数是4553207
对应的十六进制整数是12D687
3.实验程序清单及运行结果
课后习题3.7
要将"China"译成密码。
Source
#include
intmain()
{
charc1='C',c2='h',c3='i',c4='n',c5='a';
printf("%c%c%c%c%c\n",c1+4,c2+4,c3+4,c4+4,c5+4);
}
课后习题4.8
求圆周长C1、圆面积Sa、圆球表面积Sb、圆球体积Va、圆柱体积Vb。
Source
#include
#definePI3.14
#include
intmain()
{
floatr,h,C1,Sa,Sb,Va,Vb;
scanf("%f%f",&r,&h);
C1=2*PI*r;
Sa=PI*r*r;
Sb=4*PI*r*r;
Va=4.0/3*r*r*r*PI;
Vb=PI*r*r*h;
printf("C1=%.2f\nSa=%.2f\nSb=%.2f\nVa=%.2f%\nVb=%.2f\n",C1,Sa,Sb,Va,Vb);
}
课后习题4.9
输入一个华氏温度,要求输出摄氏温度。
公式为c=5(F-32)/9。
取位2小数。
Source
#include
intmain()
{
floatF,c;
scanf("%f",&F);
printf("c=%.2f\n",c=5*(F-32)/9;);
return0;
}
实验三选择结构程序设计
1.实验目的
1)了解C语言表示逻辑量的方法(以0代表“假”,以非0代表“真”)。
2)学会正确使用关系运算符、逻辑运算符和相关表达式。
3)熟练掌握if语句和switch语句。
4)结合程序掌握一些简单的的算法。
5)学习调试程序。
2.程序填空
请将下列源程序填写完整。
程序说明:
输入实数x,计算并输出下列分段函数f(x)的值,结果保留2位小数。
#include
#include
intmain()
{doublex,y;
printf("Inputx:
");
scanf(“%lf”,&x);
if(x<-1)y=x+1;
elseif(x<1)y=exp(x);
elsey=sqrt(x*x+1);
printf("f(%.2f)=%.2f\n",x,y);
return0;
}
运行程序,输入-2,显示结果是:
-1
输入0.5,显示结果是:
1.65
输入3,显示结果是:
3.16
3.实验程序清单及运行结果
课后习题5.5
有一个函数
/x (x<1)
y={ 2x-1 (1<=x<10)
\3x-11 (x>=10)
写一段程序,输入x,输出y
Source
#include
intmain()
{
intx,y;
scanf("%d",&x);
if(x<10)
{if(x<1)y=x;
elsey=2*x-1;}
elsey=3*x-11;
printf("%d\n",y);
return0;
}
课后习题5.6
给出一百分制成绩,要求输出成绩等级‘A’、‘B’、‘C’、‘D’、‘E’。
Source
#include
intmain()
{
intx;
charA,B,C,D,E;
scanf("%d",&x);
if(x>=90&&x<=100)printf("%c\n",'A');
elseif(x>=80&&x<=89)printf("%c\n",'B');
elseif(x>=70&&x<=79)printf("%c\n",'C');
elseif(x>=60&&x<=69)printf("%c\n",'D');
elseif(x<=59&&x>=0)printf("%c\n",'E');
}
课后习题5.7
给出一个不多于5位的非负整数,要求
1、求出它是几位数
2、分别输出每一位数字
3、按逆序输出各位数字,例如原数为321,应输出123
Source
#include
intmain()
{
intx,a[6],i,z=0;
scanf("%d",&x);
for(i=10;x;)
{
a[++z]=x%i;
x=x/10;
}
if(z==0)printf("1\n0\n0\n");
elseprintf("%d\n",z);
for(i=z;i>=1;i--)
{
if(i!
=1)printf("%d",a[i]);
elseprintf("%d\n",a[i]);
}
for(i=1;i<=z;i++)
{
printf("%d",a[i]);
if(i==z)printf("\n");
}
}
课后习题5.8
企业发放的奖金根据利润提成。
Source
#include
intmain()
{
intI;
scanf("%d",&I);
if(I<=100000)printf("%d\n",I*1/10);
else
if(I<=200000&&I>100000)printf("%d\n",10000+(I-100000)*75/1000);
else
if(I<=400000&&I>200000)printf("%d\n",17500+(I-200000)*5/100);
else
if(I<=600000&&I>400000)printf("%d\n",27500+(I-400000)*3/100);
else
if(I<=1000000&&I>600000)printf("%d\n",33500+(I-600000)*15/1000);
else
if(I>1000000)printf("%d\n",39500+(I-1000000)*1/100);
return0;
}
实验四循环结构程序设计
1.实验目的
1)熟悉掌握用while语句、do-while语句和for语句实现循环的方法。
2)掌握循环次数不确定的解题技巧,掌握多项式求和问题的解题技巧。
3)掌握多重循环的编程技巧。
4)掌握在程序设计中用穷举法、迭代法、递推法求解问题的编程技巧。
5)进一步学习调试程序。
2.程序填空
输出菲波那契数列的前20项,要求每行输出10项。
#include
intmain()
{inti,x1,x2,x;
x1=x2=1;
printf("%6d%6d",x1,x2);/*输出前2项*/
for(i=3;i<=20;i++)
{x=x1+x2;printf("%6d",x);
if(i%10==0)printf("\n");/*每行输出10项*/
x1=x2;x2=x;
}
return0;
}
3.实验程序清单及运行结果
课后习题6.1
输入两个正整数m和n,求其最大公约数和最小公倍数。
Source
#include
intmain()
{
inta,b,t;
scanf("%d%d",&a,&b);
if(b>a){t=a;a=b;b=t;};
intk=a*b;
while(t){t=a%b;a=b;b=t;}
printf("%d%d",a,k/a);
}
课后习题6.2
输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数。
Source
#include
intmain()
{
charx;
inta1=0,a2=0,a3=0,a4=0;
for(x=getchar();x!
='\n';x=getchar())
{
if(x>='a'&&x<='z')a1=a1+1;
else
if(x>='A'&&x<='Z')a1=a1+1;
else
if(x>='0'&&x<='9')a2=a2+1;
else
if(x=='')a3=a3+1;
elsea4=a4+1;
}
printf("%d",a1);
printf("%d",a2);
printf("%d",a3);
printf("%d\n",a4);
return0;
}
课后习题6.3
Sn=2+22+222+2222+22222+22...2222(最后一项n个2)
Source
#include
intmain()
{
intn,a=2,i,t=0,sum=0;
scanf("%d",&n);
while(n--)
{
t+=a;sum+=t;a*=10;
}
printf("%d",sum);
return0;
}
课后习题6.10
猴子吃桃问题。
求第一天共摘多少桃子。
Source
#include
intmain()
{
ints=1,N,i;
scanf("%d",&N);
for(i=1;i{
s=(s+1)*2;
}
printf("%d\n",s);
}
实验五数组
1.实验目的
1)掌握一维数组和二维数组的定义、赋值和输入输出的方法。
2)掌握字符数组和字符串函数的使用。
3)掌握与数组有关的算法(特别是排序算法)。
2.程序填空
(一)程序填空:
输入一个整数n(1≤n≤10),再输入n个整数,将它们按升序排列后输出。
选择排序基本思想:
(1)由于n最大是10,需要定义一个长度为10的整型数组a;
(2)整个排序只需要确定前n-1个元素(a[0]~a[n-2]),最后一个元素a[n-1]无需另外处理;
(3)在确定a[i](i=0,1,…,n-2)时,先将a[i]本身看成最小,即令k=i,并将a[k]与后面的元素a[j](j=i+1,i+2,…,n-1)一一比较,如果a[j]k=j。
找出对应于下标i的最小元素a[k]后,交换a[i]与a[k]。
#include
intmain()
{
inti,j,k,n,temp,a[10];
printf("Inputn(1~10):
");
while(scanf("%d",&n),n<=1||n>=10);//输入正确的n:
1≤n≤10
printf("Input%dnumbers:
\n",n);
for(i=0;iscanf("%d",&a[i]);//输入n个整型元素
//选择法排序
for(i=0;i{
k=i;//设a[i]为剩余部分的最小元素
for(j=i+1;jif(a[j]temp=a[i];a[i]=a[k];a[k]=temp;//a[i]a[k]
}
for(i=0;iprintf("%d",a[i]);//输出排序后的数组
printf("\n");
return0;
}
【思考题】运行程序,输入n:
5,输入5个整数:
23-9140-3,显示结果是什么?
如果是按从大到小的降序排列,语句行Line12应怎么修改?
答;⑴显示结果Inputn(1~10):
5⑵Line12应改为if(a[j]>a[k])k=j;
Input5numbers:
23-91403
-9031423
(修改上面的程序,从在线评测系统中提交调试好的程序,题号1032。
)
(二)程序填空:
输入5个整数,将这5个数按逆时针顺序转动一次后再输出,如输入12345,逆时针转动一次后,输出23451。
提示:
设存放整数的数组为a。
要实现数组逆时针转动,只要先将首元素a[0]“搬”至一个变量t中;然后从第1个元素到最后1个元素,依次向前移一位,即a[i-1]=a[i](i=1,…,4);最后将存放在t中的首元素放入最后的元素。
#include
intmain()
{
inti,t,a[5];
printf("Input5integers:
\n");
for(i=0;i<5;i++)
scanf("%d",&a[i]);
t=a[0];
for(i=1;i<5;i++)
a[i-1]=a[i];
a[4]=t;
printf("Afterrotation:
\n");
for(i=0;i<5;i++)
printf("%5d",a[i]);
printf("\n");
return0;
}
3.实验程序清单及运行结果
课后习题7.1
用筛法求之N内的素数。
Source
#include
#include
intmain()
{
intN,n,i,k;
scanf("%d",&N);
for(n=2;n<=N;n++)
{
k=sqrt(n);
for(i=2;i<=k;i++)
if(n%i==0)break;
if(i>=k+1){printf("%d\n",n);}
}
}
课后习题7.2
用选择法对10个整数从小到大排序。
Source
#include
intmain()
{
inta[10],i,j,min,t,k=0;
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<9;i++)
{
min=a[i];k=i;
for(j=i+1;j<10;j++)
{
if(min>a[j])min=a[j],k=j;
}
if(k!
=i){t=a[k];a[k]=a[i];a[i]=t;}
}
for(i=0;i<10;i++)
{
printf("%d\n",a[i]);
}
}
课后习题7.4
有一个已排好的9个元素的数组,输入一个数要求按原来排序的规律将它插入数组中。
Source
#include
intmain()
{
inta[11],i,t,k;
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
for(i=8,k=9;i>=0;i--)
{
if(a[k]}
for(i=0;i<10;i++)
{
printf("%d\n",a[i]);
}
}
课后习题7.5
输入10个数字,然后逆序输出。
Source
#include
intmain()
{
inta[10],i;
for(i=0;i<=9;i++)
scanf("%d",&a[i]);
for(i=9;i>=0;i--)
printf("%d",a[i]);
return0;
}
实验六函数
1.实验目的
1)掌握定义函数的方法。
2)掌握函数实参与形参的对应关系以及“值传递”的方式。
3)掌握函数的嵌套调用和递归调用的方法。
4)掌握全局变量和局部变量、动态变量和静态变量的概念和使用方法。
5)学习对多文件程序的编译和运行。
2.程序填空
验证哥德巴赫猜想——任何一个大于6的偶数均可表示为两个素数之和。
例如:
6=3+3,8=3+5,10=5+5,…,18=7+11。
要求将6-100之间的偶数均表示为素数之和,一行输出5组。
#include
#include
Intprime(intn);
intmain()
{inta,b,k;
for(k=6;k<=100;k=k+2)//逐个处理6~100之间的偶数k
{for(a=2;a{b=k-a;
if(prime(a)&&prime(b))break;//如果a,b同为素数,跳出内层循环
}//内层循环
printf("%d=%d+%d",k,a,b);//输出k=a+b
if(k%5==0)printf("\n");//每行输出5组,注意第一行只有3组
}//外层循环
return0;
}
//自定义函数prime(n),判断整数n是否是素数,是则返回1,不是则返回0
intprime(intn)
{inti;
for(i=2;i<=n;i++)
if(n%i==0)break;
if(i==n)return1;//n是素数,返回1
elsereturn0;//n不是素数,返回0
}
3.实验程序清单及运行结果
课后习题8.1
写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数
Source
#include
intmain()
{
intgcd(intx,inty);
intlcm(intx,inty);
inta,b;
scanf("%d%d",&a,&b);
printf("%d%d\n",gcd(a,b),lcm(a,b));
}
intgcd(intx,inty)
{
intt;
if(y>x){t=x;x=y;y=t;}
while(t)
{
t=x%y;
x=y;
y=t;
}
returnx;
}
intlcm(intx,inty)
{
returnx*y/gcd(x,y);
}
课后习题8.3
写一个判断素数的函数,在主函数输入一个正整数,输出是否是素数的消息。
Source
#include
intmain()
{
inta;
intprime(intx);
scanf("%d",&a);
if(prime(a))printf("prime");
elseprintf("notprime");
}
intprime(intx)
{
inti=2;
if(x==1)return