c语言程序设计案例教程 实验项目设计性题目参考答案.docx
《c语言程序设计案例教程 实验项目设计性题目参考答案.docx》由会员分享,可在线阅读,更多相关《c语言程序设计案例教程 实验项目设计性题目参考答案.docx(31页珍藏版)》请在冰豆网上搜索。
![c语言程序设计案例教程 实验项目设计性题目参考答案.docx](https://file1.bdocx.com/fileroot1/2023-1/26/7f25ad80-b889-4327-a94b-4502d1e9ded9/7f25ad80-b889-4327-a94b-4502d1e9ded91.gif)
c语言程序设计案例教程实验项目设计性题目参考答案
C语言程序设计案例教程(含实验)
设计性实验的程序参考答案
实验项目一C程序的编辑、编译、连接和运行
题目:
编写程序,要求屏幕上显示如下信息:
***********************
*ThisisaCprogram.*
***********************
程序:
#include
voidmain()
{
printf(“***********************”);
printf(“*ThisisaCprogram.*”);
printf(“***********************”);
}
实验项目二数据类型、运算符、表达式
题目
(1)程序填空:
输入1个实数x,计算并输出其平方根(保留1位小数)。
填空
1.doublex,root;
2.root=sqrt(x);
(2)输入一个大写英文字母,输出相应的小写字母。
填空
1.ch=ch+32;
实验项目三顺序结构程序设计
题目
(1)编写程序,输入三角形的三边长a、b、c,求三角形面积area。
程序代码:
#include
#include
main()
{
floata,b,c,s,arer;
printf("请输入三角形的三个边a,b,c:
\n");
scanf("%f,%f,%f",&a,&b,&c);
s=1.0/2*(a+b+c);
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("三角形的边为a=%7.2f,b=57.2f,c=%7.2f\n",a,b,c);
printf("三角形的面积area=%7.2\n",area);
(2)设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。
程序代码:
#include
main()
{
floath,r,l,s,sq,vq,vz;
floatpi=3.1415926;
printf("请输入圆半径r,圆柱高h:
");
scanf("%f,%f",&r,&h);
l=2*pi*r;
s=r*r*pi;
sq=4*pi*r*r;
vq=4.0/3.0*pi*r*r?
*r;
vz=pi*r*r*h;
printf("圆周长为:
l=%6.2f\n",l);
printf("圆面积为:
s=%6.2f\n",s);
printf("圆球表面积为:
sq=%6.2f\n",sq);
printf("圆球体积为:
vq=%6.2f\n",vq);
printf("圆柱体积为:
vz=%6.2\n",vz);
(3)分别用getchar函数和scanf函数读入2个字符给变量c1、c2,然后分别用putchar函数和printf函数输出这两个字符。
程序代码:
#include
main()
{
charc1,c2;
printf("请输入两个字符c1,c2:
");
c1=getchar();
c2=getchar();
printf("用putchar语句输出结果为:
");
putchar(c1);
putchar(c2);
printf("用printf语句输出结果为:
");
printf("%c%c\n",c1,c2);
}
实验项目四分支结构程序设计
题目
(1)程序填空。
输入四个整数,输出其中的最小值。
填空:
min=a;
if(belseif(celseif(d(2)计算如下函数Y的值。
X(X<1)
2X-1(1≤X<10)
3X-11(X>=10)
程序代码:
#include
main()
{
intx,y;
printf("请输入x:
");
scanf("%d",&x);
if(x<1)y=x;
elseif(x<10)y=2*x-1;
elsey=3*x-11;
printf("x=%d,y=%d",x,y);
}
(3)给出一个百分制成绩,输出对应的等级分。
共分A、B、C、D、E五个等级。
90分以上为A,81-89分为B,70-79分为C,60-69分为D,60分以下为E。
要求分别用if语句和switch语句实现。
程序代码:
①用if-else语句实现:
#include
main()
{
intg;
Loop:
printf("请输入g:
");
scanf("%d",&g);
if(g<0||g>100)gotoLoop;
if(g>90)printf("A");
seleif(g>80)printf("B");
elseif(g>70)printf("C");
elseif(g>60)printf("D");
elseprintf("E");
}
②用switch语句实现:
#include
main()
{
intg;
Loop:
printf("请输入g:
");
scanf("%d",&g);
if(g<0||g>100)gotoLoop;
switch(g/10)
{
case10:
case9:
printf("A");
case8:
printf("B");
case7:
printf("C");
case6:
printf("D");
default:
printf("E");
}
}
(4)编写程序,输入奖金数a,计算并输出税率、应缴税款和实得奖金数。
奖金税率
a<5000.00
500≤a<10000.05
1000≤a<20000.08
2000≤a<50000.10
5000≤a0.15
提示:
a=奖金数rate=税率值tax=应缴税款profit=实得奖金数。
计算公式:
tax=a*rate,profit=a–tax
程序代码:
#include
main()
{
floata,rate,tax,profit;
scanf("%f",&a);
if(a<500)rate=0.0;
elseif(a<1000)rate=0.05;
elseif(a<2000)rate=0.08;
elseif(a<5000)rate=0.1;
elserate=0.15;
tax=a*rate;
profit=a-tax;
printf("rate=%10.2f,tax=%10.2f,profit=%10.2f\n",rate,tax,profit);
}
实验项目五循环结构程序设计
题目
(1)猴子吃桃子。
猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第2天早上将剩下的桃子吃掉一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一半多一个。
到第10天早上想再吃时,只剩下一个桃子。
问第一天共摘多少个桃子?
(要求使用While循环语句实现)。
算法提示
设total:
桃子的总数
x1 :
前一天的桃子数
x2:
后一天的桃子数
day:
天数
计算公式:
x1=(x2+1)*2 第1天的桃子数是第2天桃子数加1后的2倍。
程序代码:
#include
voidmain()
{
intx1,x2,day,total;
day=9;
x2=1;
while(day>0)
{x1=(x2+1)*2;
x2=x1;
day=day-1;
}
Total=x1;
printf("total=%d\n",x1);
}
(2)求200—300之间的素数。
程序代码:
#include
voidmain()
{
intm,n,flag;
printf("\nTheprimersfrom200to300is:
\n");
for(n=201;n<300;n+=2)
{flag=1;
for(m=2;m<=n/2;m++)
if(n/m==0)
{flag=0;
break;
}
if(flag==0)
continue;
printf("%d",n);
}
printf("\n");
}
(3)程序填空
①求1-1/2+1/3-1/4+⋯⋯,输入1个正整数n(n<=100),计算并输出1-1/2+1/3-1/4+⋯⋯的前n项和(保留3位小数)。
程序代码:
#include
voidmain()
{
inti,n,flag;
floatsum;
scanf("%d",&n);
/*----以下为所填语句------*/
sum=0;
flag=1;
for(i=1;i<=n;i++)
{sum+=flag*1.0/i;
flag=-flag;
}
printf("%.3f\n",sum);
}
②统计字符。
输入一个正整数repeat(0输入一行字符,分别统计出其中的英文字母、空格、数字和其他字符的个数。
程序代码:
#include
voidmain()
{
intri,repeat;
intblank,digit,letter,other;
charc;
scanf("%d",&repeat);
getchar();
for(ri=1;ri<=repeat;ri++)
{
c=getchar();
/*----以下为所填语句------*/
blank=digit=letter=other=0;
while(c!
='\n')
{
if(c>='a'&&c<='z'||c>='A'&&c<='Z')letter++;
elseif(c>='0'&&c<='9')digit++;
elseif(c=='')blank++;
elseother++;
c=getchar();
}
printf("letter=%d,blank=%d,digit=%d,other=%d\n",letter,blank,digit,other);
}
}
③找最大值。
输入一个正整数repeat(0输入4个整数
输出其中的最大值。
例:
输入
3(repeat=3)
126190
10403020
-1-3-4-5
输出
maxis90(126190中的最大值是90)
maxis40(10403020中的最大值是40)
maxis-1(-1-3-4-5中的最大值是-1)
程序代码:
#include
voidmain()
{
intri,repeat;
inta,b,c,d,max;
scanf("%d",&repeat);
/*----以下为所填语句------*/
for(ri=1;ri<=repeat;ri++)
{
scanf("%d%d%d%d",&a,&b,&c,&d);
/*----以下为所填语句------*/
max=a;
if(max
if(maxif(maxprintf("maxis%d\n",max);
}
}
(4)编写程序:
输出“九九乘法表”。
程序代码:
#include
voidmain()
{
inti,j;
for(i=1;i<9;i++);
for(j=1;j<=i;j++);
{
if(i==j)printf("\n");
printf("%d*%d=%d",i,j,i*j);
}
}
实验项目六函数及其应用
题目
(1)程序填空。
计算代数多项式1.1+2.2x+3.3x2+4.4x3+5.5x4的值。
例:
输入
1.5
输出
54.52
程序代码:
#include
floatf(float);
voidmain()
{
floatx,y;
scanf(“%f”,&x);
/*----以下为所填语句------*/
y=f(x);
printf("%.2f\n",y);
}
/*----以下为所填语句------*/
floatf(floatx)
{
floatsum=0,t=1;
inti;
for(i=1;i<=5;i++){
sum+=(i+1.0*i/10)*t;
t*=x;
}
returnsum;
}
(2)编写程序,求s=1!
+2!
+3!
+....+10!
之和。
要求定义递归函数fact(n)求n!
,程序的输出形式为:
1!
+2!
+3!
+4+5!
+6!
+7!
+8!
+9!
+10!
=s,其中,s为求和值。
实验提示
求n!
的递归公式为:
1(n=0、n=1)
fact(n)=
fact(n)=n*fact(n-1)(n>1)
注意:
s和fas(n)均为长整型。
!
程序代码:
#include
voidmain()
{longintfas(int);
inti,m;
longints=0;
for(i=1;i<=10;i++)
{m=fas(i);
s=s+m;
print(“%d!
+”,i);
}print(“\b=%d\n”,s);
}
longintfas(intx)
{
if(x==0||x==1)
return
(1);
else
return(x*fas(x-1));
}
(3)编写程序,N名裁判给某歌手打分(假定分数都为整数)。
评分原则是去掉一个最高分,去掉一个最低分,剩下的分数取平均值为歌手的最终得分。
裁判给分的范围是:
60<=分数〈=100,裁判人数N=10。
要求:
每个裁判的分数由键盘输入。
实验提示
定义两个函数:
●max():
返回两个数中较大的值;
●min():
返回两个数中较小的值。
程序代码:
#include
Intm=0;n=100;
voidmain()
{inti,x,sum;
sum=0;
for(i=1;i<=10;i++)
{
LOOP:
scanf(“%d”,&x);
if(x<60||x>100)
gotoLOOP;
m=max(x,m);
n=min(x,n);
sum=sum+x;
}
print(“%d”,(sum-m-n)/8);
}
intmax(intx)
{
if(x>m)m=x;
return(m);
}
intmin(intx)
{
if(xreturn(n);
}
(4)编写程序,用递归法将一个十进制整数转换成二进制数。
程序代码:
#include
voidDtoB(intn);
voidmain()
{
intn;
scanf("%d",&n);
printf("%d-----)",n);
DtoB(n);
printf("\n");
}
voidDtoB(intn)
{
if(n)
{
DtoB(n/2);
printf("%d",n%2);
}
}
实验项目七数组及其应用
题目
(1)程序填空。
①求n个数中较大值及其下标。
输入一个正整数n(1程序代码:
#include
voidmain()
{
intri,repeat;
inti,index,n;
inta[10];
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){
scanf("%d",&n);
for(i=0;iscanf("%d",&a[i]);
/*----以下为所填语句------*/
index=0;
for(i=1;iif(a[index]printf("max=%d,index=%d\n",a[index],index);
}
}
②逆序输出。
输入一个正整数repeat(0输入一个正整数n(1程序代码:
#include
voidmain()
{
intri,repeat;
inti,n,temp;
inta[10];
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){
scanf("%d",&n);
for(i=0;iscanf("%d",&a[i]);
/*----以下为所填语句------*/
for(i=0;i{
temp=a[i];
a[i]=a[n-1-i];
a[n-1-i]=temp;
}
for(i=0;iprintf("%d",a[i]);
printf("\n");
}
}
③找鞍点(选作)。
输入1个正整数n(1≤n≤6)和n阶方阵a中的元素,如果找到a的鞍点(鞍点的元素值在该行上最大,在该列上最小),就输出它的下标,否则,输出"NO"(设a最多有1个鞍点)。
程序代码:
#include"stdio.h"
voidmain()
{
intri,repeat;
intflag,i,j,k,row,col,n,a[6][6];
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){
scanf("%d",&n);
for(i=0;ifor(j=0;jscanf("%d",&a[i][j]);
/*----以下为所填语句------*/
for(i=0;i{
row=i;col=0;
for(j=1;jif(a[row][col]col=j;
flag=1;
for(k=0;kif(a[row][col]>a[k][col])
{flag=0;
break;}
if(flag)
{
printf("a[%d][%d]=%d\n",row,col,a[row][col]);
break;
}
}
if(!
flag)
printf("NO\n");
}
}
(2)有10个数存放在一个数组中,先对该10个数从大到小排序,然后输入一个数,要求找出该数是数组中第几个元素的值,若找不到,输出未找到信息。
实验提示
①用冒泡或者选择排序法对数组中的10个数进行排序;
②用折半查找的方法在数组中查找指定的数。
程序代码:
#include
#defineN11
#include
#defineN11
voidsort(inta[N])/*排序*/
{inti,j,min,temp;
for(i=1;i<=9;i++)
{min=i;
for(j=i+1;j<=10;j++)
if(a[min]>a[j])
min=j;
temp=a[i];
a[i]=a[min];
a[min]=temp;
}
}
voidmain()
{inti,j,x,a[N];
voidbadd(int,int[],int);
printf("Enterdata:
\n");
for(i=1;i<=10;i++)
{printf("a[%d]=",i);
scanf("%d",&a[i]);
}
printf("\n");
for(i=1;i<=10;i++)
printf("%5d",a[i]);
printf("\n");
sort(a);
printf("\nThesortednumbers:
\n");
for(i=1;i<=10;i++)
printf("%5d",a[i]);printf("\n");
scanf("%d",&x);
badd(x,a,N);/*zhebanfindx*/
}
voidbadd(intx,inta[],intn)
{intmid,top,bot;
top=0;
bot=n-1;
while(top<=bot)
{mid=(top+bot)/2;
if(x==a[mid])
{printf("\n%d=a[%3d]\n",x,mid-1);
exit(0);
}
elseif(x>mid)
top=mid+1;
elsebot=mid-1;
}
printf("\ncan`tfind%d!
",x);
}
(3)/**/统计6个学生各4门功课的成绩。
要求程序具有如下功能:
①每个学生的4门功课的成绩从键盘读入;
②计算每个学生的总分和平均分;
③按平均成绩进行排序,输出排序后的成绩单(四门功课的成绩和均分),给出名次。
如先输入学生4门课成绩:
1:
67,72,65,80
2:
75,82,94,95
3:
70,74,80,76
4:
......
程序代码:
#include
main()
{
inti,j,k,t,s,a[7][7];
for(i=1;i<=6;i++)a[i][0]=i; /*输入序号*/
for(j=1;j<=6;j++)
{ t=0;