C语言程序设计课后题答案

更新时间:2024-05-12 21:06:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

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

第一章 程序设计基本概念

************************************************** (1) exe

(2) C,obj , exe (3) 顺序,选择,循环

***************End of Chapter 1******************* 第二章 C程序设计的初步知识

************************************************** 一、选择题

(1) B (2) D (3) B (4) A (5) C (6) A (7) B (8) B (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) float a1=1,a2=1 ; (20) 存储单元 (21) 3.5

(22) a*b/c a/c*b a*(b/c) (23) 10赋给变量s (24) 位,0或1

(25) 8 ,255 ,11111111,0,00000000 (26) 32767 ,-32768 ,10000000 00000000 (27)十,八,十六 三、上机改错题

—————————————————————————————————————— (28) 请指出以下C程序的错误所在 #include stdio.h ;

main( ); / * main function * /

float r, s; /* /*r is radius*/,/*s is area of circular*/*/ r = 5.0 ;

s=3.14159 * r * r ; printf(\ ※正确应为:

#include 或 #include\main( ) /* main function */ {

float r,s; /*r is radius, s is area of circular*/ r = 5.0 ;

s = 3.14159 * r * r ;

printf(\}

—————————————————————————————————————— (29) 请指出以下C程序的错误所在 #include stdio.h main /* main function */ {

float a,b,c,v; /*a,b,c are sides, v is volume of cube*/ a = 2.0 ; b = 3.0 ; c = 4.0 v = a * b * c; printf(\}

※正确应为: #include\main( ) /* main function */ {

float a,b,c,v; /*a,b,c are sides, v is volume of cube*/ a = 2.0 ; b = 3.0 ; c = 4.0; v = a * b * c; printf(\}

***************End of Chapter 2******************* 第三章 顺序结构

************************************************** 一、选择题

(1) C (2) C (3) D (4) C (5) 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( “o”,&c) (18) C (20) B 二、填空题

(21) ① -200,2500 ② i=-200, j=2500 ③ i = -200 , j = 2500 (22) 12 ,0 ,0 (23) 语句块,{ ;} (24) ;

(25) 100<空格>25.81<空格>1.89234 /*可用一个或几个空格作为输入时的间隔符*/ 10025.811.89234 /*Tab(制表符)也可以作为输入时的间隔符*/ 10025.811.89234 /*CR(回车符)也可以作为输入时的间隔符*/

(26) x = 127, x =ццц127, x=ццц177, x=цццц7f, x=ццц127。 (27) x = 127, x =127ццц, x=177ццц, x=7fцццц, x=127ццц。 (28) a=513.789215, a=цц513.79, a=цц513.78921500, a=цц513.78921500 三、上机改错题

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

main( ) {

int hour,minute; hour=560/60; minute=560`;

printf(\}

—————————————————————————————————————— 3.31 编写程序,输入两个整数:1500和350,求出它们的商数和余数并进行输出。 ※程序如下※ #include main( ) {

int num1,num2,i,j; /* 定义变量 i-商,j-余数 */ printf(\ scanf(\ i=num1/num2; j=num1%num2;

printf(\商=%d\\n 余数=%d\ }

——————————————————————————————————————

3.32 编写程序,读入三个双精度数,求它们的平均值并保留此平均值小数点后一位数,对小数点后第二位数进行四舍五入,最后输出结果。 ※程序如下※ main( ) {

double a,b,c,average=0; printf(\ scanf(\ average=(a+b+c)/3; average=average*10; average=average+0.5; average=(int)average; average=average/10; printf(\}

——————————————————————————————————————

3.33 编写程序,读入三个整数给a,b,c,然后交换它们中的数,把a中原来的值给b,把b中原来的值给c,把c中的值给a。 ※程序如下※ main( ) {

int a,b,c,t=0;

printf(\

scanf(\ t=c;c=b;b=a;a=t;

printf(\}

***************End of Chapter 3******************* 第四章 选择结构

************************************************** 一、选择题

(1) A (2) A (3) A (4) D (5) C (6) A (7) B (8) 均错 (9)D (10)A 二、填空题 (11) 非零,零

(12) <或<=、>或>=、==、!= (13) 逻辑非、逻辑与、逻辑或

(14) !、<或<=、>或>=、==、!=、&&、|| (15) !

(16) a= =b || a 4 或 x > 4 || x< - 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=1; else if( a<40 ) m=2; else if( a<50 ) m=3; else if( a<60 ) m=4; else m=5; ※程序如下※ main() { int a;

printf(\scanf(\switch(a/10) { case 0: case 1:

case 2: printf(\case 3: printf(\ case 4: printf(\case 5: printf(\default: printf(\

} }

——————————————————————————————————————

4.22 编写程序,输入一位学生的生日(年:y0、月:m0、日:d0);并输入当前的日期(年:y1、月:m1、日:d1);输出该生的实足年龄。 ※程序如下※ main( ) {

int y0,y1,m0,m1,d0,d1,age=0;

printf(\our Birthday(yyyy-mm-dd):\\n\ scanf(\ printf(\ scanf(\ if(d1BR> if(m1BR> age=y1-y0; printf(\ }

—————————————————————————————————————— 4.23 编写程序,输入一个整数,打印出它是奇数还是偶数。 ※程序如下※ main( ) { int i;

printf(\ scanf(\ if(i%2==0) /*条件判断*/ printf(\ else

printf(\}

—————————————————————————————————————— 4.24 编写程序,输入a、b、c三个数,打印出最大者。 ※程序如下※ main( ) {

int a,b,c,max = 0;

printf(\ scanf(\ max = a;

if(maxBR max=\}

—————————————————————————————————————— 4.25 有一函数:

编写一程序,要求输入x的值,输出y的值。分别 (1)不嵌套的if语句 (2)嵌套的if语句

while((ch=getchar())!=EOF) { if(ch==' ') continue; else

printf(\} }

—————————————————————————————————————— 6.22 请编写程序统计输入的行数,输入用EOF结束输入。 ※程序如下※ #include main() { char ch; int i=0;

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

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

printf(\}

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

※程序如下※ #include main() { int i=0; char ch;

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

if((ch>='a')&&(ch<='z')) i++; }

printf(\}

—————————————————————————————————————— 6.24 请编写输出以下图案的程序,图案的行数由输入的值确定。

A BBB CCCCC

DDDDDDD EEEEEEEEEEE ※程序如下※ #include main() { int i,j,k,n;

printf(\scanf(\for(i=1;i<=n;i++) {

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

for(k=1;k<=2*i-1;k++) printf(\printf(\} }

***************End of Chapter 6******************* 第七章 函 数

************************************************** 一、选择题

(1) C (2) C (3) B (4)C (5) A (6) D (7) A 二、填空题 (8) 12 (9) 9.000000 (10) 4 (11) n=1 ,s

(12) z=1 ; i<= y , z = z * x (13) 1 , s * i , 0 ,f ( k ) 三、程序设计和编程题

—————————————————————————————————————— 7.14 以下fun函数用以判断n是否是素数,fun函数中有逻辑错,请调试改正。 fun(int n) { int k,yes;

for(k=2;k<=n/2;k++) if(n%k==0) return yes=0; return yes=1; }

※正确答案是: fun(int n) {

int k,yes=1; for(k=2;k<=n/2;k++) if(n%k==0) return yes=0; return yes; } main() { int n,yes;

printf(\scanf(\yes=fun(n);

if(yes==1)printf(\else printf(\}

—————————————————————————————————————— 7.15 编写函数 int mymod(int a, int b)用以求a被b除之后的余数。 ※程序如下※ #include

int mymod( int a, int b ) {

int remainder; remainder=a%b; return remainder; } main() { int a,b;

printf(\scanf(\printf(\余数=%d\}

—————————————————————————————————————— 7.16 编写程序求:1-1/2+1/3-1/4+1/5-1/6+1/7-...1/n ※程序如下※ main() { int n; float a;

float sum(int n); scanf(\a=sum(n); printf(\}

float sum(int n) { float s=0; int i,t=1; for(i=1;iBR> { s=s+1/i*t; t=-t; } return s; }

—————————————————————————————————————— 7.17 编写函数,根据整型形参m的值,计算如下公式的值。 t=1-1/(2 x 2)-1/(3 x 3)-...-1/(m x m) 例如:若m=5,则应输出0.536389。 ※程序如下※ main() { float t=1; float f2(int); int i,m;

scanf(\for(i=2;i<=m;i++) t=t-f2(i); printf(\}

float f2(int m) { float s; s=1.0/(m*m); return s; }

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

y2=(x+15)2-5*(x+15)+4 y3=sin2x-5*sinx+4 ※程序如下※ #include #include float fun(float x) { float y;

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

return y; } main() {

float x,y1,y2,y3; clrscr();

printf(\scanf(\ y1=fun(2); y2=fun((x+15)); y3=fun(sin(x));

printf(\}

***************End of Chapter 7******************* 第八章 指 针

************************************************** 一、选择题

(1) A (2) 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 请编写函数,其功能是对传送过来的两个浮点数求出和值与差值,并通过形参传送回调用函数。 ※程序如下※ #include

sum_sub(float a,float b,float *sum, float *sub) {

*sum=a+b; *sub=a-b; } main() {

float a,b,sum,sub; /*定义变量sum求和,变量sub求差*/ printf(\scanf(\sum_sub(a,b,&sum,&sub); printf(\

}

—————————————————————————————————————— 8.18 请编写函数,对传送过来的三个数选出最大和最小数,并通过形参传回调用函数。 ※程序如下※ #include

max_min(double a,double b,double c,double *max,double *min) {

*max = a ; /* 假定a的值为最大,把a值赋给指针变量*max */

if(*maxBR\假定a的值为最小,把a值赋给指针变量*min */ if(*min>b) *min = b; if(*min>c) *min = c; } main() {

double a,b,c,max,min;

printf(\scanf(\max_min(a,b,c,&max,&min); printf(\}

***************End of Chapter 8******************* 第九章 数 组

************************************************** 一、选择题

(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的元素统计字符\的个数,... ※程序如下※ #include

void count(int a[]) { int i; char ch;

while((ch=getchar())!='\\n') for(i=0;i<10;i++) if(i==ch-'0') if(i==0) a[9]++; else a[i-1]++; } main( ) {

int i,a[10]={0}; count(a); for(i=0;i<10;i++) printf(\}

——————————————————————————————————————

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

※程序如下※ fun (int a[],int n) { int i;

for(i=n;i<9;i++) a=a[i+1]; } main() {

int a[10]={0,1,2,3,4,5,6,7,8,9},n,i; scanf(\fun(a,n); for(i=0;i<9;i++) printf(\}

—————————————————————————————————————— 9.29 编写函数把数组中所有奇数放在另一个数组中返回. ※程序如下※ #include #include

int fun(int a[],int b[])

{ int i,j=0; for(i=0;i<10;i++) if(a%2==1) b[j++]=a; return(j); } main() {

int i,j,a[10],b[10]; clrscr();

printf(\for(i=0;i<10;i++) scanf(\j=fun(a,b);

printf(\for(i=0;iBR> printf(\getch(); }

—————————————————————————————————————— 9.30 编写函数对字符数组中的输入字母,按由大到小的字母顺序进行排序。 ※程序如下※ #include

void alpha_sort(char a[],int n); void alpha_rout(char a[],int n); main() { char a[20]; int n; clrscr();

printf(\gets(a); n=strlen(a); alpha_sort(a,n); alpha_rout(a,n); }

void alpha_sort(char a[],int n) { int i,j,p,t; for(j=0;jBR> { p=j;

for(i=j+1;iBR> if(a[p]BR\{

t=a[j]; a[j]=a[p]; a[p]=t; } } }

void alpha_rout(char a[],int n) { int i;

printf(\for(i=0;iBR> printf(\}

——————————————————————————————————————

9.31 输入若干有序数放在数组中。然后输入一个数,插入到此有序数列中,插入后, 数组中的数仍然有序。请对以下三种情况运行你的程序,以便验证你的程序是否正确。 (1)插在最前 (2)插在最后 (3)插在中间 ※程序如下※ #include #define M 10

void sort(int a[M],int b[M+1],int n) { int i;

for(i=0;iBR> { if(a[0]>a[M-1]) {

if(nBR> b=a; else { b=n; break; } } else { if(n>a) b=a; else { b=n; break; } }

}

if(iBR> for(;iBR> b[i+1]=a; else b=n; } main() {

int i,n,a[M],b[M+1]; clrscr();

printf(\for(i=0;iBR> scanf(\printf(\scanf(\sort(a,b,n);

printf(\for(i=0;i<=M;i++) printf(\}

——————————————————————————————————————

9.32 编写函数把任意十进制整数转换成二进制数.提示:把十进制数不断除2除,余数放在一个一维数组中,直到商数为零.在主函数中进行输出,要求不得按逆序输出. ※程序如下※ #include

int dec_bin(int a[],int decimal) /*变量decimal表示十进制数*/ {

int i=0,remainder; while(decimal>0) {

remainder=decimal%2; decimal=decimal/2; a[i++]=remainder; if(decimal<2) { a=decimal; break; } } return(i); } main() {

int i,j,decimal,a[64];

printf(\scanf(\j=dec_bin(a,decimal); for(i=j;i>=0;i--) printf(\}

——————————————————————————————————————

9.33 编写函数调用随机函数产生0到19之间的随机数,在数组中存入15个互不重复的整数。要求在主函数中输出结果。若已定义x为int类型,调用随机函数步骤如下: #include \. . .

x=rand() /*产生0到19的随机数*/ ※程序如下※ #include

void rand1(int a[]) {

int i=0,j,x,flag; while(i<15) { flag=1; x=rand() ;

for(j=0;jBR> if(a[j]==x) { i--; flag=0; break; }

if(flag==1) a=x; i++; } } main() { int i,a[15]; clrscr(); rand1(a); for(i=0;i<15;i++) printf(\}

——————————————————————————————————————

9.34 求任意方阵每行、每列、两对角线上元素之和。 ※程序如下※ #include #define M 3

void line_sum(int a[M][M],int a1[]) { int i,j,k;

for(i=0,k=0;iBR> { a1[k]=0;

for(j=0;jBR> a1[k]+=a[j]; } }

void column_sum(int a[M][M],int a2[]) { int i,j,k;

for(i=0,k=0;iBR> { a2[k]=0;

for(j=0;jBR> a2[k]+=a[j]; } }

void diagonal_sum(int a[M][M],int a3[]) { int i,j;

for(i=0;iBR> for(j=0;jBR> { if(i==j) a3[0]+=a[j]; if(i+j==M-1) a3[1]+=a[j]; } } main() {

int i,j,a[M][M],a1[M],a2[M],a3[2]={0}; clrscr(); i=M;

printf(\for(i=0;iBR> for(j=0;jBR> scanf(\line_sum(a,a1); column_sum(a,a2); diagonal_sum(a,a3);

for(i=0;iBR> printf(\

for(i=0;iBR> printf(\for(i=0;i<2;i++)

printf(\}

—————————————————————————————————————— 9.35 求两个矩阵的和 #include #define M 4

void add(int a[M][M],int b[M][M],int c[M][M]) { int i,j; for(i=0;iBR> {

for(j=0;jBR> c[j]=a[j]+b[j]; } } main() {

int i,j,k,a[M][M],b[M][M],c[M][M]={0}; i=M;

printf(\for(i=0;iBR> for(j=0;jBR> scanf(\i=M;

printf(\for(i=0;iBR> for(j=0;jBR> scanf(\add(a,b,c); i=M;

printf(\\\n\for(i=0;iBR> {

for(j=0;jBR> printf(\printf(\} }

—————————————————————————————————————— 9.36 编写函数打印出以下形式的乘法九九表。 ** A MULTIPLICATION TABLE ** (1) (2) (3) (4) (5) (6) (7) (8) (9)

---------------------------------------------------------- (1) 1 2 3 4 5 6 7 8 9 (2) 2 4 6 8 10 12 14 16 18 (3) 3 6 9 12 15 18 21 24 27 (4) 4 8 12 16 20 24 28 32 36 (5) 5 10 15 20 25 30 35 40 45 (6) 6 12 18 24 30 36 42 48 54

(7) 7 14 21 28 35 42 49 56 63 (8) 8 16 24 32 50 48 56 64 72 (9) 9 18 27 36 45 54 63 72 81

---------------------------------------------------------- ※程序如下※ #include main() { int i,j; clrscr();

printf(\printf(\

printf(\for(i=1;i<=9;i++) {

printf(\for(j=1;j<=9;j++) printf(\printf(\}

printf(\}

——————————————————————————————————————

9.37 调用随机函数为5 x 4的矩阵置100以内的整数,输出该矩阵,求出每行元素之和并把和值最大的那一行与第一行上的元素对调。若已定义x为int类型,调用随机 函数步骤如下: #include \. . .

x=rand( )0 /*产生0到100的随机数*/ ※程序如下※ #include #include void rand1(int *p) { int i,j;

for(i=0;i<5;i++) for(j=0;j<4;j++,p++) *p=rand()0; }

void exchange(int a[5][4]) {

int i,j,max,temp,b[5]={0}; for(i=0;i<5;i++) for(j=0;j<4;j++) b+=a[j]; for(i=0;i<5;i++)

if(bBR> for(j=0,i=0;j<4;j++) { temp=a[j]; a[j]=a[max][j]; a[max][j]=temp; } } main() {

int i,j,a[5][4]; clrscr(); rand1(a);

printf(\for(i=0;i<5;i++) {

for(j=0;j<4;j++) printf(\printf(\}

exchange(a);

printf(\for(i=0;i<5;i++) {

for(j=0;j<4;j++) printf(\printf(\} }

——————————————————————————————————————

9.38 调用随机函数为5 x 5 的矩阵置100以内的整数,输出该矩阵,然后逆置该矩阵。即将第一列的元素放在第一行上、第二列的元素放在第二行上、其它依次类推。 ※程序如下※ #include #include

void Rand1(int *p) { int i,j;

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

for(j=0;j<5;j++,p++) *p=rand()0; }

void Reverse_Matrix(int a[5][5]) {

int i,j,temp; for(i=0;i<5;i++) for(j=0;jBR> { temp=a[j]; a[j]=a[j]; a[j]=temp; } } main() {

int i,j,a[5][5]; clrscr(); Rand1(a);

printf(\for(i=0;i<5;i++) {

for(j=0;j<5;j++) printf(\printf(\}

Reverse_Matrix(a);

printf(\for(i=0;i<5;i++) {

for(j=0;j<5;j++) printf(\printf(\} }

***************End of Chapter 9******************* 第十章 字 符 串

************************************************** 一、选择题

(1) B 2)B 3)C 4)B 5)C (6) A 7)C 8)A 9)C 10)C 二、填空题 (11) GFEDCB

(12) YXZA (13) S0 (14) 10 (15) I t i s s ! (16) strlen(str), j - - (17) 3 (18)goodgood ! 三、编程题

——————————————————————————————————————

10.19 请编写函数mygets和myputs,其功能分别与gets和puts相同,函数中用getchar和putchar读入和输出字符。 ※程序如下※ #include

void mygets(char *p) { char ch;

while((ch=getchar())!='\\n') *(p++)=ch; p[0]=0; }

void myputs(char *p) { char ch; while(*p!='\\0') putchar(*(p++)); } main() { char *s; clrscr(); mygets(s); myputs(s); }

——————————————————————————————————————

10.20 请编写函数,判断一字符串是否是回文。若是回文函数返回值为1;否则返回值为0。回文是顺读和倒读都一样的字符串。 ※程序如下※ #include main() {

char a[200],*p; int i,j,flag=1;

clrscr(); scanf(\p=a; j=strlen(a);

for(i=0;i<=j/2;i++,j--) if(*(p+i)!=*(p+j-1)) { flag=0; break; } if(flag) printf(\es\else printf(\}

——————————————————————————————————————

10.21 请编写函数,删除字符串中指定位置上的字符。删除成功函数返回被删字符;否则返回空值。 ※程序如下※ #include #include del(char *p,int n) { int i; char ch; if(n<=strlen(p)) ch=*(p+n-1); else ch='0';

for(i=n-1;iBR> *(p+i)=*(p+i+1); return ch; } main() { int n; char *s; clrscr();

printf(\gets(s);

printf(\scanf(\

printf(\printf(\getch();

}

***************End of Chapter 10******************* 第十一章 对函数的进一步讨论

************************************************** 一、选择题

(1) D (2) B (3) A (4) C 二、填空题

(5) I J K L E F G H A B C D (6) 7 (7) 8

(8) * (S+J),i+1,i (9) 17

(10) (* f u n ) ( ), (* f u n ) ( a + i * h ) , m y p o l y 三、编程题

——————————————————————————————————————

11.11 编写程序outch,程序读入一行字符,根据命令行中的参数进行不同的输出。若有以下命令行: outch -2 程序对读入的一行字符输出最后两个字符。若有以下命令行:outch +6 程序对所读入的一行字符输出开头6个字符。若命令行中没有参数,则隐含规定输出最后10个字符。为简单起见,命令行中的参数中只包含一位数字。 ※程序如下※ #include #include

main(int argc,char *argv[]) { int i; char s[64];

printf(\gets(s); while(argc>0) {

if(argc==1) {

for(i=strlen(s)-10;iBR> printf(\break; }

if(argv[1][0]=='-') {

for(i=strlen(s)-(argv[1][1]-'0');iBR> printf(\break; }

if(argv[1][0]=='+') {

for(i=0;i<(argv[1][1]-'0');i++) printf(\

break; } } }

—————————————————————————————————————— 11.12 请写递归函数,把输入的一个整数转换成二进制数输出。 ※程序如下※ #include

dec_bin(int n,int a[]) {

static int i=0; if(n==0||n==1) { a=n; return i; } else {

a[i++]=n%2; return dec_bin(n/2,a); } } main() {

int i,j,n,a[64];

printf(\scanf(\j=dec_bin(n,a); for(i=j;i>=0;i--) printf(\}

—————————————————————————————————————— 11.13 请用递归算法,求1+2+3+...n,n由键盘输入。 ※程序如下※ fun(int n) { int sum; if(n==1) return 1; else {

sum=n+fun(n-1); return sum;

} } main() { int n,sum; clrscr();

printf(\scanf(\sum=fun(n);

printf(\}

—————————————————————————————————————— 11.14 请用递归函数,求裴波拉契级数,求n阶裴波拉契级数的公式如下。 ※程序如下※ #include fac(int n) { long t; if(n==0||n==1) return 1; else {

t=fac(n-1)+fac(n-2); return t; } } main() { int n;

printf(\scanf(\printf(\}

***************End of Chapter 11******************* 第十二章 C语言中用户标识符的作用域和存储类 ************************************************** 一、选择题

(1) C (2) B (3) A (4) C (5) D (6) B (7) A (8) C 二、选择题

(9) 2 ,5 ,1 3 ,2 ,-2 (10)2 4 6 8

***************End of Chapter 12*******************

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

************************************************** 一、选择题

(1) A (2) C (3) B (4) C (5) D (6) D (7) D 二、选择题

(8) a r = 9 a r = 9 a r = 1 1 (9) i n t * , s , *b 三、选择题

—————————————————————————————————————— 13.10 编写出一个宏定义MYALPHA(C),用以判断C是否是字母字符,若是得1,否则得0。 ※程序如下※ #include #include

#define MYALPHA(C) isalpha(C)?1:0 main() { char ch; clrscr(); ch=getchar(); if(MYALPHA(ch)) printf(\else

printf(\}

—————————————————————————————————————— 13.11 请写出一个宏定义swap(t,x,y)用以交换t类型的两个参数。提示:用复合语句的形式。 ※程序如下※ #include

#define swap(t,x,y) {t=x;x=y;y=t;} main() { int a,b,t; clrscr();

printf(\scanf(\swap(t,a,b);

printf(\}

——————————————————————————————————————

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

#include #include void main() {

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

printf(\scanf(\

for (int i=0; i<2; i++) for (int j=i+1; j<3; j++) if (*(pData+i) > *(pData+j)) {

t = *(pData+j);

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

printf(\}

***************End of Chapter 13******************* 第十四章 结构体、共用体和用户定义类型

************************************************** 一、选择题

(1) D (2) D (3) D (4) A (5) C (6)C (7) C (8)B 二、填空题 (9) struct link *next (10) p->next , p->data < m

(11) struct list * , list , struct list * , list , return h 三、编程题

—————————————————————————————————————— 14.12 设有以下结构类型说明: struct stud {

char num[5],name[10]; int s[4]; double ave; }; 请编写:

(1)函数readrec把30名学生的学号、姓名、四项成绩以及平均分放在一个结构体数组中,学生的学号、姓名和四项成绩由键盘输入,然后计算平均分放在结构体对应的域中。 (2)函数writerec输出30名学生的记录。

(3)main函数调用readrec函数和writerec函数,实现全部程序功能(注:不允许使用全局变量,函数之间的数据全部使用参数传递)。 ※程序如下※ #include

#define STUDNUM 30 struct stud {

char num[5],name[10]; int s[4]; double ave; };

void readrec(struct stud *pStud, int num) { int i;

printf(\

for (i=0; iBR> { printf(\

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

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

void writerec(struct stud *pStud, int num) { int i;

printf(\

for (i=0; iBR> { printf(\

printf(\pStud->s[0],pStud->s[1],pStud->s[2],pStud->s[3],pStud->ave); pStud++; } }

void main() {

struct stud student[STUDNUM];

readrec(student,STUDNUM); writerec(student,STUDNUM); }

——————————————————————————————————————

14.13 已知head指向一个带头节点的单向链表,链表中每个节点包含数据区域(data)和指针域(next),数据域为整型。请分别编写函数,在链表中查找数据域值最大的节点。 ※程序如下※ #include #include struct node { int data; struct node *next; };

struct node *SearchMax(struct node *head) { int max;

struct node *pMaxNode,*pNode;

pNode = head; pMaxNode = NULL; while (pNode != NULL) {

if (pNode->data > max || pMaxNode == NULL) {

max = pNode->data; pMaxNode = pNode; }

pNode = pNode->next; }

return pMaxNode; }

void main() {

struct node *head,*tail,*pNode; int data;

printf(\

head = tail = NULL;

while(scanf(\{

pNode = (struct node*)malloc(sizeof(struct node)); pNode->data = data; pNode->next = NULL;

if (head == NULL) head = tail = pNode; else {

tail->next = pNode; tail = pNode; } }

if (head != NULL)

printf(\

while(head != NULL) {

pNode = head; head = head->next; free(pNode); } }

***************End of Chapter 14******************* 第十五章 位 运 算

************************************************** 一、选择题

(1)D 2)A 3)B 4)A 二、填空题 (5) 11110000 (6) a & 0 (7) a | 1

(8) x | 1111111100000000 (9) a = 012500>>2 10)ch | 32

***************End of Chapter 15******************* 第十六章 文 件

************************************************** 一、选择题 (1) B (2) C 二、填空题

(3) 3 , f1! = f2 , f2 , fclose (f1) , fclose(f2)

(4) fopen(fname,\

(5) \ (6) AAAABBBBCCCC 三、编程题

——————————————————————————————————————

16.7 请调用fputs函数,把10个字符串输出到文件中,再从此文件中读入这10个字符串放在一个字符串数组中;最后把字符串数组中的字符串输出到终端屏幕,以检验所有操作是否正确。 #include main() { int i; char s[100]; FILE *fp;

if((fp=fopen(\{

printf(\exit(0); }

for(i=0;i<10;i++) { gets(s); fputs(s,fp); fprintf(fp,\}

rewind(fp); for(i=0;i<10;i++) {

fgets(s,100,fp); printf(\} fclose(fp); }

——————————————————————————————————————

16.8 从键盘输入10个浮点数,以二进制形式存入文件中。再从文件中读出数据显示在屏幕上。修改文件中第四个数。再从文件中读出数据显示在屏幕上,以检验修改是否正确。 ※程序如下※ #include main() { int i;

float n,a[10],b[10]; FILE *fp; clrscr();

printf(\

if((fp=fopen(\{

printf(\exit(0); }

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

scanf(\fwrite(&n,4,1,fp); }

rewind(fp); /*是文件指针指向文件开始*/ printf(\for(i=0;i<10;i++) {

fread(&a,4,1,fp); /* 从文件中读出数据存入数组*/ printf(\}

printf(\scanf(\

fseek(fp,3*4L,SEEK_SET); /*使文件指针指向第四个数*/ fwrite(&n,4,1,fp); rewind(fp); for(i=0;i<10;i++) {

fread(&b,4,1,fp); printf(\} fclose(fp); }

***************End of Chapter 16*******************

本文来源:https://www.bwwdw.com/article/jnug.html

Top