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

下载本文档

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

文档简介

第一章C语言概述

一、简答题

1.(1)语言简洁、紧凑,使用方便、灵活;(2)运算符丰富;(3)具有丰富的数据类型;

(4)具有结构化的控制语句;(5)语法限制不太严格,程序设计自由度大;(6)C语言

允许直接访问物理地址,能进行位(bit)操作,能实现汇编语言的大部分功能,可以直接

访问硬件;(7)生成目标代码质量高,程序执行效率高;(8)用C语言写的程序可移植性

好,基本上不作修改就能用于各种型号的计算机和各种操作系统。

2.顺序结构,分支结构,循环结构

3.所谓算法就是为解决一个问题而采取的方法和步骤。

算法的特性:有穷性、确定性、输入、输出、可行性。

表示算法的方式:(1)用自然语言表示;(2)用流程图表示;(3)用N—S流程图表

示;(4)用伪代码表示;(5)用计算机语言表示。

1.瓶子A里盛有醋

瓶子B里盛有酱油

有一个空瓶C

将A中的醋倒入C

将B中的酱油倒入A

将C中的醋倒入B

2.输入一个数放在a中

max=a

以下步骤重复9次:

输入一个数放在a中

如果a〉max,max=a

打印max的值

3.如果a<b

temp二a

a=b

b=temp

如果c>a

temp=a

a=c

c二temp

否则

如果c>b

temp二b

b=c

c=temp

打印a,b,c的值

4.i=l

sum=O

以下程序循环100遍:

sum=sum+i

i=i+l

打印sum的值

5.如果(n除以3的余数为0并且n除以5的余数为0)

n能够同时被3和5整除

否则

n不能够同时被3和5整除

6.i=101

以下语句循环50遍:

F2

flag=l

当八(i除以2的整数部分)时循环以下语句:

如果i除以j的余数为零

flag=0

退出该循环

如果flag-l

打印i的值

i=i+2

7.如果水n

temp二m

m=n

n=temp

i=n

做以下循环,直到m,n能够被i整除:

如果m能够被i整除并且n能够被i整除

i即是m和n的最大公约数

跳出循环

否则

i=i-l

打印i的值

8.data=b*b—4*a*c

如果data>0

否则如果data=0

xl=x2=—b/2

否则

无实数解

三、编程题

1.main()

(

printf();

printf(uHowdoyoudo?\n");

printf();

)

2.main()

inta,b,c;

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

printf("sum=%d”,a+b+c);

)

第二章数据类型与表达式

一、单项选择题

1.B2,C3.A4.A5.D6.B7.A8.C9.D

二、写出下列程序的运行结果

1.

aabbccabc

AN

2.

ab

9798

3.9,11,9,10

4.

a=2,b=3,c=2

5.

sl=2.500000

s2=3

三、编程题

main()

(

charcl=,c,c2=,h',c3=,i*,c4=,n',c5='a,;

cl=cl+4;

c2=c2+4;

c3=c3+4;

c4=c4+4;

c5=c5+4;

printf(,z%c%c%c%c%c\nz/,cl,c2,c3,c4,c5);

)

第三章顺序程序设计

选择题

1)B2)D3)D4)A5)A6)B7)B8)A9)

D10)C11)D12)A

填空题

1)b2)2613)2521374)abc5)5.0,4,c=36)3

编程题

^definePI3.1415926

main()

