C语言程序设计教程 课后习题参考答案

上传人:仙*** 文档编号:135915341 上传时间:2022-08-16 格式:DOCX 页数:38 大小:67.19KB
收藏 版权申诉 举报 下载
C语言程序设计教程 课后习题参考答案_第1页
第1页 / 共38页
C语言程序设计教程 课后习题参考答案_第2页
第2页 / 共38页
C语言程序设计教程 课后习题参考答案_第3页
第3页 / 共38页
资源描述:

《C语言程序设计教程 课后习题参考答案》由会员分享,可在线阅读,更多相关《C语言程序设计教程 课后习题参考答案(38页珍藏版)》请在装配图网上搜索。

1、《C语言程序设计教程》 课后习题参考答案 习题1 1. (1)编译、链接 .exe (2)函数 主函数(或main函数) (3)编辑 编译 链接 2. (1)-(5):DDBBC (6)-(10):ABBBC 3. (1)答:C语言简洁、紧凑,使用方便、灵活;C语言是高级语言,同时具备了低级语言的特征;C语言是结构化程序设计语言,具有结构化的程序控制语句;C语言有各种各样的数据类型;C语言可移植性好;生成目标代码质量高,程序执行效率高。 (2)编辑、编译、链接、执行 (3)一个C程序由一或多个函数组成,一函数若干条语句构成,每条语句的末

2、尾必须以分号结束。 (4)标识符,关键字,运算符,分隔符,常量,注释符等 4. 从键盘输入一个双精度小数,打印出它的余弦值。 #include #include main( ) { double x; scanf(“%lf”, &x); printf(“%lf\n”, cos(x) ); } 第2章 1. (1)BDE、ACFG (2)D (3) C (4) C 2. (1)错(2)错(3)错(4)对(5)错 3. (1)a=3,b=-27 (2)a=11,b=6,c=6 (3)3 (4)1

3、 0 1 0 1 1 0 (5)-9 9 8 (6)1)20 2)8 3)70 4)0 5)0 6)0 4. (1) #include main( ) { double r, h ,v; r = 2.5; h = 3.5; v = 3.14*r*r*h; printf(“v=%lf\n”, v); } (2) #include main( ) { char ch; ch = getchar( ); printf(“%c\n”, ch + 32); } (3)

4、 #include main( ) { printf(“ *\n”); printf(“ ***\n”); printf(“ *****\n”); printf(“*******\n”); } (4) #include main( ) { double x; scanf(“%lf”, &x); printf(“%d , %lf\n”, (int)x, x – (int)x ); } (5) #include main( ) { double a=3, b=5;

5、 double result = (-2 * a + ( 4*a – b )/( 2*a + b ) )/( (a - 4*b)/(a + b) ); printf(“%lf\n”, result); } 习题3 1. (1)D(2)AD(3)C(4)B(5)A (6)-(10):BDACB 2. (1)3.141593,3.1416,3.142 (2)c=K (3)| 123.46|,|123 | (4)x= 1.23,y= 50.00 (5)0 3. (1)scanf(%f”, c); 改为:scanf(“%f”, &c);

6、 f = (9/5)*c+32; 改为:f = (9.0/5)*c + 32; printf(“摄氏温度%f度相当于华氏温度%f度”, &c, &f); 改为: printf(“摄氏温度%f度相当于华氏温度%f度”, c, f); (2) 补充定义:int h; h = 500/60 改为: h = 500 / 60; m = 500% 60 改为: m = 500%60; printf(“500分钟是%d小时%d分钟,”&h, &m); 改为: printf(“500分钟是%d小时%d分钟” , h, m); 4. (1) #in

7、clude main( ) { char x,y; scanf(“%c%c”, &x, &y); printf(“%d\n”, (x-‘0’) + (y-‘0’) ); } (2) #include main( ) { char x, y; char tmp; printf(“Input two characters:”); scanf(“%c%c”, &x, &y); printf(“Before swap: x=%c, y=%c\n”, x, y); tmp = x; x = y; y =

