新概念C语言能力教程练习06答案_第1页
新概念C语言能力教程练习06答案_第2页
新概念C语言能力教程练习06答案_第3页
新概念C语言能力教程练习06答案_第4页
新概念C语言能力教程练习06答案_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、练习 66.1 输入 10 个整数,计算它们的平均值。找出最小数,再找出与平均值最接近的整数。#include void main()int a10, min, pos, i;double ave, mdif, dif;min = 0;ave = 0;for(i=0; i10; +i)scanf(%d, &ai);ave += ai;if(ai 0 ? ave - a0 : a0 - ave;pos = 0;for(i=1; i 0 ? ave - ai : ai - ave;if(dif mdif)mdif = dif;pos = i;printf( 与平均值最接近的整数为%dn, apos

2、);输入 20 个 1 至 5 之间的整数,给出1 至 5 每个数出现的次数。#include void main()int a6 = 0, i;for(i=0; i 5 | a0 1)printf( 输入错误);return;+aa0;for(i=1; i6; +i)printf(%d 出现了 %d 次 !n, i, ai);以十六进制的形式输出用户输入的十进制正整数。#includevoid main()int n;int a8, j=0;scanf(%d, &n);printf(%Xn, n);while(n 0)aj = n % 16;n /= 16;+j;for(-j; j=0; -

3、j)if (aj 9)printf(%c, A+aj-10);elseprintf(%d, aj);printf(n);或者直接用printf 函数输出正整数的十六进制形式:printf(%x, n);再把它放在数组的末尾。找出整型数组中的最大值,把它后面的元素依次前移一位,再把它放在数组的末尾。#include #define N 5void main( )int numN, max, i, temp;max = 0;for(i=0; i nummax)max = i;temp = nummax;for(i=max; iN-1; +i)numi = numi + 1;numi = temp;

4、printf( 处理后的数组为:n);for(i=0; iN; +i)printf( %d , numi);有一整型数组a10=20,23,37,52,95 ,输入 5 个整数存储在a 中,且要保持数组a#include void main( )int a10=20,23,37,52,95, i, j, temp;for(i=0; i=0 & ajtemp; -j)aj + 1 = aj;aj + 1 = temp;printf( 添加元素后的数组为:n);for(i=0; i10; +i)printf( %d , ai);输入 20 个整数到数组num 中,并对num 中的偶数号元素按升序排

5、序。#include #define N 20void main( )int i, j, numN, temp;for(i=0; iN; +i)scanf(%d, &numi);for(i=2; i0 & tempnumj-2; j=j-2)numj = numj-2;numj = temp;/按升序 10 个一行输出for(i=0; iN; +i)if(i % 10 = 0)printf(n);printf( %d , numi);printf(n);6.7 输入一个5位无符号整数,输出构成这个整数的5 个数字可以组成的整数中最大的及最小的5位整数(输入67890、 10002 测试) 。#

6、include void main( )int bit5, i, j, temp;unsigned num, max, min;max = min = 0;scanf(%u, &num);for(i=0; i=4; +i)biti = num % 10;num /= 10;for(i=1; i0 & temp=0; -i)max = max * 10 + biti;for(i=0; i=4; +i)if(biti != 0)temp = biti;biti = bit0;bit0 = temp;break;for(i=0; i=4; +i)min = min * 10 + biti;print

7、f( 最大的 5 位整数为%d, 最小的为%dn, max, min);分析下面的程序#include void main( )int i, j, a10, temp;for(i=0; i10; +i)ai = i;printf(%3d, ai);= 0;j = 9;while(ij) temp = ai;ai = aj;aj = temp;+i;-j;printf(nn);for(i=0; i10; +i)printf(%3d, ai);2.#include void main( ) int a35 = 1;int i, k, n, m;for(n=2; n=1000; +n)k = 1;m

8、 = n - 1;for(i=2; i0; -i)printf(%d + , ai);printf(%dn, a0);分析:1. 对数组进行了倒置。循环结构的执行过程如下循环体 循环控制temp=ai;ai=aj;aj=temp;+i;-ja0a1a2a3a4a5a6a7a8a9iji19-89123456780181 (真)a1a8互换1-28-79823456710271 (真)a2a7互换2-37-69873456210361 (真)a3a6互换3-46-59876453210451 (真)a4a5互换4-55-49876543210540(假)退出不再执行不不循环控制条件改为i=j 时

