实验任务2帮看看我不会

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/610304744666167.jpg "#lef
实验任务2的二维数组最后怎么输出几行几列,想不明白,不知道插入的数是多少,整个实验二具体思路说一下谢谢

定义一个二维数组,注意插入前后数组大小的区分就可以了。
具体写了一下实验任务1、2、3的代码,思路可供参考:

#include<stdio.h>
#include<string.h>

void bubble_sort(int a[],int n)
{ 
    int i,j,t; 
    for (i=0;i<n-1;i++) 
    { 
        for (j=0;j<n-1-i;j++) 
        { 
            if(a[j] > a[j+1]) //从小到大,升序 
            {
                t = a[j]; 
                a[j]=a[j+1]; 
                a[j+1]=t; 
            } 
        } 
    }
}
int main()
{ 
    int a[6][4],i,j; 
    int h; 
    char stu[21][30]={0}; 
    int nmb[26]; //记录每个姓名开头的人数 
    for(i=0;i<26;i++) 
        nmb[i]=0; 
    for (i=0;i<5;i++) 
    { for (j=0;j<4;j++) 
        { 
            scanf("%d",&a[i][j]); 
        } 
    } 
    //排序 
    bubble_sort(&a[0][0],20); 
    //输出 
    for (i=0;i<5;i++) 
    { 
        for (j=0;j<4;j++) 
            printf("%d ",a[i][j]); 
        printf("\n");
    }
    //插入 
    printf("请输入插入班级的小朋友身高:"); 
    scanf("%d",&h); 
    for (i=0;i<5;i++) 
    { 
        for (j=0;j<4;j++) 
        { 
            if(a[i][j] >= h) 
                break; 
        } 
    } 
    if(i == 5) 
        printf("第6行第1列\n"); 
    else 
        printf("第%d行第%d列\n",i+1,j+1); 
    //输入学生姓名20名 
    printf("请输入20名学生的姓名:\n"); 
    for (i=0;i<5;i++) 
    { 
        for(j=0;j<4;j++) 
        { 
            gets(stu[i]); 
        if(stu[i][j] >='a' && stu[i][j]<='z') 
            nmb[stu[i][j]-'a']++; 
        else if(stu[i][j] >='A' && stu[i][j]<='Z') 
            nmb[stu[i][j]-'A']++; 
        } 
    } 
    //显示 
    for (i=0;i<26;i++) 
    { 
        if(nmb[i] > 0) 
            printf("%c开头的小朋友%d个\n",(char)('A'+i),nmb[i]); 
    } 
    return 0;
}

如有帮助,还请采纳!谢谢!

就是定义一个二维数组,比如s[5][4],表示5行4列,然后for循环输入每个学生身高。对身高进行从高到低排序。然后可以插入一个学生信息,插入后二维数组将变为s[6][4](可以一开始就定义成6行4列)。插入将按照身高顺序进行。记录新学生身高的排序就好了

#include <stdio.h>

int s[6][4] = {0};
char name[30][20] = {0};
int sn = 20;
int count[26] = {0};

void input()
{
    printf("输入20个学生身高:");
    for(int i=0;i<5;i++)
        for(int j=0;j<4;j++)
            scanf("%d",&s[i][j]);
}
void sorts()
{
    int *p = (int*)s;
    for(int i=0;i<19;i++)
        for(int j=0;j<19-i;j++)
        {
            if(p[j] < p[j+1])
            {
                int h = p[j];
                p[j] = p[j+1];
                p[j+1] = h;
            }
        }
}

void insert(int h,int *i,int *j)
{
    int *p = (int*)s;
    for(int a=19;a>=0;a--)
    {
        if(h<p[a])
        {
            for(int b=19;b>=a;b--)
                p[b+1] = p[b];
            p[a] = h;
            *i = a/4;
            *j = a%4;
            return;
        }
    }
    p[20] = h;
    *i = *j = 0;
}

void print()
{
    for(int i=0;i<6;i++)
    {
        for(int j=0;j<4;j++)
            if(s[i][j] != 0)
                printf("%d ",s[i][j]);
        printf("\n");
    }
}

int main()
{
    int h,i=0,j=0;
    input();
    sorts();
    printf("输入新小朋友身高:");
    scanf("%d",&h);
    insert(h,&i,&j);
    printf("新小朋友行号:%d,列号:%d\n",i+1,j+1);
    print();
    //输入学生姓名
    printf("输入20个小朋友姓名:");
    for(i=0;i<sn;i++)
    {
        gets(name[i]);
        count[name[i][0]-'A']++;
    }
    //统计不同字母开头的学生数量
    for(i=0;i<26;i++)
    {
        if(count[i] != 0)
        printf("姓名以%c开头的小朋友有:%d个\n",i+'A');
    }
    return 0;
}

每个学生座位的行号和列号就是二维数组的两个下标,数组存放的内容就是学生身高,也就是需要程序运行后等待用户输入。

实验一中你已经获得一个有序二维数组了,实验二要插入的时候遍历数组,找到一个比插入值更大的元素,这个元素的位置就是实验要求输出的位置。如果你使用两层嵌套循环进行数组遍历,比如:

for(int i=0;i<5;++i){
        for(int j=0;j<4;++j){
        }
}

那循环的数字,即(i, j) 就是插入的位置