C语言程序设计习题解答

更新时间:2024-01-16 04:42:01 阅读量: 教育文库 文档下载

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

《C语言程序设计》习题解答

沈国荣 隋雪莉 闵芳

目录

第1章 C语言程序设计概述 .................................................................................................. 2 第2章 数据类型及其运算 ..................................................................................................... 3 第3章 语句与输入输出 ......................................................................................................... 4 第4章 选择结构程序设计 ..................................................................................................... 6 第5章 循环结构程序设计 ..................................................................................................... 9 第6章 数组 ........................................................................................................................... 12 第7章 函数 ........................................................................................................................... 15 第8章 编译预处理 ............................................................................................................... 18 第9章 指针 ........................................................................................................................... 19 第10章 结构体与共用体 ..................................................................................................... 22 第11章 位运算 ..................................................................................................................... 26 第12章 文件操作 ................................................................................................................. 27

第1章 C语言程序设计概述

一、选择题 1 C 2 B 3 A 4 C 5 C 6 B 7 D 8 B 9 D 10 A 二、填空题 1. 函数、main()函数 2. /*、*/

3. .C、.OBJ、.EXE

4. 顺序结构、选择结构、循环结构 三、编程题 1.【参考代码】 #include int main( ) { printf( \(学校名称)\\n\ printf( \(姓名)\\n\ return 0 ; }

2.【参考代码】 #include int main( ) { printf( \(学校名称)\\n(姓名)\\n\ return 0 ; }

第2章 数据类型及其运算

一、选择题 1 C 11 C 2 C 12 A 3 C 13 D 4 A 14 D 5 B 15 D 6 A 16 C 7 D 17 D 8 D 18 C 9 C、B 19 10 B 20 注:第5题B选项为:'\\'' '\\017' '\\t' 二、填空题

1. 字母、数字、下划线 2. 1、4、4、8 3. -16 4. 3.5 5. 0 6. 9 7. 6 8. -60

9. y%2==1 10. 1、0、1 三、程序阅读题 1. b 2. 0 3. 0 4. 10,2 5. 9,10,9,10 6. 3,1,0,0 7. 3,20,30,1

第3章 语句与输入输出

一、选择题 1 B 2 C 3 C 4 C 5 C 6 B 7 B 8 B 9 D 10 A 二、填空题 1. 123.47 2. D 3. 回车 4. 10,2

三、程序阅读题 1. 261 2. 20 3. 201,10 4. y=4630 y=4630

5. *3.140000,3.142*

6. c:dec=120,oct=170,hex=78,ASCII=x 7. x=1 y=2 *sum*=3 10 squared is : 100 8. 2 48 20.2 20.2 9. x+y+z=48 10. 55, ,A 四、编程题 1.【参考代码】 #include int main( ) {

char ch;