9、会出现什么情况?有9 个数组元素时,分析循环结构的执行过程。2. 求出了 1000 以内的完全数。循环结构的执行过程如下:循环体 循环控制kmfor(i=2;in; +i)if(n % i = 0)m -= i;ak+ = i;if(m=0) 输出+n;nn=100021 (真)11ii3mak+k20- 假31 (真)1221-真2-3假不输出 /a0:13-430- 假41 (真)1321-真3-1a1:21-22-3假不输出 /a0:1 a1:24-531-真3-440- 假51 (真)1421-真2-3假不输出 /a0:1 a1:25-631-真3-441-真4-550- 假61 (真

10、)1521-真5-3a1:21-22-3真, / a0:1,a1:2,a3:3 输出分析略6-731-真3-0a2:32-33-441-真4-551-真5-660- 假7,冒泡排序时第一趟操作可用代码描述如下:#include void main( )int i, num = 25, 22, 21, 29, 23, temp;for(i=0; i numi+1)temp = numi;numi = numi+1;numi+1 = temp;请结合代码分析冒泡排序中一趟操作的效果。请结合代码分析冒泡排序中一趟操作的效果。组有序?请实现冒泡排序算法。答:冒泡排序中一趟操作的效果是找出数组里无序元素

11、中的最大者(或最小者),并将其放在适当的位置。具体的分析过程如下:循环体 循环控制if(numinumi+1) temp=ai;ai=aj; aj=temp;+i;num0num1num2num3num4ii1222521292311 (真)真 num1num2 互换1-2222125292321 (真)假不互换2-3222125292331 (真)真 num3num4 互换3-4222125232940 (假)退出不再执行不为:#include #define N 5void main( )int i, j, num = 25, 22, 21, 29, 23, temp;for(j=N-1;

12、 j=1; -j)for(i=0; i numi+1)temp = numi;numi = numi+1;numi+1 = temp;for(i=0; iN; +i)printf( %d , numi);0 号元素交换,接着从6.10 0 号元素交换,接着从余下的元素中找出最小的元素和第1 号元素交换,再从余下的元素中找出最小的元素和第号元素交换, 。请实现选择排序算法。#include #define N 5void main( )int i, j, numN = 25, 22, 21, 29, 23, min, temp;for(j=0; jN; +j)for(min=i=j; iN; +

13、i)if(numinummin)min = i;temp = numj;numj = nummin;nummin = temp;for(i=0; iN; +i)printf( %d , numi);分析下面两段代码。int num = 49, 38, 65, 97, 76, 13, 27;int i = 1, j = 7, temp, pivot;pivot = num0;while(1)for( ; i7 & numi pivot);if(i = j)break;temp = numi;numi = numj;numj = temp;num0 = numj;numj = pivot;int

14、num = 49, 38, 65, 97, 76, 13, 27;int left = 0, right = 6, pivot = num0;dowhile(right left & numright = pivot)-right;if(right left)numleft = numright;+left;while(left right & numleft = pivot) +left;if(left right)numright = numleft;-right;while(left right);numleft = pivot;参考:. 输出为. 输出为数组中小于首元素的元素均位于首元

15、素的左边,而大于的均去了右边。具体的执行过程分析如下。循环体循环控制for(;i7&numipivot) ;if(i=j)break;temp=numi;numi=numj;numj= temp;11 (真)ii7&numipivotj;0(假)交换num2与 num6 数组状态见(1)11 (真)1-270 (假)620(假)1 (真)21 (真)2-360 (假)50(假)交换num3与 num5 数组状态见(2)30(假)1 (真)31 (真)3-451 (真)41 (真) 退出循环40(假)40 (假)3for(i=0; i3; +i)for(i=0; il&numr=pivot)-r

16、;if(rl)numl=numr;+l;while(lr&num l=pivot) +l;if(lr) numr=numl;-r;循环体循环控制lrll&numr=pri vot-rrlnuml= numr ;+l;lrrl&numl=pri vot+ll1161(真)1-21(真)状态(2)6-5260(假)250(假)1(真)状态(3)2-3350(假)1(真)状态(4)5-4341(真)341(真)4-3330(假)0(假)330(假)330(假)编号num0num1num2num3num4num5num649386597761327(1)27386597761327(2)2738659

