今天做的期中考试题,有答案,但是完全不懂,求注释

#include

#include //字符串处理函数的头文件

#define N 2

typedef struct BLOCK{/*在编程中使用typedef目的一般有两个,
一个是给变量一个易记且意义明确的新名字,
另一个是简化一些比较复杂的类型声明。*/
int n;
char name[50][20];
}Block;

void sort(char array[][20],int n);

int main(void)

{

Block num[N];

int i,j;

for(i=0;i<N;i++)
{
    num[i].n=0;
}
for(j=0;j<N;j++)
{
    scanf("%d",&num[j].n);
    for(i=0; i<=num[j].n; i++)

    {
        gets(num[j].name[i]);

    }
}

for(j=0;j<N;j++)
{
    sort(num[j].name,num[j].n);
}


for(j=0;j<N;j++)
{
    printf("=== sorted names ===\n");
    for(i=1; i<=num[j].n; i++)

    {
        puts(num[j].name[i]);
    }

}
return 0;

}

void sort(char array[][20],int n)
{

char temp[20];

int i,j,k;

for(i=1; i<=n-1; i++)

{

    k=i;

    for(j=i+1; j<=n; j++)
    {
        if(strcmp(array[k],array[j])>0)

            k=j;
    }
    if(i!=k)
    {
        strcpy(temp,array[i]);

        strcpy(array[i],array[k]);

        strcpy(array[k],temp);
    }

}

}

图片说明图片说明图片图片图片

2个回答

代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

 #include <stdio.h>

#include <string.h>//字符串处理函数的头文件 

#define N 2

typedef struct BLOCK{/*在编程中使用typedef目的一般有两个,
                    一个是给变量一个易记且意义明确的新名字,
                    另一个是简化一些比较复杂的类型声明。*/
    int n;
    char name[50][20]; //定义一个二维数组
}Block;

void sort(char array[][20],int n);//函数声明

int main(void)

{

    Block num[N];//定义2个结构体变量

    int i,j;

    for(i=0;i<N;i++)
    {
        num[i].n=0;//将每个变量的n置为0
    }
    for(j=0;j<N;j++)
    {
        scanf("%d",&num[j].n);//输入每个变量中的字符串个数
        for(i=0; i<=num[j].n; i++)

        {
            gets(num[j].name[i]);//分别输入每个变量中的多个字符串

        }
    }

    for(j=0;j<N;j++)
    {
        sort(num[j].name,num[j].n);//对每个结构体变量中的多个字符串进行排序
    }


    for(j=0;j<N;j++)
    {
        printf("=== sorted names ===\n");
        for(i=1; i<=num[j].n; i++)

        {
            puts(num[j].name[i]);//输出排好序的字符串
        }

    }
    return 0;
}

void sort(char array[][20],int n)
{

    char temp[20];

    int i,j,k;

    for(i=1; i<=n-1; i++)//循环,典型的冒泡排序,两个for循环

    {

        k=i;

        for(j=i+1; j<=n; j++)
        {
            if(strcmp(array[k],array[j])>0)//比较字符串大小

                k=j;
        }
        if(i!=k)//需要交换两个字符串
        {
            strcpy(temp,array[i]);

            strcpy(array[i],array[k]);

            strcpy(array[k],temp);
        }

    }

}

qq423399099
小灸舞 回复qq_33748587: 加油!
大约 4 年之前 回复
qq_33748587
qq_33748587 谢谢你!我很喜欢写程序,我会好好努力的!
大约 4 年之前 回复

姓名按字符由小到大排序问题?

qq_33748587
qq_33748587
大约 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问