结合上一个来练习,输入5个数字,先将其排序,然后输入一个数字,插入排列好的数组中
#include <stdio.h> #define N 5 int *sort(int a[],int n); int main() { int i,j,a[N+1]; printf("请输入5个数字:\n"); for(i=0;i<N;i++) { scanf("%d",&a[i]); } sort(a,N); printf("排序后:\n"); for(i=0;i<N;i++) { printf("%d ",a[i]); } printf("\n"); printf("请输入想要插入的数字:"); scanf("%d",&j); a[N]=j; sort(a,N+1); printf("插入后排序:\n"); for(i=0;i<N+1;i++) { printf("%d ",a[i]); } printf("\n"); return 0; } int *sort(int a[],int n) { int i,j,min,t; for(i=0;i<n-1;i++) { min=i; for(j=i+1;j<n;j++) { if(a[min]>a[j]) { min=j; } } if(min!=i) { t=a[min]; a[min]=a[i]; a[i]=t; } } return a; }
输出结果为:
请输入5个数字:654 3 23 103 96 排序后:3 23 96 103 654 请输入想要插入的数字:45 插入后排序:3 23 45 96 103 654
参考方法:
#include<stdio.h> int main() { int opo[11]={1,4,6,9,13,16,19,28,40,100};//原始的数组,题目给的 int a,b,c,e; printf("这是原始的数组"); for(a=0;a<10;a++)printf("%d ",opo[a]); printf("\n输入一个数,插入原数组"); scanf("%d",&b); for(c=9;c>=0;c--){ //使用逆序的话,可以省掉很多过程,而且清晰 if(b<opo[c]) { opo[c+1]=opo[c]; } else { opo[c+1]=b;break; } if(c==0) opo[0]=b; //应为是逆序,如果b比第一个小的话写不进去,要特意弄个if }//哇,逆序超简洁,惊了 for(e=0;e<=10;e++) printf("%d ",opo[e]); }
参考了 麦穗melody 同学的,做了些改进,N 的取值没有限制:
#include <stdio.h> #include <stdlib.h> #include <time.h> #define N 3 int main(){ int i,j; int a[N][N]; int sum=0; srand(time(NULL)); //随机数种子 for(i=0;i<N;i++){ for(j=0;j<N;j++){ a[i][j]=rand()%(10); //产生0-10以内的随机数 if(i==j || i+j==N-1) sum+=a[i][j]; //边产生边相加 } } printf("打印随机%d阶矩阵:\n",N); for(i=0;i<N;i++){ for(j=0;j<N;j++){ printf("%3d ",a[i][j]); } printf("\n"); } printf("%d阶矩阵对角线元素之和为:%d",N,sum); return 0; }
参考方法:
#include<stdio.h> int tangle_sum(int *a,int n) { int i; int sum = 0; for(i = 0; i < n; i++) sum += a[i*n + i]; return sum; } int main(void) { int a[3][3],ret; int *p = *a; printf("请输入矩阵(3*3):\n"); for(int i = 0;i < 3; i++) { for(int j = 0; j < 3; j++) { scanf("%d",&a[i][j]); } } ret = tangle_sum(p,3); printf("对角线之和为:%d",ret); return 0; }
求 N*N 阶矩阵对角线元素之和(N 为奇数):
#include<stdio.h> #include<stdlib.h> #include<time.h> #define N 5 int main() { int i=0,j=0; int a[N][N]; int sum=0; srand(time(NULL)); //srand()函数是随机函数rand()函数的种子函数,以time(NUL // L)为种子,可使rand()每次产生随机数不同; for(i=0;i<N;i++){ for(j=0;j<N;j++){ a[i][j]=rand()%(N*N+1); //rand()%31是产生0-30的随机数 } } printf("打印随机%d阶矩阵:\n",N); for(i=0;i<N;i++){ for(j=0;j<N;j++){ printf("%3d ",a[i][j]); if(j==N-1) printf("\n"); } } for(i=0;i<N;i++){ sum=sum+a[i][i]+a[i][N-1-i]; } sum=sum-a[(N-1)/2][(N-1)/2]; printf("%d阶矩阵对角线元素之和为:%d",N,sum); return 0; }
感谢您的支持,我会继续努力的!
支付宝扫一扫,即可进行扫码打赏哦
1800c-exercise-example39
结合上一个来练习,输入5个数字,先将其排序,然后输入一个数字,插入排列好的数组中
输出结果为:
1799c-exercise-example39
参考方法:
1798c-exercise-example38
参考了 麦穗melody 同学的,做了些改进,N 的取值没有限制:
1797c-exercise-example38
参考方法:
1796c-exercise-example38
求 N*N 阶矩阵对角线元素之和(N 为奇数):