学生信息管理系统,要用c或者c++

要用结构体,来显示所有学生的信息
要有录入,查询,排序,删除等这些功能
感谢|

这个我有

img


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

#define MAX_STUDENTS 100

// 学生结构体
typedef struct {
    char id[20];
    char name[50];
    char gender[10];
    char clas[20];
    float scores[3];
    float averageScore;
    float totalScore;
    float maxScore;
    float minScore;
} Student;

// 全局学生数组和学生数量
Student students[MAX_STUDENTS];
int studentCount = 0;

// 辅助函数声明
int findStudentIndexById(const char* id);
void printStudent(const Student* student);
void printAllStudents();
void addStudent();
void deleteStudent();
void modifyStudent();
void searchStudent();
void sortStudents();
void groupStudents();

int main() {
    int choice;

    while (1) {
        printf("\n----------- 学生信息管理系统 -----------\n");
        printf("1. 显示所有学生信息\n");
        printf("2. 录入学生信息\n");
        printf("3. 删除学生信息\n");
        printf("4. 修改学生信息\n");
        printf("5. 查询学生信息\n");
        printf("6. 排序学生信息\n");
        printf("7. 分组学生信息\n");
        printf("0. 退出系统\n");
        printf("---------------------------------------\n");
        printf("请输入要进行的操作(0-7):");

        scanf("%d", &choice);

        switch (choice) {
        case 1:
            printAllStudents();
            break;
        case 2:
            addStudent();
            break;
        case 3:
            deleteStudent();
            break;
        case 4:
            modifyStudent();
            break;
        case 5:
            searchStudent();
            break;
        case 6:
            sortStudents();
            break;
        case 7:
            groupStudents();
            break;
        case 0:
            printf("感谢使用学生信息管理系统!\n");
            exit(0);
        default:
            printf("无效的选择,请重新输入!\n");
            break;
        }
    }

    return 0;
}

// 根据学号查找学生在数组中的索引
int findStudentIndexById(const char* id) {
    for (int i = 0; i < studentCount; i++) {
        if (strcmp(students[i].id, id) == 0) {
            return i;
        }
    }
    return -1;
}

// 打印学生信息
void printStudent(const Student* student) {
    printf("学号:%s\n", student->id);
    printf("姓名:%s\n", student->name);
    printf("性别:%s\n", student->gender);
    printf("班级:%s\n", student->clas);
    printf("学科成绩:\n");
    printf("  语文:%.2f\n", student->scores[0]);
    printf("  数学:%.2f\n", student->scores[1]);
    printf("  英语:%.2f\n", student->scores[2]);
    printf("平均成绩:%.2f\n", student->averageScore);
    printf("总成绩:%.2f\n", student->totalScore);
    printf("最高成绩:%.2f\n", student->maxScore);
    printf("最低成绩:%.2f\n", student->minScore);
    printf("\n");
}

// 打印所有学生信息
void printAllStudents() {
    printf("\n=========== 所有学生信息 ===========\n");
    for (int i = 0; i < studentCount; i++) {
        printStudent(&students[i]);
    }
    printf("共%d名学生\n", studentCount);
    printf("===================================\n");
}