8、 tmp; printf(“After swap: x=%c, y=%c\n”, x, y); } (3) #include main( ) { char ch; ch = getchar( ); printf(“%c\n”, ch - 32); } 第4章 1. (1)-(5):CAACA 2. (1)BBB (2)AAABBBCCC (3)end (4)d=20 (5)s=2,t=3 (6)first third (7)y=0 y=5 y=10 y=5 3. (1)y

9、=’A’ && ch<=’Z’ ch>=’a’&&ch<=’z’ ch = ch-32 (3)x>2&&x<=10 x>-1&&x<=2 (4)t=x; x=y; y=t; 4. (1) #include main( ) { int x, y , z, t; scanf(“%d%d%d”, &x, &y, &z); if ( x>y ) { t=x; x=y; y=t; } if( x > z ) { t = x; x = z; z= t; } if( y > z ) { t = y; y

10、= z; z = t; } printf(“%d %d %d\n”, x, y ,z); } (2) #include main( ) { int score; scanf(“%d”, &score); if ( score < 0 || score > 100 ) printf(“成绩不合理\n”); else if( score>=90 ) printf(“优秀\n”); else if( score>=80 ) printf(“良好\n”); else if( score >= 70 ) printf(“中

11、等\n”); else if( score >= 60 ) printf(“及格\n”); else printf(“不及格\n”); } (3) #include main( ) { int n; int g,s,b,q;//各位上的数值 scanf(“%d”, &n); g = n%10; //个位 s = n/10%10; //十位 b = n/100%10; //百位 q = n/1000%10; //千位 if( n < 10 ) //一位数 { printf(“%d\n”, 1);//位

12、数 printf(“%d\n”, g); //各位上的数值 } else if ( n < 100 ) //两位数 { printf(“%d\n”, 2);//位数 printf(“%d %d\n”, g,s); } else if ( n < 1000 ) //三位数 { printf(“%d\n”, 3);//位数 printf(“%d %d %d\n”, g, s, b); } else if ( n < 10000 ) //四位数 { printf(“%d\n”, 4);//位数 printf(“%d %d

13、%d %d\n”, g, s, b, q); } } (4) #include main( ) { int n; scanf(“%d”, &n); if( n % 3==0 && n%5==0 && n%7==0 ) printf(“能同时被3、5、7整除\n”); else if( n%3==0 && n%5==0) printf(“能被3和5整除\n”); else if( n%3==0 && n%7==0 ) printf(“能被3和7整除\n”); else if( n%5==0 && n%7==0 )

14、printf(“能被5和7整除\n”); else if( n%3==0 || n%5==0 || n%7==0 ) { if( n%3==0 ) printf(“能被3整除\n”); else if( n%5==0 ) printf(“能被5整除\n”); else printf(“能被7整除\n”); } else printf(“不能被3、5、7中任一个数整除\n”); } (5) #include main( ) { int carType;//车型。1代表夏利;2代表富康;3代表

15、桑塔纳 double xiali = 2.1; //每公里价格 double fukang = 2.4; double sangtana = 2.7; double distance; //距离 double totalMoney;//总的收费 printf("请输入您乘坐的车型:1代表夏利;2代表富康;3代表桑塔纳:"); scanf("%d", &carType); printf("请输入您乘车的总路程:"); scanf("%lf", &distance); if( carType == 1)//夏利 { if( distance < 3

16、 ) totalMoney = 7.0; else totalMoney = 7 + xiali * (distance – 3); } else if( carType == 2 ) //富康 { if( distance < 3 ) totalMoney = 8.0; else totalMoney = 8 + fukang * (distance – 3); } else if( carType == 3 ) //富康 { if( distance < 3 ) totalMoney = 9.0;

17、 else totalMoney = 9 + sangtana * (distance – 3); } printf("(四舍五入)您的车费为:%.0lf\n", totalMoney ); } (6) #include main( ) { double a, b, c; scanf(“%lf%lf%lf”, &a, &b, &c); if( a+b>c && b+c>a && c+a>b ) { if( a==b && b==c ) printf(“等边三角形\n”); else if( a==b || b=

