




已阅读5页,还剩38页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一章习题参考答案一、单项选择题1.C 2.B 3.B 4.C 5.D 6.A 7.D 8.A二、填空题1.判断条件 2.面向过程编程3.具有结构化控制语句 4.程序5面向对象 6.数据结构和算法 7.有穷性 8.当型循环结构9.算法10.可读性 11.模块化 12.结构化和模块化三、应用题1、用如何一种熟悉的方法描述求 N 个数中最小数的算法。k=0输入nmin=-32767当k=n输入xxmin? Y N min=x k=k+1输出min输入数据个数n输入第一个数min计算器k=1输入一个数x x=n输出min 2、用枚举法设计例14中百钱买百鸡问题的算法,并用流程图表示;X=1当x20 y=1 当y0p=f(n)输出p n=n-1/*f(n) */n1Y Nr=f(n-1)+f(n-2) r=1返回rf1=1,f2=1,k=0输出f1,f2f3=f2+f1f4=f3+f2f1=f3,f2=f4k=k+2直到k154: 一般迭代法: 迭代公式:x1=1-x03,收敛条件:|x0/x1|1e-5 x0=x1 x1=x0*x0*x0-1输出x1X0=1.5f=x03-x0-1f0=3x02-1x1=x0-f/f0当|x1/x01e-5| x0=x1 f=x03-x0-1 f0=2*x02-1输出x1牛顿迭代法:f(x)=x3-x-1,f(x)=3x2-1 迭代公式:x1=x0-f(x0)/f(x0)收敛条件:|x0/x1|0t=a/b;s=s+t;c=a+b;b=a;a=c;n=n-1;输出s 126:输入a,b,ca bY Nt=a,a=b,b=ta cY Nt=a,a=c,c=tb cY Nt=b,b=c,c=t输出a,b,c67 8:n=0,s=0输入x当x=0 s=s+x n=n+1av=s/n输出 av输入n n%3= =0N Yn%7= =0N Yno no yes第二章习题参考答案一、单项选择题1.B 2.D 3.C 4.B 5.A 6.A 7.B 8.C二、填空题1主函数2.编译系统 3.函数 函数 4.输入输出 5.头文件6.obj7.库函数 8.文本三、应用题5.标识符:au_to, _auto,file,m_i_n,hello,ABC,SIN90,x1234,until,cos2x,s_3 关键字:sizeof 非关键字,非标识符:3id,-min,call.menu,n*m,x.y,1234,1234hello,s+3第三章习题参考答案一、单项选择题 1.D 2.B 3.A 4.C 5.C 6.D 7.B 8.D 9.B 10.C 11.A 12.D 13.C 14.C 15.C16.C 17.B 18.C 19.C 20.A 21.A 22.D 23.D 24.D,A 25.D26.A 27.B二、填空题1 补码2 10-308 10308 15 16 位3 0 或14逻辑非 从右向左5函数调用665 ,89三、应用题110 9211 0 012 13区别是:求负:单目,右结合 减法:双目,左结合 取址:单目,右结合 按位与:双目,左结合第四章习题参考答案一、单项选择题1.D 2.C 3.D 4.A 5. D6.B 7.A 8.C 9.B 10.B二、 填空题1一条 ;25.1690003(1)-200 2500(2)i=-200,j=2500(3)i=-200j=25004.a=98, b=765.000000, c=4321.0000005.三种可能的输入是:(1) (1) 100 25.81 1.89234(2) (2) 100 25.81 1.89234(3) (3) 100 25.81 1.8923460,0,3738输入语句的格式是:scanf(%lf%lf%lf);913 13.000000 13.00000010. 两种方法:(1) 增加一个临时变量t。t=a; a=c; c=t; (2) a=a+c; c=a-c; a=a-c;三、编程题1 main( ) printf( *n); printf( very good! n); printf( *n); 2main( ) int hour,min; scanf(%d,%d,&hour,&min); min=60*hour+min; printf(%dn,min);3main( ) float c , f;scanf(%f,&c); f=32+9.0*c/5; printf(%fn,f);按题目要求分别输入-10,0,15和34计算相应的华氏温度。4 main() float r,l,s; scanf(%f,&r); l=2*3.141592*r; s=3.14159*r*r; printf(r=%f, l=%f, s=%fn,r,l,s);5#includemain( ) float a,b,c,s,area; scanf(%f,%f,%f,&a,&b,&c); if(a+bc)|(a+cb)|(b+ca) /* 判断两边之和大于第三边 */ s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c); /*调用开方函数,计算面积 */printf(area=%fn,area); 6main( ) int a=3,b=4,c=5; float d=1.2,e=2.23,f=-43.56; printf(a=%3d,b=%-4d,c=*%dn,a,b,c); printf(d=%3.1fne=%6.2fnf=%-10.4f*,d,e,f);7main( ) int a,b,c,t ; scanf(%d,%d,%d,&a,&b,&c); printf(a=%d,b=%d,c=%dn,a,b,c); t=a; a=b; b=c; c=t; printf(a=%d,b=%d,c=%dn,a,b,c);8main( ) float a,b,c,aver; printf(“Please input three numbers:n”); scanf(%f,%f,%f,&a,&b,&c); aver=(a+b+c)/3; printf(average of %5.2f,%5.2f and %5.2f is %5.2f,a,b,c,aver);9main( ) int a,b,c ,x,y; scanf(%d %d %d,&a,&b,&c); x=a*b;y=x*c;printf(a=%d,b=%d,c=%dn,a,b,c);printf(x=%d,y=%dn,x,y);第五章参考答案一、单项选择题1D 2. C 3. B 4. B 5. D 6. A 7. B 8. D二、填空题1非0 02k = 0 3. if ( x4 | x4 | x1 & x200 & x0&ab)&(ac) ) if (bc) printf(min=%dn,b); else printf(min=%dn,c); else if ( (ab)&(ac) ) printf(min=%dn,a); else printf(min=%dn,bc?b:c);2:本程序使用goto语句,仅供参考,请勿模仿。main( ) long a; int k; scanf (%ld,&a); printf (%ldn,a); loop: if ( a != 0 ) k = a%10; printf (%d,k); a = a/10;goto loop; 3(1) 用简单的 if 结构main( ) int x, y; scanf (%d,&x); if ( x-5 ) y=x; if ( x=5 & x10 ) y=x+1; printf (%d,%dn,x,y);(2) 用嵌套的if 结构main( ) int x,y; printf(Please input x :-5-10n); scanf(%d,&x); if(x5) if(x-5) y=x; else y=x-1; else if(x10) y=x+1; printf(%d,%dn,x,y);(3) 用if-else分支结构main( ) int x, y; scanf (%d,&x); if ( x-5 ) y=x; else if ( x=0 ) y=x-1; else if ( x=5 & x10 ) y=x+1; printf (%d,%dn,x,y);(4) 用switch( )结构main( ) int x, y, k; printf (Please input x :-5-10n); scanf (%d,&x); if ( x0 ) k=-1; else k=x/5; switch (k) case 1: y=x+1; break; case 0: y=x-1; break; case -1: y=x; break; printf(%d,%dn, x, y);4 main( ) int y0, m0, d0, y1, m1, d1, age; printf(Please input current day:n); scanf(%d,%d,%d,&y1,&m1,&d1); printf(Please input birthday:n); scanf(%d,%d,%d,&y0,&m0,&d0); age = y1-y0; if ( m1m0 ) age-; else if(m1=m0&d1c&a+cb&b+ca) /* 判断两边之和大于第三边 */ if (a=b&b=c) /* 判断等边三角形 */ printf( 等边三角形n); else if (a=b|a=c|b=c) /* 判断等腰三角形 */ printf(等腰三角形n); else if(a*a+b*b=c*c|a*a+c*c=b*b|b*b+c*c=a*a) /* 判断直角三角形 */ printf(“直角三角形n”); else printf(一般三角形n); else printf(不能组成三角形n);6main( ) int x, y, k; scanf (%d, &x); k = x/10; switch ( k ) case 1: y=1; break; case 2: y=2; break; case 3: y=3; break; case 4: y=4; break; case 5: y=5; break; default: y=6; break; printf(x=%d,y=%dn,x,y);7main( ) int m,k; float n; printf (Please input 购买金额 m :n); scanf (%d,&m); k = m/100; switch (k) case 0: n=0; break; case 1: n=0.015; break; case 2: n=0.025; break; case 3: n=0.035; break; case 4: n=0.045; break; case 5: n=0.055; break; default: n=0.06; break; printf(%5d,%7.2f,%7.2f,m,m-n*m,m*n);/*输出购买金额、实际支付金额和返还金额*/8:本程序使用goto语句实现,仅供参考,请勿模仿。main( ) int year=1995, month, days=0;loop: if ( year = 2000 ) days = days+7*31+4*30+28; /* 每年增加 365天 */ if ( year%4=0&year%100!=0 | year%400=0 ) /* 判断闰年 */ days+; year+; goto loop; days = days-21; /* 仅计算到2000年12月10日 */ printf(The total days is :%dn ,days); 9:本程序使用goto语句实现,仅供参考,请勿模仿。main ( ) long a; int b, k=0, m; printf (Please input a99999:n); scanf (%ld,&a); b = a%10; if ( a/10=0 ) k=1;printf(%ldn,a); else printf(%dn,b); m=a; loop: if ( m!=0 ) k+; m=m/10; goto loop; printf (%ld,%dn,a,k); 10:本程序使用goto语句实现,仅供参考,请勿模仿。#includemain( ) long a, m, n=0; int i=0, k; scanf(%ld,&a); m=a; loop: if ( m != 0 ) k = m%10; k = k+2; if ( k = 9 ) k=k%10; m = m/10; n = k*pow(10,i)+n; i+; goto loop; printf (%ld,%ldn, a, n);第六章习题参考答案一、单选题1B 2C 3C 4B 5C 6B 7C 8A二、填空题1 无穷2 83 204 115 2.4000006 *#*#*#$7 8 5 28 float d=1.0 k+ k=0 xamin三、编程题1main( ) int i, k, s=0; for ( i=1,k=1; i=101;i +=2,k*=-1 ) s = s+i*k; printf (%dn, s);2main( ) int i, k, p=0, n=0, s=0; for ( i=1; i0 ) p += k; if ( k 0 ) printf (%d,i%10); i /= 10; 4(1) 注释:此题的关键是要保证乘积不超过int型允许的最大数。由于仅要求结果的最后三位,被乘数的后三位参加运算;则将乘数后三位的每一位分别和被乘数相乘,然后部分积再相加。main( ) int i, a, b, c1, c2, c3, y, y1, y2, y3; printf (Please Enter a,b:); scanf (%d,%d,&a,&b); y = a; c1 = a%10; /* c1保存乘数个位上的数 */ c2 = a/10%10; /* c2保存乘数十位上的数 */ c3 = a/100%10; /* c3保存乘数百位上的数 */ for ( i=1; ib; i+ ) /* 求a的b次乘方 */ y %= 1000; /* 被乘数保留三位 */ y1 = y*c1; /* 被乘数和乘数个位相乘 */ y2 = y*c2%100; /* 被乘数和乘数十位相乘,结果保留两位 */ y3 = y*c3%10; /* 被乘数和乘数百位相乘,结果保留一位 */ y = y1+y2*10+y3*100; /* 部分积相加 */ printf (%dn,y%1000);(2) 解法2。main ( ) int a, b, k; long last; scanf (%d%d, &a, &b); for ( last=k=1; k=b; k+) last = last * (a%1000) % 1000; printf (last=%ldn, last );5略6(1)注释:变量t储存阶乘,60!已经超出单精度实型数的范围,所以t被说明为double型。main( ) int i=1; double t=1; float e=0; do t = t*i+; e = e+1./t; while ( i = 1.0e-4 ); printf (%fn,e);7main( ) int n, x1, x2, x3, xn, i; printf(Enter n:); scanf (%d,&n); if ( n=3 ) xn=n; else x1=1; x2=2; x3=3; for ( i=4; i=n; i+ ) xn=x1+x2+x3; x1=x2; x2=x3; x3=xn; printf (Xn=%dn,xn);8main( ) int i, j, k, l; for ( i=1; i=9; i+ ) for ( j=0; j=9; j+ ) if ( j=i ) continue; for ( k=1; k=9; k+ ) if ( k=i | k=j ) continue; for ( l=0; l=9; l+=2 ) if ( l=i | l=j | l = k ) continue; printf (%dn,i*1000+j*100+k*10+l); 9注释:题中水果的价格以元计价,为了避免计算中出现实数,则改为以角为计价单位。main( ) int i, j, k; for ( i=0; i=100; i+ ) for ( j=0; j=100-i; j+ ) if ( i*4+j*40+(100-i-j)*2 = 400 ) printf (apple=%d watermelon=%d pear=%dn,i,j,100-i-j);10main( ) int i, j, n; printf(”nPlease Enter n: ”); scanf (”%d”,&n); for ( i=1;i=n;i+ ) for ( j=1;j n-i ) printf (”* ”); else printf (” ”); printf (”n”); for ( i=1;in;i+ ) for ( j=1;ji ) printf(”* ”); else printf(” ”); printf(”n”); 第七章习题参考答案一、单选题1B 2B3C4C5A6A7B8A二、填空题1 1 2 4 8 16 32 64 128 256 5122. aage+ i=18;ibj i3 j55. bj=aj0 bjajk 6.ak+=aj三、编程题1编写程序,求N阶矩阵的两条对角线元素值的和。#define N 3main( ) int i,j,s=0,aNN; for ( i=0; iN; i+ ) /* 产生a数组 */ for ( j=0; jN; j+ ) scanf(%d,&aij); for ( i=0; iN; i+ ) /* 两条对角线上的元素求和 */ for ( j=0; jN; j+ ) if ( i=j | i+j=N-1 ) s+=aij; printf(s=%dn,s);2定义一个数组,分别赋予从2开始的30个偶数,然后按顺序每5个元素求一个平均值,并放在数组的末尾。main( ) int i,j,k=2; float a40,s; for ( i=0; i30; i+ ) ai=k;k+=2; /* 产生a数组 */ j=30; s=0; for ( i=0; i30; i+ ) /* 每5个数产生一个平均值依次放入aj,j=30,31,.,35 */ s+=ai; if ( (i+1)%5=0 ) aj+=s/5; s=0; k=30; for ( i=0; i30; i+ ) /* 输出a数组,每5个数及其平均值占一行 */ printf(%6.1f,ai); if ( (i+1)%5=0 ) printf( average=%6.1fn,ak+);3 产生30个随机数到数组中, 任意指定位置k,从第k个数开始依次后移3个位置。输出移动前后的数组。#include stdlib.h#define N 9main( ) int i,j,k,aN+3,s; for(i=0;i=k+2; i-) /* 从aN-1开始到ak-1依次向后移动3个位置 */ ai=ai-3; for ( i=0; iN+3; i+ ) /* 输出移动后的数组 */ printf(%6d,ai); printf(n);20编写程序,产生30个随机数到数组中,删除其中的最大值,输出删除前后的数组。#define N 30main( ) int i,k,aN; for ( i=0; iN; i+ ) /* 产生a数组并输出 */ ai = rand(); printf(%6d,ai); if ( (i+1)%6=0 ) printf(n); printf(n); k=0;for ( i=0; i ak ) k=i; printf(max=a%d=%dn,k,ak);for ( i=k; iN-1; i+ ) /* 删除ak */ ai= ai+1;for ( i=0; i0) /* 按除二取余得到各位二进制数ak*/ ak=s%2; k+; s=s/2; for(j=15;j=0;j-)/* 按倒排方式输出二进制数的各位数字 */ printf(%2d,aj);22 编写程序, 产生30个50以内的随机整数到5行6列数组中,输出那些在行和列上均为最小的元素。main( ) int i,j,p,q,a56,f; for(i=0;i5;i+) /* 产生a数组并输出 */ for(j=0;j6;j+) aij=rand()%50; printf(%5d,aij); printf(n); f=0; /* 标志量,f=0:未找到目标,f=1:找到目标 */ for(i=0;i5;i+) p=0; /* p记录i行最小值列下标 */ for(j=1;j6;j+) /* 找i行最小值aip */ if(aijaip) p=j; /* p记录i行最小值列下标 */ q=0; for(j=1;j5;j+) /* 找p列最小值aqp */ if(ajpaqp) q=j; /* q记录p列最小值行下标 */ if(q=i) /* aqp是i行最小元素,也是p列最小元素 */ f=1; printf(min=a%d%d=%dn,q,p,aqp); 23 编写程序, 产生30个10,100中的随机整数到5行7列数组a的前6列中,求每行元素值的和,并把和值记录在各行的最后一个元素,如:a26存放的是2行的和。然后将和值最大的行与首行对调。main( ) int i,j,p,q,a57,f; for(i=0;i5;i+) /* 产生a数组*/for(j=0;j6;j+) aij=rand()%91+10; for(i=0;i5;i+) /* 产生i行的和并存放在ai6 */ ai6=0; for(j=0;j6;j+) ai6+= aij;for(i=0;i5;i+) /* 输出a数组*/for(j=0;j7;j+) printf(%5d,aij); printf(n);p=0;for(i=1;iap6) p=i;for(j=0;j7;j+) /* 0行与p行交换位置 */ q= a0j; a0j= apj; apj=q;for(i=0;i5;i+) /* 输出交换后的a数组*/for(j=0;j7;j+) printf(%5d,aij); printf(n);24 编写程序, 产生30个1,100中的随机整数到5行6列数组中,任意输入一个正整数k,输出数组中与k大小相差5以内的所有元素。#include math.hmain( ) int i,j,k,a56; for(i=0;i5;i+) /* 产生a数组*/for(j=0;j6;j+)aij=rand()%100+1;for(i=0;i5;i+) /* 输出a数组*/ for(j=0;j6;j+) printf(%5d,aij);printf(n); scanf(%d,&k); for(i=0;i5;i+) /* 输出与k的差小于5的数组元素 */for(j=0;j6;j+) if(abs(k-aij)5) printf(%5d,aij);printf(n);25 编写程序,产生30个1,100中的随机整数到5行6列数组中,按升序重新排序,并按列的顺序存放到另一个数组中。输出排序前后的情况。main( ) int i, j, t, k=0, a56, b56, c30; for ( i=0; i5; i+ ) /* 产生a数组*/for ( j=0; j6; j+ ) ck+ = aij = rand()%100+1; for ( i=0; i29; i+ ) /* c数组从小到大排序 */ k=i;for ( j=i+1; jcj ) k=j;if ( k!=i ) t=ck; ck=ci; ci=t; k=0; for ( j=0; j6; j+ ) /* 产生b数组*/for ( i=0; i5; i+ ) bij = ck+; for ( i=0; i5; i+ ) /* 输出a数组*/ for ( j=0; j6; j+ ) printf(%5d,aij);printf(n);for ( i=0; i5; i+ ) /* 输出b数组*/ for ( j=0; j6; j+ ) printf(%5d,bij); printf(n);26 编写程序,产生30个1,100中的随机整数到5行6列数组中,求其中最大值和最小值,并把最大值元素与右上角元素对调,把最小值元素与左下角元素对调。输出重排前后的情况。main( ) int i,j,t,k=0,a56; for ( i=0; i5; i+ ) /* 产生a数组并输出*/ for ( j=0; j6; j+ ) aij = rand()%100+1;printf(%5d,aij); print
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工程机械电器设备
- 合伙开公司协议书范本
- 市政工程培训
- 护理化妆教程
- 疱性角结膜炎的临床护理
- 长期昏迷患者护理
- 肾上腺手术护理
- 二次根式加减教学设计
- 气道出血相关知识与处理
- 微生物实验室工作总结模版
- 江苏省海安中学、金陵中学、宿迁中学三校2024-2025学年高三年级下学期4月联考测试 化学试卷(含答案)
- 离婚协议书正规打印电子版(2025年版)
- 2025年湖北省武汉市高考数学模拟试卷(附答案解析)
- 【MOOC】跨文化交际入门-华中师范大学 中国大学慕课MOOC答案
- 2024年江西省高考生物试卷(真题+答案)
- CJT 526-2018 软土固化剂 标准
- 品质提升计划改善报告课件
- 中考数学计算题练习100道(2024年中考真题)
- MOOC 光学发展与人类文明-华南师范大学 中国大学慕课答案
- 汽车4S店顾客抱怨处理
- 《机械装配技术》复习题
评论
0/150
提交评论