// 录入学生信息
void addStudent() {
    if (studentCount >= MAX_STUDENTS) {
        printf("学生信息已达到上限,无法继续添加!\n");
        return;
    }

    Student newStudent;
    printf("\n请输入学号:");
    scanf("%s", newStudent.id);

    // 检查学号是否已存在
    if (findStudentIndexById(newStudent.id) != -1) {
        printf("学号已存在,请重新输入!\n");
        return;
    }

    printf("请输入姓名:");
    scanf("%s", newStudent.name);

    printf("请输入性别:");
    scanf("%s", newStudent.gender);

    printf("请输入班级:");
    scanf("%s", newStudent.clas);

    printf("请输入语文成绩:");
    scanf("%f", &newStudent.scores[0]);

    printf("请输入数学成绩:");
    scanf("%f", &newStudent.scores[1]);

    printf("请输入英语成绩:");
    scanf("%f", &newStudent.scores[2]);

    // 计算平均成绩、总成绩、最高成绩和最低成绩
    newStudent.totalScore = newStudent.scores[0] + newStudent.scores[1] + newStudent.scores[2];
    newStudent.averageScore = newStudent.totalScore / 3.0;
    newStudent.maxScore = newStudent.scores[0];
    newStudent.minScore = newStudent.scores[0];
    for (int i = 1; i < 3; i++) {
        if (newStudent.scores[i] > newStudent.maxScore) {
            newStudent.maxScore = newStudent.scores[i];
        }
        if (newStudent.scores[i] < newStudent.minScore) {
            newStudent.minScore = newStudent.scores[i];
        }
    }

    // 将新学生信息添加到数组中
    students[studentCount] = newStudent;
    studentCount++;

    printf("学生信息添加成功!\n");
}

// 删除学生信息
void deleteStudent() {
    char id[20];
    printf("\n请输入要删除的学生学号:");
    scanf("%s", id);

    int index = findStudentIndexById(id);
    if (index == -1) {
        printf("未找到学号为%s的学生!\n", id);
        return;
    }

    // 将要删除的学生信息从数组中移除
    for (int i = index; i < studentCount - 1; i++) {
        students[i] = students[i + 1];
    }
    studentCount--;

    printf("学生信息删除成功!\n");
}

// 修改学生信息
void modifyStudent() {
    char id[20];
    printf("\n请输入要修改的学生学号:");
    scanf("%s", id);

    int index = findStudentIndexById(id);
    if (index == -1) {
        printf("未找到学号为%s的学生!\n", id);
        return;
    }

    Student* student = &students[index];

    printf("学号:%s\n", student->id);
    printf("姓名:%s\n", student->name);
    printf("性别:%s\n", student->gender);
    printf("班级:%s\n", student->clas);
    printf("学科成绩:\n");
    printf("  语文:%.2f\n", student->scores[0]);
    printf("  数学:%.2f\n", student->scores[1]);
    printf("  英语:%.2f\n", student->scores[2]);
    printf("平均成绩:%.2f\n", student->averageScore);
    printf("总成绩:%.2f\n", student->totalScore);
    printf("最高成绩:%.2f\n", student->maxScore);
    printf("最低成绩:%.2f\n", student->minScore);

    printf("\n请输入新的学生信息:\n");

    printf("请输入姓名:");
    scanf("%s", student->name);

    printf("请输入性别:");
    scanf("%s", student->gender);

    printf("请输入班级:");
    scanf("%s", student->clas);

    printf("请输入语文成绩:");
    scanf("%f", &student->scores[0]);

    printf("请输入数学成绩:");
    scanf("%f", &student->scores[1]);

    printf("请输入英语成绩:");
    scanf("%f", &student->scores[2]);

    // 更新平均成绩、总成绩、最高成绩和最低成绩
    student->totalScore = student->scores[0] + student->scores[1] + student->scores[2];
    student->averageScore = student->totalScore / 3.0;
    student->maxScore = student->scores[0];
    student->minScore = student->scores[0];
    for (int i = 1; i < 3; i++) {
        if (student->scores[i] > student->maxScore) {
            student->maxScore = student->scores[i];
        }
        if (student->scores[i] < student->minScore) {
            student->minScore = student->scores[i];
        }
    }

    printf("学生信息修改成功!\n");
}

// 查找学生信息
void searchStudent() {
    char id[20];
    printf("\n请输入要查找的学生学号:");
    scanf("%s", id);

    int index = findStudentIndexById(id);
    if (index == -1) {
        printf("未找到学号为%s的学生!\n", id);
        return;
    }

    printf("\n=========== 查找到的学生信息 ===========\n");
    printStudent(&students[index]);
    printf("=======================================\n");
}