18、= c || c==a ) printf(“等腰三角形\n”); else printf(“一般三角形\n”); } else printf(“不能构成三角形\n”); } 第5章 1. (1)C(2)C(3)K=36(4)C(5)B 2. (1) 3次 (2) x>=1 && x<=10 || x>=200&&x<210 (3) e == 0 (4) 6次 (5) 10 3. (1) 20,10 (2) 16,0 (3) 7BAB4BAB1BC (4) ABABABC (5) ****** *****

19、* ****** ****** 4. (1) a != b (2) n / 10 (3) scanf(“%d”, &a); 5. (3) 行 int fac = 1, sum = 0; 6. (1) #include main( ) { char ch; int alpha=0, space=0, digit=0, other=0; while( (ch=getchar( ) ) != ‘\n’ ) { if( ch>=’A’&&ch<=’Z’ || ch>=’a’&&ch<=’z’)

20、alpha++; else if( ch>=’0’ && ch<=’9’) digit++; else if( ‘ ‘ == ch ) space++; else other++; } printf(“%d %d %d %d\n”, alpha, digit, space, other ); } (2) #include main( ) { int m20, m10; for(m20=1; m20<5; m20++) { for(m10 = 1; m10<10; m10++) if(

21、20*m20+10*m10 == 100 ) printf(“%d, %d\n”, m20, m10 ); } } (3) #include main( ) { int x, y, z; for(x=0; x<10; x++) for(y=0; y<10; y++) for(z=0; z<10; z++) if( x*100+y*10+z + y*100+z*10+z == 532 ) printf(“%d %d %d\n”, x, y, z); } (4) #include

22、 main( ) { int row, spaceCount,starCount; int n; scanf("%d", &n); for( row = 1; row <= n; ++row) { for( spaceCount = 1; spaceCount <= n - row ; ++ spaceCount) printf(" "); //打印出某行上星号前的空格 for( starCount = 1; starCount <= 2* row - 1; ++starCount ) printf("*"); //打印出某行上

23、的所有星号 printf("\n"); //换行 } //打印下半部分 for(row=1; row

24、5) #include main( ) { int n; int g,s,b,q; int t; scanf("%d", &n); g = n % 10; s = n / 10 % 10; b = n /100 % 10; q = n/ 1000%10; g = (g+5)%10; s = (s+5)%10; b = (b+5)%10; q = (q+5)%10; //第1位和第4位交换 t = g; g = q; q = t; //第2位和第3位交换 t = s; s = b; b = t;

25、 printf("%d%d%d%d\n", q,b,s,g); } 第6章 1. (1)无返回值 (2)double 2 (3)无限循环(死循环) (4)result = 720 2. (1) #include void print1( int n ); main( ) { int n; scanf("%d", &n); print1( n ); } void print1( int n ) { int row, col; for(row = 1; row<=n; row++) {

26、 for(col=1; col<=row; col++) printf("#"); printf("\n"); } } (2) #include void print2( int n ); main( ) { int n; scanf("%d", &n); print2( n ); } void print2( int n ) { int row, col; for(row = 1; row<=n; row++) { for(col=1; col<=2*row-1; col++) printf

27、("@"); printf("\n"); } } (3) #include int yearOld(int byear, int bmonth, int bday, int nyear, int nmonth, int nday); main( ) { int nowy,nowm,nowd; int by, bm, bd; int age; printf("请输入生日:"); scanf("%d%d%d", &by, &bm, &bd); printf("请输入现在日期:"); scanf("%d%d%d", &nowy

28、, &nowm, &nowd); age= yearOld(by,bm,bd,nowy,nowm,nowd); printf("age=%d\n", age); } int yearOld(int byear, int bmonth, int bday, int nyear, int nmonth, int nday) { int age; age = nyear - byear; if( nmonthbday) age--; return age

29、; } (4) #include int sum( int n ); main( ) { int n,s; scanf("%d", &n); s = sum( n ); printf("s=%d\n", s); } int sum( int n ) { int s=0; while ( n ) { s += n % 10; n /= 10; } return s; } (5) #include double sumfac( int n ); main( ) {

