C语言实验报告Word下载.docx
《C语言实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《C语言实验报告Word下载.docx(33页珍藏版)》请在冰豆网上搜索。
![C语言实验报告Word下载.docx](https://file1.bdocx.com/fileroot1/2023-1/11/2e54f4fa-51fd-4710-a83a-8c4034d17273/2e54f4fa-51fd-4710-a83a-8c4034d172731.gif)
【思考题】若将第四行改为:
intc1,c2;
再使之运行,输出结果一样吗?
为什么?
答:
一样,因为定义char型时已经包含了int型,且后面赋值为整形,就和赋c1,c2为int型一样。
(二)程序填空:
输入一个十进制整数,输出与之相应的八进制数与十六进制数。
例如:
输入31,输出37(八进制)和1F(十六进制)。
源程序如下:
{
longn;
输入一个十进制整数:
"
%d"
n);
对应的八进制整数是%o\n"
n);
对应的十六进制整数是%x\n"
return0;
运行程序,输入1234567,显示结果如何?
输出“4553207和12d687”
3.实验程序清单及运行结果
1.要将"
China"
译成密码,译码规律是:
用原来字母后面的第4个字母代替原来的字母.例如,字母"
A"
后面第4个字母是"
E"
."
代替"
因此,"
应译为"
Glmre"
请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为,’C’、’h’、’i’、’n’、’a’,经过运算,使c1、c2、c3、c4、c5分别变为’G’、’l’、’m’、’r’、’e’,并输出。
charc1,c2,c3,c4,c5;
c1='
C'
;
c2='
h'
c3='
i'
c4='
n'
c5='
a'
%c%c%c%c%c\n"
c1+4,c2+4,c3+4,c4+4,c5+4);
2.设圆半径r,圆柱高h
求圆周长C1、圆面积Sa、圆球表面积Sb、圆球体积Va、圆柱体积Vb。
用scanf输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。
请编程序。
PI=3.14
#definePI3.14
floatr,h,C1,Sa,Sb,Va,Vb;
%f%f"
r,&
h);
C1=2*PI*r;
Sa=PI*r*r;
Sb=4*PI*r*r;
Va=(4.0/3)*PI*r*r*r;
Vb=Sa*h;
C1=%.2f\nSa=%.2f\nSb=%.2f\nVa=%.2f\nVb=%.2f\n"
C1,Sa,Sb,Va,Vb);
3.输入一个华氏温度,要求输出摄氏温度。
公式为c=5(F-32)/9输出要求有文字说明,取位2小数。
floatc,F;
%f"
F);
c=5.0*(F-32)/9;
c=%.2f\n"
c);
实验三选择结构程序设计
1)了解C语言表示逻辑量的方法(以0代表“假”,以非0代表“真”)。
2)学会正确使用关系运算符、逻辑运算符和相关表达式。
3)熟练掌握if语句和switch语句。
4)结合程序掌握一些简单的的算法。
5)学习调试程序。
2.程序填空
请将下列源程序填写完整。
程序说明:
输入实数x,计算并输出下列分段函数f(x)的值,结果保留2位小数。
math.h>
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);
f(%.2f)=%.2f\n"
x,y);
运行程序,输入-2,显示结果是:
-1
输入0.5,显示结果是:
1.65
输入3,显示结果是:
3.16
1.有一个函数
/x (x<
1)
y={ 2x-1 (1<
=x<
10)
\3x-11 (x>
=10)
写一段程序,输入x,输出y
intx,y;
%d"
x);
if(x<
if(x<
1)y=x;
elsey=2*x-1;
elsey=3*x-11;
y);
2.给出一百分制成绩,要求输出成绩等级‘A’、‘B’、‘C’、‘D’、‘E’。
90分以上为A
80-89分为B
70-79分为C
60-69分为D
59分及以下为E
intt;
t);
if(90<
=t&
&
t<
=100)printf("
A\n"
elseif(80<
=89)printf("
B\n"
elseif(70<
=79)printf("
C\n"
elseif(60<
=69)printf("
D\n"
elseif(0<
=59)printf("
E\n"
3.给出一个不多于5位的非负整数,要求
1、求出它是几位数
2、分别输出每一位数字
3、按逆序输出各位数字,例如原数为321,应输出123
intn,a,b,c,d,e;
a=n%10,b=n/10%10,c=n/100%10,d=n/1000%10,e=n/10000%10;
if(n>
=0&
n<
=9)printf("
1\n%d\n%d\n"
a,a);
=10&
=99)printf("
2\n%d%d\n%d%d\n"
b,a,a,b);
=100&
=999)printf("
3\n%d%d%d\n%d%d%d\n"
c,b,a,a,b,c);
=1000&
=9999)printf("
4\n%d%d%d%d\n%d%d%d%d\n"
d,c,b,a,a,b,c,d);
=10000&
=99999)printf("
5\n%d%d%d%d%d\n%d%d%d%d%d\n"
e,d,c,b,a,a,b,c,d,e);
4.企业发放的奖金根据利润提成。
利润低于或等于100000元的,奖金可提10%;
利润高于100000元,低于200000元(100000<
I≤200000)时,低于100000元的部分按10%提成,高于100000元的部分,可提成7.5%;
200000<
I≤400000时,低于200000元部分仍按上述办法提成,(下同),高于200000元的部分按5%提成;
400000<
I≤600000元时,高于400000元的部分按3%提成;
600000<
I≤1000000时,高于600000元的部分按1.5%提成;
I>
1000000时,超过1000000元的部分按1%提成。
从键盘输入当月利润I,求应发奖金总数
inti,y;
i);
if(i<
=100000)y=i*1/10;
elseif(i<
=200000)y=10000+(i-100000)*75/1000;
=400000)y=10000+7500+(i-200000)*5/100;
=600000)y=27500+(i-400000)*3/100;
=1000000)y=33500+(i-600000)*15/1000;
elsey=39500+(i-1000000)*1/100;
实验四循环结构程序设计
1)熟悉掌握用while语句、do-while语句和for语句实现循环的方法。
2)掌握循环次数不确定的解题技巧,掌握多项式求和问题的解题技巧。
3)掌握多重循环的编程技巧。
4)掌握在程序设计中用穷举法、迭代法、递推法求解问题的编程技巧。
5)进一步学习调试程序。
输出菲波那契数列的前20项,要求每行输出10项。
{inti,x1,x2,x;
x1=x2=1;
%6d%6d"
x1,x2);
/*输出前2项*/
for(i=3;
i<
=20;
i++)
{x=x1+x2;
%6d"
x);
if(i%10==0)printf("
/*每行输出10项*/
x1=x2;
x2=x;
}
1.输入两个正整数m和n,求其最大公约数和最小公倍数。
intm,n,a,b,c;
%d%d"
m,&
for(a=n;
a--)
if(n%a==0&
m%a==0)break;
for(b=m;
b++)
if(b%n==0&
b%m==0)break;
printf("
%d%d\n"
a,b);
2.输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数。
charc;
inta=0,b=0,d=0,e=0;
while((c=getchar())!
='
\n'
)
{
if(c>
c<
z'
||c>
A'
Z'
a++;
elseif(c=='
'
b++;
elseif(c>
0'
9'
d++;
elsee++;
%d%d%d%d"
a,d,b,e);
3.Sn=2+22+222+2222+22222+22...2222(最后一项n个2)
inta,b,c,d,s,n;
a=2;
b=1;
c=d=s=0;
while(b<
n)
c=c+a;
a=10*a;
d=a+c;
s=s+d;
b++;
s+2);
4.求Sn=1!
+2!
+3!
+4!
+5!
+…+n!
之值,其中n是一个数字。
inta,b,s,n;
a=b=1,s=0;
while(a<
b=b*(a+1);
s=s+b;
a++;
s+1);
实验五数组
1)掌握一维数组和二维数组的定义、赋值和输入输出的方法。
2)掌握字符数组和字符串函数的使用。
3)掌握与数组有关的算法(特别是排序算法)。
(一)程序填空:
输入一个整数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]<
a[k],则更新k的值:
k=j。
找出对应于下标i的最小元素a[k]后,交换a[i]与a[k]。
inti,j,k,n,temp,a[10];
Inputn(1~10):
while(scanf("
n),n<
=1||n>
=10);
//输入正确的n:
1≤n≤10
Input%dnumbers:
n);
for(i=0;
n;
i++)
scanf("
a[i]);
//输入n个整型元素
//选择法排序
n-1;
{
k=i;
//设a[i]为剩余部分的最小元素
for(j=i+1;
j<
n;
j++)
if(a[j]<
a[k])k=j;
//Line12
temp=a[i];
a[i]=a[k];
a[k]=temp;
//a[i]a[k]
%d"
a[i]);
//输出排序后的数组
【思考题】运行程序,输入n:
5,输入5个整数:
23-9140-3,显示结果是什么?
答:
Inputn(1~10):
5
Input5numbers:
23-9140-3
-9-301423
请按任意键继续...
如果是按从大到小的降序排列,语句行Line12应怎么修改?
应该为if(a[j]<
(修改上面的程序,从在线评测系统中提交调试好的程序,题号1032。
输入5个整数,将这5个数按逆时针顺序转动一次后再输出,如输入12345,逆时针转动一次后,输出23451。
提示:
设存放整数的数组为a。
要实现数组逆时针转动,只要先将首元素a[0]“搬”至一个变量t中;
然后从第1个元素到最后1个元素,依次向前移一位,即a[i-1]=a[i](i=1,…,4);
最后将存放在t中的首元素放入最后的元素。
inti,t,a[5];
Input5integers:
5;
&
a[i]);
t=a[0];
for(i=1;
5;
i++)
a[i-1]=a[i];
a[4]=t;
Afterrotation:
i<
i++)
%5d"
a[i]);
return0;
1.用筛法求之N内的素数。
{intn,N,k,i;
N);
for(n=2;
=N;
n=n+1)
{k=sqrt(n);
for(i=2;
=k;
i++)
if(n%i==0)break;
if(i>
=k+1)
n);
2.用选择法对10个整数从小到大排序。
inta[10];
inti,j,t;
10;
scanf("
for(j=0;
j<
9;
j++)
for(i=0;
9-j;
if(a[i]>
a[i+1])
{t=a[i];
a[i]=a[i+1];
a[i+1]=t;
for(i=0;
printf("
%d\n"
return0;
3.输入10个数字,然后逆序输出。
inta[10],i;
for(i=9;
i>
=0;
i--)
4.写一个判断素数的函数,在主函数输入一个正整数,输出是否是素数的消息。
{intn,i,k;
k=sqrt(n);
if(n==1)printf("
notprime\n"
else
{for(i=2;
=k+1)printf("
prime\n"
elseprintf("
实验六函数
1)掌握定义函数的方法。
2)掌握函数实参与形参的对应关系以及“值传递”的方式。
3)掌握函数的嵌套调用和递归调用的方法。
4)掌握全局变量和局部变量、动态变量和静态变量的概念和使用方法。
5)学习对多文件程序的编译和运行。
验证哥德巴赫猜想——任何一个大于6的偶数均可表示为两个素数之和。
6=3+3,8=3+5,10=5+5,…,18=7+11。
要求将6-100之间的偶数均表示为素数之和,一行输出5组。
intprime(intn);
intmain()
{inta,b,k;
for(k=6;
k<
=100;
k=k+2)//逐个处理6~100之间的偶数k
{for(a=2;
a<
k;
a++)//针对偶数k,寻找第一个素数加数项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("
//每行输出5组,注意第一行只有3组
}//外层循环
//自定义函数prime(n),判断整数n是否是素数,是则返回1,不是则返回0
intprime(intn)
{inti;
for(i=2;
i<
=n;
if(n%i==0)break;
if(i==n)return1;
//n是素数,返回1
elsereturn0;
//n不是素数,返回0
1.写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。
intgcd(intx,inty);
intlcm(intx,inty);
inta,b;
b);
gcd(a,b),lcm(a,b));
intgcd(intx,inty)
if(y>
x){t=x;
x=y;
y=t;
while(t)
t=x%y;
x=y;
y=t;
returnx;
intlcm(intx,inty)
returnx*