17、7761365(3)27381397761365(4)27381397769765分析下面的程序#include void main( )int a = -15, 6, 0, 7, 9, 23, 54, 82, 101;int b3 = 101, -14, 82;int i, left, right, middle;left = 0;right = 8;while(left amiddle)left = middle + 1;elseright = middle - 1;if(left right)printf(b%d(%d)不在数组中!n, i, bi);b0=101b1 =-14b2=82

18、leftrightmiddleleftrightmiddleleftrightmiddle08408408458603158678700078788810利用筛选法求1000 以内的素数的步骤如下:第一步依次列出2,3,4,5, ,1000,并确定第一个素数2;第二步从该素数起(但不包括),筛去(删去)序列中该素数的倍数;第三步把序列中大于原素数且没有被删去的第一个数作为新确定的素数,并重复第二步。如果找不到这样的数,则算法结束。提示:用数组存储序列。int num1000 =0,2 是素数则num2=0 , 筛去 2的倍数时让num4=1 ,num6= 1 , 参考程序:for(j=0; j

19、COL; +j)for(j=0; jCOL; +j)for(i=0; iROW; +i)for(i=0; iROW; +i)#include void main()int num1000 = 0, i, j, sum = 0;for(i=2; i1000; +i)if(numi = 0)printf(%5d, i);if(+sum % 10 = 0)printf(n);for(j=i+i; j1000; j += i)numj = 1;找出矩阵m 中的最大、最小元素,并输出它们的位置。#include #define ROW 2#define COL 3void main()int mROWC

20、OL, i, j;int pos4 = 0;printf( 请输入 %d 行 %d 列矩阵的元素n, ROW, COL);for(i=0; iROW; +i)for(j=0; jCOL; +j)scanf(%d, &mij);printf( 矩阵为 :n);for(j=0; j mpos0pos1)pos0 = i;pos1 = j;else if(mij mpos2pos3)pos2 = i;pos3 = j;printf( 最大元素在%d 行 %d 列为%dn, pos0, pos1, mpos0pos1);printf( 最小元素在%d 行 %d 列为%dn, pos2, pos3, m

21、pos2pos3);求矩阵 m 的转置矩阵。#include #define ROW 2#define COL 3void main()int mROWCOL, nCOLROW, i, j;printf( 请输入 %d 行 %d 列整型矩阵的元素n, ROW, COL);for(i=0; iROW; +i)for(i=0; iN; +i)for(i=0; iN; +i)scanf(%d, &mij);nji = mij;printf( 转置后的矩阵为n);for(i=0; iCOL; +i)for(j=0; jROW; +j)printf( %d , nij);printf(n);计算 n 阶

22、方阵的两条主对角线上元素的和。#include #define N 3void main()int mNN;int i, j, sum = 0;printf( 请输入 %d 行 %d 列整型矩阵的元素n, N, N);for(i=0; iN; +i)for(j=0; jN; +j)scanf(%d, &mij);if(i = j | i + j = N - 1)sum += mij;printf( 两条主对角线上元素的和为:%dn, sum);此算法把两条主对角线交叉点上的元素只计算了一次。计算 n 阶方阵上三角元素的和。#include #define N 3void main()int m

23、NN;int i, j, sum = 0;printf( 请输入 %d 行 %d 列整型矩阵的元素n, N, N);for(i=0; iN; +i)for(j=0; jN; +j)scanf(%d, &mij);if(i =j)sum += mij;printf( 上三角元素的和为:%dn, sum);输出金字塔形的杨辉三角。#include #define N 10void main()int aNN, i, j;for(j=0; j=i; +j)if(j = 0 | i = j)aij = 1;elseaij = ai - 1j + ai - 1j - 1;for(i=0; iN; +i)

24、for(j=i+1; jN; +j)printf(%4c, );for(j=0; j=i; +j)printf(%4d%4c, aij, );printf(n);或者include #define N 10void main()int aNN, i, j;for(i=0; iN; +i)for(j=i+1; jN; +j)printf(%4c, );for(j=0; j=i; +j)if(j = 0 | i = j)aij = 1;elseaij = ai - 1j + ai - 1j - 1;printf(%4d%4c, aij, );printf(n);能用一维数组输出杨辉三角吗?提示:有

