300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 新概念c语言教程答案 新概念C语言能力教程练习答案.doc

新概念c语言教程答案 新概念C语言能力教程练习答案.doc

时间:2019-08-07 16:03:29

相关推荐

新概念c语言教程答案 新概念C语言能力教程练习答案.doc

新概念C语言能力教程练习答案.doc

练习66.1 输入10个整数,计算它们的平均值。找出最小数,再找出与平均值最接近的整数。include stdio.hvoid mainint a10, min, pos, i;double ave, mdif, dif;min 0; ave 0;fori0; i10; iscanfd, ave ai;ifai aminmin i;ave / 10;printf平均值为.1f,最小数为d ave, amin;mdif ave - a0 0 ave - a0 a0 - ave;pos 0;fori1; i10; idif ave - ai 0 ave - ai ai - ave;ifdif mdifmdif dif;pos i;printf与平均值最接近的整数为dn, apos;6.2 输入20个1至5之间的整数,给出1至5每个数出现的次数。include stdio.hvoid mainint a6 0, i;fori0; i20; iscanfd, ifa0 5 a0 1printf输入错误;return;aa0;fori1; i6; iprintfd出现了d次n, i, ai;6.3 以十六进制的形式输出用户输入的十进制正整数。includestdio.h void mainint n;int a8, j0;scanfd, printfXn, n;whilen 0aj n 16;n / 16;j;forj; j0; jif aj 9printfc, Aaj-10;elseprintfd, aj;printfn;或者直接用printf函数输出正整数的十六进制形式printfx, n;6.4找出整型数组中的最大值,把它后面的元素依次前移一位,再把它放在数组的末尾。include stdio.hdefine N 5void main int numN, max, i, temp;max 0;fori0; iN; iscanfd, ifnumi nummaxmax i;temp nummax;forimax; iN-1; inumi numi 1;numi temp;printf处理后的数组为n;fori0; iN; iprintf d , numi;6.5 有一整型数组a1020,23,37,52,95,输入5个整数存储在a中,且要保持数组a中的元素按升序排列。include stdio.hvoid main int a1020,23,37,52,95, i, j, temp;fori0; i4; iscanfd, forj4i; j0 ajtemp; jaj 1 aj;aj 1 temp;printf添加元素后的数组为n;fori0; i10; iprintf d , ai;6.6 输入20个整数到数组num中,并对num中的偶数号元素按升序排序。include stdio.hdefine N 20void main int i, j, numN, temp;fori0; iN; iscanfd, fori2; iN; ii2 temp numi; forji; j0 tempnumj-2; jj-2 numj numj-2; numj temp; 按升序10个一行输出fori0; iN; iifi 10 0printfn;printf d , numi;printfn;6.7 输入一个5位无符号整数,输出构成这个整数的5个数字可以组成的整数中最大的及最小的5位整数(输入67890、10002测试)。include stdio.hvoid main int bit5, i, j, temp;unsigned num, max, min;max min 0;scanfu, fori0; i4; ibiti num 10;num / 10;fori1; i4; itemp biti; forji; j0 tempbitj-1; j bitj bitj-1; bitj temp;fori4; i0; imax max * 10 biti;fori0; i4; iifbiti 0temp biti;biti bit0;bit0 temp;break;fori0; i4; imin min * 10 biti;printf最大的5位整数为d,最小的为dn, max, min;6.8 分析下面的程序1. include stdio.hvoid main int i, j, a10, temp;fori0; i10; i ai i; printf3d, ai; i 0; j 9; whileij temp ai; ai aj; aj temp; i; j; printfnn; fori0; i10; i printf3d, ai;2.include stdio.hvoid main int a35 1;int i, k, n, m;forn2; n1000; nk 1; m n - 1; fori2; in; i ifn i 0 m - i; ak i; ifm 0 printfnd, n; forik-1; i0; i printfd , ai; printfdn, a0; 分析1. 对数组进行了倒置。循环结构的执行过程如下循环体循环控制tempai;aiaj;ajtemp;i;ja0a1 a2a3a4a5a6a7a8a9ijij0123456789091(真)a0a9互换0-19-89123456780181(真)a1a8互换1-28-79823456710271(真)a2a7互换2-37-69873456210361(真)a3a6互换3-46-59876453210451(真)a4a5互换4-55-49876543210540(假)退出不再执行不不循环控制条件改为ij时会出现什么情况有9个数组元素时,分析循环结构的执行过程。2. 求出了1000以内的完全数。循环结构的执行过程如下 循环体循环控制kmfori2;in; iifn i 0 m - i;ak i;ifm0输出n;nn100021(真)11iinifni0i假不输出a012-3makk20-假31(真)1221-真2-3假不输出a013-430-假41(真)1321-真3-1a121-22-3假不输出a01a124-531-真3-440-假51(真)1421-真2-3假不输出a01a125-631-真3-441-真4-550-假61(真)1521-真5-3a121-22-3真,a01,a12,a33输出分析略6-731-真3-0a232-33-441-真4-551-真5-660-假76.9 冒泡排序时第一趟操作可用代码描述如下include stdio.hvoid main int i, num 25, 22, 21, 29, 23, temp; fori0; i4; i ifnumi numi1 temp numi; numi numi1; numi1 temp; 请结合代码分析冒泡排序中一趟操作的效果。冒泡排序需要几趟类似操作才能使整个数组有序请实现冒泡排序算法。答冒泡排序中一趟操作的效果是找出数组里无序元素中的最大者(或最小者),并将其放在适当的位置。具体的分析过程如下循环体循环控制ifnuminumi1tempai;aiaj;ajtemp;i;num0num1 num2num3num4ii4252221292301(真)真num0num1互换0-1222521292311(真)真num1num2互换1-2222125292321(真)假不互换2-3222125292331(真)真num3num4互换3-4222125232940(假)退出不再执行不冒泡排序需要比数组元素总数少一趟的类似操作才能使整个数组有序。冒泡排序算法为include stdio.hdefine N 5void main int i, j, num 25, 22, 21, 29, 23, temp;forjN-1; j1; jfori0; ij; iifnumi numi1temp numi;numi numi1;numi1 temp;fori0; iN; iprintf d , numi;6.10 选择排序算法的思路是先从数组中找出最小的元素和第0号元素交换,接着从余下的元素中找出最小的元素和第1号元素交换,再从余下的元素中找出最小的元素和第2号元素交换。请实现选择排序算法。include stdio.hdefine N 5void main int i, j, numN 25, 22, 21, 29, 23, min, temp;forj0; jN; jforminij; iN; iifnuminumminmin i;temp numj;numj nummin;nummin temp;fori0; iN; iprintf d , numi;6.11 分析下面两段代码。1. int num 49, 38, 65, 97, 76, 13, 27; int i 1, j 7, temp, pivot; pivot num0; while1 for ; i7 numipivot; i ; whilenumj pivot ; ifi j break; temp numi; numi numj; numj temp; num0 numj; numj pivot;2. int num 49, 38, 65, 97, 76, 13, 27; int left 0, right 6, pivot num0; do whileright left numright pivot right; ifright left numleft numright; left; whileleft right numleft pivot left; ifleft right numright numleft; right; whileleft right; numleft pivot;参考.输出为数组中小于首元素的元素均位于首元素的左边,而大于的均去了右边。具体的执行过程分析如下。循环体循环控制for;i7numipivot; i;whilenumjpivot;ifij break;tempnumi; numinumj;numj temp;11(真)ii7numipivot;ijnumjpivotj;0(假)交换num2与num6数组状态见111(真)1-270(假)620(假)1(真)21(真)2-360(假)50(假)交换num3与num5数组状态见230(假)1(真)31(真)3-451(真)41(真)退出循环40(假)40(假)3编号num0num1num2num3num4num5num6493865977613271493827977613652493827137697652. 输出为作用同1,但采用的算法不同,具体的执行过程分析如下。whilerlnumr pivot r;ifrlnumlnumr;l;whilelrnumlpivotl; iflrnumrnuml;r;循环体循环控制lrlrlrrlnumrprivotrrlnumlnumr ;l;lrrlnumlprivotllrnumrnuml;r;251(真)060(假)1(真)状态10-1161(真)1-21(真)状态26-5260(假)250(假)1(真)状态32-3350(假)1(真)状态45-4341(真)341(真)4-3330(假)0(假)330(假)330(假)编号num0num1num2num3num4num5num6493865977613271273865977613272273865977613653273813977613654273813977697656.12 分析下面的程序include stdio.hvoid main int a -15, 6, 0, 7, 9, 23, 54, 82, 101; int b3 101, -14, 82; int i, left, right, middle; fori0; i3; i left 0; right 8; whileleft right middle left right / 2; ifbi amiddle printfadbddn, middle, i, bi;break; else ifbi amiddle left middle 1; else right middle - 1; ifleft right printfbdd不在数组中n, i, bi; b0101b1 -14b282leftrightmiddleleftrightmiddleleftrightmiddle084084084586031586787000787888106.13 利用筛选法求1000以内的素数的步骤如下第一步依次列出2,3,4,5,,1000,并确定第一个素数2;第二步从该素数起(但不包括),筛去(删去)序列中该素数的倍数;第三步把序列中大于原素数且没有被删去的第一个数作为新确定的素数,并重复第二步。如果找不到这样的数,则算法结束。提示用数组存储序列。int num1000 0,2是素数则num20,筛去2的倍数时让num41,num6 1 参考程序include stdio.hvoid main int num1000 0, i, j, sum 0;fori2; i1000; iifnumi 0printf5d, i;ifsum 10 0printfn;forjii; j1000; j inumj 1;6.14 找出矩阵m中的最大、最小元素,并输出它们的位置。include stdio.hdefine ROW 2define COL 3void mainint mROWCOL, i, j;int pos4 0;printf请输入d行d列矩阵的元素n, ROW, COL;fori0; iROW; iforj0; jCOL; jscanfd, printf矩阵为n;fori0; iROW; iforj0; jCOL; jprintf d , mij;ifj COL - 1printfn;ifmij mpos0pos1pos0 i;pos1 j;else ifmij mpos2pos3pos2 i;pos3 j;printf最大元素在d行d列为dn, pos0, pos1, mpos0pos1;printf最小元素在d行d列为dn, pos2, pos3, mpos2pos3;6.15 求矩阵m的转置矩阵。include stdio.hdefine ROW 2define COL 3void mainint mROWCOL, nCOLROW, i, j;printf请输入d行d列整型矩阵的元素n, ROW, COL;fori0; iROW; iforj0; jCOL; jscanfd, nji mij;printf转置后的矩阵为n;fori0; iCOL; iforj0; jROW; jprintf d , nij;printfn;6.16 计算n阶方阵的两条主对角线上元素的和。include stdio.h define N 3void main int mNN;int i, j, sum 0;printf请输入d行d列整型矩阵的元素n, N, N;fori0; iN; iforj0; jN; jscanfd, ifi j i j N - 1sum mij;printf两条主对角线上元素的和为dn, sum;注此算法把两条主对角线交叉点上的元素只计算了一次。6.17 计算n阶方阵上三角元素的和。include stdio.h define N 3void main int mNN;int i, j, sum 0;printf请输入d行d列整型矩阵的元素n, N, N;fori0; iN; iforj0; jN; jscanfd, ifi jsum mij;printf上三角元素的和为dn, sum;6.18输出金字塔形的杨辉三角。 include stdio.h define N 10void main int aNN, i, j;fori0; iN; iforj0; ji; jifj 0 i jaij 1;elseaij ai - 1j ai - 1j - 1;fori0; iN; iforji1; jN; jprintf4c, ;forj0; ji; jprintf4d4c, aij, ;printfn;或者include stdio.h define N 10void main int aNN, i, j;fori0; iN; iforji1; jN; jprintf4c, ;forj0; ji; jifj 0 i jaij 1;elseaij ai - 1j ai - 1j - 1;printf4d4c, aij, ;printfn;6.19 能用一维数组输出杨辉三角吗提示有a101,2,1,求下一行时,a31,a2a2a1,a1a1 a0。include stdio.h define N 10void main int aN, i, j;fori0; iN; iforji1; jN; jprintf4c, ;forji; j0; jifj i j 0aj 1;elseaj aj aj - 1;printf4d4c, aj, ;printfn;6.20 学号为1、2、3的学生的英语、高数、C语言成绩1号80,89,83;2号72,85,95;3号61,72,80。按如下形式输出他们的平均成绩及合计成绩。学号 英语 高数 C语言 平均分1 80 89 83 84 合计 无include stdio.hdefine M 4 define N 3void main int aMN 80,89,83, 72,85,95, 61,72,80, i, j, ave;printf学号 英语 高数 C语言 平均分n;fori0; iM-1; iave 0;printf4d, i 1;forj0; jN; jave aij;aM-1j aij;printf6d, aij;printf8dn, ave / N;printf合计6d6d6d8sn, aM-10, aM-11, aM - 12, 无;6.21 国际象棋88的棋盘上,皇后会攻击与之同行的,同列的及同对角线(两条)上的棋子,输入两个皇后在棋盘上的位置,输出它们能否相互攻击。include stdio.hdefine N 8void main int boardNN 0;int i, j, pos4, flag 0; printf请输入两个后的位置1-8n;fori0; i3; iscanfd, boardpos0 - 1pos1 - 1 1;boardpos2 - 1pos3 - 1 1;ifpos0 pos2 pos1 pos3flag 1;ifpos3 - pos1 pos2 - pos0flag 1;ifpos3 - pos1 -1* pos2 - pos0flag 1;ifflag 0printf它们不能相互攻击n;elseprintf它们能相互攻击n;fori0; iN; iforj0; jN; jifboardij 0printf0;elseprintf*;printfn;6.22 三维数组还能用什么方式初始化编程验证。并总结多维数组的初始化方法。参考三维数组初始化时还可在花括号中依次列出初值。如include stdio.hvoid main int a342 1, 1, 1, 2, 1, 3, 1,

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。