// 根据平均成绩排序学生信息
void sortStudents() {
    for (int i = 0; i < studentCount - 1; i++) {
        for (int j = 0; j < studentCount - i - 1; j++) {
            if (students[j].averageScore < students[j + 1].averageScore) {
                Student temp = students[j];
                students[j] = students[j + 1];
                students[j + 1] = temp;
            }
        }
    }

    printf("学生信息排序成功!\n");
}

// 分组学生信息
void groupStudents() {
    int groupCount;
    printf("\n请输入要分组的组数:");
    scanf("%d", &groupCount);

    if (groupCount <= 0 || groupCount > studentCount) {
        printf("无效的组数,请重新输入!\n");
        return;
    }

    int studentsPerGroup = studentCount / groupCount;
    int remainingStudents = studentCount % groupCount;

    int startIndex = 0;
    for (int i = 0; i < groupCount; i++) {
        int endIndex = startIndex + studentsPerGroup;
        if (remainingStudents > 0) {
            endIndex++;
            remainingStudents--;
        }

        printf("\n=========== 第%d组学生信息 ===========\n", i + 1);
        for (int j = startIndex; j < endIndex; j++) {
            printStudent(&students[j]);
        }
        printf("======================================\n");

        startIndex = endIndex;
    }
}

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

struct Student   //创建学生信息结构体
{                //每个学生对应一个结构体
  char ID[20];   //学号
  char Name[10]; //姓名
  float Score1;   //英语成绩
  float Score2;   //数学成绩
  float Score3;   //语文成绩
  float Score4;   //程序设计成绩
  float All;     //总分
  float Average; //平均成绩
} students[1000];

int num = 0; //计数器

void Copy(struct Student *arr, int i, int j)
{
  strcpy(arr[i].ID, arr[j].ID);
  strcpy(arr[i].Name, arr[j].Name);
  arr[i].Score1 = arr[j].Score1;
  arr[i].Score2 = arr[j].Score2;
  arr[i].Score3 = arr[j].Score3;
  arr[i].Score4 = arr[j].Score4;
  arr[i].All = arr[j].All;
  arr[i].Average = arr[j].Average;
}
int Student_SearchByName(char name[]) //通过姓名来检索学生
{
  int i;
  for (i = 0; i < num; i++)
  {
    if (strcmp(students[i].Name, name) == 0) //通过strcmp函数来对比学生姓名,找到返回在数组的位置
    {
      return i;
    }
  }
  return -1; //未找到返回 -1
}
int Student_SearchByIndex(char id[]) //通过学号来检索学生信息
{
  int i;
  for (i = 0; i < num; i++)
  {
    if (strcmp(students[i].ID, id) == 0) //通过strcmp函数来对比学生id,找到返回位置
    {
      return i;
    }
  }
  return -1; //未找到返回 -1
}

void Student_DisplaySingle(int index) //输出表头
{
  printf("%10s%10s%8s%8s%8s%10s\n", "学号", "姓名", "英语", "数学", "语文", "程序设计", "总成绩", "平均成绩");
  printf("-------------------------------------------------------------\n");
  printf("%10s%10s%8.2f%8.2f%8.2f%8.2f%10.2f%10.2f\n", students[index].ID, students[index].Name,students[index].Score1, students[index].Score2, students[index].Score3, students[index].Score4, students[index].All, students[index].Average);
}
void InputStudent() //利用循环录入学生信息
{
  while (1)
  {
    printf("请输入学号:");
    scanf("%s", &students[num].ID);
    getchar();
    printf("请输入姓名:");
    scanf("%s", &students[num].Name);
    getchar();
    printf("请输入成绩:");
    scanf("%f", &students[num].Score1);
    getchar();
    printf("请输入成绩:");
    scanf("%f", &students[num].Score2);
    getchar();
    printf("请输入成绩:");
    scanf("%f", &students[num].Score3);
    getchar();
    printf("请输入成绩:");
    scanf("%f", &students[num].Score4); //依次输入各项数据
    getchar();
    students[num].All = students[num].Score1 + students[num].Score2 + students[num].Score3 + students[num].Score4; //输完数据后自动计算总成绩与平均成绩
    students[num].Average = (students[num].Score1 + students[num].Score2 + students[num].Score3 + students[num].Score4) / 4;
    if (Student_SearchByIndex(students[num].ID) == -1)
    {
      num++; //移向下一个位置
    }
    else
    {
      printf("学号重复,输入数据无效 !\n");
    }

    printf("是否继续?(y/n):>");
    if (getchar() == 'n')
    {
      break;
    }
  }
}