25、a10=1,2,1 ,求下一行时,a3=1 , a2=a2+a1 , a1=a1+ a0 。#include ine N 10void main()int aN, i, j;for(i=0; iN; +i)for(j=i+1; j=0; -j)if(j = i | j = 0)aj = 1;elseaj = aj + aj - 1;printf(%4d%4c, aj, );printf(n);学号为 1、 2、 3 的学生的英语、高数、C 语言成绩:1 号 80,89,83; 2 号 72,85,95;3 号 61,72,80。按如下形式输出他们的平均成绩及合计成绩。学号英语高数 C 语言平均

26、分180898384合计无#include #define M 4#define N 3void main()int aMN = 80,89,83, 72,85,95, 61,72,80, i, j, ave;printf( 学号 英语 高数 C 语言 平均分 n);for(i=0; iM-1; +i)ave = 0;printf(%4d, i + 1);for(j=0; jN; +j)ave += aij;aM-1j += aij;printf(%6d, aij);printf(%8dn, ave /= N);printf( 合计 %6d%6d%6d%8sn, aM-10, aM-11, a

27、M - 12, 无 );国际象棋8 8 的棋 盘 上,皇后会攻击与之同行的,同列的及同对角线(两条)上的棋子,输入两个皇后在棋盘上的位置,输出它们能否相互攻击。#include #define N 8void main()int boardNN = 0;int i, j, pos4, flag = 0;printf( 请输入两个后的位置(1-8)n);for(i=0; i=3; +i)scanf(%d, &posi);boardpos0 - 1pos1 - 1 = 1;boardpos2 - 1pos3 - 1 = 1;if(pos0 = pos2 | pos1 = pos3)flag = 1

28、;if(pos3 - pos1 = pos2 - pos0)flag = 1;if(pos3 - pos1 = -1* (pos2 - pos0)flag = 1;if(flag = 0)printf( 它们不能相互攻击!n);elseprintf( 它们能相互攻击!n);for(i=0; iN; +i)for(j=0; jN; +j)if(boardij = 0)printf(0);elseprintf(*);printf(n);三维数组还能用什么方式初始化?编程验证。并总结多维数组的初始化方法。参考:三维数组初始化时还可在花括号中依次列出初值。如:#include void main( )

29、int a342 = 1, 1, 1, 2, 1, 3, 1, 4, 2, 1, 2, 2;int i, j, k;for(i=0; i3; +i)for(j=0; j4; +j)for(k=0; k2; +k)printf(%3d, aijk);printf(n);printf(nn);多维数组常见的初始化方法有两种:第一种:认为数组的元素最少,如:int a342 = , , ;第二种:认为数组的元素最多,如:int a342 = , , ;比较字面量3,3和 3 。参考:字面量 3 是一个整数,通常占4 字节,内存中为补码。字面量3是一个字符,占1 个字节,内存中为ASCII 码。字面量

30、 3 是一个字符串常量,由字符3和空字符0组成,占2 个字节。字符数组与其它类型的数组相比有何特殊之处?参考:1、字符数组可以用字符常量直接初始化;2、字符数组可以用%s 输入输出字符串。把从键盘输入的二进制整数串存储在字符数组中,并转换成十进制整数(如输入1111 ,则输出整数15) 。#include void main( )char ch;int val, i, sign = 1;val = i = 0;printf( 请输入一个二进制整数n);ch = getchar();if(ch = -)sign = -1;else if(ch = 0 | ch = 1)val = ch - 0;

31、elseprintf( 输入错误!n);return;while(ch = getchar() != n)if(ch = 0 | ch = 1)val = val * 2 + (ch - 0);elseprintf( 输入错误!n);return;printf( 转换成十进制数为%d!n, val * sign);用 putchar 函数 模拟函数调用puts(str)。#include void main( )char str6 = Henan;int i = -1;puts(str);/while(str+i != 0)putchar(stri);putchar(n);/把用户输入的一行字

32、符逆序输出, 如输入abc,则程序输出cba。#include #define N 100void main( )char strN;int i = -1;gets(str);while(str+i != 0);while(-i = 0)putchar(stri);输入一句英语,统计其中含有多少个英语单词,并把每个英语单词的首字母大写。参考1:#include ine N 100void main( )char strN;int i = -1, sum = 0, flag = 1;gets(str);while(str+i != 0)if(flag = 1)flag = 0;if(stri =a & stri = z)stri -= a - A;if(stri = )+sum;flag = 1;printf

温馨提示

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

评论

0/150

提交评论