c语言数据结构的主函数怎么写,数据结构算法前面的头文件该如何写?主函数该如何写?...

一、头文件

头文件一般包含类、子程序、变量和其他标识符的前置声明。需要在一个以上源文件中被声明的标识符可以被放在一个头文件中,并在需要的地方包含这个头文件。

头文件用于让编译器持有正确的标识符词典。头文件不正确的时候,最常出现的错误是“标识符未定义”(identifier undefined)。要修正这些问题,事实上应该去查询你所使用的标识符(函数、变量等)的文档。

以VC为代表的Windows系列的IDE中,快捷键Ctrl+F1可以让你查询光标所在标识符的文档,一般来说其中都会有所需的头文件信息。而Linux系,可以直接在shell(ash、bash、csh、zsh等)中使用man,比如你想查询strstr函数,可以在shell中输入man strstr 并回车。

二、主函数

主函数是程序的执行入口函数。其函数名为 main,返回值为 int 。包含全部输入参数的完整形式是:1int main(int argc, char *argv[], char *envp[])

特别地,对于苹果家的东西,它还会传给你第四个参数:1int main(int argc, char *argv[], char *envp[], char *apple[])

当然,因为C/C++语言的设计规范,所有编译器都支持不给出全部参数的写法。所以你可以只写两个参数又或者不写参数。更进一步,如果对于所生成程序,你不关心它的命令行如何写的,那你可以自己随意定义参数类型和个数(对此你可以在IOCCC例程中找到范本)。

三、参考