void ModifyStudent() //修改学生成绩
{
  while (1)
  {
    char id[20];
    int index;
    printf("请输入要修改的学生的学号:");
    scanf("%s", &id);
    getchar();
    index = Student_SearchByIndex(id); //调用搜查id函数,根据其返回值确定位置
    if (index == -1)
    {
      printf("学生不存在!\n");
    }
    else
    {
      printf("你要修改的学生信息为:\n");
      Student_DisplaySingle(index);
      printf("-- 请输入新值--\n");
      printf("请输入学号:");
      scanf("%s", &students[index].ID);
      getchar();
      printf("请输入姓名:");
      scanf("%s", &students[index].Name);
      getchar();
      printf("请输入英语成绩:");
      scanf("%f", &students[index].Score1);
      getchar();
      printf("请输入数学成绩:");
      scanf("%f", &students[index].Score2);
      getchar();
      printf("请输入语文成绩:");
      scanf("%f", &students[index].Score3);
      getchar();
      printf("请输入程序设计成绩:");
      scanf("%f", &students[index].Score4); //重新录入一套新的数据替代
      getchar();
      students[index].All = students[index].Score1 + students[index].Score2 + students[index].Score3 + students[index].Score4;
      students[index].Average = (students[index].Score1 + students[index].Score2 + students[index].Score3 + students[index].Score4) / 4;
    }
    printf("是否继续?(y/n):>");
    if (getchar() == 'n')
    {
      break;
    }
  }
}

