C 语言教程 在线

1800c-exercise-example39

结合上一个来练习,输入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

1799c-exercise-example39

参考方法:

#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]);
}

1798c-exercise-example38

参考了 麦穗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;
}

1797c-exercise-example38

参考方法:

#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;
}

1796c-exercise-example38

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;
}