C语言程序设计-科学出版社-曹计昌--习题答案.docx
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 科学出版社 曹计昌 习题 答案
- 资源描述:
-
第一章习题 1.4 原码:对于一个二进制数X,如果规定其最高位为符号位,其余各位为该数的绝对值,并且规定符号位值为0表示正,为1表示负,采用这种方式的二进制编码称为该二进制数X的原码。 补码:正数的补码等于正数的原码,负数的补码为其原码除符号位不动外,其余各位变反再加1所得。 反码:对于正数而言,反码与原码相同;对于负数而言,反码符号位的定义与原码相同,但需要将对应原码的数值位按位变反。 1.5 和:10101010 差:00010000 1.6 和 01073 差 -0337 1.7 和 0x1AABA 差 -0x5320 1.8 (251)10=(11111011)2=(373)8=(FB)16 1.10 在16位机中,[157]补= 0000000010011101 [-153]补= 1111111101100111 157-153=157+(-153) = (0000000010011101) 2+(1111111101100111) 2=(0000000000000100) 2=(4) 10 1.14 算法设计:用变量s存储累加和,k表示计数 描述为: (1)定义变量s,k。 (2)s清零,k赋初值1。 (3)判断k<101?如果是,顺序执行(4);否则转步骤(5); (4)k加到累加和变量s中,k加1;转步骤(3)。 (5)输出累加和s。 (6)结束。 开始 结束 int s=0,k=1; k<101? s=s+k; k=k+1; 输出s N Y 1.16 第二章习题 2.2 (1) x, ++, +, y (2)-, 0xabL (3)2.89e+12L (4)”String+\” FOO\”” (5)x, *, *, 2 (6)”X??/” (7)a, ?, b (8)x, --, +=, y (9)intx, =, +, 10 (10)”String”, “FOO” 2.3 不是表识符的如下: 4th 首字母为数字 sizeof关键字 x*y *不是字母、数字、下划线 temp-2 -不是字母、数字、下划线 isn’t ’不是字母、数字、下划线 enum 关键字 2.4 合法常数: .12 0.L 1.E-5 3.F 浮点型常量 2L 33333 0377UL 0x9cfU 整型常量 “a” “” 字符串常量 ‘\45’ ‘\0’ ‘\a’ 字符常量 非法常数: ‘‘’必须用转义序列 0x1ag 十六进制没有g E20 没有尾数部分 ‘\18’ 要用八进制数 ‘\0xa’ 格式错误,可以是’\xa’ “3’4”” 需要转义序列 ‘”’ 需要转义序列 2.5 (1)int a, b=5; (2)double h; (3)int x=2.3; 0.3 会被截取。 (4)const long y=1; 必须赋初值 (5)float a= 2.5*g; g 没有定义。 (6) int a=b=2; 在 turbo C 中编译出错:未定义的符号’b’在main函数中。 2.6 (1)4 (2)0 (3)1 (4)6 (5)8 (6)0 (7)3.00 (8)1 (9)108 (10)0 2.7 答案不确定 (1)a==b==c c未定义 (2)正确 (3)正确 (4)正确 (5)a*++-b 表达式缺值 (6)a||b^i ^运算的操作数必须是整型,而i不是 (7)i*j%a %运算的操作数必须是整型,而a不是 (8)正确 (9)正确 (10)int(a+b) 应该改成(int)(a+b) 2.9 (1)0 (2)-2 (3)65535 (4)5 (5)60 (6)113 (7)-2 (8)-1 (9)65532 (10)3 2.10 unsigned long encrypt(unsigned long x) { unsigned long x0,x1,x2,x3,x4,x5,x6,x7; x0=(x & 0x0000000F) << 8; x1=(x & 0x000000F0); x2=(x & 0x00000F00) << 8; x3=(x & 0x0000F000); x4=(x & 0x000F0000) << 8; x5=(x & 0x00F00000); x6=(x & 0x0F000000) >> 24; x7=(x & 0xF0000000); return(x0|x1|x2|x3|x4|x5|x6|x7); } 2.11 #include<stdio.h> void main() { unsigned long in; unsigned long a,b,c,d; scanf("%ld",&in); //in=1563; a=(in&0xff000000)>>24; b=(in&0x00ff0000)>>16; c=(in&0x0000ff00)>>8; d=in&0x000000ff; printf("%d.%d.%d.%d",a,b,c,d); } 2.15 ((k >>8)& 0xFF00) | ((p & 0x00FF)<<8) 2.16 max=a>b?a>c?a:c:b>c?b:c; max=a > b ? ((a > c) ? a : c):((b > c) ? b : c); 2.17 X=y>>n 2.18 (c>=’0’ && c<=’9’)? c – ‘0’ : c 2.19 (a % 3 == 0) && (a % 10 == 5) ? a : 0; 第三章习题 3.1 函数原型是指对函数的名称、返回值类型、参数的数目和参数类型的说明。其规定了调用该函数的语法格式,即调用形式。 putchar函数的原型为:int putchar(int c); puts函数的原型为: int puts(const char *s); printf函数的原型为:int printf(const char *format,…); getchar函数的原型为:int getchar_r(void); gets函数的原型为:char * gets_r(char *s); scanf函数的原型为: int scanf(const char *format,…); 3.2 不同点:① puts为非格式输出函数,printf为格式输出函数; ② puts函数的参数类型和数目一定(一个字符串),printf函数的参数类型和数目不固定; ③ puts函数输出后会自动换行,printf函数没有这一功能。 相同点:①二者都向标准设备输出; ②二者返回值类型都为int。 3.3 x1=-1,177777,ffff,65535 x2=-3,177775,fffd,65533 y1=123.456703, 123.457,123.457,123.457 (注意对齐) y2=123.449997,1.23450e+02,123.45 x1(%4d)= -1 3.4 ⑴%c;⑵%c;⑶%f;⑷%f;⑸%lu;⑹%d;⑺%d;⑻%d;⑼%f;⑽%Lf 3.5 ⑴错误,运行提示为divide error ⑵正确,结果为b ⑶正确,结果为 * ⑷正确 ⑸正确,但无法正常从结果中退出 ⑹正确 ⑺正确,结果为82,63 ⑻编译错误,提示 cannot modify a const object ⑼正确 ⑽正确 3.6 -6.70000 -6 177601 123 -2 0 3.8 #include<stdio.h> void main() { char c; c= getchar_r(); if((c>='0'&&c<='9')||(c>='A'&&c<='F')||(c>='a'&&c<='f')) { if((c>='0'&&c<='9')) { printf("%d\n",c-'0'); } else if((c>='A'&&c<='F')) { printf("%d\n",c-'A'+10); } else printf("%d\n",c-'a'+10); } else putchar(c); } 3.9 #include<stdio.h> void main() { short num,high,low; printf("Please input a short number:\n"); scanf("%hd",&num); low = 0x00ff & num; high = 0x00ff & (num >> 8); printf("The high byte is:%c\n", high); printf("The low byte is:%c\n", low); } 3.10 #include "stdafx.h" int main(int argc, char* argv[]) { unsigned short int x; unsigned short int high,low; printf("input a integer:\n"); scanf("%d",&x); high = (x>>12)&0x000f; low = (x<<12)&0xf000; x= x&0x0ff0; x=x|high|low; printf("%d\n",x); return 0; } 3.11 #include<stdio.h> void main() { unsigned short int x,m,n; unsigned short int result; scanf("%hu%hu%hu",&x,&m,&n); result=(x>>(m-n+1))<<(15-n+1); printf("%hu\n",result); } 3.12 #include<stdio.h> void main() { float f,c; scanf("%f",&f); c=(5*(f-32))/9; printf("%.0f(F)=%.2f(C)\n",f,c); } 或者 #include<stdio.h> void main() { int f; float c; scanf("%d",&f); c=(5*(f-32))/9; printf("%d(F)=%.2f(C)\n",f,c); } 3.13 #include <stdio.h> #define PI (3.1415926) int main(int argc, char* argv[]) { double r, h; double s, v; printf("Please input the r and h."); scanf("%lf,%lf", &r, &h); s = 2 * PI * r * h + 2 * PI * r * r; v = PI * r * r * h; printf("s is %lf, v is %lf", s, v); return 0; } 3.14 #include "stdafx.h" int main(int argc, char* argv[]) { char a[4] = "编"; printf("机内码:%x%x\t\n",a[0]&0xff,a[1]&0xff); printf("区位码:%x\t\n",a[0]&0xff<<8+a[1]&0xff-0x2020-0x8080); printf("国际码:%x\t\n",a[0]&0xff<<8+a[1]&0xff-0x8080); return 0; } 第四章习题 4.1 #include <stdio.h> void main(void) { float a,b,c; printf("Please enter the score of A:\n"); scanf("%f",&a); printf("Please enter the score of B:\n"); scanf("%f",&b); printf("Please enter the score of C:\n"); scanf("%f",&c); if((a-b)*(a-c)<0) printf("A gets the score %.1f",a); if((b-a)*(b-c)<0) printf("B gets the score %.1f",b); if((c-a)*(c-b)<0) printf("C gets the score %.1f",c); } 4.3 #include <stdio.h> int mdays(int y,int m) { if (m==2) return (y%4==0 && (y%100==0 || y%400==0))?29:28; else if (m==4 || m==6 || m==9 || m==11) return 30; else return 31; } main() { int y,m,d,days; printf("Enter year:"); scanf("%d",&y); printf("Enter month:"); scanf("%d",&m); printf("Enter day:"); scanf("%d",&d); days=d; while(m>1){days+=mdays(y,m-1);m--;} printf("%d\n",days); } 4.4 if方法: #include "stdafx.h" #include <stdio.h> int main(int argc, char* argv[]) { float x = 0; printf("input the salary\n"); scanf("%f",&x); if(x<0) printf("wrong\n"); else if(x>0 && x<1000) printf("0\n"); else if(x<2000) printf("%f\n",x*0.05); else if(x<3000) printf("%f\n",x*0.1); else if(x<4000) printf("%f\n",x*0.15); else if(x<5000) printf("%f\n",x*0.2); else printf("%f\n",x*0.25); return 0; } Case方法: #include "stdafx.h" #include <stdio.h> int main(int argc, char* argv[]) { float x ; printf("input the salary\n"); scanf("%f",&x); int xCase = 0; xCase = (int)(x/1000.0); switch(xCase) { case 0: printf("0\n"); break; case 1: printf("%f\n",x*0.05); break; case 2: printf("%f\n",x*0.1); break; case 3: printf("%f\n",x*0.15); break; case 4: printf("%f\n",x*0.2); break; default: printf("%f\n",x*0.25); } return 0; } 4.7 #include "stdafx.h" #include <stdio.h> int main(int argc, char* argv[]) { char *sa; char c; int i = 0,j = 0,k = 0; do { c= getchar_r(); sa[i++] = c; }while(c != '\r'); for(i=0;sa[i+1];i++) { for(j = i+1;sa[j];j++) { if( sa[i]==sa[j] && sa[j] ==' ') { for(k=j;sa[k];k++) sa[k] = sa[k+1]; j--; } } } for(k=0;sa[k];k++) printf("%2c",sa[k]); return 0; } 4.10 #include <stdio.h> #define EPS 1e-5 void main() { int s=1; float n=1.0,t=1.0,pi=0; while(1.0/n>=EPS) { pi=pi+t; n=n+2; s=s*(-1); t=s/n; } pi=pi*4; printf("pi=%10.6f\n",pi); } 4.11 #include<stdio.h> int main() { int a,b,num1,num2,temp; printf("Input a & b:"); scanf("%d%d",&num1,&num2); if(num1>num2) { temp=num1; num1=num2; num2=temp; } a=num1; b=num2; while(b!=0) { temp=a%b; a=b; b=temp; } printf("The GCD of %d and %d is: %d\n",num1,num2,a); printf("The LCM of them is: %d\n",num1*num2/a); } 4.13 #include "stdafx.h" #include <stdio.h> int Primes(int x);//判断素数函数 int main(int argc, char* argv[]) { int i,j; int num; for(num = 4;num<=100;num++) { if(num%2 == 0) { for(i=1;i<num;i++) { for(j=1;j<num;j++) { if(num == i+j) { if(Primes(i) && Primes(j)) { printf("%d=%d+%d\n",num,i,j); } } } } } } return 0; } int Primes(int x) { int i ; int n = 0; for(i = 1;i<=x;i++) { if(x%i==0) n++; } if(n==2) return 1; else return 0; } 4.17 #include<stdio.h> void main(void) { int c,i; for(i=1,c=32;c<=126;++i,++c) { printf("%3d%-5c",c,c); if(!(i%8)) printf("\n"); } } 4.18 #include "stdafx.h" #include <stdio.h> int main(int argc, char* argv[]) { int x; int i,n,sum; printf("input 10 numbers\n"); for(i = 0,n = 0,sum = 0;i<10;i++) { scanf("%d",&x); if(x >0) { sum+=x; n++; } } if(n) printf("numbers = %d,average = %f\n",n,1.0*sum/n); return 0; } 第五章习题 5.5 Extern和static存储类型的区别: Static型外部变量和extern型外部变量的唯一区别是作用域的限制。静态外部变量只能作用于定义它的文件,其他文件中的函数不能使用。Extern型外部变量的作用域可以扩大到整个程序的所有文件。 Static和auto存储类型的区别: 静态局部变量和自动变量有根本性的区别。由于静态局部变量在程序执行期间不会消失,因此,它的值有连续性。当退出块时,它的值能保存下来,以便再次进入块时使用,而自动变量的值在退出块时都丢失了。如果定义时静态局部变量有显示初始化,只在第一次进入时执行一次赋初值操作,而自动变量每次进入时都要执行赋初值操作。 5.6 不能。 在C语言中,参数的传递方式是“值传递”,即把实参的值拷贝到参数的存储区中。因此,swap()函数交换的只是实参的本地拷贝,代表swap()实参的变量并没有被改变。 5.7 6,12 5.10 #include <stdio.h> double sum_fac(int n) { double s=0; int i; double fac=1.0; for(i=1;i<=n;i++) { fac*=1.0/i; s+=fac; } return s; } void main(void) { int n; printf("Please enter the integer n:"); scanf("%d",&n); printf("the sum is %lf\n",sum_fac(n)); } 5.17 #include <stdio.h> void reverse() { char ch= getchar_r(); if(ch!='\n') { reverse(); putchar(ch); } } int main() { reverse(); printf("\n"); return 0; } 第六章习题 6.1 (1)正确 (2)错误,不需要加“;” (3)错误,“ident”与“(”之间不能有空格 (4)错误,宏名不能是关键字“void” (5)错误,将x*y改成((x)*(y)) 6.4 将会导致变量blue的重复定义 6.5 (1)#define NO 0 (2)#include “common.h” (3)#line 3000 (4)#undef TRUE #define TRUE 1 (5)#if TRUE !=0 #define FALSE 0 #else #define FALSE 1 #endif (6)#ifndef SIZE assert(0); #else assert(SIZE<10&&SIZE>1); #endif (7)#define SQUARE_VOLUME(x) (x)*(x)*(x) 6.10 #include <stdio.h> #define pi 3.1415926 #define BALL_VOLUME(r) ((4/3)*pi*(r)*(r)*(r)) int main() { int r; float v[11]; for(r=1;r<11;r++) { v[r]=float(BALL_VOLUME(r)); printf("r=%2d v=%.2f\n",r,v[r]); } return 0; } 第七章习题 7.9 #include<stdio.h> #include<graphics.h> #define g 10 void main() { char *buffer; int gdriver=DETECT,gmode,i,size; initgraph(&gdriver,&gmode,"c:\\tc\\bgi"); setbkcolor(BLUE); setcolor(RED); setlinestyle(0,0,1); setfillstyle(1,5); circle(200,250,RED); size=imagesize(200,250,200,300); buffer=malloc(size); getimage_r(200,250,200,300,buffer); for(i=0;i<=10;i++) putimage(200,250+g*i*i/2,buffer,COPY_PUT); getch_r(); closegraph(); } 7.11 #include<stdio.h> #define RAND_MAX 32767 #define RAND 100 int RandomInteger(int low,int high) { int k; double d; d=(double)rand()/((double)RAND_MAX+1); k=(int)(d*(high-low+1)); return(low+k); } void main() { long i; int n=0; int szWord[RAND]; char a[]="heads"; char b[]="tails"; srand(time(0)); for(i=0;i<RAND;i++) { szWord[i]=RandomInteger(0,1); if(szWord[i]==1) { printf("\n%s",a); n++; } else { printf("\n%s",b); n=0; } if(n==3) { printf("\nIt took %ld flips to get heads 3 consecutives times",i+1); break; } } } 7.16 char *MonthName(int month); int MonthDays(int month,int year); int FirstDayOfMonth(int month,int year); int IsLeapYear(int year); enum weak{SUNDAY ,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY}; #include “caltools.h” char *MonthName(int month) { Switch(month) { Case 1: return(“January”); Case 2: return(“February”); Case 3: return(“March”); Case 4: return(“April”); Case 5: return(“May”); Case 6: return(“June”); Case 7: return(“July”); C展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




C语言程序设计-科学出版社-曹计昌--习题答案.docx



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/9409999.html