需要更多信息可以在网上查找,比如搜索“wiki 主函数”可以看到相应的百科页。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很高兴为您提供学生成绩管理系统的算法数据结构的课程设计。本课程设计旨在帮助学生深入了解算法数据结构的应用,同时实现一个简单的成绩管理系统。 一、课程设计要求 设计一个学生成绩管理系统,能够实现以下功能: 1. 输入学生信息:包括学号、姓名、班级等信息。 2. 输入学生的考试成绩:包括数学、语文、英语三门科目的成绩。 3. 查询学生信息:可以根据学号或姓名查询学生信息。 4. 查询学生成绩:可以根据学号或姓名查询学生成绩。 5. 统计学生的总分、平均分、最高分、最低分等信息。 6. 对学生成绩进行排序:可以按总分、数学、语文、英语等科目进行排序。 二、算法数据结构设计 为了实现上述功能,我们需要选择合适的算法数据结构。以下是本系统中所使用的算法数据结构: 1. 数据结构 本系统中使用结构体来存储学生信息和成绩信息。定义如下: ``` struct student{ char id[20]; //学号 char name[20]; //姓名 char className[20]; //班级 float math; //数学成绩 float chinese; //语文成绩 float english; //英语成绩 float totalScore; //总分 }; ``` 2. 算法 (1)查询学生信息 本系统中使用二分查找算法来查询学生信息。由于学号和姓名是唯一的,因此可以根据学号或姓名进行查找。二分查找的时间复杂度为O(logn),效率较高。 (2)查询学生成绩 查询学生成绩同样使用二分查找算法。与查询学生信息不同的是,查询学生成绩需要先查询学生信息,然后再输出成绩信息。 (3)排序 本系统中使用快速排序算法来对学生成绩进行排序。快速排序的时间复杂度为O(nlogn),效率较高。 (4)统计 统计学生总分、平均分、最高分、最低分等信息时,可以使用遍历算法来实现。时间复杂度为O(n),效率较高。 三、C语言代码实现 以下是本系统的C语言代码实现。包括头文件、全局变量、函数声明和主函数。 1. 头文件 ``` #include <stdio.h> #include <stdlib.h> #include <string.h> ``` 2. 全局变量 ``` #define MAX_STUDENT_NUM 100 //最大学生数 struct student stu[MAX_STUDENT_NUM]; //学生信息数组 int studentNum = 0; //学生数目 ``` 3. 函数声明 ``` void inputStudentInfo(); //输入学生信息 void inputStudentScore(); //输入学生成绩 void queryStudentInfo(); //查询学生信息 void queryStudentScore(); //查询学生成绩 void sortStudentScore(); //排序学生成绩 void calculateStudentScore();//统计学生成绩 void printStudentInfo(struct student stu); //输出学生信息 void printStudentScore(struct student stu); //输出学生成绩 ``` 4. 主函数 ``` int main(int argc, char *argv[]) { int choice; //选择功能 while(1){ printf("请选择功能:\n"); printf("1.输入学生信息\n"); printf("2.输入学生成绩\n"); printf("3.查询学生信息\n"); printf("4.查询学生成绩\n"); printf("5.排序学生成绩\n"); printf("6.统计学生成绩\n"); printf("0.退出系统\n"); scanf("%d",&choice); switch(choice){ case 0: return 0; case 1: inputStudentInfo(); break; case 2: inputStudentScore(); break; case 3: queryStudentInfo(); break; case 4: queryStudentScore(); break; case 5: sortStudentScore(); break; case 6: calculateStudentScore(); break; default: printf("输入错误,请重新输入!\n"); break; } } return 0; } ``` 5. 具体函数实现 (1)输入学生信息 ``` void inputStudentInfo(){ if(studentNum >= MAX_STUDENT_NUM){ printf("学生数目已达到最大值,无法继续添加!\n"); return; } printf("请输入学生信息:\n"); printf("学号:"); scanf("%s",stu[studentNum].id); printf("姓名:"); scanf("%s",stu[studentNum].name); printf("班级:"); scanf("%s",stu[studentNum].className); studentNum++; } ``` (2)输入学生成绩 ``` void inputStudentScore(){ char id[20]; int i; printf("请输入学生学号:"); scanf("%s",id); for(i=0;i<studentNum;i++){ if(strcmp(stu[i].id,id) == 0){ printf("请输入学生成绩:\n"); printf("数学:"); scanf("%f",&stu[i].math); printf("语文:"); scanf("%f",&stu[i].chinese); printf("英语:"); scanf("%f",&stu[i].english); stu[i].totalScore = stu[i].math + stu[i].chinese + stu[i].english; printf("学生成绩录入成功!\n"); return; } } printf("未找到该学生,请重新输入!\n"); } ``` (3)查询学生信息 ``` void queryStudentInfo(){ char key[20]; int i; printf("请输入要查询的学生学号或姓名:"); scanf("%s",key); for(i=0;i<studentNum;i++){ if(strcmp(stu[i].id,key) == 0 || strcmp(stu[i].name,key) == 0){ printStudentInfo(stu[i]); return; } } printf("未找到该学生,请重新输入!\n"); } ``` (4)查询学生成绩 ``` void queryStudentScore(){ char key[20]; int i; printf("请输入要查询的学生学号或姓名:"); scanf("%s",key); for(i=0;i<studentNum;i++){ if(strcmp(stu[i].id,key) == 0 || strcmp(stu[i].name,key) == 0){ printStudentInfo(stu[i]); printStudentScore(stu[i]); return; } } printf("未找到该学生,请重新输入!\n"); } ``` (5)排序学生成绩 ``` void sortStudentScore(){ int i,j; struct student temp; printf("请选择排序方式:\n"); printf("1.按总分排序\n"); printf("2.按数学成绩排序\n"); printf("3.按语文成绩排序\n"); printf("4.按英语成绩排序\n"); scanf("%d",&i); switch(i){ case 1: for(i=0;i<studentNum-1;i++){ for(j=0;j<studentNum-i-1;j++){ if(stu[j].totalScore < stu[j+1].totalScore){ temp = stu[j]; stu[j] = stu[j+1]; stu[j+1] = temp; } } } break; case 2: for(i=0;i<studentNum-1;i++){ for(j=0;j<studentNum-i-1;j++){ if(stu[j].math < stu[j+1].math){ temp = stu[j]; stu[j] = stu[j+1]; stu[j+1] = temp; } } } break; case 3: for(i=0;i<studentNum-1;i++){ for(j=0;j<studentNum-i-1;j++){ if(stu[j].chinese < stu[j+1].chinese){ temp = stu[j]; stu[j] = stu[j+1]; stu[j+1] = temp; } } } break; case 4: for(i=0;i<studentNum-1;i++){ for(j=0;j<studentNum-i-1;j++){ if(stu[j].english < stu[j+1].english){ temp = stu[j]; stu[j] = stu[j+1]; stu[j+1] = temp; } } } break; default: printf("输入错误,请重新输入!\n"); break; } printf("学生成绩排序成功!\n"); } ``` (6)统计学生成绩 ``` void calculateStudentScore(){ int i; float total = 0.0,avg = 0.0,max = 0.0,min = 100.0; for(i=0;i<studentNum;i++){ total += stu[i].totalScore; if(stu[i].totalScore > max) max = stu[i].totalScore; if(stu[i].totalScore < min) min = stu[i].totalScore; } avg = total / studentNum; printf("学生总数:%d\n",studentNum); printf("总分:%4.2f 平均分:%4.2f 最高分:%4.2f 最低分:%4.2f\n",total,avg,max,min); } ``` (7)输出学生信息 ``` void printStudentInfo(struct student stu){ printf("学号:%s 姓名:%s 班级:%s\n",stu.id,stu.name,stu.className); } ``` (8)输出学生成绩 ``` void printStudentScore(struct student stu){ printf("数学:%4.2f 语文:%4.2f 英语:%4.2f 总分:%4.2f\n",stu.math,stu.chinese,stu.english,stu.totalScore); } ``` 四、课程设计计算说明书 本课程设计中所使用的算法数据结构均具有较高的效率和可靠性。根据算法的时间复杂度和空间复杂度,可以对系统的性能进行计算和评估。 1. 时间复杂度 本系统中所使用的算法的时间复杂度如下: 输入学生信息:O(1) 输入学生成绩:O(n) 查询学生信息:O(logn) 查询学生成绩:O(logn) 排序学生成绩:O(nlogn) 统计学生成绩:O(n) 因此,本系统的时间复杂度为O(nlogn),效率较高。 2. 空间复杂度 本系统中所使用的数据结构的空间复杂度如下: 学生信息数组:O(n) 因此,本系统的空间复杂度为O(n),较为合理。 综上所述,本课程设计具有高效、可靠、合理的特点,能够满足学生成绩管理的基本需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值