1、练习 6 6.1 输入 10 个整数,计算它们的平均值。找出最小数,再找出与平均值最接近的整数。 #include void main() int a10, min, pos, i; double ave, mdif, dif; min = 0; ave = 0; for(i=0; i 0 ? ave - a0 : a0 - ave; pos = 0; for(i=1; i 0 ? ave - ai : ai - ave; if(dif void main() int a6 = 0, i; for(i=0; i 5 | a0 void main() int n; int a8, j=0; sc
2、anf(“%d“, printf(“%Xn“, n); while(n 0) aj = n % 16; n /= 16; +j; for(-j; j=0; -j) if (aj 9) printf(“%c“, A+aj-10); else printf(“%d“, aj); printf(“n“); 或者直接用 printf 函数输出正整数的十六进制形式 : printf(“%x“, n); 6.4 找出整型数组中的最大值 , 把它后面的元素依次前移一位 , 再把它放在数组的末尾。 #include #define N 5 void main( ) int numN, max, i, temp
3、; max = 0; for(i=0; i nummax) max = i; temp = nummax; for(i=max; i void main( ) int a10=20,23,37,52,95, i, j, temp; for(i=0; i=0 -j) aj + 1 = aj; aj + 1 = temp; printf(“添加元素后的数组为 :n“); for(i=0; i #define N 20 void main( ) int i, j, numN, temp; for(i=0; i0 unsigned num, max, min; max = min = 0; scanf
4、(“%u“, for(i=0; i0 -i) max = max * 10 + biti; for(i=0; i void main( ) int i, j, a10, temp; for(i=0; i void main( ) int a35 = 1; int i, k, n, m; for(n=2; n0; -i) printf(“%d + “, ai); printf(“%dn“, a0); 分析: 1. 对数组进行了倒置。循环结构的执行过程如下 循环体 循环控制 temp=ai; ai=aj; aj=temp; +i; -j a 0 a 1 a 2 a 3 a 4 a 5 a 6 a
5、7 a 8 a 9 i j i1 9-8 9 1 2 3 4 5 6 7 8 0 1 8 1(真) a1a8互换 1-2 8-7 9 8 2 3 4 5 6 7 1 0 2 7 1(真) a2a7互换 2-3 7-6 9 8 7 3 4 5 6 2 1 0 3 6 1(真) a3a6互换 3-4 6-5 9 8 7 6 4 5 3 2 1 0 4 5 1(真) a4a5互换 4-5 5-4 9 8 7 6 5 4 3 2 1 0 5 4 0(假) 退出不再执行 不 不 循环控制条件改为 i3 m ak+ k 2 0-假 3 1(真) 1 2 2 1-真 2-3 假不输出 /a0:1 3-4 3
6、 0-假 4 1(真) 1 3 2 1-真 3-1 a1:2 1-2 2-3 假不输出 /a0:1 a1:2 4-5 3 1-真 3-4 4 0-假 5 1(真) 1 4 2 1-真 2-3 假不输出 /a0:1 a1:2 5-6 3 1-真 3-4 4 1-真 4-5 5 0-假 6 1(真) 1 5 2 1-真 5-3 a1:2 1-2 2-3 真, / a0:1,a1:2,a3:3 输出分析略 6-7 3 1-真 3-0 a2:3 2-3 3-4 4 1-真 4-5 5 1-真 5-6 6 0-假 7 6.9 冒泡排序时第一趟操作可用代码描述如下: #include void main(
7、 ) int i, num = 25, 22, 21, 29, 23, temp; for(i=0; i numi+1) temp = numi; numi = numi+1; numi+1 = temp; 请结合代码分析冒泡排序中一趟操作的效果。冒泡排序需要几趟类似操作才能使整个数组有序 ?请实现冒泡排序算法。 答: 冒泡排序中一趟操作的效果是找出数组里无序元素中的最大者(或最小者),并将其放在适当的位置。具体的分析过程如下: 循环体 循环控制 if(numinumi+1) temp=ai;ai=aj; aj=temp; +i; num 0 num 1 num 2 num 3 num 4 i
8、 i1 22 25 21 29 23 1 1(真) 真 num1num2互换 1-2 22 21 25 29 23 2 1(真) 假不互换 2-3 22 21 25 29 23 3 1(真) 真 num3num4互换 3-4 22 21 25 23 29 4 0(假) 退出不再执行 不 冒泡排序需要比数组元素总数少一趟的类似操作才能使整个数组有序。冒泡排序算法为: #include #define N 5 void main( ) int i, j, num = 25, 22, 21, 29, 23, temp; for(j=N-1; j=1; -j) for(i=0; i numi+1) temp = numi; numi = numi+1; numi+1 = temp; for(i=0; i #define N 5 void main( ) int i, j, numN = 25, 22, 21, 29, 23, min, temp; for(j=0; j pivot) ; if(i = j) break;