C语言程序设计实验设计习题答案.docx
《C语言程序设计实验设计习题答案.docx》由会员分享,可在线阅读,更多相关《C语言程序设计实验设计习题答案.docx(20页珍藏版)》请在冰点文库上搜索。
C语言程序设计实验设计习题答案
实验三
3.4编写程序,用getchar函数读入两个字符c1,c2,然后分别用putchar函数输出
voidmain()
{
charc1,c2;
c1=getchar();
c2=getchar();
putchar(c1);
putchar(c2);
putchar('\n');
printf("%c%c\n",c1,c2);
}
3.5把790分钟换成用小时和分钟表示,然后输出。
voidmain()
{
ints=790;
printf("%d小时",s/60);
printf("%d分钟",s%60);
}
3.6将读入三个数a,b,c,然后交换它们的值,把a的值给b,把b的值给c,把c的值给a.
main()
{
inta,b,c,t;
scanf("%d,%d,%d",&a,&b,&c);
t=a;
a=b;
b=c;
c=t;
printf("%d,%d,%d",a,b,c);
3.7输入一个double类型的数,使该数保留小数点后两位,对第三位小数进行四舍五入处理,然后输出此数,验证处理是否真确。
#include
voidmain()
{
floatx,s,a;
intz;
scanf("%f",&x);
a=100*x+0.5;
z=(int)(a);
s=z/100.0;
printf("%.2f\n",s);
}
main()
{
inta,b,t;
doublec;
scanf("%lf",&c);
b=100*c;
t=1000*c;
a=t%10;
if(a>=5)b=b+1;
elseb=b+0;
c=1.0*b/100;
printf("%7.2lf/n",c);
return0;
}
voidmain()
{
intx,y;
scanf("%d",&x);
if(x<0&&x>-5)y=x;
if(x==0)y=x-1;
if(x<10&&x>0)y=x+1;
printf("%d",y);
}
实验四
4.2
不嵌套if语句
voidmain()
{
intx,y;
scanf("%d",&x);
if(x<0&&x>-5)y=x;
if(x==0)y=x-1;
if(x<10&&x>0)y=x+1;
printf("%d",y);
}
法二:
嵌套if语句
voidmain()
{
intx,y;
scanf("%d",&x);
if((x>-5)&&(x<0))y=x;
elseif(x==0)y=x-1;
elseif(x<10&&x>0)y=x+1;
printf("%d",y);
}
4.3如下程序运用条件运算符求变量的绝对值?
voidmain()
{
inta,M;
scanf("%d",&a);
M=a>0?
a:
-a;
printf("abs(a)=%d",M);
4.4某服装店经营套服,也可单件出售,若买的不少于50套,每套80元,不足50套的每套90元,只买上衣每件60元,只买裤子每条45元,(读入所买上衣C和裤子t的件数,计算应付款m。
voidmain()
{
intc,t,m;
printf("inputthenumberofcoatandtrousersyourwantbuy:
\n");;
scanf("%d%d",&c,&t);
if(t==c)
if(c>=50)m=c*80;
elsem=c*90;
else
if(c>t)
if(t>=50)m=t*80+(c-t)*60;
elsem=t*90+(c-t)*60;
else
if(c>=50)m=c*80+(t-c)*45;
elsem=c*90+(t-c)*45;
printf("%d",m);
}
4.5:
从键盘中输入三个数,分别让他们代表三条线段的长度,请编写程序,判断由这三条线段组成的三角形将是什么三角形(不等边,等腰,等边或不构成三角形)?
Include
main()
{
inta,b,c;
scanf("%d%d%d",&a,&b,&c);
if(a+b>c&&b+c>a&&c+a>b)
{
if((a==b)&&(b==c))
printf("等边三角形");
elseif((a==b&&b!
=c)||(b==c&&c!
=a))printf("等腰三角形");
elseprintf("不等边三角形");
}
elseprintf("不构成三角形");
}
4.6:
判断输入的整数是否既是5又是7的倍数,若是,则输出yes,否则输出no
voidmain()
{
intx;
scanf("%d",&x);
if(x%5==0&&x%7==0)
printf("yes");
else
printf("no");
}
实验五
5.2输入一行字母,将字母加密输出(如“a’变成’c’,’b’变成’d’,......,’z’变成‘b’)
main()
{intc;
while((c=getchar())!
='\n')
{if(c<='X'&&c>='A'||c<='x'&&c>='a')
c+=2;
elseif(c=='y'||c=='Y'||c=='z'||c=='Z')
c=c-24;
printf("%c",c);
}
putchar('\n');
}
5.3利用for循环编写程序
法一:
#include"stdio.h"
main()
{
inti,j;
for(i=1;i<=4;i++)
{
for(j=1;j<=6;j++)
{
if(i==2||i==3)
{
if(j==1||j==6)
printf("*");
elseprintf("");
}
else
printf("*");
}
printf("\n");
}
}
法二:
#include"stdio.h"
main()
{
inti,j;
for(i=1;i<=4;i++)
{
if(i==1||i==4)
{
for(j=1;j<=6;j++)
{
printf("*");
}
printf("\n");
}
else
{
printf("*");
for(j=1;j<=4;j++)
{
printf("");
}
printf("*");
printf("\n");
}
}
}
5.4利用循环语句编程,输出三角形状的九九乘法表
#include"stdio.h"
main()
{
inti,j,k;
for(i=0;i<=9;i++)
{
if(i==0)
printf("*");
else
{
printf("%4d",i);
}
}
printf("\n");
for(i=1;i<=19;i++)
{
printf("_");
}
printf("\n");
for(i=1;i<=9;i++)
{
printf("%d",i);
for(j=1;j<=i;j++)
{
k=i*j;
printf("%4d",k);
}
printf("\n");
}
}
5.5:
用while语句或do-while语句编写程序,计算:
e=1+1/1!
+1/2!
+...+1/n!
.
#include
#include"math.h"
main()
{
floats=1.0,e=1.0,t;
inti=1;
while(fabs(t)>=1e-5)
{
s=s*i;
t=1/s;
e=e+1.0/s;
i++;
}
printf("%f\n",e);
printf("%d",i);
}
5.6:
如果一个数恰好等于它的所有因子(包括1但不包括自身)之和,则称之为“完数”,例如:
6的因子为1,2,3且6=1+2+3,所以6是完数,输出完数1+完数2+...=和值。
voidmain()
{
inti,j,sum,k;
for(i=2;i<=1000;i++)
{
sum=0;
for(j=1;j
{if(i%j==0)sum+=j;}
if(sum==i)
{printf("%d的因子:
\n",i);
k=0;
for(j=1;j
{
if(i%j==0&&k==0)printf("%d",j);
elseif(i%j==0)printf("+%d",j);
k++;
}
printf("=%d",sum);
printf("\n");
}
}
}
实验六
6.2:
将数组xx(有n个元素)的前K个元素(k若输入7和1234567,再输入5,则输出6712345.
#include"stdio.h"
main()
{
intn,k,xx[20];
inti,j,t;
printf("\nPleaseenteranumber");
scanf("%d",&n);
printf("\nPleaseenter%dnumbers:
",n);
for(i=0;iprintf("%\nPleaseenteranothernumber:
");
scanf("%d",&k);
for(i=0;i{
t=xx[0];
for(j=1;jxx[j-1]=xx[j];
xx[n-1]=t;
}
printf("\nAftermoving:
\n");
for(i=0;iprintf("\n");
}
6.3对a数组中n种商品价格进行分段统计,商品各段价格存到b数组中,其中:
价格为100到199元的个数存到b[1],价格为200到299元的个数存到b[2],价格为300到399的个数存到b[3],价格为400到499元的个数存到b[4],价格为500以上的个数存到b[5]中,例如:
a的数组为:
90,180,270,380,590,530,140,750,380,调用函数后,b中存放的数据为:
1,2,1,2,0,3
#include
main()
{
inti,a[100]={90,180,270,380,590,530,140,750,380},b[6];
for(i=0;i<6;i++)
b[i]=0;
for(i=0;i<9;i++)
{
switch(a[i]/100)
{
case0:
b[0]++;break;
case1:
b[1]++;break;
case2:
b[2]++;break;
case3:
b[3]++;break;
case4:
b[4]++;break;
default:
b[5]++;break;
}
}
printf("Theresultis:
");
for(i=0;i<6;i++)
printf("%d",b[i]);
printf("\n");
}
6.4编写程序,先读入10个整数,再把他们按从小到大的次序排列起来;最后再读入一个整数K,,并将K插入到该数列中,插入后数列仍然从小到大排列。
例如:
若输入:
6,3,42,23,35,71,98,67,56,38,最后再输入待插入数59,则输出为:
6,23,35,38,42,56,59,67,98
#include
main()
{
inti,j,t,p,q,s,n,a[11]={6,3,42,23,35,71,98,67,56,38};
for(i=0;i<10;i++)
{
for(j=i+1;j<10;j++)
if(a[i]>a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
printf("%d",a[i]);
}
printf("\ninputnumber:
\n");
scanf("%d",&n);
for(i=0;i<10;i++)
if(n{for(j=9;j>=i;j--)
a[j+1]=a[j];
break;
}
a[i]=n;
for(i=0;i<=10;i++)
printf("%d",a[i]);
printf("\n");
}
6.5统计字符串s在字符串str中出现的次数。
main()
{charstr1[255],str2[255];
intsum=0;
printf("请输入两个字符串!
\n");
gets(str1);
gets(str2);
inti=0,j=0;
while(str1[i]!
='\0')
{
while(str2[j]==str1[i+j]&&str2[j]!
='\0')
{j++;}
if(str2[j]=='\0')
{sum++;
j=0;
}
i++;
}
6.7:
a是一个M行N列的整数矩阵,编写程序求出此矩阵周边元素之和。
#defineM4
#defineN5
#include"stdio.h"
main()
{intaa[M][N]={{1,3,5,7,9},{2,9,9,9,4},{6,9,9,9,8},{1,3,5,7,0}};
inti,j,y,sum=0;
printf("Theoriginaldatais:
\n");
for(i=0;i{for(j=0;jprintf("\n");
}
for(i=0;isum+=aa[0][i]+aa[M-1][i];
for(i=1;isum+=aa[i][0]+aa[i][N-1];
printf("\nThesum:
%d\n",sum);
printf("\n");
}
实验七
7.2:
编写一个程序,将两个字符串连接起来,不要用strcat.
方法一
#include
voidmain()
{
constcharstr1[]={"Hello"};
constcharstr2[]={"everyone!
"};
charstr[255];
for(inti=0;str1[i]!
='\0';i++)
str[i]=str1[i];
for(intj=0;str2[j]!
='\0';j++)
str[i+j]=str2[j];
str[i+j]='\0';
printf("%s",str);
getchar();
}
方法二
#include"string.h"
#include"stdio.h"
main()
{
charstr1[50]="everyone!
";
charstr2[50]="hello";
strcpy(str2+strlen(str2),str1);
printf("%s",str2);
}
7.3:
写一个程序,能分别统计出从键盘上输入的字符串中小写字符的个数和数字字符的个数和其它字符的个数,输入字符串以!
作为结束标志
#include"stdio.h"
main()
{
intlower=0,digit=0,other=0,i=0;
chars[255];
while((s[i]=getchar())!
='!
')i++;
for(intj=0;s[j]!
='!
';j++)
{
if(s[j]<='z'&&s[j]>='a')++lower;
elseif(s[j]<='9'&&s[j]>='0')++digit;
else++other;
}
printf("小写字符:
%d\n数字字符:
%d\n其它字符:
%d\n",lower,digit,other);
getchar();
}
7.4:
设有一个字符串“Thisisaprogram”,请编程求字符“a”首次出现的位置
#include"stdio.h"
main()
{
inti,pos;
charstr[]="Thisisaprogram";
for(i=0;str[i]!
='\0';i++)
{
if(str[i]=='a'){pos=i;break;}
}
printf("%s\n",str);
printf("Thepositionis%d\n",pos);
}
7.5:
把一串密码译成明文,密码以字符@表示结束。
#include"stdio.h"
main()
{
inti,j,k=0;
chars[255];
while((s[k]=getchar())!
='@')k++;
for(j=0;s[j]!
='@';j++)
{
if(s[j]<='Z'&&s[j]>='A')
{s[j]+=32;
}
if(s[j]<='w'&&s[j]>='a')
s[j]+=3;
elseif(s[j]=='x'||s[j]=='y'||s[j]=='z')
s[j]-=23;
}
printf("译码后结果:
");
for(i=0;s[i]!
='@';i++)
printf("%c",s[i]);
printf("\n");
getchar();
}
7.6:
编写一个程序,实现对键盘输入的两个字符串进行比较,然后输出两个字符串中第一个不同ASC||码之差,例如:
输入的两个字符串分别为“computer”和“compare”,则输出为-20
#include"stdio.h"
main()
{
inti=0;
charstr1[255],str2[255];
printf("\nInputstring1:
");
scanf("%s",str1);
printf("\nInputstring2:
");
scanf("%s",str2);
while
(1)
{
if(str1[i]==str2[i])
{i++;
continue;
}
else
break;
}
printf("\n%d\n",str1[i]-str2[i]);
}