邪念波 发表于 2021-5-3 17:10:53

求助,c语言题目

本帖最后由 邪念波 于 2021-5-3 19:06 编辑

#include <stdio.h>
#include <string.h>
#define N 100                 /* 最大学生人数 */
#define M 20                 /* 最大课程数 */

main()
{
        int person,course;                 /* 真实人数,课程数 */
        char num;               /* 存放学生学号(后五位) */
        char name;                 /* 存放学生姓名 */
        char sub;                 /* 存放科目名称 */
        int score;                 /* 存放学生成绩,score为第(i+1)个学生第j门课的分数 */
        float aver;
        float total;                 /* 存放每位学生所有科目的平均分(aver)和总分(total) */

        char choice;                 /* 在菜单中选择的序号 */
        char temp_n;                 /* 用于查询时存放姓名和学号 */
        float temp_s;                 /* 用于交换平均分和总分 */
        int flag,i,j,k,h,t;                 /* 定义了一系列后续循环结构中要用到的变量 */
        flag=0;                 /* flag=0表示系统中还没有输入已有数据 */
        person=0;                 /* 学生人数初始化 */
       
/* 输入课程数 */
        do
        {
                printf("请输入课程数(课程数量小于%d):",M);
                scanf("%d",&course);
        }
        while(course<=0 || course>M);

/* 输入每门课的名称 */
        for(j=0;j<course;j++)
        {
                printf("请输入第%d门课的名称:",j+1);
                scanf("%s",&sub);
        }
       
/* 菜单 */
        while(1)                 /* 当条件判断为"真"时循环 */
        {
       printf("\n");
       printf("1. 输入学生信息\n");
   printf("2. 查询学生信息\n");
   printf("3. 显示学生信息\n");
   printf("4. 排      序\n");
   printf("0. 退      出\n");
   printf("\n请输入你的选择:\n");
   fflush(stdin);
   scanf("%c",&choice);
   switch(choice)
       {
           case '1':                 /* 输入信息模块 */
           printf("\n请输入学生的总人数:");
           scanf("%d",&h);
           for(i=1,k=0;i<=h;i++,k++)
           {
          printf("请输入第%d个学生的姓名:",i);
                fflush(stdin);                 /* 清空缓存区 */
                scanf("%s",&name);                 /* 储存学生姓名 */
                printf("请输入该学生的学号后五位:");
                fflush(stdin);
                scanf("%s",&num);                 /* 储存学生学号 */
                printf("请输入该学生的各科成绩:\n");
                total=0;                 /* 清空上一位同学的总分 */
                for(j=0;j<course;j++)
                {
               printf("*%s:",sub);                 /* 输入各科成绩 */
               scanf("%d",&score);
               total=total+score;                 /* 计算总分 */
                }
               aver=total/course;                 /* 计算平均分 */
           }
           person=person+h;                 /* 更新总人数 */
           flag=1;                 /* 标记已输入数据 */
           break;
                          
           case '2':                 /* 查询信息模块 */
           if(flag==0)
           {
                   printf("您还未输入学生信息!请先选择1输入学生信息。\n");
                   break;
              }
              printf("请输入所要查询的学生学号后五位:");
           scanf("%s",&temp_n);
           for(i=0;i<person;i++)
           {
                   if(strcmp(temp_n,num)==0)
          break;                 /* 匹配学号与学生 */
                   if(i>=person)
                   printf("查无此人,请退出菜单重新输入。\n");
          break;
           }
                /* 输出查询到的学生信息 */
                printf("\n学号       姓名");
                for(j=0;j<course;j++)
                {
                        printf("      %-s",sub);
                }
                printf("      平均分      总分      ");
                printf("\n-----------------------------------------------------------------------------------\n");
                printf("%-10s%-10s",num,name);
                for(j=0;j<course;j++)
                {
                        printf("      %d       ",score);
                }
                printf("   %.1f      %.1f\n",aver,total);
                break;
       
                case '3':                 /* 显示信息模块 */
                if(flag==0)
                {printf("\n您还未输入学生信息!请先选择1输入学生信息。\n");break;}
                printf("\n学号    姓名");
                for(i=0;i<course;i++)
                {
                       printf("       %s",sub);
               }
                for(i=0;i<person;i++)
                {
                        printf("\n%-8s%-8s",num,name);
                        for(j=0;j<course;j++)
                        {
                                printf("%d      ",score);
                        }
                        printf("%-8.1f%-8.1f\n",aver,total);
                }
                        
                case '4':                 /*排序模块 */
                if(flag==0)
                printf("\n您还未输入学生信息!请先选择1输入学生信息。\n");break;
                      for(i=0;i<person-1;i++)
                      {
                              k=i;
                              for(j=i+1;j<person;j++)
                              {
                                   if(strcmp(name,name)<0)
                                   k=j;                 /* 姓名数组最小的下标赋值给k用于交换 */
                     }
                              if(i==k) continue;
             
                          /* 交换姓名 */
                              strcpy(name,temp_n);
                       strcpy(name,name);
                              strcpy(num,temp_n);
                              /* 交换分数 */
                           for(h=0;h<course;h++)
                           {
                                   temp_s=score;
                                   score=score;
                                   score=temp_s;
                           }
                        /* 交换总分和平均分 */
                        temp_s=total;
                        total=total;
                        total=temp_s;
                        temp_s=aver;
                        aver=aver;
                        aver=temp_s;
                      }
              }
}

yuedong 发表于 2021-5-3 17:58:24

查询哪里就看不到代码了。
图挡住了

邪念波 发表于 2021-5-3 19:06:39

yuedong 发表于 2021-5-3 17:58
查询哪里就看不到代码了。
图挡住了

现在好了,大神帮忙看看

邪念波 发表于 2021-5-4 12:43:54

大佬帮帮忙嘛

王之叹息 发表于 2021-5-26 12:36:28

大佬的对话果然不一样,本来看这个没设置最佳答案想进来举报一波的{:10_256:},大佬我给你送贡献啊(疯狂暗示){:5_104:}

王之叹息 发表于 2021-5-26 12:38:12

大佬的问题真心看不懂,{:5_104:},不过应该没人了吧(疯狂暗示)

万千只cnm 发表于 2021-5-26 18:36:47

不是 你想问啥这不都有代码了吗模块化
页: [1]
查看完整版本: 求助,c语言题目