ghjhkniob 2020-05-18 17:23 采纳率: 93.3%
浏览 551
已采纳

C语言编程题 编写main函数,声明结构数组a、b并用测试数据初始化

64.
编程题
编写main函数,声明结构数组a、b并用测试数据初始化(a、b数组中数据按成员id值升序存储;显示a,b数组中数据(显示数组数据调用display函数完成,下同);调用delete函数从a数组中删除在b数组中重复出现的联系人信息,显示a数组中数据;调用merge函数将a数组中全部联系人信息合并到b数组,显示b数组中数据;调用sort函数对a数组中数据排序,显示a数组中数据。
【测试数据】
a数组:{101, "tom","m"},{103,"mary","f"},{104,"mark","m"},
{105,"julia","f"},{106, "sara","f"}
b数组: {102, "mark","m"},{104,"mark","m"}
【输出结果】
a:
ID NAME SEX
101 tom m
103 mary f
104 mark m
105 julia f
106 sara f
b:
ID NAME SEX
102 mark m
104 mark m
a:
ID NAME SEX
101 tom m
103 mary f
105 julia f
106 sara f
b:
ID NAME SEX
101 tom m
102 mark m
103 mary f
104 mark m
105 julia f
106 sara f
a:
ID NAME SEX
105 julia f
103 mary f
106 sara f
101 tom m
请认真测试程序的正确性。将源代码以文本方式提交,不要直接提交文件。

  • 写回答

1条回答 默认 最新

  • qtchen_1988 2020-05-18 18:52
    关注
    #include <iostream>
    #include <string.h>
    #include <algorithm>
    
    using namespace std;
    
     struct Stu{
         int id;
         char name[20];
         char sex[2];
     };
     void display(Stu stu[],int n)
     {
         printf("ID NAME SEX\n");
         int i;
         for(i=0;i<n;i++)
             printf("%d %s %s\n",stu[i].id,stu[i].name,stu[i].sex);
     }
     void del(Stu a[],Stu b[],int na,int nb)
     {
         int i,j,idx=-1;
         Stu temp[7];
         memset(temp,0x0,sizeof(temp));
         for(i=0;i<nb;i++)
             for(j=0;j<na;j++)
             {
                 if(a[j].id == b[i].id && (strcmp(a[j].name,b[i].name)==0) && (strcmp(a[j].sex,b[i].sex)==0))
                 {
                     idx = j;
                     break;
                 }
             }
         if(idx != -1)
         {
             for(i=0;i<(na-1);i++)
             {
                 if(i >= idx)
                    a[i] = a[i+1];
             }
         }
         memset(&a[i],0x0,sizeof(a[i]));
     }
    
     bool cmp(Stu a,Stu b)
     {
         return a.id<b.id;
     }
    
     bool cmp2(Stu a,Stu b)
     {
         return (strcmp(a.name,b.name) < 0);
     }
    
     void merge(Stu a[],Stu b[],int na,int nb)
     {
         int i;
         for(i=0;i<na;i++)
             b[i+nb] = a[i];
         sort(b,b+(na+nb),cmp);
     }
    
    void sort(Stu stu[],int n)
    {
         sort(stu,stu+n,cmp2);
    }
    
    int main(){
        Stu a[7] = {{101, "tom","m"},{103,"mary","f"},{104,"mark","m"},
        {105,"julia","f"},{106, "sara","f"}},b[7]={{102, "mark","m"},{104,"mark","m"}};
        printf("a:\n");
        display(a,5);
        printf("\nb:\n");
        display(b,2);
    
        del(a,b,5,2);
        printf("\na:\n");
        display(a,4);
    
        merge(a,b,4,2);
        printf("\nb:\n");
        display(b,6);
    
        sort(a,4);
        printf("\na:\n");
        display(a,4);
    
        return 0;
    }
    
    

    图片说明

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