二级C语言课本课后习题参考答案_第1页
二级C语言课本课后习题参考答案_第2页
二级C语言课本课后习题参考答案_第3页
二级C语言课本课后习题参考答案_第4页
二级C语言课本课后习题参考答案_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

二级C语言课本课后习题参考答案

第•章程序设计基本概念

(1)exe

(2)C,obj,exe

(3)顺序,选择,循环

***************EndofChapter1*******************

第二章C程序设计的初步知识

一、选择题

(1)B(2)D(3)B(4)A(5)C

(6^7)B(8)I^9)A(10)C

(11)B(12)B(13)A

二、填空题

(14)11,12

(15)4.2,4.2

(16){,}说明,执行

(17)关键字,用户标识符

(18)int,float,double

(19)floatal=ka2=l;

(20)存储单元

(21)3.5

(22)a*b/ca/c*ba*(b/c)

(23)10赋给变量s

(24)位,0或1

(25)8,255,11111111,0,0(X)00000

(26)32767,-32768,1000000000000000

(27)+,八,十六

三、上机改错题

(28)清指出以下C程序的错误所在

#includestdio.h;

main();/*mainfunction*/

floatr,s;/*/*risradius*/,/*sisareaofcircular*/*/

r=5.0;

s=3.14159*r*r;

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

※正确应为:

#include或#include"stdio.h"

main()/*mainfunction*/