30、int n; scanf("%d", &n); printf("%.0lf\n", sumfac( n ) ); } double sumfac( int n ) { double f=1.0, s = 0.0; int i; for(i=1;i<=n; i++) { f *= i; s += f; } return f; } (6) #include int gcd(int m , int n); main( ) { int m, n; scanf("%d%d", &m, &n); pr

31、intf("%d\n", gcd(m ,n) ); } int gcd(int m, int n) { int t,r; if( m < n ) { t = m; m= n; n = t; } r = m % n; while( r ) { m = n; n = r; r = m % n; } return n; } (7) #include int gcd(int m , int n); int lcm(int m, int n); main( ) { int m, n; scanf(

32、"%d%d", &m, &n); printf("%d\n", lcm(m ,n) ); } int gcd(int m, int n) { int t,r; if( m < n ) { t = m; m= n; n = t; } r = m % n; while( r ) { m = n; n = r; r = m % n; } return n; } int lcm(int m, int n) { return m*n/gcd(m,n); } (8) #include doubl

33、e mypower(double x, int y); main( ) { double x; int y; scanf("%lf%d", &x, &y); printf("%lf\n", mypower(x,y) ); } double mypower(double x, int y) { int i; double f=1.0; for(i=1; i<=y; i++) f *= x; return f; } 第7章 1. (1)6 (2)5 (3)不能 (4)int a[3][2]={{1,2}, {3,4},

34、 {5,6} }; (5)6 9 (6)abc G 2. (1) #include void reverse( int a[ ], int n ); int main( ) { int array[10]={0}; int i; printf(“请输入10个整数:”); for( i=0; i<10; i++) scanf(“%d”, &array[i]); reverse( array, 10); //调用函数逆序存储数组中的数据 printf(“逆序后

35、的元素为:\n”); for( i=0; i<10; i++) printf(“%5d”, array[i]); printf(“\n”); return 0; } void reverse( int a[ ], int n ) { int i; int tmp; for( i=0; i #inc

36、lude void reverseStr( char str[ ] ); main( ) { char s[100]; gets( s ); reverseStr( s ); puts( s ); } void reverseStr( char str[ ] ) { int i,j; char t; i=0; j=strlen(str)-1; while( i < j ) { t = str[i]; str[i] = str[j]; str[j] = t; i++; j--; }

37、} (3) #include int copyTo(int s1[], int n, int s2[ ]); main( ) { int s1[10], s2[10]; int i,count; for(i=0; i<10; i++) scanf("%d", &s1[i]); count = copyTo(s1, 10, s2); for(i=0; i

38、s2[ ]) { int i, j=0; for(i=0; i void copyToStr(char str1[ ], char str2[ ] ); main( ) { char s1[100], s2[100]; gets(s1); copyToStr( s1, s2 ); puts(s2); } void copyToStr(char str1[ ], ch

39、ar str2[ ] ) { int i=0,j=0; while( str1[i] != '\0' ) { if( str1[i]>='a'&&str1[i]<='z' ) { str2[j] = str1[i]; j++; } i++; } str2[j] = '\0'; return j; } (5) #include void deleteAll( char str[ ], char ch); main( ) { char s[100], ch; gets( s ); ch

40、 = getchar( ); deleteAll( s, ch ); puts( s ); } void deleteAll( char str[ ], char ch) { int i, j; i = 0; j = 0; while( str[i] ) { if( str[i] != ch ) { str[j++] = str[i]; } i++; } str[j] = '\0'; } (6) #include void replaceAll(char str[ ], int ch

41、1, char ch2); main( ) { char s[100], c1, c2; gets( s ); c1 = getchar( ); c2 = getchar( ); replaceAll( s, c1, c2 ); puts( s ); } void replaceAll(char str[ ], int ch1, char ch2) { int i; i = 0; while( str[i] ) { if( str[i] == ch1 ) str[i] = ch2; i++; } } (7) #

42、include int transformToBin( int dnum, int bin[ ] ) ; int main( ) { int array[32]={0}; //保存转换后的二进制数 int num; //待转换的整数 int cc; //最后得到的二进制总共多少位 printf(“请输入一个整数:”); scanf(“%d”, &num); cc = transformToBin( num, array ); //调用转换函数 cc--; //往回退一

43、个元素下标,使cc指向最后一个元素 for( ; cc>=0; cc-- ) //输出转换后的二进制数 printf(“%d”, array[cc]); printf(“\n”); return 0; } int transformToBin( int dnum, int bin[ ] ) { int count = 0; while ( dnum ) //当dnum还未转换完毕 { bin[count++] = dnum % 2; //余数保留到数组对应元素中 dnum /= 2; //数本身除2

44、 } return count; } (8) #include int transformToHex( int dnum, char hex[ ] ) ; int main( ) { char array[32]; //保存转换后的进制数 int num; //待转换的整数 int cc; //最后得到的进制总共多少位 printf("请输入一个整数:"); scanf("%d", &num); cc = transformToHex( num, array ); //调用转换函数 cc--; //往