void DeleteStudent() //删除学生信息
{
  int i;
  while (1)
  {
    char id[20];
    int index;
    printf("请输入要删除的学生的学号:");
    scanf("%s", &id);
    getchar();
    index = Student_SearchByIndex(id); //调用搜查id函数,根据其返回值确定位置
    if (index == -1)
    {
      printf("该学生不存在!\n");
    }
    else
    {
      printf("你要删除的学生信息为:\n");
      Student_DisplaySingle(index);
      printf("是否真的要删除?(y/n)");
      if (getchar() == 'y')
      {
        for (i = index; i < num - 1; i++)
        {
          Copy(students, i, i + 1);
          // students[i]=students[i+1];    //把后边的对象都向前移动
        }
        num--;
      }
      getchar();
    }
    printf("是否继续?(y/n):>");
    if (getchar() == 'n')
    {
      break;
    }
  }
}
void display() //打印已录入的学生信息
{
  int a;
  printf("%10s%10s%8s%8s%8s%8s%10s%10s\n", "学号", "姓名", "英语", "数学", "语文", "程序设计", "总成绩", "平均成绩");
  printf("-------------------------------------------------------------------------\n");
  for (a = 0; a < num; a++)
  {
    printf("%10s%10s%8.2f%8.2f%8.2f%8.2f%10.2f%10.2f\n", students[a].ID, students[a].Name,
           students[a].Score1, students[a].Score2, students[a].Score3, students[a].Score4, students[a].All, students[a].Average);
  }
}
void InsertStudent() //指定位置插入学生信息
{
  int a, b, c;
  printf("请输入你要插入的位置");
  scanf("%d", &a);
  if (a > num)
  {
    printf("输入的位置有误,请重新输入,当前共%d条数据\n", num);
    scanf("%d", &a);
  }

  b = num - 1;
  for (; b >= a - 1; b--)
  {
    // strcpy(students[b+1].ID,students[b].ID);
    // strcpy(students[b+1].Name,students[b].Name);
    // students[b+1].Score1=students[b].Score1;
    // students[b+1].Score2=students[b].Score2;
    // students[b+1].Score3=students[b].Score3;
    // students[b+1].Score4=students[b].Score4;
    // students[b+1].All=students[b].All;
    // students[b+1].Average=students[b].Average;
    Copy(students, b + 1, b); //根据其输入的位置,将其及以后的数据向后移动一个位置
  }
  num++;
  printf("请输入学号:");
  scanf("%s", &students[a - 1].ID);
  getchar();
  printf("请输入姓名:");
  scanf("%s", &students[a - 1].Name);
  getchar();
  printf("请输入英语成绩:");
  scanf("%f", &students[a - 1].Score1);
  getchar();
  printf("请输入数学成绩:");
  scanf("%f", &students[a - 1].Score2);
  getchar();
  printf("请输入语文成绩:");
  scanf("%f", &students[a - 1].Score3);
  getchar();
  printf("请输入程序设计成绩:");
  scanf("%f", &students[a - 1].Score4); //输入新数据
  getchar();
  students[a - 1].All = students[a - 1].Score1 + students[a - 1].Score2 + students[a - 1].Score3 + students[a - 1].Score4;
  students[a - 1].Average = (students[a - 1].Score1 + students[a - 1].Score2 + students[a - 1].Score3 + students[a - 1].Score4) / 4;
}
void search() //查询学生信息
{
  while (1)
  {
    char name[20];
    int index;
    printf("请输入要查询的学生的姓名:");
    scanf("%s", &name);
    getchar();
    index = Student_SearchByName(name); //调用搜查name函数,根据其返回值确定位置
    if (index == -1)
    {
      printf("学生不存在!\n");
    }
    else
    {
      printf("你要查询的学生信息为:\n");
      Student_DisplaySingle(index);
    }
    printf("是否继续?(y/n):>");
    if (getchar() == 'n')
    {
      break;
    }
  }
}
void SortStudent() //根据平均分排序
{
  int i, j;
  // struct students tmp;
  for (i = 0; i < num; i++)
  {
    students[i].Average = (students[i].Score1 + students[i].Score2 + students[i].Score3 + students[i].Score4) / 4;
  }
  for (i = 0; i < num; i++)
  {
    for (j = 1; j < num - i; j++)
    {
      if (students[j - 1].Average < students[j].Average)
      {

        Copy(students, num, j - 1);
        Copy(students, j - 1, j);
        Copy(students, j, num);
        // tmp=students[j-1];
        // students[j-1]=students[j];
        // students[j]=tmp;      //冒泡排序
      }
    }
  }
  int a;
  printf("%10s%10s%8s%8s%8s%8s%10s%10s\n", "学号", "姓名", "英语", "数学", "语文", "程序设计", "总成绩", "平均成绩");
  printf("-------------------------------------------------------------------------\n");
  for (a = 0; a < num; a++)
  {
    printf("%10s%10s%8.2f%8.2f%8.2f%8.2f%10.2f%10.2f\n", students[a].ID, students[a].Name,
           students[a].Score1, students[a].Score2, students[a].Score3, students[a].Score4, students[a].All, students[a].Average);
  }
}