{

floatr,s;/*risradius,sisareaofcircular*/

r=5.0;

s=3.14159*r*r;

printf("%f\n',,s);

(29)请指出以下C程序的错误所在

#includestdio.h

main/*mainfunction*/

(

floata,b,c,v;/*a,b,caresides,visvolumeofcube*/

a=2.0;b=3.0;c=4.0

v=a*b*c;

printf("%f\n”,v);

I

※正确应为:

#include'*stdio.h"

main()/*mainfunction*/

(

floata,b,c,v;/*a,b,caresides,visvolumeofcube*/

a=2.0;b=3.0;c=4.0;

v=a*b*c;

printf(M%f\n';v);

)

***************EndofChapter2*******************

第三章顺序结构

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

一、选择题

⑴C⑵C⑶D(4)C⑸D

(6)B(7)C(8)D(9)A(10)B

(11)C(12)D(13)D(14)A(15)C

(16)C(17)C(18)均不对,应为scanf("%6f”,&c)(18)C(20)B

二、填空题

(21)©-200,2500②i=-200,j=2500③i=-200,j=2500

(22)12,0,0

(23)语句块,{:}

(24);

(25)100V空格>25.81〈空格>1.89234/*可用一个或几个空格作为输入时的间隔符*/

10025.811.89234/*Tab(制表符)也可以作为输入时的间隔符*/

10025.811.89234/*CR(回车符)也可以作为输入时的间隔符*/

(26)x=127,x=uuu127,x=uuu177,x=uuuu7f,x=uuu127。

(27)x=127,x=127uuu,x=177uuu,x=7fuuuu,x=127u口u。

(28)a=513.789215,a=uu513.79,a=uu513.78921500,a=uu513.78921500

三、上机改错题

3.30编写程序,把560分钟换算成用小时和分钟表示,然后进行输出。

※程序如下※

#include<stdio.h>

main()

{

inthour,minute;

hour=560/60;

minute=560%60;

printf(',hour=%d,minute=%d'\hour,minute);

}

3.31编写程序,输入两个整数:1500和35(),求出它们的商数和余数并进行输出。

※程序如下※

#include<stdio.h>

main()

(

intnuml,num2,ij;/*定义变量i一商,j—余数*/

printf("inputnum1andnum2:\n");

scanf("%d%du,&numl,&num2);

i=numl/num2;

j=numl%num2;

primf("商=%d\n余数=%d”,i,j);

)

3.32编写程序,读入三个双精度数,求它们的平均值并保留此平均值小数点后一位数,对小数点后第二位

数进行四舍五入,最后输出结果。

※程序如下※

#include<stdio.h>

niain()

(

doublea,b,c,average=0;

printf("inputa,b,c(double):\n'*);

',

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

average=(a+b+c)/3;

averagc=average*10;

average=average+0.5;

average=(int)avcrage;

average=average/10;

printf("average=%lf",average);

3.33编写程序,读入三个整数给a,b,c,然后交换它们中的数,把a中原来的值给b,把b中原来的值给

c,把c中的值给a。

※程序如下※

#includc<stdio.h>

main()

inta,b,c,t=O;

printf("inputabc:\n");

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

t=c;c=b;b=a;a=t;

printf("a=%db=%dc=%d",a,b,c);

}

***************EndofChapter3*******************

第四章选择结构

一、选择题

(1)A(2)A(3)A(4)D(5)C

(6)A(7)B(8)均错(9)D(1())A

二、填空题

(II)非零,零

(12)<或<=、>或>=、==、!=

(13)逻辑非、逻辑与、逻辑或

(14)!、<或<=、>或>=、==、!=、&&、II

(15)!

(16)a==bIIa4或x>4IIx<-4

(17)1

(18)x>0?0:1,1

(19)a=3,b=2,c=2

(20)*#

三、编程题

4.21当a>0时,请将以卜语句改写成switch语句。

if(a<30)m=l;

elseif(a<40)m=2;

elseif(a<50)m=3;

elseif(a<60)m=4;

elsem=5;

※程序如下※

#includc<stdio.h>

main()

{

inta;

printf("Entera:\n");

scanf("%d",&a);

switch(a/10)

(

case0:

case1:

case2:printf("in=lu);break;

case3:printf("m=2n);break;

case4:printf("m=3n);break;

case5:printf("m=4n);break;

default:printf("m=5");

}

1

4.22编写程序,输入一位学生的生日(年:yO、月:mO、日:dO);并输入当前的日期(年:yl、月:ml、

日:(11);输出该生的实足年龄。

※程序如下※

#include<stdio.h>

main()

(

intyO,yl,mO,m1,dO,d1,age=O;

printf("YourBirthday(yyyy-mm-dd):\n");

scanf(n%d-%d-%d",&yO,&mO,&dO);

printf("CuiTentDate(yyyy-mm-dd):\n");

scanf("%d-%d-%d”,&y1,&m1,&d1);

if(d1BR>if(m1BR>age=y1-yO;

printf("\nAge=%d",age);

}

4.23编写程序,输入一个整数,打印出它是奇数还是偶数。

※程序如下※

#include<stdio.h>

niain()

(

inti;

printf("inputainteger:\n");

scanf("%dn,&i);

if(i%2=0)/*条件判断*/

printf("%disaeven",i);

else

printf("%disaoddn,i);

4.24编写程序,输入a、b、c三个数,打印出最大者。

※程序如下※

#include<stdio.h>

main()

(

inta,b,c,max=0;

prinlf("input(int)abandc:\n'*);

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

max=a;

if(maxBRmax=,"b;">if(maxBRmax="c;n>printf("max=%d",max);

}

4.25有•函数:

编写一程序,要求输入x的值,输出y的值。分别

(1)不嵌套的if语句(2)嵌套的if语句

(3)if_else语句(4)switch语句

※程序如下※

源程序一:(1)不嵌套的if语句

#include<stdio.h>

main()

(

floatx;

printfC4nputx:\n");

scanf('r%f',&x);

if(x>-5&&x<0)

printf(,,y=%f,,x);

if(x==0)

printf(',y=%f',x-l);

if(x>O&&x<IO)

pnntf("y=%f',x+l);

if(x<=-5llx>=10)

printf("inputerror");

}

源程序二:(2)嵌套的if语句

#includc<stdio.h>

main()

(

floatx;

printf("inputx:\n");

scanf(n%r,&x);

if(x>-5&&x<10)

(

if(x==0)printfC'y=%r,x-l);

if(x<0)printf(Hy=%r,x);

if(x>0)printf("y=%f',x+l);

)

if(x<=-5llx>=10)

prinlf("inpu【error");

)

源程序三:(3)if_else语句

#include<stdio.h>

main()

(

floatx;

printf(r,inputx:\n");

scanf(H%f,,&x);

if(x>-5&&x<10)

if(x<0)

printf(Hy=%r,x-l);

elseif(x==0)

printf(',y=%f,,x);

else

printf(My=%f',x+1);

else

printf("inputerror1');

)

源程序四:(4)switch语句

#include<stdio.h>

main()

(

intflag;

floatx;

printfC'Enterx:\n");

scanf(H%f,,&x);

if(x>-5&&x<0)flag=-l;

if(x==0)flag=0;

if(x>0&&x<10)flag=l;

switch(flag)

(

case-1:printf(ny=%f',x);break;

case0:printf("y=%f\x-l);break;

case1:printf("y=%f',x+l);break;

)

}

***************EndofChapter4*******************

第五章循环结构

一、选择题

(1)D(2)C(3)B(4)C(5)C

(6)B(7)D(8)A(9)D(10)D

二、填空题

(11)5,4,6

(12)有错

(13)-1

(14)11

(15)d=1.0,k++.k<=n

(16)x>=0,x

三、编程题

5.17编写程序,求1—3+5—7+...-99+101的值。

※程序如下※

#include<stdio.h>

main()

{

inti,sum=0,s=l;

for(i=l;i<=101;i+=2)

(

sum=suin+i*s;

s=-s;/*控制符号交替变换*/

)

printf(',sum=%d,,,sum);

5.18编写程序,求e的值,e=1+1/1!+l/2!+l/3!+l/4!+...+l/n!

(1)用for循环,计算前50项

(2)用while循环,要求直至最后一项的值小于le-4«

※程序如下※

源程序一:(1)用for循环实现

#includc<stdio.h>

main()

{

inti,n;

doublesum=l,t=l;

prinlf("inputn:\n");

scanf("%d",&n);

for(i=l;i<=n;i++)

(

t=t*i;/*实现阶乘*/

sum=sum+l/t;

}

printf("e=%lf",sum);

)

源程序二:(2)用while循环实现

#includc<stdio.h>

main()

inti;

doubelsum=l,t=l;

while(fabs(1.0/t)>le-4)/*****fabs求浮点型数据的绝对值*/

(

t=t*i;

sum=sum+l/t;

i++;

}

prinlf("e=%lf',sum);

)

5.19编写程序,输出从公元1000年至2000年所有闰年的年号每输出3个年号换一行。判断公元年是否

闰年的条件是:

(1)公元年数如能被4整除,而不能被100整除,则是闰年。

(2)公元年数能被400整除也是闰年。

※程序如下※

#include<stdio.h>

main()

(

inti,j=0;

for(i=1000;i<=2000;i++)

(

if((i%4==0)&&(i%100!=0)ll(i%400==0))/*判断是否是闰年的条件*/

{

printf(H&dn,i);

j++;

if(j%3=0)/*控制换行*/

printf("\n");

5.20编写程序,打印以卜.图形:

*

***

*****

*******

*****

***

*

※程序如下※

#include<stdio.h>

#include<math.h>

main()

{

inti,j;

for(i=l;i<=7;i++)/*控制行数*/

(

for(j=l;jv=7;j++)/*控制星数*/

(

if((j<=abs(4-i))ll(j>7-abs(4-i)))

printf("n);

else

1

printfCAn");

)

)***************EndofChapter5*

第六章字符型数据

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

一、选择题

(1)B(2)D(3)A(4)A(5)B

(6)D(7)D(8)B(9)A(10)A

(ll)B(c)

二、填空题

(12)-1

(13)1

(14)ctype.h

(15)0

(16)10A20B30C40D

(17)7.29101.298/ABZ(7.29/101.298/AB/)

(18)A7.29BI01.298/

(19)AUUUZBUHUZCZ

三、编程题

6.19请编写程序,输入一行字符(用何车结束),输出每个字符以及与之对应的ASCII代码值,每行输出

三队.

※程序如下※

#include<stdio.h>

main()

(

inti=0;

charch;

while((ch=gelchar())!='\n')

pnnlf(H%4c%4d",ch,ch);

i++;

if(i%3=0)

printfCXn'1);

}

)

6.20请编写程序,输入一行数字字符(用EOF结束),每个数字字符的前后都有空格。请编程,把这一行

中的数字转换成•个整数。例如,若输入:

2483(代表Enter键)

则输出整数:2483

※程序如下※

#include<stdio.h>

main()

(

charch;

while((ch=getchar())!=EOF)

{

if(ch=='*)

continue;

else

printf(,,%c,',ch);

}

)

6.21清编写程序统计输入的行数,输入用EOF结束输入。

※程序如下※

#includc<stdio.h>

main()

|

charch;

inti=0;

while((ch=getchar())!=EOF)

(

if(ch=='\n')i++;

)

6.22请编写程序统计输入的一行中小写字母的个数。

※程序如下※

#includc<stdio.h>

main()

inti=0;

charch;

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

(

if((ch>='a')&&(ch<=,z,))

i++;

}

printf("%d”,i);

I

6.23请编写输出以卜.图案的程序,图案的行数由输入的值确定。

A

BBB

CCCCC

DDDDDDD

EEEEEEEEEEE

※程序如卜※

#include<stdio.h>

main()

inti,j,k,n;

printf("Entern(integer):\n");

scanf(n%d",&n);

for(i=l;i<=n;i++)

for(j=n;j>i;j-)

prinlf(u*');

for(k=1;k<=2*i-l;k++)

printfC%cH,64+i);

printf("\n");

1

***************EndofChapter6*******************

第七章函数

一、选择题

(1)C(2)C(3)B(4)C(5)A

(6)Df7)A

二、填空题

(8)12

(9)9.000000

(10)4

(ll)n=l,s

(12)z=l;i<=y,z=z*x

(13)l,s*i,0,f(k)

三、程序设计和编程题

7.14以下fun函数用以判断n是否是索数,fun函数中有逻辑错,请调试改正。

fun(intn)

(

intk,yes;

for(k=2;k<=n/2;k++)

if(n%k==O)yes=O;

yes=l;

I

※正确答案是:

fun(intn)

(

intk,yes=l;

for(k=2;k<=n/2;k++)

if(n%k==O)returnyes=O;

returnyes;

}

main()

(

intn,yes;

printf("Entern(int):\n");

scanf("%du,&n);

yes=fun(n);

if(yes==1)printf("%disaprime",n);

elseprintf('*%disnotaprime",n);

7.15编写函数immymod(inta,intb)用以求a被b除之后的余数。

※程序如下※

#includc<stdio.h>

intmymod(inta,intb)

(

intremainder;

remaindcr=a%b;

returnremainder;

(

main()

{

inta,b;

printf("Enterab(int):\n");

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

prinlf("余数二%d",mymod(a,b));

7.16编写程序求:1-1/2+1/3-1/4+1/5-1/6+1Z7-...1/n

※程序如下※

#include<stdio.h>

main()

(

intn:

floata;

floatsum(intn);

scanf("%dn,&n);

a=sum(n);

printf("%10.53a);

)

floatsum(intn)

(

floats=0;

int

for(i=l;i<=n;i++)

{s=s+l/i*t;

t=-t;

)

returns;

7.17编写函数,根据整型形参m的值,计算如下公式的值。

t=1—1/(2x2)-1/(3xxm)

例如:若m=5,则应输出0.536389。

X程序如下※

#include<stdio.h>

main()

(

floatt=1;

floatf2(int);

inti,m;

scanf("%d",&m);

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

t=t-f2(i);

pnntf("t=%f',t);

floatf2(in(m)

floats;

s=1.0/(m*m);

returns;

)

7.18编写函数用以求表达式x2-5x+4,x作为参数传给函数,调用此函数求:

y1=22-5*2+4

y2=(x+15)2-5*(x+l5)+4

y3=sin2x-5*sinx+4

※程序如下※

#include<stdio.h>

#include<math.h>

floatfun(floatx)

(

floaty;

y=pow(x,2)-5*x+4;

returny;

1

main()

(

floatx,yl,y2,y3;

clrscr();

printfC'Enterx:\n");

scanf(H%f,,&x);

yl=fun(2);

y2=fun((x+15));

y3=fun(sin(x));

printf("y1=%f\ny2=%f\ny3=%f\n",y1,y2,y3);

***************EndofChapter7*******************

第八章指针

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

一、选择题

⑴A⑵B(3)B(4)C(5)B

(6)B(7)C(8)D+(9)B(10)C

(11)C(12)C

二、填空题

(13)110

(14)7,+1

(15)char*p,p=&ch,scanf("%c”,p),*p='a

printf("%o”,*p)

(16)s=p+4,s=s-2,50,*(s+1),2,10,20,30,40,50

三、编程题

8.17请编写函数,其功能是对传送过来的两个浮点数求出和值与差值,并通过形参传送回调用函数。

※程序如下※

fun(*x,*y)

{floatzl,z2;

zl=*x+*y;

z2=*x-*y;

*x=zl;*y=z2;

)

inain()

{float*a,*b,A,B;

a=&A;b=&B;

printf("inputtworealnumbers:");

scanf("%f%f',a,b);

printf("a,b=%f,%f\n",*a,*b);

printf("beforccallfunction:\n");

printf(na=%fb=%f\n",*a,*b);

fun(a,b);

printf("aftercallfunction:\n");

printf("a=%fb=%f\nM,*a,*b);

getch();

(

8.18请编写函数,对传送过来的三个数选出最大和最小数,并通过形参传回调用函数。

※程序如下※

fun(int*a,int*b,int*c)

{inimax,min;

max=*a;min=*a;

if(*b>*a)max=*b;

if(*b<*a)min=*b;

if(*c>max)max=*c;

if(*c<min)min=*c;

*a=max;*c=min;

main()

{inta,b,c;

printf("Inputa,b,c:");

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

printf("beforecallfunction:\n");

printf(na=%db=%dc=%d\nH,a,b,c);

fun(&a,&b,&c);

printf(Haftercallfunction:\n");

printf("max=%dmin=%d\nn,a,c);

getch();

}***************EndofChapter8*******************

第九章数组

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

一、选择题

(1)D(2)A(3)A(4)A(5)C

(6)A(7)B(8)D(9)C(10)C

(11)C(12)D(13)D(14)A(15)A

(16)A(17)C(18)C

二、填空题

(19)9,0

(20)6

(21)12

(22)3

(23)2721

(24)-850,2,0

(25)k=p,k

(26)(c=getchar()),'c'-65

三、编程题

9.27输入一行数字字符,请用数组元素作为计数器来统计每个数字字符的个数.用下标为0元素统计字符“1”

的个数,卜标为1的元素统计字符”2”的个数,…

※程序如下※

#include<ctype.h>

main()

{char*s,a[100];

inti,k=0,num|l0]={0};

s=a;

printf(nInputannumberstring:'*);

scanf(H%sM,s);

while(*s!=,\0')

{if(isdigit(*s)&&(*s>=(0,))

num[*s-48]++;

s++;

)

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

printf(',%2d->%3d\n",i,num[i]);

printf("0—>%3d\n,',num[9]);

9.28编写函数,对具有10个整数的数组进行如下操作:从第n个元素开始直到最后•个元素,依次向前移动

个位置.输出移动后的结果.

※程序如下※

move(inta|l()],intn)

{inti;

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

a[i-l]=a[i];

a[9]=0;

}

main()

{intx[10],i,n;

printf("input10number:");

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

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

printf("\ninputtheN:");

scanf(H%d",&n);

move(x,n);

printf(n\nAftermovetnememberlistis:\n");

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

printf("%dH,x[i]);

getch();

9.29编写函数把数组中所有奇数放在另一个数组中返回.

※程序如下※

main()

{inta[100]={0),b[100]={0),i,j;

printf(M\nInputthenumberlist(endwith32767):\n");

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

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

if(a[i]==32767)break;

)

i-;

odd(a,b,i);

printf("\narrayB:\n");

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

if(b|i]!=O)printf(n%d",b[i]);

elsebreak;

getch();

)

odd(inta[100],intb[100],intn)

{intij=0;

for(i=0;i<=n:i++)

if(a[i]%2!=0)b[j++]=a[i];

)-------------------------------------------------------------------------------------------------------

9.30编写函数对字符数组中的输入字母,按由大到小的字母顺序进行排序。

※程序如下※

#include<string.h>

sort(chars|]jntn)

{int

for(j=0;j<(n-l);j++)

{p=j;

for(i=j+l;i<n;i++)

if(s[p]<s[i])p=i;

{t=s[j];s[j]=s[p];s[p]=t;}

)

}

main()

{char*s;

intn;

printf(M\nInputs:");

scanf("%s'\s);

n=strlen(s);

sort(s,n);

printf("\nthesortedstringis%s\n'*,s);

getch();

9.31输入若干有序数放在数组中。然后输入一个数,插入到此有序数列中,插入后,数组中的数仍然有

序。请对以下三种情况运行你的程序,以便验证你的程序是否正确。

(I)插在最前(2)插在最后(3)插在中间

※程序如下※

main()

{inti[100],n,*p,i=l;

a[0]=-32768;p=a+l;

printf("\nlnputannumberlist(endwith32767):\nu);

do

{scanf("%d”,&a[i|);

if(a[i]>=a[i-l])i++;

)

while(a[i-l]!=32767);

printfC'Xnlnputinsertednumber:");

scanf("%d",&n);

P=a;

insert(p,n);

p=a+1;

printf(n\nOutputarraya:\n");

do

if(*p!=32767)printf("%dH,*p++);

while(*p!=32767);

getch();

insert(int*q,intn)

{int*k;

k=q;

while(*q!=32767)q++;

*(q+l)=*q;

while(q>k)

{if(n>*(q-l)){*q=n;break;}

else{q—;*(q+l)=*q;)

9.32编写函数把任意十进制整数转换成二进制数.提示:把十进制数不断除2除,余数放在一个一维数组中,

直到商数为零.在主函数中进行输出,要求不得按逆序输出.

※程序如下※

main()

{intn,a[16]={0},*p;

printf("\nlnputannumber:");

scanf("%d'\&n);

p=a;

change(a,n,p);

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

while(p<=a+15)

printf(',%d,,,*p++);

change(x,n,p)

intx[16],n,*p;

(

p=x+15;*p=0;

if(n==O)return(O);

while(n!=O)

{*p=n%2;

P-;

n/=2;

)

)

9.33编写函数调用随机函数产生。到19之间的随机数,在数组中存入15个互不重复的整数。要求在主函

数中输出结果。若已定义x为血类型,调用随机函数步骤如卜:

#include<stdio.h>

niain()

{inta[15],*p,i;

p=a;

frandni(a);

printf("\nThcarrayais:");

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

printf("%d”产p++);

frandm(a[]);

{intk=O,i,x,*q;

for(i=0;i<15;i++)a[i]=20;

while(k<15)

{x=rand()%20;

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

if(a[i]=x)continue;

elsea[k++]=x;

9.34求任意方阵每行、每列、两对角线上元素之和。

※程序如下※

#defineN20

main()

{inta[N][N],x[N]={0},y[N]={0},i,j,m,sum=0;

printf(n\nInputN(<20)

scanf("%d",&m);

printf("\nInputarraya[%d][%d]:\n",m,m);

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

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

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

x[i]+=a[i]U];yU]+=a[i][jl;

if(i==^j)sum+=a[i][i|;

)

printf("\nAftercompute:\n");

for(i=0;ivm;i++)

{for(j=0;jvm;j++)

printf("%5d”,a[i皿);

printf(n%5d\n",x[i]);

)

for(i=0;ivm;i++)

printf(n%5dn,y[i]);

printf(H\n\nSum=%d\n,,,sum);

getch();

)

9.35求两个矩阵的和

#defineN20

main()

{inta[N][N],b[N][N],c[N][N],m,n,i,j;

printf("\nInputm,n(<20)

scanf("%d%d",&m,&n);

printf("\nInputarrayA[%d][%d]:\n",m,n);

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

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

{scanf(H%dn,&a[i][j]);

)

printf("\nInputarrayB[%d][%d]:\n",m,n);

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

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

{scanf('*%d",&b[i][jl);c[i]U]=a[i]U]+b[i][j];

)

printf("\nAftercomputearrayC:\n");

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

{for(j=O;j<n;j++)

printf("%5d”,cmUD;

printf("\n");

)

getch();

9.36编写函数打印出以卜.形式的乘法九九表。

**AMULTIPLICATIONTABLE**

(1)(2)(3)(4)(5)(6)(7)(8)(9)

(1)123456789

(2)24681012141618

(3)369121518212427

(4)4812162024283236

(5)51015202530354045

(6)61218243036424854

(7)71421283542495663

(8)81624325048566472

(9)91827364554637281

※程序如下※

inain()

{inti,j,k;

printf(H\n**AMULTIPLICATIONTABLE**\n");

printfC");

for(i=l;i<10;i++)printf("(%3d),,,i);

printf(H\n----------------------------------------\n'*);

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

{for(j=0;j<10;j++)

if(j==O)printf("(%d)",i);

elseprintf(u%5d",i*j);

printf("\n");

)

printf("\n----------------------------------------\nH);

getch();

)---------------------------------------------------------------------------------------------------------

9.37调用随机函数为5x4的矩阵置100以内的整数,输出该矩阵,求出每行元素之和并把和值最大的那

一行与第一行上的元素对调。若己定义x为int类型,调用随机

函数步骤如F:

#inciude"stdio.h"

include"stdlib.h"

main()

{staticintm[5][5]={0},i,j;

intk=0;

printf(u\nBcfore:\nu);

for(i=0;iv5;i++)

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

{m[i][j]=rand()%100;

printf(u%4d,',m[i]|j]);

if((++k)%5==0)printf(n\n");)

printf("\nAfter:\nn);

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

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

{k=m[i][j];m[i]|j]=m[j][i];m[j][i]=k;}

k=0;

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

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

{printf("%4d",m[i][j]);

if((++k)%5==0)printf(,'\nn);)

printf("\nProgramend!\n");

9.38调用随机函数为5x5的矩阵置100以内的整数,输出该矩阵,然后逆置该矩阵。即将第一列的元素

放在第一行上、第二列的元素放在第二行上、其它依次类推。

※程序如下※

#include"stdio.h"

main()

{intm[5][5]={0),ij;

intk=0;

printf("\nBefore:\nn);

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

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

{m[i]|j]=rand()%100;

printfC%4d",m|il[j]);

if((++k)%5=0)printf(n\n");}

printf("\nAfter:\nn);

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

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

{k=m[i][j];m[i][j]=m|j][i];m[j][i]=k;

printf(,'%4d,',m[i][j]);

if((++k)%5==0)printf(u\nH);}

k=0;

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

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

{printf(,'%4d",m[i][j]);

if((++k)%5==0)printf("\nH);}

printf("\nProgramend!\n");

getch();

)

***************EndofChapter9*******************

第十章字符串

一、选择题

(1)B2)B3)C4)B5)C

(6)A7)C8)A9)C10)C

二、填空题

(ll)GFEDCB

(12)YXZA

(13)SO

(14)10

(15)11iss!

(16)strlen(str),j

(17)3

(18)goodgood!

三、编程题

10.19请编写函数mygets和myputs,其功能分别与gets和puts相同,函数中用getchar和putchar读入和输

出字符。

※程序如卜※

#include

voidmygets(char*p)

{

charch;

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

*(P++)=ch;

*p=0;

(

voidmyputs(char*p)

(

charch;

while(*p!=W)

putchar(*(p++));

)

main()

(

char*s;

clrscr();

mygets(s);

myputs(s);

(

10.20请编写函数,判断一字符串是否是回文。若是回文函数返回值为1:否则返回值为0。回文是顺读和

倒读都一样的字符串。

※程序如下※

#include

inain()

chara[200],*p;

inti,j,flag=l;

clrscr();

scanf(,'%s,,,a);

p=a;

j=strlen(a);

for(i=0;i<=j/2;i++,j-)

if(*(p+i)!=*(p+j-l))

(

flag=O;

break;

}

if(flag)

prinlf(“Yes");

else

printfCNo1');

10.21请编写函数,删除字符串中指定位置上的字符。删除成功函数返回被删字符:否则返回空值。

※程序如下※

#include

#include

del(char*p,intn)

(

inti;

charch;

if(n<=strlen(p))

ch=*(p+n-l);

else

ch='O';

for(i=n-l;*(p+i)!=AO,;i++)

*(p+i)=*(p+i+l);

returnch;

}

main()

(

intn;

char*s;

clrscr();

printf(M****Thestringis****\nH);

gets(s);

printf("Entern(0-%d)\nM,strlen(s));

scanf("%d",&n);

printf(H****Thedeletedcharis****\nH);

printf(M%c",del(s,n));

getch();

}

**************jofChapter[0*******************

第十•章对函数的进一步讨论

一、选择题

(1)D(2)B(3)A(4)C

二、填空题

(5)IJKLEFGHABCD

(6)7

⑺8

(8)*(S+J),i+l,i

⑼17

(10)(*fun)(),(*fun)(a+i*h),mypoly

三、编程题

11.11编写程序outch,程序读入一行字符,根据命令行中的参数进行不同的输出。若有以下命令行:

outch-2程序对读入的一行字符输出最后两个字符。若有以卜.命令行:outch+6程序对所读入的一行字符

输出开头6个字符。若命令行中没有参数,则隐含规定输出最后10个字符。为简单起见,命令行中的参数

中只包含一位数字。

※程序如下※

#include<string.h>

main(intargc,char*argv[])

{char*str,*p;

inti,k;

str=(char*)malloc(50);

printf("\nlnputatextline(>10letters):\n'*);

scanf("%s'\str);

p=argv[l];

k=strlen(str);

if(argc==2)

{if(*p==v)

for(i=0;i<(*(p+1)-'0');i++)printf(n%c",*(str+i));

elseif(*p=--')

for(i=k-*(p+l)+'O';i<=k;i++)

printf("%c'\*(str+i));}

elsefor(i=k-10;i<k;i++)printf("%cn,*(str+i));

getch();

}

11.12请写递归函数,把输入的一个整数转换成二进制数输出。

※程序如下※

#include

dec_bin(intn,inta[])

(

staticinti=0;

if(n==0lln==l)

{

a[i]=n;

returni;

)

else

(

a[i++]=n%2;

returndec_bin(n/2,a);

main()

{

inti,j,n,a[64];

printf("Entern(integer)\n");

scanf(n%d",&n);

j=dec_bin(n,a);

fbr(i=j;i>=O;i—)

printf("%d';a[i]);

11.13请用递归算法,求l+2+3+...n,n由键盘输入。

※程序如下※

fun(intn)

(

intsum;

if(n==l)

return1;

else

(

sum=n+fun(n-l);

returnsum;

1

}

main()

(

intn,sum;

clrscr();

printf(MEntern(1+2+3+...+n):\nn);

scanf(n%d",&n);

sum=fun(n);

printf("sum=%d",suni);

11.14请用递归函数,求裴波拉契级数,求n阶裴波拉契级数的公式如卜。

※程序如下※

#include

fac(intn)

(

longt;

if(n==Olln==l)

return1;

else

(

t=fac(n-1)+fac(n-2);

returnt;

)

)

main()

{

intn;

printf("Entern:\n");

scanf(H%dn,&n);

printf(M%ld-,fac(n));

I

***************EndofChapter]]*******************

第十二章C语言中用户标识符的作用域和存储类

•、选择题

(1)C(2)B(3)A(4)C(5)D

(6^7—8)C

二、选择题

⑼2,5,13,2,-2

(10)2468

***************EndofChapter[2*******************

第十三章编译预处理和动态存储分配

一、选择题

(1)A(2)C(3)B(4)C(5)D

(6)DC7)D

二、选择题

(8)ar=9ar=9ar=l1

(9)int*,s,*b

三、选择题

13.10编写出一个宏定义MYALPHA(C),用以判断C是否是字母字符,若是得1,否则得0。

※程序如下※

#include

#include

#dcfincMYALPHA(C)isalpha(C)?l:0

main()

{

charch;

clrscr();

ch=getchar();

if(MYALPHA(ch))

printf(H%cisaalpha",ch);

else

printf(M%cisnotaalpha",ch);

13.11清写出一个宏定义swap。,x,y)用以交换t类型的两个参数。提示:用复合语句的形式。

※程序如下※

#include

#defineswap(t,x,y){t=x;x=y;y=t;}

main()

inta,b,t;

clrscr();

printf("Enteraandb:\n");

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

swap(t,a,b);

printf("a=%d\nb=%d",a,b);

}

13.12请编写程序,利用malloc函数开辟动态存储单元,存放输入的三个整数。然后按从小到大的顺序输

出这三个数。

※程序如下※

#include

#include

voidmain()

(

int*pData=(int*)malloc(sizeof(int)*3);

intt;

printf("Pleaseinputthreeintegralnumber\n");

scanf("%d%d%dn,pData,pData+1,pData+2);

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

for(intj=i+1;j<3;j++)

if(*(pData+i)>*(pData+j))

(

t=*(pData+j);

*(pData+j)=*(pData+i);

*(pData+i)=t;

prinlf("%d\t%d\t%d\n',,*pData,*(pData+l),*(pData+2));

)

***************EndofChapter[3*******************

第十四章结构体、共用体和用户定义类型

一、选择题

(1)D(2)D(3)D(4)A(5)C

(6)C(7)C(8)B

二、填空题

(9)structlink*next

(10)p->next,p->data<m

(11)structlist*,list,structlist*,list,returnh

三、编程题

14.12设有以下结构类型说明:

structstud

(

charnum[5],name[10];

ints|4|;

doubleave;

);

请编写:

(1)函数readrec把30名学生的学号、姓名、四项成绩以及平均分放在一个结构体数组中,学生的学号、

姓名和四项成绩由键盘输入,然后计算平均分放在结构体对应的域中。

(2)函数writerec输出30名学生的记录。

(3)main函数调用readrec函数和writerec函数,实现全部程序功能(注:不允许使用全局变量,函数之

间的数据全部使用参数传递)。

※程序如下※

#include

#defineSTUDNUM30

structstud

{

charnum|5|,name[10];

ints[4]:

doubleave;

};

voidreadrec(structstud*pStud,intnum)

(

inti;

printf("\tNum\tName\tSl\tS2\lS3\tS4\n");

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

(

prinlf("%d:\t",i);

scanf("%s%s%d%d%d%d,,,pStud->nuni,pStud->name,&(pStud->s[O]),

&(pStud->s[1J),&(pStud->s[2]),&(pStud->s[3]));

pStud->ave=(pStud->s[0]+pStud->s[l]+pStud->s[2]+pStud->s[3])/4.0;

pStud++;

)

)

voidwritercc(structstud*pStud,intnum)

(

inti;

printf("\tNum\tName\tSl\tS2\lS3\tS4\n");

for(i=0;i<=29;i+

温馨提示

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

评论

0/150

提交评论