printf(\请输入一个字符:\\n\scanf(\

printf(\的ASCII码为:%d\\n\return 0 ; }

2.【参考代码】 #include #define PI 3.1416

int main( ) { double r, h; double cl,cs,cv;

printf(\请输入圆的半径:\ scanf(\ &r); printf(\请输入圆柱高:\ scanf(\ cl=2*PI*r; cs=PI*r*r; cv=PI*r*r*h; printf(\圆的周长为:%.4lf\\n\ printf(\圆的面积为:%.4lf\\n\ printf(\圆柱的体积为:%.4lf\\n\ return 0 ; }

3.【参考代码】 #include int main( ) { int splitInt,one,ten,hundred; printf(\输入要处理的整数:\ scanf(\ hundred = splitInt/100; ten = splitInt0/10; one = splitInt; printf(\个位:%d,十位:%d,百位:%d\\n\ return 0 ; }

第4章 选择结构程序设计

一、选择题 1 D 2 C 3 C 4 B 5 B 6 C 二、程序阅读题 1. 10 2. 2,2,2 3. 6 4. 97,b 5. c=-1 6. 8888 7. 20,0 8. 2,1 9. 1,1 2,2 2,1 -2,2 10. a=1,b=3 三、程序完善题 1. a>b、c>x 四、编程题 1.【参考代码】 #include int main( ) { int a, b, c,d,min; printf(\输入4个整数:\ scanf(\ if(a < b) min = a; else min = b; if(c < min) min=c; if(d

2.【参考代码】 #include int main( ) { int num,a,b,c,d; printf(\请输入一个四位整数:\

scanf(\ a=num/1000; b=num00/100; c=num0/10; d=num; printf(\各位数字之和为:%d\\n\ return 0 ; }

3.【参考代码】 #include int main( ) { int x; printf(\请输入x:\ scanf(\ printf(\的值为:\ if(x<0) printf(\ else if(x<50) printf(\ else if(x<100) printf(\ else printf(\ return 0 ; }

4.【参考代码】 #include int main( ) { int dj; float zl,je,yfk; printf(\请输入等级(1~4): \ scanf(\ if (dj>4||dj<1) { printf(\无此等级的苹果!\\n\ return 0; } printf(\请输入重量(公斤): \ scanf(\ printf(\ switch (dj) {

}

case 1 : je=5.5*zl; break; case 2 : je=4.3*zl; break; case 3 : je=3.0*zl; break; case 4 : je=2.5*zl; break; }

printf(\您选择苹果级别: %d 级\\n\printf(\您购买苹果重量: %.2f公斤\\n\printf(\您应付金额为: %.2f元\\n\printf(\

printf(\顾客所付金额: \scanf(\if (yfk

printf(\应找您: %.2f元\\n\return 0 ;

第5章 循环结构程序设计

一、选择题 1 2 3 4 5 6 C B B B A B 二、程序阅读题 1. 1,2,0 2 . m=4,n=2 3. A2C4E6 4. 132 5. 4

6. k=0,m=5 7. x=8 8. 1.6 9. 998988

三、程序完善题

1. ( ch > 'Z' && ch <= 'Z' + 4 ) ||(ch > 'z' ) 2. k k/10 3. i + t * 10 s = s + t 4. fabs( t ) >= 1e-6 f = -f 5. i<10 j%3 !=0 四、编程题 1.【参考代码】 #include int main( ) { int n , i , j , k ; printf( \:\\n\ for(n = 100 ; n < 1000 ; n++ ) { i = n % 10 ; /* 个位 */ j = ( n / 10 ) % 10 ; /* 十位 */ k = n / 100 ; /* 百位 */ if ( n == i * i * i + j * j * j + k * k * k ) printf( \ }

return 0 ; }

2. 【参考代码】 #include int main ( ) {

7 8(1) 8(2) 9 10 11 B B C D C B ch - 26 continue int i , m , n , t , p , k ; printf( \scanf ( \if( m < n ) { t = n ; n = m ;

m = t ; }

p = m * n ;

while ( n != 0 ) /* 余数不为0,继续相除,直到余数为0 { i = m % n ; m = n ;

n = i ; }

k = p / m ;

printf( \return 0 ;

}

3. 【参考代码】 #include int main( ) { int i , n , t , sum ; t = 1 ; sum = 0 ; printf( \ scanf( \ for( i = 1 ; i <= n ; i++ ) { t = t * i ; sum = sum + t ; } printf( \\\n\

return 0 ; }

4. 【参考代码】 #include int main( ) { int i , m ; double sum = 0 , k = 1 ; printf( \

*/

}

scanf( \for( i = 1 ; i <= m ; i++ ) { sum = sum + k / i ; k = -k ; }

printf( \return 0 ;

第6章 数组

一、选择题 1 D 2 D 3 D 4 B 5 C 6 C 7 B 8 C 9 C 10 D 11 D 12 13 14 15 16 B D D C D 二、程序阅读题 1 8 2 4 3 0,2 4 12 5 t*M 6 mo 7 fwo

三、程序完善题

1 k = i j = i

a[k] = max a[j] = max

2 sum += score[i] score[i]

5 ( c = getchar( ) ) != '#' num[c-'A'] += 1 四、编程题

1. 【参考代码】 #include #define N 5 int main( ) { int a[N] , i , j , r , temp ; printf( \ for( i = 0 ; i < N ; i++ ) scanf( \ for( i = 0 ; i < N - 1 ; i++ ) { r = i ; for( j = i + 1 ; j < N ; j++ ) if( a[j] < a[r] ) r = j ; if( r != i ) { temp = a[r] ; a[r] = a[i] ; a[i] = temp ; }

}

printf( \for( i = 0 ; i < N ; i++ ) printf( \printf( \return 0 ;

}

2. 【参考代码】 #include int main( ) { int a[10] = { 1 , 2 , 3 , 6 , 7 , 8 , 9 , 10 } ; int x , j , k = 0 ; printf( \ scanf( \ if( x > a[7] ) a[8] = x ; else { for( j = 0 ; j < 8 ; j++ ) if( x < a[j] ) break ; for(k = 8 ; k > j ; k-- ) a[k] = a[k - 1] ; a[j] = x ; } for( j = 0 ; j < 9 ; j++ ) printf( \ printf( \

return 0 ; }

3. 【参考代码】 #include int main( ) { int a[5][5] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21, 22,23,24} ; int i , j ,sum = 0 ; for ( i = 0 ; i < 5 ; i++ ) { for ( j = 0 ; j < 5 ; j++) printf( \ printf( \ } for( i =0 ;i < 5 ; i++ )

sum += a[i][i] ;

printf( \return 0 ;

}

4. 【参考代码】 #include int main( ) { char s1[100] , s2[30] ; int i , j ; printf( \ gets( s1 ) ; printf( \ gets( s2 ) ; for( i = 0 ; s1[i] != '\\0' ; i++ ) ; for( j = 0 ; s2[j] != '\\0' ; j++ , i++ ) s1[i] = s2[j] ; s1[i] = '\\0' ; printf( \ puts( s1 ) ;

return 0 ; }

5. 【参考代码】 #include int main( ) { char s1[100] ; int i ; printf( \ gets( s1 ) ; for( i = 0 ; s1[i] != '\\0' ; i++ ) ; printf( \

return 0 ; }

第7章 函数

一、选择题 1 B 2 D 3 D 4 A 5 B 6 B 7 C 8 B 9 D 10 D 11 A 12 A 13 D 14 D 15 A 二、程序阅读题 1 max is 2 2 a=1,b=2 3 1 11

4 a=11,b=12,c=2 5 6

6 7 8 9 7 8 17

8 0 1 2 0 1 2 三、程序完善题

1 float area ( float r ) return s 2 z = fun( x , y ) z = z * x 3 count =fun( score ) count++ 四、编程题

1. 【参考代码】 #include int main( ) { void f(int n) ; int n ; printf( \ scanf( \ if( n <= 0) printf( \ else f( n ) ;

return 0 ; }

void f(int n) { if( n % 2 == 1 ) printf( \ else printf( \}

2. 【参考代码】 #include < stdio.h >

#include < math.h > int main( ) { void f( int m ) ; int m ; printf( \ scanf( \ f( m ) ; return 0 ; }

void f( int m ) { int i , k ; k = sqrt( m ); for(i = 2 ; i <= k ; i++ ) if( m % i == 0 ) break; if (i >= k + 1 )

printf( \ else

printf( \}

3. 【参考代码】 #include int gys( int m , int n ) { int r ; r = m % n ; while( r != 0 ) { m = n ; n = r ; r = m % n ; } return n ; }

int gbs( int m , int n , int r ) { return m * n / r ; }

int main( ) { int m , n , t ; printf( \:\

scanf( \ if( m < n ) { t = m ; m = n ; n = t ; } t = gys( m , n ) ; printf( \ t = gbs( m , n , t ) ; printf( \ return 0 ; }

4. 【参考代码】 #include int main( ) { void mystrcat( char s1[100] , char s2[30] ) ; char s1[100] , s2[30] ; printf( \ gets( s1 ) ; printf( \ gets( s2 ) ; mystrcat( s1 , s2 ) ; printf( \ puts( s1 ) ; return 0 ; }

void mystrcat( char s1[100] , char s2[30] ) { int i , j ; for( i = 0 ; s1[i] != '\\0' ; i++ ) ; for( j = 0 ; s2[j] != '\\0' ; j++ , i++ ) s1[i] = s2[j] ; s1[i] = '\\0' ; }

第8章 编译预处理

一、选择题 1 A 2 D 3 D 4 A 5 B 6 A 二、程序阅读题 1 6,18 2 15 3 5

第9章 指针

一、选择题 1 D 13 C 2 B 14 D 3 B 15 D 4 C 16 A 5 D 17 C 6 C 7 C 8 C 9 D 10 B 11 A 12 C 二、填空题

1. 地址 , NULL(或0)

2 . char a, *p; , scanf(\, p=&a; 3. *m

4. for( k=0; k<10; k++ )

5. *(p+i) , p[i] , *(x+i) 6. str[i]或*( str + i ) , i 三、程序阅读题 1. gae

2. bcdABCD 3. 7, 8, 8 4. 8 4 5. 3 1

4 2 6. efgh 7. w,one 8. 7

四、程序完善题

1. a[i] 或 *( a + i ) 2. *p!='\\0' *p-'0' 3. p1 p2-x 4. max(int a , int b ); p = max 四、编程题 1.【参考代码】 #include

void sort( int *a , int *b , int *c ); int main() { int m , n , t ; printf( \ scanf( \ sort( &m , &n , &t ) ; printf( \ return 0 ; }

void sort( int *a , int *b , int *c ) { int temp ; if( *a > *b ) { temp = *a ; *a = *b ; *b = temp ; } if( *a > *c ) { temp = *a ; *a = *c ; *c = temp ; } if( *b > *c ) { temp = *b ; *b = *c ; *c = temp ; } }

2.【参考代码】 程序1:

#include

int strcompare( char *str1 , char *str2 ); int main( ) { int m ;

char s1[20] , s2[20] , *p1 , *p2 ; printf( \ scanf( \ printf( \ scanf( \

m = strcompare ( s1 , s2 ) ;

printf( \ return 0 ; }

int strcompare( char *str1 , char *str2 ) { int i = 0 ;

while( ( *( str1 + i ) == *( str2 + i ) ) &&( *( str1 + i ) != '\\0' ) ) i++ ;

return( *( str1 + i ) - *( str2 + i ) ) ; }

程序2:

#include

int strcompare( char *str1 , char *str2 ); int main( ) { int m ;

char s1[20] , s2[20] , *p1 , *p2 ; printf( \ scanf( \ printf( \ scanf( \ p1 = s1 ; p2 = s2 ;

m = strcompare ( p1 , p2 ) ;

printf( \ return 0 ; }

int strcompare( char *str1 , char *str2 ) { int i = 0 ;

while( ( *( str1 + i ) == *( str2 + i ) ) &&( *( str1 + i ) != '\\0' ) ) i++ ;

return( *( str1 + i ) - *( str2 + i ) ) ; }

程序3:

#include

int strcompare( char str1[] , char str2[] ); int main( ) { int m ;

char s1[20] , s2[20] , *p1 , *p2 ; printf( \ scanf( \ printf( \ scanf( \ p1 = s1 ; p2 = s2 ;

m = strcompare ( p1 , p2 ) ;

printf( \ return 0 ; }

int strcompare( char *str1 , char *str2 ) { int i = 0 ;

while( ( str1[i] == str2[i] ) &&( str1[i] != '\\0' ) ) i++ ;

return( str1[i]- str2[i] ) ; }

第10章 结构体与共用体

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

2 . p->next=head->next head->next=p 3. p->next 三、程序阅读题 1. 51,60,21 2. 16

3. 1001,ChangRong,1098.0 四、程序完善题

1. sizeof( struct ps ) 或 sizeof( bt ) 2. p=p->next 3. person[i].sex 五、编程题 1.【参考代码】 #define N 3

#include struct student { char num[6] ; char name[8] ; int score[2] ; float ave ; } ;

void input( struct student stu[N] ) ; void average( struct student stu[N] ) ; int max( struct student stu[N] ) ; int main( ) {

int i , j ; struct student stu[N] ; input( stu ) ; average( stu ) ; printf( \ for( i = 0 ; i < N ; i++ ) { printf( \ for( j = 0 ; j < 2 ; j++ )

printf( \ printf( \ } i = max( stu ) ; printf( \:\\n\ printf( \ printf( \ for( j = 0 ; j < 2 ; j++ ) printf( \ printf( \ return 0; }

void input( struct student stu[N]) { int i , j ; for(i=0;i

void average( struct student stu[N]) { int i , j , sum ; for(i=0;i

int max( struct student stu[N]) { int i , max , index; max = stu[0].ave ; index = 0 ;

for( i = 1 ; i < N ; i++ ) { if( max < stu[i].ave ) { max = stu[i].ave ; index = i ; } } return index; }

2.【参考代码】 #include #include struct node {

short int data ; struct node *next ; } ;

typedef struct node NODE ; struct node *CreatLink( ) ;

void PrintLink( NODE *head ) ; int max( NODE *head ); int main( ) { NODE *head ; int max_value ; head = CreatLink( ) ; PrintLink( head ) ; max_value = max( head ) ; printf( \ return 0 ; }

struct node *CreatLink( ) {

NODE *head , *p , *q ; short int num ; head = ( NODE * )malloc( sizeof( NODE ) ) ; head->next = NULL ; p = head ; printf( \ scanf( \ while( num != -1 ) {

q = ( NODE *)malloc( sizeof( NODE ) ) ; q->data = num ; p->next = q ; p = q ; scanf( \ }

p->next = NULL ; return head ; }

void PrintLink( NODE *head ) { NODE *p; p = head->next ; printf( \ while( p != NULL ) { printf( \ p = p->next ; } printf( \}

int max( NODE *head ) { NODE *p; short int max = -32768; p = head->next ; while( p != NULL ) { if( max < p->data ) max = p->data ; p = p->next ; } return max ; }

第11章 位运算

一、选择题 1 D 2 B 3 C 4 A 二、填空题 1. 0000 1111 2 . x | ff00

3. 4 3 三、程序阅读题 1. 0 2. 11 22 3. 0

四、编程题 1.【参考代码】 #include int main() { short int data , low ,high ; printf( \ scanf( \ low = data & 0x00ff ; /* 0x00ff表示低字节全1 */ high = data & 0xff00 ; /* 0xff00表示高字节全1 */

printf( \ printf( \ return 0 ; }

2.【参考代码】 #include int main( ) { short int data , result ; printf( \ scanf( \ result = data ^ 0x000f ; /* 0x000f表示低4位全1,高12位全0 */ printf( \ return 0 ; }

第12章 文件操作

一、选择题 1 D 13 C 2 B、C 14 D 3 C 15 C 4 B 5 B 6 A 7 B 8 C 9 D 10 B 11 C 12 C

二、填空题

1. 二进制 ASCII(文本)

2 . FILE *fp # include 3. n – 1 buf的首地址 4. 1

5. 用以获得文件读写位置标记指针的位置,函数返回值为当前文件读写位置标记指针相对于文件开头的字节数

6. 使文件读写位置标记指针重新返回文件的开头 三、程序阅读题 1. 1 2 2. end 3. 3 4. hello,

四、程序完善题 1. ! feof (fp) fgetc (fp) 2. fopen (“num.dat”,”r”) fp,”%d”,&temp z++ 3. ( ch=getchar() ) ch , fp 五、编程题 1.【参考代码】

#include #include #include int main( ) { FILE *fp ; char str[100] , filename[10] ; int i = 0 ; if( ( fp = fopen( \ { printf( \ exit( 0 ) ; } printf( \ gets( str ) ;

while( str[i] != '!' ) { if( str[i] >= 'a' && str[i] <= 'z' ) str[i] = str[i] - 32 ; fputc( str[i] , fp ) ; i++ ; }

rewind( fp ) ;

fgets( str , strlen( str ) + 1 , fp ) ; printf( \printf( \fclose( fp ) ; return 0 ;

}

2.【参考代码】

#include #include #define N 5 struct student { char num[10] ; char name[8] ; int score[3] ; float ave ; } stu[N] ; int main( ) { int i , j , sum ; FILE *fp ; for( i = 0 ; i < N ; i++ ) { printf( \ printf( \

scanf( \ printf( \

scanf( \ sum = 0 ;

for( j = 0 ; j < 3 ; j++ ) { printf( \ scanf( \ sum += stu[i].score[j] ; }

stu[i].ave = sum / 3.0 ;

}

if( ( fp = fopen( \ {

printf( \ exit( 0 ) ; } for( i = 0 ; i < N ; i++ ) { fwrite( &stu[i] , sizeof( struct student ) , 1 , fp ) ; }

fclose( fp ) ;

if( ( fp = fopen( \ {

printf( \ exit( 0 ) ; } printf( \ for( i = 0 ; i < N ; i++ ) {

fread( &stu[i] , sizeof( struct student ) , 1 , fp ) ; printf( \, stu[i].num , stu[i].name , stu[i].score[0] , stu[i].score[1] , stu[i].score[2] ,stu[i].ave ) ;

} fclose( fp ) ; return 0 ; }

3.【参考代码】

#include #include #define N 5 struct student { char num[10] ; char name[8] ; int score[3] ; float ave ; } stu[N] ; int main( ) { int i , j , min , index ; FILE *fp ; struct student temp ; /*从stud.dat文件中读入数据,存放在stu数组中*/

if( ( fp = fopen( \ {

printf( \ exit( 0 ) ; } printf( \ printf( \ for( i = 0 ; i < N ; i++ ) {

fread( &stu[i] , sizeof(struct student ) , 1 , fp ) ; printf( \, stu[i].num , stu[i].name , stu[i].score[0] , stu[i].score[1] , stu[i].score[2] ,stu[i].ave ) ;

} fclose( fp ) ; /*对stu数组中数组元素按其平均值数据域排序*/ for( i = 0 ; i < N -1 ; i++ ) { min = stu[i].ave ; index = i ; for( j = i + 1 ; j < N ; j++ ) { if( min > stu[j].ave ) index = j ; } if( index != i ) { temp = stu[i] ; stu[i] = stu[index] ; stu[index] = temp ; } }

/*将排序之后的stu数组存放在stu_sort文件中*/ if( ( fp = fopen( \ {

printf( \ exit( 0 ) ; } for( i = 0 ; i < N ; i++ ) { fwrite( &stu[i] , sizeof(struct student) , 1 , fp ) ; }

fclose( fp ) ;

/*将stu_sort文件中的数据,读出存放在stu数组中*/

if( ( fp = fopen( \ {

printf( \ exit( 0 ) ; } printf( \:\ /*将stu数组中的数据输出*/ printf( \ for( i = 0 ; i < N ; i++ ) {

fread( &stu[i] , sizeof(struct student) , 1 , fp ) ; printf( \, stu[i].num , stu[i].name , stu[i].score[0] , stu[i].score[1] ,stu[i].score[2] , stu[i].ave ) ;

} fclose( fp ) ; return 0 ; }

if( ( fp = fopen( \ {

printf( \ exit( 0 ) ; } printf( \:\ /*将stu数组中的数据输出*/ printf( \ for( i = 0 ; i < N ; i++ ) {

fread( &stu[i] , sizeof(struct student) , 1 , fp ) ; printf( \, stu[i].num , stu[i].name , stu[i].score[0] , stu[i].score[1] ,stu[i].score[2] , stu[i].ave ) ;

} fclose( fp ) ; return 0 ; }

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

Top