qq_33748587 2016-05-25 14:48 采纳率: 100%
浏览 1447
已采纳

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

#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条回答

  • 小灸舞 2016-05-26 01:46
    关注

    代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
    提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
    单步调试和设断点调试(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);
            }
    
        }
    
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 C#读写EXCEL文件,不同编译
  • ¥15 如何提取csv文件中需要的列,将其整合为一篇完整文档,并进行jieba分词(语言-python)
  • ¥15 MapReduce结果输出到HBase,一直连接不上MySQL
  • ¥15 扩散模型sd.webui使用时报错“Nonetype”
  • ¥15 stm32流水灯+呼吸灯+外部中断按键
  • ¥15 将二维数组,按照假设的规定,如0/1/0 == "4",把对应列位置写成一个字符并打印输出该字符
  • ¥15 NX MCD仿真与博途通讯不了啥情况
  • ¥15 win11家庭中文版安装docker遇到Hyper-V启用失败解决办法整理
  • ¥15 gradio的web端页面格式不对的问题
  • ¥15 求大家看看Nonce如何配置