45、回退一个元素下标,使cc指向最后一个元素 for( ; cc>=0; cc-- ) //输出转换后的进制数 printf("%c", array[cc]); printf("\n"); return 0; } int transformToHex( int dnum, char hex[ ] ) { int count = 0; int t; while ( dnum ) //当dnum还未转换完毕 { t = dnum % 16; if( t < 10 ) hex[count] = t+'0'; //余数保留到

46、数组对应元素中 else hex[count] = t-10+'A'; count++; dnum /= 16; //数本身除16 } return count; } (9) #include #include #include #define M 5 //行 #define N 6 //列 void generate( int a[ ][N], int row, int col ); void display( int a[][N], int row, int c

47、ol); void getMaxEveryRow(int a[][N], int row, int col, int y[]); main( ) { int arr[M][N], y[M]={0}; int i; generate(arr, M, N); display(arr, M, N); getMaxEveryRow(arr,M,N,y); //输出最大值 for(i=0; i

48、int col ) { int i,j; srand( time(NULL) ); for(i=0; i

49、nt a[][N], int row, int col,int y[]) { int i,j; for(i=0; i #include #include #define M 5 //行 #define N 6 //列 void generate( int a[

50、 ][N], int row, int col ); void display( int a[][N], int row, int col); void getMinEveryCol(int a[][N], int row, int col); main( ) { int arr[M][N]; int i; generate(arr, M, N); display(arr, M, N); getMinEveryCol(arr,M,N); //输出最小值 for(i=0; i

51、ntf("\n"); } void generate( int a[ ][N], int row, int col ) { int i,j; srand( time(NULL) ); for(i=1; i

52、[j]); printf("\n"); } } void getMinEveryCol(int a[][N], int row, int col) { int i,j; for(i=0; i a[j][i] ) a[0][i] = a[j][i]; } } 第8章 1. (1)局部 (2)void (3)auto static extern register (4)auto

53、(5)return (6)递归 (7)求 1!+2!+3!+4!+5! (8)注意全局变量和局部变量的区别 2. (1) #include #include double xc( double x, double y ); main( ) { double a, b; double c; scanf(“%lf%lf”, &a, &b); c = xc( a, b ); printf(“ %lf\n”, c); } double xc( double x, double y ) { return

54、 sqrt( x*x+y*y ); } (2) #include long seconds(int hour, int minute, int second); main( ) { int h,m,s; long sec; printf("输入时间:"); scanf("%d%d%d", &h, &m, &s); sec = seconds(h,m,s); printf("离12点最近的秒数:%ld\n", sec); } long seconds(int hour, int minute, int second) { l