void SearchLow() //搜索不及格的并输出
{
  int a;
  printf("英语不及格的有:%10s%10s%8s\n", "姓名", "学号", "英语");
  for (a = 0; a < num; a++)
  {
    if (students[a].Score1 < 60)
      printf("\t\t%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Score1); //从头搜索到尾,若小于60就输出
  }

  printf("数学不及格的有:%10s%10s%8s\n", "姓名", "学号", "数学");
  for (a = 0; a < num; a++)
  {
    if (students[a].Score2 < 60)
      printf("\t\t%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Score2);
  }

  printf("语文不及格的有:%10s%10s%8s\n", "姓名", "学号", "语文");
  for (a = 0; a < num; a++)
  {
    if (students[a].Score3 < 60)
      printf("\t\t%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Score3);
  }

  printf("程序设计不及格的有%10s%10s%8s\n", "姓名", "学号","程序设计");
  for (a = 0; a < num; a++)
  {
    if (students[a].Score4 < 60)
      printf("\t\t%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Score4);
  }
  system("pause");
}

void SearchHigh() //搜索成绩最高者输出
{
  int a;
  int max;
  printf("英语成绩最高分为%10s%10s%8s\n", "姓名", "学号", "英语");
  max = students[0].Score1;
  for (a = 1; a < num; a++)
  {
    if (students[a].Score1 > max)
      max = students[a].Score1;
  }
  for (a = 0; a < num; a++)
  {
    if (max == students[a].Score1)
      printf("\t\t%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Score1);
  }

  printf("数学成绩最高分为%10s%10s%8s\n", "姓名", "学号", "数学");
  max = students[0].Score2;
  for (a = 1; a < num; a++)
  {
    if (students[a].Score2 > max)
      max = students[a].Score2;
  }
  for (a = 0; a < num; a++)
  {
    if (max == students[a].Score2)
      printf("\t\t%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Score2);
  }

  printf("语文成绩最高分为%10s%10s%8s\n", "姓名", "学号", "语文");
  max = students[0].Score3;
  for (a = 1; a < num; a++)
  {
    if (students[a].Score3 > max)
      max = students[a].Score3;
  }
  for (a = 0; a < num; a++)
  {
    if (max == students[a].Score3)
      printf("\t\t%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Score3);
  }

  printf("程序设计最高分为%10s%10s%8s\n", "姓名", "学号", "程序设计");
  max = students[0].Score4;
  for (a = 1; a < num; a++)
  {
    if (students[a].Score4 > max)
      max = students[a].Score4;
  }
  for (a = 0; a < num; a++)
  {
    if (max == students[a].Score4)
      printf("\t\t%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Score4);
  }
  system("pause");
}
void SaveStudent()
{
  FILE *fp = fopen("student-information.txt", "w+");
  fprintf(fp, "%d\n", num);
  for (int i = 0; i < num; i++)
  {
    fprintf(fp, "%s %s %f %f %f %f %f %f\n", students[i].ID, students[i].Name, students[i].Score1, students[i].Score2, students[i].Score3, students[i].Score4, students[i].All, students[i].Average);
  }
  fclose(fp);
  printf("学生信息文件已保存在本地\n");
}
void LoadInformation()
{
  FILE *fp = fopen("student-information.txt", "r");
  fscanf(fp, "%d", &num);
  for (int i = 0; i < num; i++)
  {
    fscanf(fp, "%s %s %f %f %f %f %f %f\n", students[i].ID, students[i].Name, &students[i].Score1, &students[i].Score2, &students[i].Score3, &students[i].Score4, &students[i].All, &students[i].Average);
  }
  fclose(fp);
  printf("系统已读取文件学生信息\n");
}

/*主程序*/
int main()
{
  int i;
  while (1)
  {
    LoadInformation();
    printf("-------------------------------------------------------------------------\n");
    printf("                               请选择系统功能                     \n");
    printf("-------------------------------------------------------------------------\n");
    printf("                        欢迎使用高校学生信息管理系统               \n");
    printf("-------------------------------------------------------------------------\n");
    printf("                             0.退出系统                          \n");
    printf("                             1.学生信息的录入                    \n");
    printf("                             2.学生信息的修改                    \n");
    printf("                             3.学生信息的删除                    \n");
    printf("                             4.学生信息的插入                    \n");
    printf("                             5.学生信息的打印                    \n");
    printf("                             6.学生信息的查找                    \n");
    printf("                             7.学生成绩的排序                    \n");
    printf("                             8.生成学生信息文件                  \n");
    printf("                             9.读取学生信息文件                  \n");
    printf("                            10.输出各科不及格学生信息            \n");
    printf("                            11.输出各科最高分学生信息            \n");
    printf("-------------------------------------------------------------------------\n");
    printf("--------------------------------作者: wink-------------------------------\n");
    printf("请选择(0-11):>");
    scanf("%d", &i);
    switch (i)
    {
    case 1:
      InputStudent();
      break;
    case 2:
      ModifyStudent();
      break;
    case 3:
      DeleteStudent();
      break;
    case 4:
      InsertStudent();
      break;
    case 5:
      display();
      break;
    case 6:
      search();
      break;
    case 7:
      SortStudent();
      break;
    case 8:
      SaveStudent();
      break;
    case 9:
      LoadInformation();
      break;
    case 10:
      SearchLow();
      break;
    case 11:
      SearchHigh();
      break;
    case 0:
    printf("Thanks for using, See you again !");
      exit(0);
    default:;
    }
  }
  return 0;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/28543
  • 这篇博客也不错, 你可以看下C语言/C++ 中除法得到结果的精度问题(有浮点数参与除法,结果就是浮点数,除数和被除数都是整数,结果默认是整数)
  • 除此之外, 这篇博客: 大学要学 C++,那么 C 语言还要继续学吗?中的 先来看看,应该掌握的内容是什么: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    • 顺序、条件、循环三大控制语句
    • C 中几大基元数据类型的用法
    • 熟悉掌握数组的用法
    • 熟练掌握指针的用法
    • 熟练掌握结构体、枚举、联合等数据类型的用法
    • 熟练使用常用 C 库函数,如控制台输入输出流、字符串操作、文件操作、时间函数等等

    这个阶段是入门阶段,主要掌握的是基础的语法学习。但是不能停留在掌握了,还要反复练习。推荐大家看看《C语言程序设计 现代方法》这本书是迷茫的同学指南针的存在。如果你说书还是看不懂,那么还有《啊哈!C》这本是给初中生看的书

    不管是C还是C++指针都是非常难搞,核心的知识点。上面承C/C++语言本身,下承操作系统原理。还有一本书《C和指针》,这本书的内容也是通俗易懂

    如果还希望深入掌握C/C++的同学,可以看下面这张学习路线图:

  • 您还可以看一下 邵发老师的《C语言/C++学习指南》语法篇(从入门到精通)课程中的 类型转换与优先级小节, 巩固相关知识点
  • 以下回答来自chatgpt:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    //定义学生信息结构体
    typedef struct{
        char name[20];
        int age;
        char studentID[20];
    } Student;
    
    int numStudents = 0; // 学生数量
    Student *students = NULL; // 学生信息数组
    
    //函数声明
    void recordStudentInfo();
    void searchStudentInfo();
    void sortStudentInfo();
    void deleteStudentInfo();
    
    int main() {
        int choice;
    
        while(1) {
            printf("学生信息管理系统\n");
            printf("1. 录入学生信息\n");
            printf("2. 查询学生信息\n");
            printf("3. 排序学生信息\n");
            printf("4. 删除学生信息\n");
            printf("5. 退出\n");
            printf("请选择要进行的操作:");
            scanf("%d", &choice);
    
            switch(choice){
                case 1:
                    recordStudentInfo(); // 录入学生信息
                    break;
                case 2:
                    searchStudentInfo(); // 查询学生信息
                    break;
                case 3:
                    sortStudentInfo(); // 排序学生信息
                    break;
                case 4:
                    deleteStudentInfo(); // 删除学生信息
                    break;
                case 5:
                    free(students); // 释放学生信息数组内存
                    printf("已退出学生信息管理系统\n");
                    return 0;
                default:
                    printf("输入无效,请重新选择操作\n");
                    break;
            }
        }
    }
    
    // 录入学生信息
    void recordStudentInfo() {
        Student student;
    
        printf("请输入学生的姓名:");
        scanf("%s", student.name);
        printf("请输入学生的年龄:");
        scanf("%d", &student.age);
        printf("请输入学生的学号:");
        scanf("%s", student.studentID);
    
        // 将学生信息添加到学生信息数组
        students = (Student*)realloc(students, sizeof(Student) * (numStudents + 1));
        students[numStudents++] = student;
    
        printf("学生信息录入成功\n");
    }
    
    // 查询学生信息
    void searchStudentInfo() {
        int choice;
        char keyword[20];
    
        printf("请选择查询方式:\n");
        printf("1. 根据姓名查询\n");
        printf("2. 根据学号查询\n");
        printf("选择:");
        scanf("%d", &choice);
    
        switch(choice){
            case 1:
                printf("请输入要查询的学生姓名:");
                scanf("%s", keyword);
                for(int i=0; i<numStudents; i++){
                    if(strcmp(students[i].name, keyword) == 0){
                        printf("姓名:%s\n", students[i].name);
                        printf("年龄:%d\n", students[i].age);
                        printf("学号:%s\n", students[i].studentID);
                        return;
                    }
                }
                printf("未查询到该学生信息\n");
                break;
            case 2:
                printf("请输入要查询的学生学号:");
                scanf("%s", keyword);
                for(int i=0; i<numStudents; i++){
                    if(strcmp(students[i].studentID, keyword) == 0){
                        printf("姓名:%s\n", students[i].name);
                        printf("年龄:%d\n", students[i].age);
                        printf("学号:%s\n", students[i].studentID);
                        return;
                    }
                }
                printf("未查询到该学生信息\n");
                break;
            default:
                printf("输入无效,请重新选择查询方式\n");
                break;
        }
    }
    
    // 排序学生信息
    void sortStudentInfo() {
        int choice;
    
        printf("请选择排序方式:\n");
        printf("1. 按姓名排序\n");
        printf("2. 按年龄排序\n");
        printf("选择:");
        scanf("%d", &choice);
    
        switch(choice){
            case 1:
                for(int i=0; i<numStudents-1; i++){
                    for(int j=0; j<numStudents-1-i; j++){
                        if(strcmp(students[j].name, students[j+1].name) > 0){
                            Student temp = students[j];
                            students[j] = students[j+1];
                            students[j+1] = temp;
                        }
                    }
                }
                printf("按姓名排序完成\n");
                break;
            case 2:
                for(int i=0; i<numStudents-1; i++){
                    for(int j=0; j<numStudents-1-i; j++){
                        if(students[j].age > students[j+1].age){
                            Student temp = students[j];
                            students[j] = students[j+1];
                            students[j+1] = temp;
                        }
                    }
                }
                printf("按年龄排序完成\n");
                break;
            default:
                printf("输入无效,请重新选择排序方式\n");
                break;
        }
    }
    
    // 删除学生信息
    void deleteStudentInfo() {
        int choice;
        char keyword[20];
    
        printf("请选择删除方式:\n");
        printf("1. 根据姓名删除\n");
        printf("2. 根据学号删除\n");
        printf("选择:");
        scanf("%d", &choice);
    
        switch(choice){
            case 1:
                printf("请输入要删除的学生姓名:");
                scanf("%s", keyword);
                for(int i=0; i<numStudents; i++){
                    if(strcmp(students[i].name, keyword) == 0){
                        for(int j=i; j<numStudents-1; j++){
                            students[j] = students[j+1];
                        }
                        students = (Student*)realloc(students, sizeof(Student) * (numStudents - 1));
                        numStudents--;
                        printf("已删除该学生信息\n");
                        return;
                    }
                }
                printf("未查询到该学生信息\n");
                break;
            case 2:
                printf("请输入要删除的学生学号:");
                scanf("%s", keyword);
                for(int i=0; i<numStudents; i++){
                    if(strcmp(students[i].studentID, keyword) == 0){
                        for(int j=i; j<numStudents-1; j++){
                            students[j] = students[j+1];
                        }
                        students = (Student*)realloc(students, sizeof(Student) * (numStudents - 1));
                        numStudents--;
                        printf("已删除该学生信息\n");
                        return;
                    }
                }
                printf("未查询到该学生信息\n");
                break;
            default:
                printf("输入无效,请重新选择删除方式\n");
                break;
        }
    }
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^