您好,欢迎来到爱go旅游网。
搜索
您的当前位置:首页C语言课后习题答案

C语言课后习题答案

来源:爱go旅游网
第1章 一、选择题

B A D D C C B B B C C 二、填空题

1.编辑、编译、链接、运行

2. 编译错误、链接错误、运行错误和逻辑错误 3. 静态调试、跟踪打印、跟踪调试 第二章 一、选择题

C A B C A A D A 二、填空题 1. int char 2. 4 3

3. 单引号表示形式、数值表示形式、转义字符表示形式

第三章

一、选择题

1. 若变量均已正确定义并赋值,以下合法的C语言赋值语句是( A )。

A.x=y==5; B.x=n%2.5; C.x+n=I; D.x=5=4+1;

2. 设变量均已正确定义,若要通过scanf(\"%d%c%d%c\语句为变量a1和a2赋数值10

和20,为变量c1和c2赋字符X和Y。以下所示的输入形式中正确的是( D ) 。(注:□代表空格字符)

A.10□X□20□Y〈回车〉 C.10□X〈回车〉 20□Y〈回车〉 main()

{unsigned int x=0xFFFF; /* x的初值为十六进制数 */ printf(\"%u\\n\}

程序运行后的输出结果是( B )。 A.-1

B.65535

C.32767

D.0xFFFF

4. 有以下程序段

char ch; int k; ch=’a’; k=12;

printf(\"%c,%d, \

已知字符a的ASCII十进制代码为97,则执行上述程序段后输出结果是( D )。 A.因变量类型与格式描述符的类型不匹配输出无定值 B.输出项与格式描述符个数不符,输出为零值或不定值 C.a,97,12k=12 D.a,97,k=12 二、填空题

1. 已知定义:char c=' '; int a=1,b;(此处c的初值为空格字符),执行b=!c&&a;后b的初值为 0 。 2. 设变量已正确定义为整型,则表达式n=i=2,++i,i++的值为 3 。

B.10□X20□Y〈回车〉 D.10X〈回车〉 20Y〈回车〉

3. 有以下程序,其中%u表示按无符号整数输出

3. 执行以下程序后的输出结果是 a=14 。

main() {int a=10;

a=(3*5,a+4); printf(\"a=%d\\n\}

4. 执行以下程序时输入1234567,则输出结果是 _1234___ 。

#include main() { int a=1,b;

scanf(\"%2d%2d\} 三、编程题

1. 编写程序,输入一个非负数,输出以此数为半径的圆周长以及面积。 #include \"stdio.h\" #define PI 3.1415 void main() { }

2. 编写程序,输出下面结果,注意,双引号也要输出:

“I'm a student!” #include void main() { }

3. 编写程序,输入一个小写字母,将其转换为大写字母输出。例如输入b,则输出B。提示:小写字母和

对应的大写字母的ASCII码值相差32。 printf(\"\\\"I\\'m a student!\\\"\\n\"); float r,area,circumference; scanf(\"%f\area=PI*r*r;

circumference=2*r*PI;

printf(\"area=%6.2f\\ncircumference=%6.2f\\n\

void main() { char ch; ch=getchar(); ch-=32; putchar(ch); //printf(\"%c\}

4. 编写程序,输入一个华氏温度f,输出其相应的摄氏温度c。华氏温度和摄氏温度的转换公式为:

c5(f32)9

#include

void main() {

float f,c; scanf(“%f”,&f); c=5.0*(f-32)/9;

printf(“华氏温度%5.2f转换为摄氏温度为:%5.2f\\n”,f,c); }

第四章

一、选择题

1. 设有条件表达式:(EXP)?i++;j--,则以下表达式中与(EXP)完全等价的是( B )。

A.(EXP==0) B.(EXP!=0) C.(EXP==1) D.(EXP!=1)

2. 已有定义:char c;,程序前面已在命令行中包含ctype.h文件,不能用于判断c中的字符是否为大写

字母的表达式是( B )。 A.isupper(c)

B.'A'<=c<='Z'

C. 'A'<=c&&c<='Z'

D.c<=('z'-32)&&( 'a'-32)<=c

3. 已知大写字母A的ASCII码是65,小写字母a的ASCII码值是97,以下不能将变量c中大写字母转换

为对应小写字母的语句是( D )。 A.c=(c-A)%26+'a' C.c=c-'A'+'a' 表达式是( B )。 A.kk>='A'&&kk<='Z'

B.!(kk>='A'||kk<='Z') D.isalpha(kk)&&(kk<91)

D.k+1

C. (kk+32)>='a'&&(kk+32)<='z' A.k++

B.k+=1

B.c=c+32 D.c=('A'+c)%26-'a'

4. 已知字符A的ASCII码值为65,若变量kk为char型,以下不能正确判断出kk中的值为大写字符的

5. 设有定义:int k=0;,以下选项的四个表达式中与其他三个表达式的值不相同的是( A )。

C.++k

6. 当变量c的值不为2、4、6时,值也为“真”的表达式是( B )。

A. (c==2)||(c==4)||(c==6) C. (c>=2&&c<=6)&&!(c%2) A.x%2==1 A.if(x++); else y++; 9. 有以下程序段

int a,b,c; a=10;b=50;c=30; if (a>b) a=b,b=c;c=a;

printf(\"a=%d b=%d c=%d\\n\程序的输出结果是( A )。 A. a=10 b=50 c=10 C. a=10 b=30 c=10 10.若有说明语句:

int w=1,x=2,y=3,z=4;

B.a=10 b=50 c=30 D. a=50 b=30 c=50

B.x/2

B. (c>=2&&c<=6)||(c!=3)||(c!=5) D. (c>=2&&c<=6)&&(c%2!=1) C.x%2!=0

D.x%2==0

7. 以下选项中,当x为大于1的奇数时,值为0的表达式( D )。

8. 设变量x和y均已正确定义并赋值,以下if语句中,在编译时将产生错误信息的是( C )。

B.if(x>y&&y!=0); D.if(y<0) {;} else x++;

C.if(x>y) x--

则表达试w>x?w:z>y?z:x的值是( A )。 A.4

B.3

C.2

D.1

11.有以下程序

#include void main()

{ int x=1,y=0,a=0,b=0; switch(x) { case 1: switch(y)

{ case 0: a++;break; case 1: b++;break; }

case 2: a++;b++;break; case 3: a++;b++; }

printf(\"a=%d,b=%d\\n\}

程序的运行结果是( D )。 A.a=1,b=0

B.a=2,b=2

C.z=1,b=1

D.a=2,b=1

12.以下叙述正确的是( C )。

A.break语句只能用于switch语句体中

B.continue语句的作用是:使程序的执行流程跳出包含它的所有循环 C.break 语句只能用在循环体内和switch语句体内 D.在循环体内使用break语句和continue语句的作用相同

二、填空题

以下程序的运行结果是 #& 。 void main() {int a=2,b=7,c=5; switch(a>0)

{case 1:switch(b<0)

{ case 1:printf(\"@\"); break; case 2: printf(\"!\"); break; }

case 0: switch(c==5)

{ case 0: printf(\"*\"); break; case 1: printf(\"#\"); break; case 2: printf(\"$\"); break; }

default : printf(\"&\"); }

printf(\"\\n\"); }

三、编程题

1. 输入一个整数,判断这个整数是奇数还是偶数(提示:整数的奇偶性可以利用取余运算符%判定)。

#include void main() { int a; scanf(\"%d\ if(a%2) printf(\"奇数\\n\"); else printf(\"偶数\\n\");

}

2. 编写程序,输入一个24小时制的时间,转换为12小时制时间后进行输出。以13点15分为例,输入:

13:15,则输出:下午1:15。

#include void main() { int hour,minute; scanf(\"%d:%d\ if (hour>12) hour=hour-12; printf(\"%d:%d\\n\}

3. 输入年号,判断它是否是闰年(如果年号能被400整除,或能被4整除,而不能被100整除,则是闰

年,否则不是)。

void main() { int year; scanf(\"%d\ if (year%400==0||(year%4==0&&year%100==0)) printf(\"%d是闰年\\n\ else printf(\"%d不是闰年\\n\

}

4. 输入一个字符,如果是大写字母则输出对应的小写字母,如果是小写字母则输出相应的大写字母,如

果都不是则原样输出。

#include void main() { char ch;

}

scanf(\"%c\if(ch>='a'&&ch<='z') ch-=32; else if(ch>='A'&&ch<='Z') ch+=32; printf(\"\\n%c\\n\

5. 设计一个简单的计算器程序,能输入整型运算数和基本运算符(+,-,*,/),输出计算结果。例如:

输入2+6,输出2+6=8。

#include main() { float a,b,result; char op; scanf(\"%f%c%f\ switch(op) { case'+': result=a+b; printf(\"=%f\ case'-': result=a-b; printf(\"=%f\ case'*': result=a*b; printf(\"%f\ case'/': if(b==0.0) printf(\"error!\\n\"); result=a/b;

printf(\"=%f\

default: printf(\"error due to the illegal input!\\n\"); } }

第五章

一、选择题

1. 若变量已正确定义,有以下程序段

i=0;

do printf(\"%d,\printf(\"%d\\n\其输出结果是( B )。 A.0,0 A.n=0;

B.0,1

C.1,1

D.程序进入无限循环

2. 以下不构成无限循环的语句或语句组是 ( A )。

B.n=0;

while(1) {n++;}

D.for(n=0,j=1; ;i++) n+=i

do{++n;} while(n<=0) C.n=10; 3. 有以下程序

#include main()

while(n); {n--;}

{int y=9; for( ;y>0;y--)

if(y%3= =0) printf(\"%d\}

程序的运行结果是( C )。 A.741

B.963

C.852

4. 有以下程序

#include void main() { int x=8; for(;x>0;x--)

{ if (x%3) {printf(\"%d,\ printf(\"%d,\ } }

程序的运行结果是( D )。 A. 7,4,2

B. 8,7,5,2,

C.9,7,6,4,

5. 有以下程序

#include main()

{int i,j,m=55; for(i=1;i<=3;i++)

for(j=3;j<=i;j++) m=m%j; printf(\"%d\\n\}

程序的运行结果是( B )。 A.0

B.1

C.2

D.3

6. 有以下程序

main() {int i,j; for(i=1;i<4;i++)

{for(j=i;j<4;j++) printf(\"%d*%d=%d\printf(\"\\n\"); } }

程序运行后的输出结果是( B )。 A.1*1=1 1*2=2 1*3=3 B.1*1=1 1*2=2 1*3=3 2*1=2 2*2=4 2*2=4 2*3=6 3*1=3 3*3=9 C.1*1=1

D.1*1=1 1*2=2 2*2=4

2*1=2 2*2=4 1*3=3 2*3=6 3*3=9

3*1=3 3*2=6 3*3=9

二、填空题

D.8721

D.8,5,4,2,

1. 若有定义:int k;,以下程序段的输出结果是 ##2##4 。

for(k=2;k<6;k++,k++) printf(\"##%d\

2. 当执行以下程序时,输入12345670<回车>,则其中while循环体将执行 0 次。

#include main() {char ch;

while((ch=getchar())==’0’) printf(\"#\"); }

3. 以下程序的输出结果是 _321_ 。

#include main()

{ int n=12345,d;

while(n!=0){ d=n%10; printf(\"%d\}

4. 以下程序的输出结果是_ _ACE_ _____。

#include main() { int i;

for(i='a';i<'f';i++,i++) printf(\"%c\printf(\"\\n\"); }

5. 以下程序的输出结果是 1 。

#include main()

{ int i,j,sum; for(i=3;i>=1;i--) { sum=0;

for(j=1;j<=i;j++) sum+=i*j; }

printf(\"%d\\n\} 三、编程题

1. 编写程序,显示100~200之间能被7除余2的所有整数。

#include \"stdio.h\" main() { int i;

for(i=100;i<=200;i++) { if(i%7==2) }

2. 输入n个整数,求这n个整数中的最大数、最小数和偶数平均数,并输出。

#include

printf(\"\%d\\

}

void main() {

int i,n,data,max=0,min=0,even=0,evennumber=0; printf(\"Please input the number of data:\"); scanf(\"%d\

printf(\"Please input the data:\\n\"); scanf(\"%d\ max=data; min=data; if (data%2==0) { }

for(i=1;iprintf(\"The }

3. 输入一串字符,以回车作为结束标志。统计并输出这串字符中大写字母、小写字母和数字字符的个数。

#include void main() {

int upper=0,lower=0,number=0; char letter;

while((letter=getchar())!='\\n') { }

if (letter>='a'&&letter<='z') lower++; else if (letter>='A'&&letter<='Z') upper++; else if (letter>='0'&&letter<='9') number++;

max

is

%d\\nThe

min

is

%d\\n

The

average

of

even

is %5.2f\\n\

scanf(\"%d\if (data>max) else { }

even=even+data; evennumber++; if (datamin=data; max=data; even=even+data; evennumber++;

if (data%2==0)

printf(\"the number of uppercase is:%d\\n\ printf(\"the number of lowercase is:%d\\n\ printf(\"the number of number is:%d\\n\}

4. 输出九九乘法表。

#include void main() { int i,j;

for(i=1;i<=9;i++) { } }

5. 编写程序,输出3~1000之间全部素数。

#include #include \"math.h\" void main() {

int k,data,tag;

for(data=3;data<=1000;data++) //外层循环,用来产生2~1000之间的整数 { {

if (data%k==0)

tag=1;

}

}

6. 输入一个三位数,判断其是否是“水仙花数”。水仙花数是指3位数中的各位数字的立方和等于这3

位数本身。如153=1*1*1+5*5*5+3*3*3。 #include\"stdio.h\" void main() {

int S, a, b, c;

printf(\"请输入一个3位数:\"); }

if (tag==1) printf(\"%4d\如果i是素数,则输出 tag=0; //tag用于表示数i是否是素数,没有判断前先假定是素数 for(k=2;k<=sqrt(data)&&!tag;k++) //内层循环用来判断data是否有约数 for(j=1;j<=i;j++)

printf(\"%d*%d=%-3d \ printf(\"\\n\");

scanf(\"%d\

a=S/100; b=S%100/10; c=S%10; if(a*a*a+b*b*b+c*c*c==S) }

7. 编程求Fibonacci数列的前40个数。该数列的生成方法是:F1=1,F2=1,Fn=Fn-1+Fn-2(n>=3)(即从第三个

数起,每个数等于前2个数之和)。 方法1: #include \"stdio.h\" void main() {

int f0,f1,f2,n; f0=1; f1=1;

printf(\"Fibonacci数列的前40个数是:%d\%d\\ for(n=2;n<40;n++) { } 方法2: #include \"stdio.h\" void main() {

int f[40],n; f[0]=1; f[1]=1;

printf(\"Fibonacci数列的前40个数是:%d\%d\\ for(n=2;n<40;n++) { } }

8. 一个穷人找到一个百万富翁,给他商讨一个换钱计划如下:我每天给你十万元,而你第一天只需给我

一元钱,第二天给我二元钱,第三天给我四元钱,„„,即我每天都给你十万元,你每天给我的钱都是前一天的两倍,直到满一个月(30天)。百万富翁很高兴地接受了这个换钱计划。请编写程序计算满一个月时,穷人给了富翁多少钱,而富翁又给了穷人多少钱。 #include void main()

f[n]=f[n-1]+f[n-2]; printf(\"%d\\f2=f0+f1; printf(\"%d\\f0=f1; f1=f2;

printf(\"%d是水仙花数。\printf(\"%d不是水仙花数。\\n\ else

{ }

9. 猴子吃桃问题。猴子第一天摘下若干桃子,立即吃了一半,不过瘾又多吃了一个。第二天早上又将剩

下的桃子吃了一半,又多吃了一个。以后的每天早上都是吃了前一天剩下的一半加一个。到第10天早上时只剩下一个桃子了。编写程序,求猴子第一天共摘了多少桃子。

/************************************************************************/ /*有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个*/ /* 到了第10天就只余下一个桃子。(C语言实现) */

/*用多种方法实现求出原来这群猴子共摘了多少个桃子。 */

/************************************************************************/ /*运行环境:VC++6.0 */

/************************************************************************/

#include \"stdio.h\" main() {

int i,j,k; /*j是最后的桃子数,k是中间变量,也是桃子总数*/ j = 1;

for(i=9;i>0;i--) {

k = (j + 1) * 2; j = k; }

printf(\"%total=%d\\n\}

printf(\"Money of poor giving rich is %ld\\nMoney of rich giving poor is %ld\\n\long poor=100000,rich=1,i; for(i=2;i<=30;i++) { }

poor=poor+100000; rich=rich*2;

第六章

一.1.C 2.A 3.A 4.C 5.B 6.C 7.D 8.A 9.C 二.1.20,b[0],b[19],b(或者&b[0]),20*4 2 数组名

3. 252015105 4. 015 5. 5 3 6.Hello world! 7.ka[i]=a[i+1] a[i+1]=j

三.1. #include

#define n 10 void main()

{ int a[n],i,count1=0,count2=0,sum=0;float ave; for (i=0;i{scanf(\"%d\

sum+=a[i]; if (a[i]>80) count1+=1; else if(a[i]<60) count2+=1;

}

ave=sum/n;

printf(\"%d个优秀, %d个不及格,平均分:%f。\}

2. #include #define n 10 void main()

{ int a[n],i,j,k,max,min; for (i=0;i{scanf(\"%d\ if (!i)

{max=min=a[i]; j=k=i; } else

{if (maxif (min>a[i]) {min=a[i]; k=i; } } }

printf(\"最大值%d在第%d位,最小值%d在第%d位。\}

3. #include

#include

void main() { char s[20],ch; int i,n;

printf(\"请输入字符串:\"); gets(s); n=strlen(s);

for(i=0;is[i]=s[n-1-i]; s[n-1-i]=ch; }

printf(\"逆序存放的字符串:\"); puts(s);

}

4. #include

#define N 10 void main()

{ int i,j,n,a[N+1];

printf(\"请输入%d个由小到大排列的整数:\for(i=0;iscanf(\"%d\

printf(\"请输入要插入的数:\"); scanf(\"%d\for(i=0;iif(a[i]>n) {j=i; break; } if (i==N) j=i;

for(i=N-1;i>=j;i--) a[i+1]=a[i];

a[j]=n;

printf(\"插入后的排列:\"); for(i=0;i<=N;i++)

printf(\"%d \

}

5. #include #define N 3 void main()

{ int i,j,a[N][N],sum=0;

printf(\"请输入%d*%d矩阵的元素:\ for(i=0;i{scanf(\"%d\ if(i==j) sum+=a[i][j]; }

printf(\"主对角线元素之和:%d。\}

6. #include

#include void main()

{ int i,j, n,k=0, b[300]; for (i=1;i<300;i++) {n=int(sqrt(i)); for(j=2;j<=n;j++) {if(i%j==0) break; } if (j>n) {b[k]=i; k++; } }

for(i=0;iprintf(\"%5d\}

7. #include

#define N 7 void main()

{ int i,j,k,a[N],temp;

printf(\"请输入%d个整数:\ for(i=0;iscanf(\"%d\ for(i=0;ia[j]) {k=j; temp=a[j]; } if (k!=i) {a[k]=a[i]; a[i]=temp; } }

printf(\"排序后的数列:\"); for(i=0;iprintf(\"%3d\

}

8. #include

void main()

{ int i=0,count1=0,count2=0,count3=0; char s[20];

printf(\"请输入字符串:\"); gets(s);

while(s[i]!='\\0')

{ if(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z')

count1++; else if(s[i]>='0'&&s[i]<='9') count2++; else count3++; i++;

}

printf(\"字符%d个,数字%d个,其他%d个。\}

9. #include

#include void main()

{char s[20],ch;int i=0;

printf(\"请输入字符串:\"); gets(s);

while(s[i]!='\\0')

{s[i]+=3; if (s[i]>'z') s[i]-=26; i++; }

printf(\"加密后:\"); puts(s); }

10. #include

#include void main()

{char s1[20],s2[20];int i=0,j=0;

printf(\"请输入字符串1:\"); gets(s1);

printf(\"请输入字符串2:\"); gets(s2);

while (s1[i]!='\\0') i++; s1[i]=s2[j]; do {i++; j++;

s1[i]=s2[j]; }

while (s2[j]!='\\0'); printf(\"连接后:\"); puts(s1);

}

11. #include

#include void main()

{char s1[20],s2[20],s3[40];int i=0,j=0,k=0;

printf(\"请输入按字母序排列的字符串1:\"); gets(s1);

printf(\"请输入按字母序排列的字符串2:\"); gets(s2);

while(s1[i]!='\\0'&&s2[j]!='\\0') {if (s1[i]{ s3[k]=s1[i]; k++;i++; } else

{ s3[k]=s2[j]; k++;j++; } }

while(s1[i]!='\\0') { s3[k]=s1[i]; k++;i++; }

while(s2[j]!='\\0') { s3[k]=s2[j]; k++;j++; }

s3[k]='\\0';

printf(\"合并后的字符串:\"); puts(s3); }

12. #include

void main()

{int i,j,a[5][5]; for(i=0;i<5;i++) for(j=4;j>=0;j--) {if(j>=i) a[i][j]=1; else a[i][j]=a[i][j+1]+1; }

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

printf(\"%3d\ printf(\"\\n\"); } }

13. #include

void main() {int i,j,a[8][8]; for(i=0;i<8;i++) for(j=0;j<8;j++) {if(j==i||(i+j)==7) a[i][j]=1; else a[i][j]=0; }

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

printf(\"%3d\ printf(\"\\n\"); } }

14. #include

void main()

{int i,j,sum,a[5][3]={20,30,26,30,20,25,25,50,20,46,15,10,35,15,12}; for(i=0;i<5;i++) {sum=0;

for(j=0;j<3;j++) sum+=a[i][j]; switch (i)

{case 0:printf(\"第一个\");break; case 1:printf(\"第二个\");break; case 2:printf(\"第三个\");break; case 3:printf(\"第四个\");break; case 4:printf(\"第五个\");break; }

printf(\"企业的总产值是:%d万元。\\n\ }

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

for(i=0;i<5;i++) sum+=a[i][j]; switch (j)

{case 0:printf(\"A\");break; case 1:printf(\"B\");break; case 2:printf(\"C\");break; }

printf(\"产品的总产值是:%d万元。\\n\} }

15. #include

#define N 5 void main()

{int i,j,a[N][N],b[N];

printf(\"请输入%d个数:\ for(i=0;iscanf(\"%d\ for(i=0;ia[i][j]=b[j-i]; for(j=0;jfor(i=0;i16. #include

void main()

{int i=0,j=0,m,n,a[20],b[20];

printf(\"请输入数组a中的数据,以0结束:\"); scanf(\"%d\while(a[i]!=0) { i++;

scanf(\"%d\ }

printf(\"请输入数组b中的数据,以0结束:\"); scanf(\"%d\

while(b[j]!=0) {j++;

scanf(\"%d\}

for(m=0;mprintf(\"%3d在a中下标为%d,在b中下标为%d。\} }

17. #include

void main()

{int a[20][20],b[20][20],flag1[20][20],flag2[20][20],i,j,s,t,k,l,m,n; printf(\"请输入数组a的一维长度:\"); scanf(\"%d\

printf(\"请输入数组a的二维长度:\"); scanf(\"%d\

printf(\"请输入数组a中的数据:\"); for(i=0;iscanf(\"%d\for(i=0;i{ printf(\"%3d\ flag1[i][j]=1; }

printf(\"\\n\"); }

printf(\"请输入数组b的一维长度:\"); scanf(\"%d\

printf(\"请输入数组b的二维长度:\"); scanf(\"%d\

printf(\"请输入数组b中的数据:\"); for(i=0;iscanf(\"%d\for(i=0;i{ printf(\"%3d\ flag2[i][j]=1; }

printf(\"\\n\"); }

for(i=0;ifor(j=0;jfor(s=0;sflag2[s][t]=0;

}

printf(\"只在一个数组中存在的有:\"); for(i=0;i18. #include

void main()

{int a[101],i,j,count=0; for(i=1;i<=100;i++) a[i]=1;

for(i=2;i<=100;i++) for(j=i;j<=100;j++) if(j % i ==0) a[j]*=-1; for(i=1;i<=100;i++) if(a[i]==1) { count++;

printf(\"第%d张正面朝上。\\n\}

printf(\"共有%d张正面朝上。\\n\}

19. #include

void main()

{int n,i,j,k,top,bottom,left,right,goup,godown,goleft,goright,a[20][20]; i=0;j=0;goright=1;goup=0;godown=0;goleft=0; printf(\"请输入方阵的维数:\"); scanf(\"%d\

top=-1;bottom=n;left=-1;right=n; for(k=1;k<=n*n;k++) { a[i][j]=k; if(goright)

{ if(jj++; else {goright=0; godown=1; top++; i++;

continue; } }

if(godown)

{ if(iif(goleft)

{ if(j>left+1) j--; else {goleft=0; goup=1; bottom--; i--; continue; } } if(goup)

{ if(i>top+1) i--; else {goup=0; goright=1; left++; j++; continue; } } }

for(i=0;i{ for(j=0;jprintf(\"%5d\ printf(\"\\n\"); } }

第七章

一、选择题

1. c语言中函数返回值的类型是( D )。

A.return语句中的表达式类型 B.调用函数的类型

C.总是int型 D.定义函数时所指定的函数类型 2. 凡是在函数中未指定存储类别的变量,其隐含的存储类别是 ( A )。

A.自动 B.静态 C.外部 D.寄存器 3. 以下所列的各函数首部中,正确的是( C )。

A.void play(var :Integer,var b:Integer) B.void play(int a,b) C.void play(int a,int b)

D.Sub play(a as integer,b as integer)

4. 当调用函数时,实参是一个数组名,则向函数传送的是( B )。

A.数组的长度 B.数组的首地址 C.数组每一个元素的地址 D.数组每个元素中的值

5. 以下只有在使用时才为该类型变量分配内存的存储类说明是( B )。

A.auto和static B.auto和register C.register和static D.extern和register

6. C语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是( B )。

A. void B.int C.float D.double 7. 在一个C语言程序中,( B )。

A.main函数必须出现在所有函数之前 B.main函数可以在任何地方出现 C.main函数必须出现在所有函数之后 D.main函数必须出现在固定位置 8. 以下叙述中正确的是( B )。

A.全局变量的作用域一定比局部变量的作用域范围大

B.静态(static)类别变量的生存期贯穿于整个程序的运行期间 C.函数的形参都属于全局变量

D.未在定义语句中赋初值的auto变量和static变量的初值都是随机值 9. 若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是( D )。

A.函数调用可以作为的语句存在 B.函数调用可以作为一个函数的实参 C.函数调用可以出现在表达式中 D.函数调用可以作为一个函数的形参 10.有以下函数定义:

void fun(int n, double x)

{ „„ }

若以下选项中的变量都已正确定义并赋值,则对函数fun的正确调用语句是( C )。 A.fun(int y,double m); B.k=fun(10,12.5); C.fun(x,n); D.void fun(n,x);

二、填空题

1. int func(int a,int b)

{

return(a+b); } main() {

int x=2,y=5,z=8,r; r=func(func(x,y),z); printf(\"%d\\n\ }

该程序的输出结果是___15_____。

2. 执行以下程序,当输入“I AM a Student”时,输出结果是 。i am a student

char f(char *ch)

{ if(*ch>=’A’&& *ch<=’Z’) *ch- =’A’-‘a’; return *ch;} main()

{ char s[80],*p=s; gets(s);

while(*p!=’\\0’)

{ *p=f(p);putchar(*p);p++;}}

3. 以下函数findmin返回数组s中最小元素的下标,元素个数由参数t传入,请填空。

int findmin(int s[],int t) { int i,p;

for(p=0,i=0; pif(s[p]>s[i]) p=i ; return s[p] ; }

4. void sort(int a[],int n)

{int i,j,t; for(i=0;iif(a[i]{int aa[10]={1,2,3,4,5,6,7,8,9,10},i; sort(&aa[3],5);

for(i=0;i<10;i++) printf(\"%d,\printf(\"\\n\");

}

程序运行后的输出结果是_1,2,3,8,7,6,5,4,9,10,_____。 5. 有以下程序

int fa(int x) {return x*x; } int fb(int x) {return x*x*x; }

int f(int (*f1)(int),int (*f2)(int),int x) {return f2(x)-f1(x); } main() {int i;

i=f(fa,fb,2); printf(\"%d\\n\}

程序运行后的输出结果是__4___。

6. 以下函数的功能是计算s=1+1/2!+1/3!+„+1/n!,请填空。

double fun(int n)

{double s=0.0,fac=1.0; int i; for(i=1;i<=n;i++) {fac=fac *1.0/i ; s=s+fac; }

return s; }

7. fun函数的功能是:首先对a所指的N行N列的矩阵,找出各行中最大的数,再求这N个最大值中最

小的那个数作为函数值返回。请填空。 #include #define N 100 int fun(int(*a)[N]) {int row,col,max,min; for(row=0;row{for(max=a[row][0],col=1;colif( max< a[row][col] ) max=a[row][col]; if(row==0) min=max;

else if( min>max ) min=max; }

return min; }

8. 函数sstrcmp()的功能是对两个字符串进行比较。当s 所指字符串和t所指字符相等时,返回值为0;

当s所指字符串大于t所指字符串时,返回值大于0;当s所指字符串小于t所指字符串时,返回值小于0(功能等同于库函数strcmp())。请填空。 #include

int sstrcmp(char *s,char *t) {while(*s&&*t&&*s== *t ) {s++;t++; }

return s[0]-t[0] ; }

9.下面程序的运行结果是: 6 int f( int a[], int n)

{ if(n>1) return a[0]+f(&a[1],n-1); else return a[0]; } main ( )

{ int aa[3]={1,2,3},s;

s=f(&aa[0],3); printf(“%d\\n”,s); }

第八章

第8章指针 课后习题参

一、选择题

1. D 2. A 3. B 4. B 5. C 6. A 7. D 8. B 9. A 10. C

11. D 12. D 13. C 14. D 15. B 16. B 17. B 18. D

二、填空题

1. if (*pmax<*px) *pmax=*px; ( 或填*pmax=*px; ) 2. while((*(s+n)= *t)!='\\0' ) 3. bcdefga

三、编程题

1.

#include \"stdio.h\" #define N 10 void main() {

int i_val[N]; int *p;

int i,j,val,k;

for (i = 0 ; i < N ; i++) scanf(\"%d\

}

p = &i_val[0];

printf(\"排序前结果如下:\\n\"); for(i = 0 ; i < N; i++) printf(\"%d\\n\printf(\"\\n\");

for( i = 0 ; i < N-1; i++) { k=i; for(j = i+1 ; j < N ; j++) if (p[j] < p[k]) k=j; if (k!=i) { val=p[i]; p[i]=p[k]; p[k]=val; } }

printf(\"排序后结果如下\\n\"); for(i = 0 ; i < N; i++) printf(\"%d\\n\printf(\"\\n\");

2.

#include \"stdio.h\" #define N 3 void main() {

int i_val[N][N]={11,12,13,21,22,23,31,32,33}; int *p;

int nSum=0; int i;

p = i_val[0];

printf(\"求对角线元素之和\"); for( i = 0 ; i < N; i++) { nSum += p[i*N+i];

nSum += p[(N-i-1)*N+i];

}

if(N%2) nSum-=p[N/2*N+N/2];

printf(\"结果如下:\\n\"); printf(\"%d\\n\ }

3.

#include \"stdio.h\" #define N 5

void f(int val[] ,int size) {

int min_index=0,max_index= 0; int i =0; int v;

for (i = 1 ; i < size ; i ++) { if(val[i]val[max_index]) max_index = i; }

v = val[max_index];

val[max_index] = val[size-1]; val[size-1]= v;

v = val[min_index]; val[min_index] = val[0]; val[0]= v; }

void main() {

int val[N]={91, 55 ,11, 44 , 33}; int i;

printf(\"执行函数f之前\\n\"); for(i = 0 ; i < N; i++) printf(\"%d\\n\

f(val,N);

printf(\"执行函数f之后\\n\"); for(i = 0 ; i < N; i++)

printf(\"%d\\n\printf(\"\\n\"); }

4.

#include \"stdio.h\" #include \"string.h\" #define N 5

void strcpy2(char * src ,char *dest) {

int i = 0;

int len = strlen(src);

for(i = 0 ; i < len ; i++) { dest[i]= src[i]; dest[len+i]= src[i]; }

dest[2*len]=0; }

void main() {

char a[1024],b[1024]; scanf(\"%s\ strcpy2(a,b); printf(\"%s\\n\ } 5.

#include \"stdio.h\" #include \"string.h\" #define N 5

int ishuiwen(char * str) {

int i = 0;

int len = strlen(str);

for(i = 0 ; i < len /2 ; i++) { if(str[i]!= str[len -1 -i] ) return 0;

}

return 1; }

void main() {

char a[100]; scanf(\"%s\ if(ishuiwen(a)) printf(\"yes\\n\"); else printf(\"no\\n\"); printf(\"\\n\"); }

第9章 习题答案

一、选择题

1.C 2.C 3.D 4.D 5.C 6.A 7.D 8.B 9.D 10.D 二、填空题

1. s->data=x; q=p; q->next=s;

2. struct student t; i3. int fun(STYPE *std); FILE *fp; fwrite(&std[i], sizeof(STYPE), 1,fp); 4. p!=NULL; return n; k=fun(head,ch);

5. struct student fun(struct student a) strcpy(a.name, \"LiSi\"); a.score[i]+=1; 三、编程题

1.题目功能由函数fun实现,代码如下: struct stu //结构体定义 { long num;

float score; struct stu *next; };

void fun(struct stu *head, struct stu *p0) { struct stu *p0, *p1, *p2;

p1=head->next; p2=head;

while((p0->score>p1->score)&&(p1!=NULL)) //查找插入点 {p2=p1; p1=p1->next;} p0->next=p2->next; p2->next=p0; }

2.题目功能由函数fun实现,源程序代码如下: #include #define N 16 typedef struct { char num[10];

int s; } STREC;

int fun( STREC *p,STREC *q,int l, int h ) {

int i,j=0;

for(i=0;i=l&&p[i].s<=h) { q[j]=p[i]; j++; } return j; } main()

{ STREC s[N]={{\"GA005\ {\"GA001\ {\"GA015\ {\"GA011\ STREC h[N],tt;FILE *out ; int i,j,n,low,heigh,t;

printf(\"Enter 2 integer number low & heigh : \"); scanf(\"%d%d\

if ( heigh< low ){ t=heigh;heigh=low;low=t; } n=fun( s,h,low,heigh );

printf(\"The student's data between %d--%d :\\n\ for(i=0;iprintf(\"%s %4d\\n\ printf(\"\\n\");

out = fopen(\"K:\\\\k20\\\\24000922\\\\out.dat\ n=fun( s,h,80,98 ); fprintf(out,\"%d\\n\ for(i=0;iif(h[i].s>h[j].s) {tt=h[i] ;h[i]=h[j]; h[j]=tt;} for(i=0;ifprintf(out,\"%4d\\n\ fprintf(out,\"\\n\"); fclose(out); }

3.题目功能由函数fun实现,源程序代码如下: #include #define N 8 typedef struct { char num[10]; double s[N]; double ave; } STREC;

void fun(STREC *p)

{

double t=0.0; //初始化平均值 int i;

for(i=0;it+=p->s[i]; //求得总分 t/=N; //根据人数,求平均分

p->ave=t;//将平均分赋值到记录ave成员中 } main()

{ STREC s={\"GA005\ int i;

void NONO ( ); fun( &s );

printf(\"The %s's student data:\\n\ for(i=0;iprintf(\"%4.1f\\n\ printf(\"\\nave=%7.3f\\n\ NONO(); }

void NONO()

{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE *out ;

int i,j ; STREC s[10] = {

{\"GA005\ {\"GA001\ {\"GA002\ {\"GA003\ {\"GA004\ {\"GA006\ {\"GA007\ {\"GA008\ {\"GA009\ {\"GA010\};

out = fopen(\"K:\\\\k19\\\\24001715\\\\out.dat\ for(i = 0 ; i < 10 ; i++) { fun(&s[i]) ;

fprintf(out, \"%7.3f\\n\ }

fclose(out) ; }

4.题目功能由函数fun实现,源程序代码如下: #include #include #define N 16 typedef struct

{ char num[10]; int s; } STREC;

STREC fun( STREC *p, char *q ) {

int i; STREC t;

for(i=0;iif(strcmp(p[i].num,q)==0) { t=p[i]; break;} else

{strcpy(t.num,\"\"); t.s=-1; } return t; } main()

{ STREC s[N]={{\"GA005\

{\"GA001\{\"GA015\{\"GA011\

STREC h; char m[10]; int i;FILE *out ;

printf(\"The original data:\\n\"); for(i=0; i{ if(i%4==0) printf(\"\\n\");

printf(\"%s %3d \ }

printf(\"\\n\\nEnter the number: \");gets(m); h=fun( s,m );

printf(\"The data : \");

printf(\"\\n%s %4d\\n\ printf(\"\\n\");

out = fopen(\"K:\\\\k20\\\\24000916\\\\out.dat\ h=fun(s,\"GA013\");

fprintf(out,\"%s %4d\\n\ fclose(out); }

5.题目功能由函数fun实现,代码如下: struct stu //结构体定义 {

long num; float score; struct stu *next; };

struct stu *fun(struct stu *a, struct stu *b)

{ struct stu *pa,*pb,*pc;

pa=a->next; pb=b->next; pc=a; while(pa!=null && pb!=null) if(pa->data<=pb->data) { pc->next=pa; pc=pa;

pa=pa->next; } else

{ pc->next=pb; pc=pb; pb=pb->next; }

pc=pa?pa:pb; return a; }

第10章 习题答案

一、选择题

1.D 2.C 3.B 4.D 5.B 6.D 7.C 二、问答题

1.答:“编译预处理”是C语言编译系统的 一个组成部分。是在编译前由编译系统中的预处理程序对源程序的预处理命令进行加工。

2.答:区别:不带参的宏定义在预处理时只需要宏展开,二带参宏定义在调用中,不仅要宏展开,而且要用实参去代换形参;联系:在编译预处理时都需要进行宏替换。 3.答:条件编译的作用是使程序中一部分内容在满足一定条件时进行编译,这在程序移植和调试中非常有用。 三、编程题

1. #include #define S(x,y) x%y void main() { int t,a,b;

printf(\"input two numbers:\\n \"); scanf(\"%d,%d\ t=S(a,b);

printf(\"%d\\n\}

2. #include #define PR printf #define NL \"\\n\" #define F \"%5.3f\" #define F1 F NL #define F2 F F NL void main() { float a,b;

a=12.56; b=45.145; PR(F1,a); PR(F2,b); }

3. #include

#define MAX(a,b,c)(a>b?(a>c?a:c):(b>c?b:c)) int MAX1(int a,int b,int c) { int max;

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

if(c>max) max=c; return (max); }

void main()

{ int a,b,c,s,t;

scanf(\"%d,%d,%d\s=MAX(a,b,c); t=MAX1(a,b,c);

printf(\"%d,%d\}

4. #define LETTER 1 main()

{ char str[20]=\"C Language\ int i=0;

while((c=str[i])!=’\\0′)

{

i++;

#if LETTER

if(c>=’a'&&c<=’z') c=c-32; #else

if(c>=’A'&&c<=’Z') c=c+32; #endif

printf(\"%c\} }

第十一章 一、选择题 1-4 DABA 二、填空题

1. 11110000 2. a&0 3. a|511 4. ch|32

第十一章

一、选择题 1-4 DABA 二、填空题

1. 11110000 2. a&0 3. a|511 4. ch|32

第十二章 一.选择题 1-5 BBDBD 二、填空题

1. (1) !feof(f1) (2) f2 (3) fclose(f1); (4) 2. (1)fopen(fname,\"w\") (2) ch 三、编程题

1. #include #include void main() { FILE *fp ; char ch,str[10][20]; int i,j; if((fp=fopen(\"file1.txt\ { printf(\"open error\\n\"); exit(0); } printf(\"Enter 10 string:\\n\"); for(i=0;i<10;i++) { while((ch= getchar( ) )!= '\\n') fputc(ch ,fp); fputc(ch ,fp); }

fclose( fp ); if((fp=fopen(\"file1.txt\ { printf(\"open error\\n\"); exit(0); }

for(i=0;i<10;i++) { j=0; while((ch= fgetc(fp))!= '\\n') str[i][j++]=ch; str[i][j]='\\0'; puts(str[i]); }

fclose( fp );

fclose(f2); } 2.

#include #include void main() { FILE *fp ; float x; int i,j; if((fp=fopen(\"file2.txt\ { printf(\"open error\\n\"); exit(0); } printf(\"Enter 10 float:\\n\"); for(i=0;i<10;i++) { scanf(\"%f\

fprintf(fp,\"%f \ /* 注意%f 后要加一空格,以隔开每个数据*/ }

fclose( fp ); if((fp=fopen(\"file2.txt\ { printf(\"open error\\n\"); exit(0); }

for(i=0;i<10;i++) { fscanf(fp,\"%f\ printf(\"%f\\n\ }

fclose( fp ); }

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- igat.cn 版权所有 赣ICP备2024042791号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务