55、ong s; if( hour < 6 ) { s = second+minute*60+hour*60*60; } else { s = 60-second+(60-minute-1)*60+(12-hour-1)*60*60; } return s; } (3) #include int fun( int n ); main( ) { int n; scanf("%d", &n); if( fun( n ) ) //是质数,则输出该数;不是的话,不作任何处理 printf("%d\n", n );

56、 } int fun( int n ) { int i; for(i=2; i int fun( int n ); main( ) { int n; int count=0; for(n=2;n<1000;n++) if( fun( n ) ) { printf("%4d", n ); count++;

57、if( count % 10 == 0 ) printf("\n"); } printf("\n"); } int fun( int n ) { int i; for(i=2; i int func( int n ); main( ) { int n; scanf("%d", &n); printf("%d\n", fu

58、nc(n) ); } int func( int n ) { if ( 1 == n ) return 3; return 2*func(n-1)-1; } (6) #include int gcd(int m, int n); main( ) { int x,y,t; scanf("%d%d", &x, &y); if( x < y ) { t=x; x=y; y=t; } printf("%d\n", gcd(x,y) ); } int gcd(int m, int n) { if (0==n)

59、 return m; return gcd(n, m%n); } 第9章 1. (1)xyzNKT (2)bcdefgh (3)4,4 (4)qponmzyx (5)abcCD (6)0 2. (1) #include #include void reverse( int *p, int n); main( ) { int i; int a[10]={1,2,3,4,5,6,7,8,9,10}; reverse(a,10); for(i=0; i<10; i++) print

60、f("%d ", a[i]); printf("\n"); } void reverse( int *p, int n) { int *q; int t; q = p + n - 1; while( p < q ) { t = *p; *p = *q; *q = t; p++; q--; } } (2) #include #include void reverseStr( char *str ); main( ) { char s[100]; gets(s);

61、 reverseStr(s); puts(s); } void reverseStr( char *str ) { char *pEnd,t; pEnd = str + strlen(str) - 1; while( str < pEnd ) { t = *str; *str = *pEnd; *pEnd = t; str++; pEnd--; } } (3) #include int copyTo(int *s1, int n, int *s2); main( ) { int a[10]={

62、1,2,3,4,5,6,7,8,9, 10}; int b[10], count,i; count=copyTo(a,10,b); for(i=0; i

63、++ = *ps1; } } return ps2 - s2; } (4) #include void copyToStr(char *str1, char *str2); main( ) { char s1[100], s2[100]; gets( s1 ); copyToStr(s1, s2); puts( s2 ); } void copyToStr(char *str1, char *str2) { while( *str1 ) { if( *str1 >= 'a' && *str1 <= 'z' )

64、 { *str2++=*str1; } str1++; } *str2 = '\0'; } (5) #include void deleteAll(char *str, char ch); main( ) { char s[100], c; gets(s); c = getchar( ); deleteAll(s, c); puts(s); } void deleteAll(char *str, char ch) { char *p; p = str; while( *str ) {

65、 if( *str != ch ) *p++ = *str; str++; } *p = '\0'; } (6) #include void replaceAll( char *str, char ch1, char ch2); main( ) { char s[100], c1, c2; printf("输入字符串:"); gets(s); printf("输入查找字符:"); c1 = getchar( ); fflush(stdin); //清除键盘缓冲区 printf("输入替换字符:");

66、 c2 = getchar( ); replaceAll(s,c1, c2); puts(s); } void replaceAll( char *str, char ch1, char ch2) { while( *str ) { if( *str == ch1 ) { *str = ch2; } str++; } } (7) #include int transformToBin( int dnum, int *bin ) ; int main( ) { int array[32]; //保存转换后的进制数 int num; //待转换的整数 int cc; //最后得到的进制总共多少位 printf("请输入一个整数:"); scanf("%d", &num); cc=transformToBin( num, array ); //调用转换函数 cc--; //使cc指向最后一个元素 for( ; cc>=0; cc-- ) //输

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

相关资源

更多
正为您匹配相似的精品文档
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!