第7章数组7-1输入一个正整数n(1≤n≤10),再输入n个整数(1)输出最大数和最小数,并输出平均值。
(2)将最小数与第一个数交换,最大数与最后一个数交换,然后输出交换后的结果。
(3)输出所有比平均值大的数。
(4)找到最接近平均值的数。
(提示:考虑差的绝对值)/* 将最小数与第一个数交换,最大数与最后一个数交换*/t=a[0];a[0]=a[q];a[q]=t;t=a[N-1];a[N-1]=a[p];a[p]=t;printf("After exchange: ");for(i=0; i<N; i++)printf("%d ", a[i]);/* 输出所有比平均值大的数*/printf("\nLarger than the average: ");for(i=0; i<N; i++)if(a[i]>ave)printf("%d ", a[i]);/* 找到最接近平均值的数*/printf("\nThe number closest to the average is: ");sub = a[0]>ave? a[0]-ave: ave-a[0];p=0;for(i=1; i<N; i++){ if( (a[i]>ave? a[i]-ave: ave-a[i]) < sub ){ sub = a[i]>ave? a[i]-ave: ave-a[i];p=i;}}printf("%d.", a[p]);}OutputPlease input 10 integers:17 34 -11 2 5 10 7 -9 0 25 /* input */The maximum is: 34, the minimum is: -11, the average is 8.00After exchange: -11 25 17 2 5 10 7 -9 0 34Larger than the average: 25 17 10 34The number closest to the average is: 77-2输入一个日期(按照year-month-day格式),计算该日期为当年的第几天。
(提示:注意闰年)(1)使用数组存储当年每个月应有的天数;(2)不使用数组完成;printf("This date is the %dth day in the year.\n", total);}OutputPlease input a date: (year-month-day) 2008-4-14↵/* input */This date is the 105th day in the year.7-3输入一个正整数n(1≤n≤10),再输入n个整数,将这n个整数从大到小排序,然后在已经排序后的数组中插入平均数(取整),保持数组的升序,将插入平均数后的数组输出。
(1)用冒泡法排序;(2)用选择法排序。
#define N 11main(){ int a[N], n, i, j, t, k, ave=0;/* 读入数据,计算平均值*/printf("How many numbers you want to sort? ");scanf("%d", &n);printf ( "Please input %d numbers:\n", n );for ( i = 0; i <= n-1; i++){ scanf ( "%d", &a[i] );ave += a[i];}ave /= n;/* 冒泡法排序*/for ( i = 1; i <= n-1; i++ ){ for ( j = 1; j <= n - i; j++ ){ if ( a[j-1] < a[j] ){ t = a[j-1];a[j-1] = a[j];a[j] = t;}}}for(i=0; i<n; i++){ if(a[i]>ave)continue;for(j=n; j>i; j--)a[j]=a[j-1];a[i]=ave;break;}for ( i = 0; i <= n; i++ )printf ( "%d ", a[i] );}OutputHow many numbers you want to sort? 5↵/* input */Please input 5 numbers:17 34 -11 2 5↵/* input */34 17 9 5 2 -117-4输入两个数组A和B(各5个元素),将其按照升序排序,然后将A和B合并到数组C中(合并的过程中保持升序,不要合并后再排序)。
输出排序后的数组A、B和C。
Program#define N 5main(){ int a[N], b[N], c[2*N], i, j, t, k;printf("Please input array A (containing %d elements): ", N);for (i=0; i<N; i++)scanf("%d", &a[i]);printf("Please input array B (containing %d elements): ", N);for (i=0; i<N; i++)scanf("%d", &b[i]);/* 冒泡法排序*/for ( i = 1; i < N; i++ ){ for ( j = 1; j <= N - i; j++ ){ if ( a[j-1] > a[j] ){ t = a[j-1];a[j-1] = a[j];a[j] = t;}}}for ( i = 1; i < N; i++ ){ for ( j = 1; j <= N - i; j++ ){ if ( b[j-1] > b[j] ){ t = b[j-1];b[j-1] = b[j];b[j] = t;}}}/* 将数组a和数组b合并到数组c中*/for ( i = 0, j = 0, k = 0; i < N && j < N; k++ )if ( a[i] <= b[j] )c[k] = a[i++];elsec[k] = b[j++];while ( i < N )c[k++] = a[i++];while ( j < N )c[k++] = b[j++];printf("Array C is: ");for ( i = 0; i < 2*N; i++ )printf ( "%d ", c[i] );}OutputPlease input array A (containing 5 elements):17 34 -11 2 5↵/* input */ Please input array B (containing 5 elements): 10 7 -9 0 25↵/* input */ Array C is: -11 -9 0 2 5 7 10 17 25 347-5利用数组,求一个int型整数对应的二进制补码并输出(注意负数)。
main(){ int n, m, b[16]={0}, i=15;printf("Please input an integer: ");scanf("%d", &n);m = n>=0? n: -n;while(m){ b[i--]=m%2;m = m/2;}/* 负数的补码*/if(n<0){ for(i=0; i<16; i++) /* 取反*/b[i] = b[i]==1? 0: 1;for(i=15; i>=0; i--) /* 加1 */{ if(b[i]==0){ b[i] = 1;break;}elseb[i] = 0;}}printf("The binary complemental code of %d is: ", n);for(i=0; i<16; i++){ printf("%d", b[i]);if(i==7)printf(" ");}}Output (1)Please input an integer: 9↵/* input */The binary complemental code of 9 is: 00000000 00001001Output (2)Please input an integer: -9↵/* input */The binary complemental code of -9 is: 11111111 111101117-6编写程序,按照下面要求填充并显示5行5列的矩阵(要求:使用的printf语句不多于2个)(1)左上三角为+1(2)右下三角为-1(3)从右到左的对角线为0。
示例: 1 1 1 1 01 1 1 0 -11 1 0 -1 -11 0 -1 -1 -10 -1 -1 -1 -17-7定义一个二维数组,输入元素,输出最大元素及其行下标和列下标。
7-8输入一个4*3的矩阵(整型),计算每行中最大值的平均值(实型)。
7-9杨辉三角形(也叫Pascal三角形)如下:11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1……编写程序,生成一个15行的杨辉三角形,存放在一个二维数组里。
输入正整数n (1~15),读取并输出杨辉三角形的前n 行元素。
(提示:如果用i 表示行,用j 表示列,则第i 行j 列元素p i, j =p i-1,j-1 + p i-1, j )7-10 矩阵A 和矩阵B 相乘,要求A 的列数和B 的行数相同。
例如:m 行n 列的矩阵A 和n 行p 列的矩阵B 相乘,得到m 行p 列的矩阵C ,C 中的i 行j 列元素c ij 由下列公式得到:kj nk ik ij b a c ∑==1其中,a ik 是矩阵A 中的i 行k 列元素,b kj 是矩阵B 中的k 行j 列元素。