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*******************
正在阅读:
C语言程序设计课后题答案05-12
液压与气压传动 - 习题集(含答案)10-21
红烧肉里的幸福作文600字06-28
物资供应组防汛演习工作总结-04-25
新财富 - 2010-11-27 - 第八届新财富最佳分析师高峰论坛—2011年06-09
我是谁作文400字07-07
呵护心灵作文03-31
2012年武安市高考 2011—2012学年普通高中一、二年级期末质量检03-08
漓江雨中游作文1000字07-11
第四章 桥梁地震反应分析(反应谱)08-16
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 课后
- 程序设计
- 答案
- 语言
- 关于氮气等温吸脱附计算比表面积、孔径分布的若干说明
- 基于导游讲解视角的景区旅游形象感知研究-以凤凰古城为例
- 毕业设计、论文周进展情况记录 范例
- 第十六章二次根式全章导学案(新人教版)
- 2G-TD互操作重选时延优化之ExtendedBCCH应用专题报告
- 申请了暂缓 怎么挂靠档案入户广州南方人才市场
- 杜栋 第三版《信息管理》作业答案
- 2018-2024年中国砂浆收缩膨胀仪行业市场分析及投资可行性研究报
- 《海事系统建立健全教育、制度、监督并重的惩治和预防腐败体系的
- 推荐下载 初中英语多元教学法的探究-最新
- 作文《百善孝为先》
- 2012年6月英语试卷和答案
- 财务分析问答题
- 330kV变电站一次设计
- 《传播理论:起源、方法与应用》复习笔记
- 烧碱装置安全监理细则B11-01
- 最新一年级美术教案
- 2014新版中国铁路总公司《铁路技术管理规程》(含新增高速铁路部
- 中国会计标准国际趋同中存在的差异分析
- 8.静设备安装施工方案