(

floath,r,1,sv,sz;

printf(“请输入圆的半径r,圆柱高h:\n");

scanf(a%f,%fw,&r,&h);

1=2*PI*r;

s=PI*r*r;

sv=3.0/4.0*PI*r*r*r;

sz=PI*r*r*h;

printf(“圆周长为:1=%6.2f,圆面积为:s=%6.2f\n,>,1,s);

printf(“求体积为:sv=%6.2f,圆柱体积为:sz=%6.2f\n",sv,sz)

}

2、

main()

(

floatc,f;

printf(“请输入一个华氏温度:\n");

scanf("%f",&f);

c=5.0/9.0*(f-32);

printf(“摄氏温度为:%6.2f\n",c);

)

第四章循环程序设计

一、选择题

1.D2.D3.D4.C5.D6.A7.B8.B9.A10.D.11.B12.A13.B14.C15.C16.A17.A18.B19.D

20.D21.A

二、填空题

1.585858

2.0

3.18

4.8921

5.20,0

6.6

7.1,3,2

8.Year%400==0

year%100!=0

count++

三、编程题

1.

main()

(

longa;

scanf(“%ld”,&a);

if(a>=10000&&a<=99999)

printf(“这是个五位数”);

elseif(a>=1000&&a〈=9999)

printf(“这是个四位数”);

elseif(a>=100&&a<=999)

printf(“这是个三位数”);

elseif(a>=10&&a<=99)

printf(“这是个二位数”);

elseif(a>=0&&a<=9)

printf(“这是个一位数”);

else

printf(“输入错误”);

}

3.

main()

(

inta;

intg,s,b;〃个位、十位、百位

printf("水仙花数有:\n〃);

for(a=100;i<=999;a++)

{g=a%10;

s=a/10%10;

b=a/100;

if(a==g*g*g+s*s*s+b*b*b)

printf(z/%d”,a);

}

printf(〃\n");

)

4、

mainO

{inti,n;

printf("inputn:〃);

scanf(〃%d〃,&n);

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

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

{while(i!=n)

if(n%i=O)

{printf(,z%d*/z,i);n/=i;}

elsebreak;

}

printf(〃%d\n〃,n);

)

5、

#include"stdio.h"

mainO

(

charc;

intw,x,y,z;

w=x=y=z=0;

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

(

if((c>,a'&&c<rz')||(c>rA,&&c<JZ'))

w++;

elseif(c==,J)

x++;

elseif(c>‘O'&&«'9')

y++;

elsez++;

)

printf("英文字母个数:%d\n",w);

printf("空格个数:%d\n",x);

printf("数字个数:%d\n",y);

printf("其他字母个数:%d\n",z);

)

6、main()

(

floath=100,t=100;

intj;

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

(

t=t/2;

h=h+t*2;

}

printf("共经过:%f米\n",h);

printf("第十次反弹%f米\n",t/2);

}

第五章数组

一、单项选择题

1.B2.A3.C4.C5.D6.B7.C8.B9.C10.B

二、写出下列程序的运行结果

1.S=368

2.

3.Sl=18

S2=10

4.!margorP

5.

数字0的出现次数是:3

数字1的出现次数是:2

数字2的出现次数是:2

数字3的出现次数是:2

数字4的出现次数是:0

数字5的出现次数是:1

数字6的出现次数是:1

数字7的出现次数是:1

数字8的出现次数是:1

数字9的出现次数是:1

三、编程题

1.ttinclude"stdio.h〃

main()

{inta[ll];

inti,j,t;

printf("input10number:\n,z);

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

scanf&a[i]);

printf(〃\n");

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

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

if(a[j]<a[j+l])

{t=a[j];a[j]=a[j+l];a[j+l]=t;}

printf(,zthesortednumberis:\n〃);

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

printf(/z%4d,z,a[i]);

2.#include"stdio.h〃

main()

{inta[ll],i,b;

printf(,zimput10sortednumber:\n,z);

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

scanf(〃%d〃,;

printf(,zinputaninteger:\nz,);

scanf("%d",&b);

for(i=9;i>=0&&a[i]>b;i~)

a[i+l]=a[i];

a[i+l]=b;

printf(,zsortednumbers:\n〃);

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

printfa[i]);

3.#include"stdio.h〃

mainO

{inta[5],i,j,t;

printf("input5integer:\n,z);

for(i=0;i<5;i++)/*输入5个整数*/

scanf(绘d〃,&a[i]);

for(i=0,j=4;i<j;i++,j—)/*逆序存放*/

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

for(i=0;i<5;i++)/*逆序存放后重新输出*/

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

4.#include"stdio.h〃

main()

{inti,j,a[10][10]={{l},{1,1}};

for(i=2;i<10;i++)/*给二维数组每个元素赋值*/

{a[i][0]=l;

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

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

for(i=0;i<10;i++)/*输出二维数组*/

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

printf(〃%-5d”,a[i][j]);

printf(〃\n");

)

)

5.ttinclude"stdio.h"

main()

{inta[3][4],i,j,max,row,col;

printf(,zinput3*4matrix:\nz/);

for(i=0;i<3;i++)/*输入3*4矩阵*/

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

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

max=a[0][0];row=0;col=O;

for(i=0;i<3;i++)/*寻找矩阵中的最大值及其行列号*/

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

if(max<a[i][j])

{max=a[i][j];row=i,col=j;}

printf(,z\n数组中最大的数是%d,其行号是%d,列号是%d\n〃,max,row,col)

)

6.^defineN3

#defineM4

^include"stdio.h〃

main()

{inta[N][M],i,j,k,max,row,col;

printf(,zinput%d*%dmatrix:\n,z,N,M);

for(i=0;i<N;i++)/*输入二维矩阵*/

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

scanf(z/%d,z,&a[i][j]);

for(i=0;i<N;i++)/*求鞍点*/

{max=a[i][0];row=i;col=0;

for(j=l;j<M;j++)/*求矩阵中每一行的最大值及其所行列号*/

if(max<a[i][j])

{max=a[i][j];col=j;}

for(k=O;k〈N;k++)/*判断每一行的最大值在其所在列是否最大*/

if(a[k][col]<max)

break;

if(k==N)/*得到鞍点*/

{printf("thepointis%d,row=%d,col=%d\nz,,max,row,col);break;}

)

if(i==N)/*没有鞍点*/

printf(,znopoint\n〃);

7.#include"stdio.h〃

main()

{intnum=0,word=0;

/*word=0表示未出现单词,如出现单词就置word为1.num用来统计单词个数*/

chare;

printf(''pleaseinputastring:\n〃);

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

if(c==,')

word=0;

elseif(word二二0)

{word=l;num++;)

printf(,zThereare%dwordsintheline\n〃,num);

)

8.^include"stdio.h"

mainO

{inti,j,uppn,lown,dign,span,othn;

/*uppn,lown,dign,span,othn分别存放英文大写字母、小写字母、数字、空格和其

他字符的个数*/

chartext[3][80];

uppn=lown=dign=span=othn=0;

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

{gets(text[i]);

for(j=0;j<80&&text[i][j]!八O';j++)

{if(text[i][j]>=,A'&&text[i][j]<=,Z')

uppn++;

elseif(text[i][j]>=,a9&&text[i][j]<=,z')

lown++;

elseif(text[i][j]>=,O'&&text[i][j]<=,9')

dign++;

elseif(text[i][j]=,')

span++;

else

othn++;

)

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

printf(〃%s\n〃,text[i]);

printf(〃uppn=%d\n〃,uppn);

printf(〃lown=96d\n〃,lown);

printfCdign=%d\n/Z,dign);

printf("span二/d\n〃,span);

printf(〃othn=%d\n〃,othn);

)

9.ttinclude〃stdio.h"

main()

{inti,j;

charstrl[20],str2[20];

printf(,zinputtwostrings:\nz,);

gets(strl);

gets(str2);

j=strlen(strl);/*求字符串1的长度*/

for(i=0;str2[i]!='\0';i++,j++)/*字符串合并*/

strl[j]=str2[i];

strl[j]=\0J;/*加上字符串结束标志*/

puts(strl);

}

10.#include〃stdio.h〃

main()

{inti,n;

charstrl[20],str2[20];

printf(,zinputtwostrings:(nomorethan20characters)\n,z);

gets(strl);gets(str2);

n=strlen(strl)<strlen(str2)?strlen(strl):strlen(str2);/*n中存放较短字符串的长

度*/

for(i=0;i<n&&strl[i]=str2[i];i++);

printf(,,%d\n/,,strl[i]-str2[i]);

)

第六章函数与编译预处理

一、单项选择题

1.C2.B3.B4.B5.A6.B7.A8.C9.D10.A

二、写出下列程序的运行结果

1.9

2.4,B

8,B

3.-4.000000

4.a—6,b—5

5.48

三、编程题

1.mainO

{intprime(intn);

intn;

printf(z/inputn(n>O):\n");

scanf("%d",&n);

if(prime(n))

printf(,z%disasushu\n〃,n);

elseprintf(,z%disnotasushu\n〃,n);

)

intprime(intn)

{intflag=l,i;

for(i=2;i<=n/2&&flag==l;i++)

if(n%i=0)flag=0;

return(flag);

)

2.

#defineN3

convert(intarray[3][3])

{inti,j,t;

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

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

{t=array[i][j];

array[i][j]=array[j][i];

arraytj][i]=t;

)

)

main()

{inti,j;

inta[N][N];

printf("inputa:\n〃);

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

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

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

printf(z,Arraya:\n〃);

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

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

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

printfr\n,z);

)

convert(a);

printf(zzadezhuanzhiis:\n〃);

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

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

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

printf(〃\n〃);

}

)

3.^include<stdio.h>

#include<string.h>

main()

{charstr[100];

printf("inputastring:\n");

gets(str);

inverse(str);

printf(z/thereversedstringis:%s\n,z,str);

)

inverse(charstr[])

(

chart;

inti,j;

for(i=0,j=strlen(str)-l;i<j;i++,j--)

(

t=str[i];

str[i]=str[j];

str[j]=t;

)

)

4.^include<stdio.h>

concat(charstrl[],charstr2[])

{inti=0,j;

while(strl[i]!=,\0*)

i++;

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

strl[i]=str2[j];

strl[i]=>\0*;

)

mainO

charstrl[100],str2[100];

gets(strl);gets(str2);

concat(strl,str2);

puts(strl);

}

5.mainO

{charstr[80];

printf("inputastring(4geshuzizifu):\n〃);

scanf(〃%s〃,str);

insert(str);

printf(''resultis:\n%s\n〃,str);

)

insert(charstr[])

(

inti;

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

(

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

str[2*i-l]=>';

)

)

6.#include"stdio.h〃

inti,ndight,nwhite,nletter,nother;

count(charstr[])

(

ndight=nwhite=nletter=nother=0;

for(i=0;str[i]!=\0f;i++)

if(str[i]>=,0f&&str[i]<=,9')

ndight++;

elseif((str[i]>=>A,&&str[i]<=,Z')||(str[i]>=,a&&str[i]<=,z'))

nletter++;

elseif(str[i]==,')

nwhite++;

elsenother++;

)

main()

(

chartext[80];

printf("inputastring:\n,z);

gets(text);

count(text);

printf(〃ndight=%d,nletter=%d,nwhite=%d,nother=%d\n,z,ndight,nletter,nwhite,nothe

r);

)

7.#defineN10

ttinclude<stdio.h>

sort(charstr[])

{inti,j;

chart;

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

for(j=O;j<N-i;j++)

if(str[j]>str[j+l])

{t=str[j];str[j]=str[j+l];str[j+l]=t;}

}

main()

(

charstr[N];

inti;

printf("Input10gezifu:\n〃);

gets(str);

sort(str);

printf(,zThesortedresult:\n",);

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

printfstr[i]);

}

8.这题较复杂

#include<stdio.h>

#include<string.h>

#defineN10

voidinput_e(intnum[],charname[N][8])

{inti;

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

{printf(,zinputgonghao:〃);

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

printf(z,inputname:,z);

getchar();

gets(name[i]);

)

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

printf(,/%5d%10s\nz/,num[i],name[i]);

)

voidsort(intnum[],charname[N][8])/*选择法排序*/

{inti,j,min,tempi;

chartemp2[8];

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

{min二i;

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

if(num[j]<num[min])min=j;

templ=num[i];

strcpy(temp2,name[i]);

num[i]=num[min];

strcpy(name[i],name[min]);

num[min]=tempi;

strcpy(name[min],temp2);

}

printf(,zthesortedresult:\n/z);

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

printf("%5d%10s\n",num[i],name[i]);

}

voidsearch(intn,intnum[],charname[N][8])/*折半查找法*/

(

inttop,bott,mid,find;

find=0;

top=0;

bott=N-l;

if((n<num[0])||(n>num[N-l]))

find=-l;

while((find==0)&&(top<=bott))

{mid=(bott+top)/2;

if(n二二num[mid])

{find=l;printf(z,%dnameis:%s\n〃,n,name[mid]);}

elseif(n<num[mid])

bott=mid-l;

elsetop=mid+l;

)

if((find==-l)||(find==0))

printfC'%disnotfound.\nz/,n);

)

main()

intnum[N],number,c,flag;

charname[N][8];

input_e(num,name);

sort(num,name);

for(flag=l;flag;)

{printfCpleaseinputchazhaodegonghao:");/*输入查找的工号*/

scanf(〃%d〃,&number);

search(number,num,name);

printfCcontinueY/N?〃);/*是否继续查找*/

getchar();

c=getchar();

if(c='N'||c='n')

flag=0;

)

)

9.ttinclude〃stdio.h〃

^defineMAX10

mainO

(

charstr[MAX];

chare;

inti;

i=0;

printf("inputnumber(16jinzhi):");/*输入一个十六进制的数

温馨提示

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

评论

0/150

提交评论