C语言程序设计课后习题答案_第1页
C语言程序设计课后习题答案_第2页
C语言程序设计课后习题答案_第3页
C语言程序设计课后习题答案_第4页
C语言程序设计课后习题答案_第5页
已阅读5页,还剩89页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

(完整版)C语言程序设计课后习题答案

编辑整理:

尊敬的读者朋友们:

这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对

文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望(院整版)c语言程序设计课后

习题答案)的内容能够给您的工作和学习带来便利。同时也真诚的希望收到您的建议和反馈,这将

是我们进步的源泉,前进的动力。

本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以

下为(完整版)c语言程序设计课后习题答案的全部内容。

C语言程序设计(第2版)课后习题答案

第一章

1O请参照本章例题,编写一个c程序,输出以下信息:

**************************

Verygood!

**************************

解:

#include<stdio.h>

voidmain()

(

printf("***************大**********”);

printf(u\n");

printf("Verygood!\n,J);

printf(u\n");

printf("**************************”);

)

2O编写一个C程序,输入a、b、c三个值,输出其中最大值.

解:

#include〈stdio。h)

voidmain()

(

inta,b,c,max;

printf(“请输入三个数a,b,c:\n");

scanf("%d,%d,%d”,&a,&b,&c);

max=a;

if(max<b)max=b;

if(max〈c)max=c;

printf("最大数为:%d",max);

}

第二章

1。假如我国国民生产总值的年增长率为10%,计算10年后我国国民生产总值与现在相比增长多

少百分比。计算公式为P=(1+r)7,r为年增长率;n为年数;P为与现在相比的百分比。

解:

#include<stdiooh>

#include(math,h)

voidmain()

(

doubleP,r=0o1,n=10;

P=pow((1+r),n);

printf("%lf\n",P);

)

3。请编程序将“China”译成密码,译码规律是用原来字母后面的第4个字母代替原来的字母。

例如,字母“A”后面第4个字母是“E”,“E”代替“A”。因此,“China”应译为“Glmre”。

请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为,C'、‘h'、'i'、

'n'二经过运算,使c2、c3、c4、c5分别变为G、''m'、'r''。并输

出.

解:

#incIude<stdio.h>

voidmain()

(

charc1='C,c2='h',c3='i',c4='n',c5二'a';

c1+=4;

c2+=4;

c3+=4;

c4+=4;

c5+=4;

printf("密码是%'%'%'%0%,\门”,d,c2,c3,c4,c5);

}

第三章

,

3o用下面的scanf函数输入数据,使"3,b=7,x=8。5,y=71c82,ck'A',c2=a'

问在键盘上如何输入?

解:

#incIude(stdiOoh>

voidmain()

(

inta,b;floatx,y;chard,c2;

scanf(ua=%d,b=%d",&a,&b);

scanf("x=%f,y=%e”,&x,&y);

scanf(Mc1=%c,c2=%c",&c1,&c2);

}

a=3,b=7

x=8.5,y=71o82

c1=A,c2=a

5。设圆半径尸1。5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。

用scanf输入数据,输出计算结果,输出时要求文字说明,取小数点后2位数字。请编程序。

解:

#include〈stdio。h>

voidmain()

(

floatr,h,C1,Sa,Sb,Va,Vb;

scanf(u%f,%f",&r,&h);

C1=2*3.14*r;

Sa=3o14*r*r;

Sb=4*Sa;

Va=4*3。14*r*r*r/3;

Vb=Sa*h;

printf(uC1=%o2f\n,J,C1);

uM

printf(Sa=%.2f\nSb=%o2f\nVa=%.2f\nVb=%.2f\n,Sa,Sb,Va,Vb);

}

6.输入一个华氏温度,要求输出摄氏温度。公式为c=5(F-32)/9,输出要求有文字说明,取位2

小数.

解:

#include<stdio.h)

voidmain()

(

floatF,c;

scanf("%f”,&F);

c=5*(F—32)/9;

printf(lic=%.2f",c);

)

7o编程序,用getchar函数读入两个字符给c1、c2,然后分别用putchar函数和printf函

数输出这两个字符。思考以下问题:

(1)变量c2应定义为字符型或整形?或二者皆可?

(2)要求输出c1和c2值的ASCII码,应如何处理?用putchar函数还是printf函数?

(3)整形变量与字符变量是否在任何情况下都可以互相代替?如:

charc1,c2;与intd,c2;是否无条件地等价?

解:

#include<stdio.h>

voidmain()

(

charc1,c2;

c1=getchar();

c2=getchar();

putchar(d);putchar('\n');putchar(c2);putchar('\n');

}

#include<stdiooh〉

voidmain()

(

charc1,c2;

c1=getchar();

c2=getchar();

printf(Mc1=%dc2=%d\n”,c1,c2);

printf(uc1=%cc2=%c\nn,c1,c2);

}

第四章

3o写出下面各逻辑表达式的值。设"3,b=4,c=5。

(1)a+b>c&&b=c

(2)a||b+c&&b~c

(3)!(a>b)&&!c|I1

(4)!(x=a)&&(y=b)&&0

(5)!(a+b)+c—1&&b+c/2

解:

(1)0

(2)1

(3)1

(4)0

(5)1

5o有3个整数a、b、c,由键盘输入,输出其中最大的数,请编程序。

解:

#include<stdiooh)

voidmain()

(

inta,b,c,temp,max;

printf(“请输入3个整数:“);

scanf(u%d,%d,%d”,&a,&b,&c);

temp=(a>b)?a:b;

max=(temp)c)?temp:c;

printf("3个整数的最大数是%d\n",max);

1

6,给一个百分制成绩,要求输出等级'A,JB'、'C'、'D'JE'.90分以上为'A',80〜

90分为'B',70~79分为'C',60分以下为‘D'o

解:

#include<stdio.h>

voidmain()

(

floatscore;

chargrade;

printf(“请输入学生成绩:”);

scanf(,&score);

whiIe(score>100|Iscore〈0)

{printf("\n输入有误,请重新输入:”);

scanf(“%f“,&score);

)

switch((int)(score/10))

(

case10:

case9:grade='A';break;

case8:grade='B';break;

case7:grade='C';break;

case6:grade='D';break;

case5:

case4:

case3:

case2:

case1:

case0:grade='E';break;

)

printf("成绩是%5.1f,相应的等级是%c.\n",score,grade);

}

7o给定一个不多于5位的正整数,要求:

(D求出它是几位数;

(2)分别输出每一位数字;

(3)按逆序输出各位数字。例如原数为321,应输出123.

解:

#include<stdiooh)

voidmain()

longintnum;

intindiv,ten,hundred,thousand,ten_thousand,place;/*分另ij代表个位、十位、百彳立、千位、

万位和位数*/

printf(“请输入一个整数(0-99999):");

scanf(u%ldn,&num);

if(num>9999)pIace=5;

eIseif(num)999)place=4;

eIseif(num>99)pIace=3;

eIseif(num)9)place=2;

eIsepIace=1;

printf("place=%d\n",pIace);

ten_thousand=num/10000;

thousand=num/1000%10;

hundred=num/100%10;

ten=num%100/10;

indiv=num%10;

switch(place)

{case5:printf("%d,%d,%d,%d,%d”,ten_thousand,

thousand,hundred,ten,indiv);

printf("\n反序数字为:");

printf("%d%d%d%d%d\n”,indiv,ten,hundred,thousand,ten_thousand);

break;

u

case4:printf(%d,%d,%d,%d“tthousand,hundred,ten,indiv);

printf("\n反序数字为:”);

printf("%d%d%d%d\n”,indiv,ten,hundred,thousand);

break;

case3:printf("%d,%d,%d",hundred,ten,indiv);

printf("\n反序数字为:");

printf(u%d%d%d\n",indiv,ten,hundred);

break;

case2:printf("%d,%d”,ten,indiv);

printf("\n反序数字为:”);

printf("%d%d\n",indiv,ten);

break;

case1:printf("%d”,indiv);

printf("\n反序数字为:”);

printf(M%d\n",indiv);

break;

)

)

8o企业发放的奖金根据企业的当年利润决定.当利润I低于或等于元时,奖金可提成10%;利

润大于元,小于元(〈IW)时,低于元的部分按10%提成,高于元的部分,可提成7.5%;利

润大于元,小于元(〈IW)时,低于元的部分仍按上述办法提成(下同),高于元的部分按5%提

成。利润大于元,小于元(<IW)时,高于元的部分按3%提成.利润大于元,小于元(<IW)

时,高于的部分按1。5%提成;利润大于元(I〉)时,超过元的部分按1%提成。从键盘输入当年

利润I,求应发放奖金总数。要求:

(1)用if语句编程序;(2)用switch语句编程序。

解:

(1)用if语句编程序。

#incIude<stdio.h)

voidmain()

longi;

floatbonus,bon1,bon2,bo4,bon6,bon10;

bon1-*0.1;/*利润为10万元时的奖金*/

bon2=bon1+*0o075;/*利润为20万元时的奖金*/

bon4=bon2+*0.05;/夫利润为40万元时的奖金*/

bon6=bon4+*0o03;/*利润为60万元时的奖金*/

bon10=bon6+*0.015;/*利润为100万元时的奖金*/

printf(“请输入利润i:

scanf("%Id",&i);

if(i(=)bonus=i*0.1;/*利润在10万元以内按0.1提成奖金*/

eIseif(i〈二)

bonus=bon1+(i—)*0。075;/%利润在10万至20万元时的奖金*/

eIseif(i〈=)

bonus=bon2+(—)*0。05;/*利润在20万至40万元时的奖金*/

elseif(i<=)

bonus=bon4+(i—)*0.03;/*利润在40万至60万元时的奖金*/

eIseif(i〈二)

bonus=bon6+(i-)*0。015;/*利润在60万至100万元时的奖金*/

eIse

bonus=bon10+(i-)*0.01;/*利润在100万元以上时的奖金*/

printf("奖金是%10.2f\n",bonus);

)

(2)用switch语句编程序。

#include(stdio.h)

voidmain()

(

longi;

floatbonus,bon1,bon2,bon4,bon6,bon10;

intc;

bon1=*0o1;

bon2=bon1+*0o075;

bon4=bon2+*0。05;

bon6=bon4+*0.03;

bon10=bon6+*0o015;

printf(“请输入利润i:");

scanf("%Id",&i);

c=i/;

if(c>10)c=10;

switch(c)

case0:bonus=i*0.1;break;

case1:bonus=bon1+(i~)*0。075;break;

case2:

case3:bonus=bon2+(i—)*0.05;break;

case4:

case5:bonus=bon4+(i-)*0o03;break;

case6:

case7:

case8:

case9:bonus=bon6+(i-)*0.015;break;

case10:bonus=bon10+(i-)*0.01;

)

printf("奖金是%10。2fn,bonus);

)

9o输入4个整数,要求按由小到大的顺序输出.

解:

#include<stdiooh〉

voidmain()

(

intt,a,b,c,d;

printf(“请输入4个整数:”);

scanf("%d,%d,%d,%d",&a,&b,&c,&d);

printf(u\na=%d,b=%d,c=%d,d=%d\nM,a,b,c,d);

if(a)b){t=a;a=b;b=t;}

if(a>c){t=a;a=c;c=t;}

if(a>d){t=a;a=d;d=t;}

if(b>c){t=a;b=c;c=t;}

if(b>d){t=b;b=d;d=t;}

if(c>d){t=c;c=d;d=t;}

printf("排序结果如下:\nM);

printf("%d,%d,%d,%d\n,>,a,b,c,d);

1

10.有4个圆塔,圆心分别为(2,2)、(-2,2)、(-2,-2)、(2,-2),圆半径为1。这4个

塔的高度分别为10m.塔以外无建筑物。今输入任一点的坐标,求该点的建筑高度(塔外的高度

为零)。

解:

#include〈stdio。h)

voidmain()

(

inth=10;

floatx1=2,y1=2,x2=—2,y2=2,x3=-2,y3=—2,x4=—2,y4=-2,x,y,d1,d2,d3,d4;

printf(“请输入一个点(x,y):);

scanf(M%f,%f”,&x,&y);

d1=(x-x1)*(x-x1)+(y—y1)*(y—y1);/*求该点到各中心点的距离*/

d2=(x—x2)*(x-x2)+(y+y2)*(y+y2);

d3=(x+x3)*(x+x3)+(y-y3)大(y—y3);

d4=(x+x4)*(x—x4)+(y+y4)*(y+y4);

if(d1)1&&d2>1&&d3)1&&d4>1)h=0;/*判断该点是否在塔外*/

printf("该点高度为%(八11".h);

1

11o求利2+-+。=。方程的解.

根据代数知识,应该有以下几种可能:

(1)a=0,不是二次方程,而是一次方程。

(2)h2-4ac=0,有两个相等的实根。

(3)b2-4ac>0,有两个不等的实根。

(4)b2-4ac<0,有两个共聊复根。

编写程序,运行时,分别给出不同的a,b,c值,相应于上面4种情况,分析输出结果。

解:

#include<stdiooh)

#include〈math,h〉

#include<stdIib.h〉

voidmain()

(

floata,b,c,disc,x1,x2,reaIpart,imagpart;

scanf(u%f,%f”,&a,&b,&c);

printf("Theequation");

if(fabs(a)<=1e—6)

printf("isnotaquadratic\n");

eIse

(

disc=b*b-4*a*c;

if(fabs(disc)〈=1e—6)printf("hastoweuaIroots:%8.4f\n",-b/(2

*a));

eIseif(fabs(disc)>1e-6)

{x1=(一b+sqrt(disc))/(2*a);

x2=(—b-sqrt(disc))/(2*a);

printf("hasdistinetreaIroots:%8。4fand%8.4f\nn,x1,x2);

I

eIse

(

realpart=-b/(2*a);

imagpart=sqrt(~disc)/(2*a);

printf("hascompIexroots:\n");

printf("%8.4f+%8.4fi\n",realpart,imagpart);

printf(u%8.4f—%8。4fi\n,5,reaIpart,imagpart);

}

)

}

第五章

1o求100〜200间的全部素数。

解:

#include<stdiOoh>

#incIude(math,h〉

voidmain()

(

intm.i,n=0;

doublek;

for(m=101;m<=200;m=m+2)

(

k=sqrt(m);

for(i=2;i<=k;i++)

if(m%i==0)break;

if(i>=k+1)

(

printf("%d",m);n=n+1;

}

if(n%10=0)printf(ll\nn);

)

printf("\n");

)

2.输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。

解:

#incIude〈stdio。h〉

voidmain()

charc;

inti=0,j=0,k=0,1=0;

while((c=getchar())!='\n)

(

if(c>='A'&&c仁'Z,I|c>='a'&&c仁'z')i++;

elseif(c>='O'&&c〈二'9')j++;

eIseif(c==,')k++;

eIseI++;

}

printf(“i=%d,j=%d,k=%d,l=%d\n”,i,j,k,I);

)

3.输出所有“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该本身。

例如:153是一个水仙花数,因为153二厂3+5-3+3-3。

解:

#include<stdio.h>

#incIude〈math。h>

voidmain()

(

inti,j,k,n;

printf(““水仙花”数是:”);

for(n=100;n<1000;n++)

i=n/100;

j=n/10—i*10;

k=n%10;

if(n=i*i*i+j*j*j+k*k*k)printf("%4d”,n);

)

printf("\n");

)

4o猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个.第

二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一

个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。

解:

#incIude(stdiooh)

voidmain()

(

intday,x1,x2;

day=9;

x2=1;

whiIe(day)0)

(

x1=(x2+1)*2;

x2=x1;

day----;

}

printf(Mtotal=%d\n",x1);

}

5o一球从100米高度自由下落,每次落地后返回原高度的一半,再落下。求它在第10次落

地时,共经过了多少米?第10次反弹多高?

解:

#include<stdiooh>

voidmain()

(

inti,n;doubleh=100,s=100;

scanf("%d",&n);

for(i=1;i(=n;i++)

(

h^=0o5;

if(i==1)continue;

s=2*h+s;

)

printf("h=%f,s=%f\n",h,s);

}

6o打印以下图案

*

***

*****

*******

*****

***

*

解:

#include<stdio.h)

#incIude(math.h>

voidmain()

{

inti,j,k;

for(i=0;i<=3;i++)

(

for(j=0;j<=2—i;j++)

printf("”);

for(k=0;k<=2*i;k++)

printf("*");

printf("\n");

)

for(i=0;i<=2;i++)

(

for(j=0;j<=i;j++)

printf("”);

for(k=0;k<=4—2*i;k++)

printf("*”);

printf("\n");

)

)

7.两个乒乓球队进行比赛,各出3人。甲队为A、B、C3人,乙队为X、Y、Z3人。已抽签

决定比赛名单。有人向队员打听比赛的名单,A说他不和X比,C说他不和X、Y比,请编程序

找出3三队选手的对阵名单。

解:

#include<stdio.h>

voidmain()

{

chari,j,k;/*i是A的对手,j是B的对手,k是C的对手*/

for(i='X,;i<='Z';i++)

for(j=fX';j<='Z,;j++)

(

if(i!=j)

for(k='X';k<='Z';k++)

{if(i!=k&&j!=k)

{

if(i!='X'&&k!='X'&&k!二'Z')printf(uorderisA—%c\tB-%c\tC

----%c\n”,i,j,k);

}

}

第六章

1.已知一个班10个学生的成绩,要求输入这10个学生的成绩,然后求出它们的平均成绩。

解:

#include<stido.h)

main()

(

floata[10],sum,avg;

inti;

sum=0.0;

printf(uPleaseinputthestudentsscore:");

for(i=0;i<10;i++)

{scanf("%f",&a[i]);

sum=sum+a[i];

)

avg=sum/10;

printf("Theaverageis:%f\nn,avg);

)

2o已知一个班10个学生的成绩,存放在一个一维数组中,要求找出其中成绩最高的学生的成

绩和该生的序号。

解:

#incIude<stdio.h)

voidmain()

intch[10];

inti,max=0,xh;

printf(“请输入10个学生的成绩:\n");

for(i=0;i<10;i++)

(

scanf(u%dn,&ch[i]);

if(ch[i]〉max)

{

max=ch[i];

xh=i;

}

}

printf(“成绩最高为:%d\n",max);

printf("该生的序号为:%d\n",xh);

)

3.有3个学生,上4门课,要求输入全部学生的各门课成绩,并分别求出每门课的平均成绩。

解:

#include<stdiooh)

#include<stdIiboh)

#defineRENSHU3

#defineKECHENG4

voidmain()

floatchengji[4][4];

inti,j;

printf(u\n请按人输入(一次输入一个人所有课程的成绩)成绩(%d人,%d门课

程):“,RENSHU,KECHENG);

for(i=0;i<RENSHU;i++)

(

printf("\n第%d人i+1);

for(j=0;j<KECHENG;j++)

scanf(u%fn,&chengji[i][j]);

}

for(j=O;j<KECHENG;j++)

{

chengji[RENSHU][j]=0;

for(i=0;i<RENSHU;i++)

chengji[RENSHU][j]+=chengji[i][j];

chengji[RENSHU][j]=chengji[RENSHU][j]/RENSHU;

)

for(i=0;i〈二RENSHU;i++)

{

for(j=O;j<KECHENG;j++)

printf("%8。2f”,chengji[i][j]);

printf(u\nn);

printf(u\n");

}

4o已知5个学生的4门课的成绩,要求求出每个学生的平均成绩,然后对平均成绩从高到低

将各学生的成绩记录排序。

解:

#include〈stdio.h〉

#incIude<stdIib.h〉

voidmain()

{

inta[5][4]={{94,78,87,76},(66,87,75,69),{100,98,89,77},{82,58,72,84},(82,

73,67.54}};

inti,j,sum;

floataverage,b[5],t;

for(i=0;i<5;i++)

(

sum=0;

for(j=0;j<4;j++)

(

sum=sum+a[i][j];

b[i]=sum/4.0;

}

u

printf(average%d=%4o2f\n",i+1fb[i]);

)

for(j=0;j<4;j++)

for(i=j+1;i〈5;i++)

if(b[i]>b[j])

(

t=b[i];

b[i]=b[j];

b[j]=t;

)

for(i=0;i<5;i++)

printf("%。2f\n”,b[i]);

}

5.将一个数组的值按逆序重新存放,例如,原来顺序为:8,6,5,4,10要求改为:1,4,

5,6,8o

解:

#include<stdiooh>

voidmain()

(

inti,a[10],temp;

for(i=0;i〈10;i++)

scanf("%d",&a[i]);

for(i=0;i<10;i++)

printf(u%4d",a[i]);

for(i=0;i<5;i++)

{

temp=a[i];

a[i]二a[9-i];

a[9-i]=temp;

}

for(i=0;i<10;i++)

printf("%4d”,a[i]);

printf(M\n");

)

6.有个15数按由小到大顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数组

中第几个元素的值.如果该数不在数组中,则输出“无此数”.

解:

#include<stdiooh)

voidmain()

(

inta[15]={14,13,12,11,10,9,8,7,6,5,4,3,2,1,0};

intstart,end,mid,i,find_fIag;

intx;

printf("inputx");

scanf("%d",&x);

start=0;

end=14;

find_flag=O;

do{

mid=(start+end)/2;

if(x==a[mid])

(

printf("Findthenumber,itisa[%d]”,mid);

break;

}

eIseif(x>a[mid])end=mid—1;

eIsestart=mid+1;

}whiIe(start(end);

)

7o输出以下图案:

*****

*****

*****

*****

*****

解:

#include<stdiooh)

voidmain()

inti,j,k;chara[5][5];

for(i=0;i<5;i++)

{

for(j=0;j<5;j++)

(

a[i][j]='*';

printf("%c",a[i][j]);

}

printf("\n”);

for(k=1;k<=i+1;k++)

printf();

}

printf("\n");

}

8.有一篇文章,共有3行文字,每行有个80字符.要求分别统计出其中英文大写字母、小写字

母、空格以及其它字符的个数。

解:

#incIude<stdio.h>

voidmain()

(

inti,j,upp,Iow,dig,spa,oth;

chartext[3][80];

upp=Iow=dig=spa=oth=0;

for(i=0;i<3;i++)

printf(u\nPleaseinputIine%d:\n",i+1);

gets(text[i]);

for(j=0;j<80&&text[i][j]!=>\0';J++)

(

if(text[i][j])='A,&&text[i][j]<=,Z')upp++;

eIseif(text[i][j]>=,a'&&text[i][j]<=,z)Iow++;

eIseif(text[i][j]>=,O'&&text[i][j]<='9')dig++;

elseif(text[i][j]==,9)spa++;

eIseoth++;

for(i=0;i<3;i++)

printf("%s\n”,text[i])

printf("uppercase:%d\n”,upp);

printf(ulowercase:%d\nJ,,Iow);

printf("digitcase:%d\n”,dig);

printf("spacecase:%d\n^^,spa);

printf("othercase:%d\n”,oth);

9。有一行电文,已按下面规律译成密码:

A——>Za-yz

B->Yb->y

C->Xc—〉x

■■■

即第1个字母变成第26个字母,第i个字母变成第(26T+1)个字母。非字母字符不变.假如

已知道密码是Umtorhs,要求编程序将密码译回原文,并输出密码却原文。

解:

#include〈stdio。h〉

voidmain()

(

inti;charstr1[100]tstr2[100];

gets(str1);

for(i=0;str1[i]!=、O';i++)

if(str1[i]>=65&&str1[i]<=90)str2[i]=155—str1[i];

eIseif(str1[i])=97&&str1[i]<=122)str2[i]=219-str1[i];

eIsestr2[i]=str1[i];

printf("%s\n%s\n”,str1,str2);

)

10.编一程序,将两个字符串连接起来,(1)用strcat函数;(2)不用strcat函数。

解:

(1)

#include(stdiooh)

voidmain()

inti,j;charstr1[100],str2[100]fstr3[201];

gets(str1);

gets(str2);

str3=strcat(str1,str2);

printf("%s\n%s\n%s\n”,str1,str2,str3);

}

(2)

#include<stdio.h〉

voidmain()

(

inti,j;charstr1[100],str2[100],str3[201];

gets(str1);

gets(str2);

for(i=0;str1[i]!=*\0,;i++)

str3[i]=str1[i];

for(j=0;str2[j]!='\0';j++)

str3[j+i]=str2[j];

printf("%s\n%s\n%s\n",str1,str2,str3);

}

第七章

1.写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并

输出结果两个整数由键盘输入。

解:

#include〈stdio.h〉

intmaxyueshu(intm,intn)

(

inti=1,t;

for(;i<=m&&i〈=n;i++)

{if(m%i=0&&n%i=二0)t=i;}

return(t);

)

intminbeishu(intm,intn)

(

intj;

if(m>=n)j=m;

eIsej=n;

for(;!(j%m==0&&j%n==0);j++);

returnj;

1

voidmain()

(

inta.b,max,min;

printf("entertwonumberis:");

scanf("%d,%d",&a,&b);

max=maxyueshu(a,b);

min=minbeishu(a,b);

<tn

printf(max=%dFmin=%d\n,max,min);

2.写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息。

解:

#include<stdio.h>

intpsushu(intm)

(

inti,t=1;

for(i=2;i<m/2&&t==1;i++)

if(m%i==0)t=0;

returnt;

}

voidmain()

(

inta.s;

printf("entersushuis'n");

scanf("%d",&a);

s=psushu(a);

if(s==1)printf(uaissushu\n,,);

eIseprintf("sisnotsushu\nn);

}

3o写一个函数,使给定的一个二维数组(3X3)转置,即行列互换。

解:

#include〈stdio。h>

intzhuangzhi(intb[3][3])

(

inti,j,t;

for(i=0;i<3;i++)

for(j=0;j>=i&&j<3—i;j++)

{t=b[i][j];b[i][j]=b[j][i];b[j][i]=t;}

)

voidmain()

(

inta[3][3];inti,j;

for(i=0;i<3;i++)

for(j=0;j<3;j++)

scanf("%d”,&a[i][j]);

for(i=0;i〈3;i++)

{

for(j=0;j<3;j++)

printf(%d1f,a[i][j]);

printf("\n");

}

zhuangzhi(a);

for(i=0;i<3;i++)

for(j=0;j<3;j++)

printf(%d",a[i][j]);

printf("\n”);

}

}

4.写一函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串.

解:

#include〈stdio。h)

voidmain()

(

charstr0[100];

gets(strO);

fanxu(strO);

puts(strO);

}

fanxu(charstr1[100])

(

inti.t,j;

charstr2[100];strcpy(str2,str1);

t=strIen(str1);

for(i=0,j=t—1;j>-1;i++,j—)

str1[i]=str2[j];

5o写一函数,将两个字符串连接。

解:

#incIude<stdiooh)

Iianjie(chara[100],b[100])

(

strcat(a,b);

}

voidmain()

(

charstr1[100],str2[100];

gets(str1);gets(str2);

Iianjie(str1,str2);

puts(str1);

1

6.写一函数,将两个字符串中的元音字母复制到另一个字符串,然后输出。

解:

#incIude(stdio.h)

fuzhi(chara[100],b[100])

(

inti,j=0;

for(i=0;a[i]!='\0';i++)

if(a[i]==971Ia[i]==101||a[i]==1051|a[i]==111|Ia[i]==117||a[i]==65IIa

[i]==69|Ia[i]==73|Ia[i]==85){b[j]=a[i];j++;}

}

voidmain()

(

charstr1[100],str2[100];

gets(str1);

fuzhi(str1,str2);

puts(str2);

)

7.写一函数,输入一个四位数字,要求输出这四个数字字符,但每个数字间空一个空格。如输

入2008,应输出“2_0_0_8”。

解:

#include〈stdio。h〉

voidinsert(charstr[])

(

inti;

for(i=strlen(str);i>0;i-)

(

str[2*i]=str[i];

str[2*i—1”';

)

printf(U\noutput:\n%s",str);

1

voidmain()

charstr[80];

printf(u\ninputfourdigits:");

scanf(u%s",str);

insert(str);

1

8.编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个

数,在主函数中输入字符串以及输出上述结果。

解:

#include<stdiooh)

chartongji(charstr0[100],intb[4)

(

inti;

for(i=0;strO[i]!=,\0';i++)

{

if(strO[i]>=65&&str0[i]<=90IIstr0[i]>=97&&str0[i]<=122)b[0]++;

elseif(strO[i]>=48&&strO[i]<=57)b[1]++;

eIseif(str0[i]==32)b[2]++;

eIseb[3]++;

}

)

voidmain()

charstr1[100];staticinti,a[4];

gets(str1);

tongji(str1,a);

printf(uzimuShuziKonggeQita\nM);

for(i=0;i<4;i++)

printf(li%—8d”,a[i]);

printf(u\n");

)

9.写一函数,输入一行字符,将此字符串中最长的单词输出。

解:

#include<stdiooh>

cechang(charstr1[100],word0[15])

(

inti=0,j=0,t=0;

staticcharwordl[15];

for(;str1[i]!='\0';i++)

{if(!(str1[i]>=97&astr1[i]<=122||str1[i]>=65&&str1[i]<=90))

{t=j;j=0;continue;}

wordl[j]=str1[i];j++;

if(j>=t)strcpy(wordO,wordl);

}

}

voidmain()

charstrO[100],longword[15];

gets(strO);

cechang(strO,longword);

puts(longword);

}

10o写一函数用“起泡法”对输入的10个字符按由小到大的顺序排列。

解:

#include<stdiooh>

intpaixu(intx[])

{

inti,j,t;

for(j=1;j<10;j++)

for(i=0;i<=9—j;i++)

if(x[i]>x[i+1]){t=x[i+l];x[i+1]=x[i];x[i]=t;)

)

voidmain()

(

inty[10];inti;

for(i=0;i<10;i++)

scanf("%cT,&y[i]);

paixu(y);

for(i=0;i<10;i++)

printf("%5d",y[i]);

printf("\n");

J

11.输入10个学生5门课的成绩,分别用函数实现下列功能:

①计算每个学生平均分;

②计算每门课的平均分;

③找出所有50个分数中最高的分数所对应的学生和课程;

解:

#include<stdio.h)

floatx1[10],x2[5];

floatpp(),cc(),find();

voidmain()

(

charname[10][20],cIass[5][20];

floatscore[10][5],max[5];inta[5],i,j;

for(i=0;i<10;i++)gets(name[i]);

for(j=0;j<5;j++)gets(class[j]);

for(i=0;i<10;i++)

for(j=0;j<5;j++)

scanf(u%fn,&score[i][j]);

pp(score);

cc(score);

find(score,max,a);

for(i=0;i<10;i++)

puts(name[i]);

printf("%.3f\n",x1[i]);

}

for(j=0;j<5;J++)

(

puts(class[j]);

printf(u%.3f\nn,x2[j]);

)

for(j=0;j<5;j++)

(

printf(3f\nJ,,max[j]);

puts(name[a[j]]);

puts(cIass[j]);

}

)

floatpp(floatf[10][5])

(

floatsum=0;inti,j;

for(i=0,sum=0;i<10;i++)

for(j=0;j<5;j++)

sum=sum+f[i][j];

x1[i]=sum/5;

}

)

fIoatcc(fIoaty[10][5])

{

floatsum=0;inti,j;

for(j=0;j<5;j++)

(

for(i=0;i<10;i++)

sum=sum+y[i][j];

x2[j]=sum/10;

1

1

fIoatfind(floatz[10][5],s[5];intt[5])

(

inti,j;

for(j=0,s[j]=z[0][j];j<5;j++)

for(i=0;i<10;i++)

if(s[j]<z){s[j]=z[i][j];t[j]=i;}

}

12o写几个函数:

①输入10个职工的姓名和职工号;

②按职工号由小到大顺序排序,姓名顺序也随之调整;

③要求输入一个职工号,用折半法找出该职工的姓名,从主函数输入要查找的职工号,输出该职

工姓名。

解:

#include<stdiooh〉

#defineN10

find(inta[],b[])

{

inti,j,s,t,c[N][2];

for(i=0;i<N;i++)

{c[

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论