练习 66.1 输入 10 个整数,计算它们的平均值。找出最小数,再找出与平均值最接近的整数。#include void main(){int a[10], min, pos, i;double ave, mdif, dif;min = 0; ave = 0;for(i=0; i 0 ? ave - a[0] : a[0] - ave;pos = 0;for(i=1; i 0 ? ave - a[i] : a[i] - ave;if(dif void main(){int a[6] = {0}, i;for(i=0; i 5 || a[0] void main(){int n;int a[8], j=0;scanf(“%d“, printf(“%X\n“, n);while(n > 0){a[j] = n % 16;n /= 16;++j;}for(--j; j>=0; --j)if (a[j] > 9)printf(“%c“, 'A'+a[j]-10);elseprintf(“%d“, a[j]);printf(“\n“);}或者直接用 printf 函数输出正整数的十六进制形式:printf(“%x“, n);6.4 找出整型数组中的最大值,把它后面的元素依次前移一位,再把它放在数组的末尾。#include #define N 5void main( ){int num[N], max, i, temp;max = 0;for(i=0; i num[max])max = i;}temp = num[max];for(i=max; ivoid main( ){int a[10]={20,23,37,52,95}, i, j, temp;for(i=0; i=0 --j)a[j + 1] = a[j];a[j + 1] = temp;}printf(“添加元素后的数组为:\n“);for(i=0; i#define N 20void main( ){int i, j, num[N], temp;for(i=0; i0 unsigned num, max, min;max = min = 0;scanf(“%u“, for(i=0; i0 --i)max = max * 10 + bit[i];for(i=0; ivoid main( ){int i, j, a[10], temp;for(i=0; ivoid main( ){int a[35] = {1};int i, k, n, m;for(n=2; n0; --i)printf(“%d + “, a[i]);printf(“%d\n“, a[0]);}}}分析:1. 对数组进行了倒置。循环结构的执行过程如下循环体循环控制a[0]a[1] a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]i j i1 9->8 9 1 2 3 4 5 6 7 8 01 8 1(真) a[1]a[8]互换 1->2 8->7 9 8 2 3 4 5 6 7 1 02 7 1(真) a[2]a[7]互换 2->3 7->6 9 8 7 3 4 5 6 2 1 03 6 1(真) a[3]a[6]互换 3->4 6->5 9 8 7 6 4 5 3 2 1 04 5 1(真) a[4]a[5]互换 4->5 5->4 9 8 7 6 5 4 3 2 1 05 4 0(假) 退出不再执行 不 不循环控制条件改为 i32 1-真 - - - 2->33 1(真) 1 23 0-假 × × × ×假不输出//a[0]:13->42 1-真 3->1 a[1]:2 1->2 2->33 1-真 - - - 3->44 1(真) 1 34 0-假 × × × ×假不输出//a[0]:1a[1]:24->52 1-真 - - - 2->33 1-真 - - - 3->44 1-真 - - - 4->55 1(真) 1 45 0-假 × × × ×假不输出//a[0]:1a[1]:25->62 1-真 5->3 a[1]:2 1->2 2->33 1-真 3->0 a[2]:3 2->3 3->44 1-真 - - - 4->55 1-真 - - - 5->66 1(真) 1 56 0-假 × × × ×真,// a[0]:1,a[1]:2,a[3]:3输出分析略6->77 …… … … …… …… ……6.9 冒泡排序时第一趟操作可用代码描述如下:#include void main( ){int i, num[ ] = {25, 22, 21, 29, 23}, temp;for(i=0; i num[i+1]){temp = num[i];num[i] = num[i+1];num[i+1] = temp;}}请结合代码分析冒泡排序中一趟操作的效果。冒泡排序需要几趟类似操作才能使整个数组有序?请实现冒泡排序算法。答:冒泡排序中一趟操作的效果是找出数组里无序元素中的最大者(或最小者) ,并将其放在适当的位置。具体的分析过程如下:循环体循环控制num[0]num[1] num[2]num[3]num[4]i inum[i+1]){temp=a[i];a[i]=a[j];a[j]=temp;}++i;25 22 21 29 230 1(真) 真 num[0]num[1]互换 0->1 22 25 21 29 231 1(真) 真 num[1]num[2]互换 1->2 22 21 25 29 232 1(真) 假不互换 2->3 22 21 25 29 233 1(真) 真 num[3]num[4]互换 3->4 22 21 25 23 294 0(假) 退出不再执行 不冒泡排序需要比数组元素总数少一趟的类似操作才能使整个数组有序。冒泡排序算法为:#include #define N 5void main( ){int i, j, num[ ] = {25, 22, 21, 29, 23}, temp;for(j=N-1; j>=1; --j)for(i=0; i num[i+1]){temp = num[i];num[i] = num[i+1];num[i+1] = temp;}for(i=0; i#define N 5void main( ){int i, j, num[N] = {25, 22, 21, 29, 23}, min, temp;for(j=0; j pivot);if(i >= j)
展开阅读全文