C语言大作业
这种题目,几乎没人会帮你做的,这要靠自己,你想到多少代码,就先写,就算是定义几个变量,这是写了,学习编程,最主
要是要动手做,都敲代码!不会的地方,再具体问,你一下子发整道题出来,谁都是看一眼,立马关掉的!
如果我的回答解决了你的问题,花点时间看下我资料,我资料里面有我新建的群,或看下私信,我也发了私信给你了,欢
迎喜欢C语言,编程语言的加入...一起学习,一起探讨,一起进步!
图片看不清,只看到学生信息录入。
学生信息包含多个类型数据,比如学生学号、成绩、班级、年级、学科、成绩等等。
所以学生应该定义为结构体。
学生数量可以用常量表示。之后定义结构数组用于循环接收学生信息的录入。
之后学生信息的输出,成绩分析,求平均之类,都只是对结构数组的循环遍历。
上接另一个账号<梅园寨主>
list.h
#ifndef list_h
#define list_h
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
typedef struct nNode Node;
struct nNode
{
// 向上指针
Node* nUp;
// 向下指针
Node* nDown;
// 学号
int iId;
// 班级
char* pcClass;
// 姓名
char* pcName;
// 数学
float fMath;
// 英语
float fEng;
// 计算机
float fCmp;
// 平均分
float fAver;
};
typedef struct
{
Node* nTop;
Node* nBottom;
int iSize;
} List;
// 新建节点
Node* Node_new(int iId, char* pcClass, char* pcName, float fMath, float acEng, float acCmp);
// 删除节点
void Node_delete(Node* nNode);
// 输出节点的值
void Node_print(Node* nNode);
// 新建链表
List* List_new(void);
// 删除链表
void List_delete(List* lList);
// 节点从链表顶部加入
void List_pushTop(List* lList, Node* nNewNode);
// 节点从链表顶部取出
Node* List_popTop(List* lList);
// 节点从链表底部加入
void List_pushBottom(List* lList, Node* nNewNode);
// 节点从链表底部取出
Node* List_popBottom(List* lList);
// 节点从链表指定位置插入
void List_insert(List* lList, Node* nNewNode, int iIndex);
// 从链表中移除指定节点
void List_remove(List* lList, Node* nOldNode);
// 遍历链表 void (*visit)(Node*) 是指向函数的指针
void List_traverse(List* lList, void (*visit)(Node*));
// 这个节点在链表是第几个节点
int getIndex(List* lList, Node* nOldNode);
// 按平均分排序
void List_sortByAver(List* lList);
// 按计算机成绩排序
void List_sortByCmp(List* lList);
// 按学号输出
void List_printById(List* lList);
// 按姓名输出
void List_printByName(List* lList);
#endif // list_h
list.c
#include"list.h"
// 新建节点
Node* Node_new(int iId, char* pcClass, char* pcName, float fMath, float fEng, float fCmp)
{
int iSize;
Node* nNode = (Node*)malloc(sizeof(Node));
// 设置向上指针
nNode->nUp = NULL;
// 设置向下指针
nNode->nDown = NULL;
// 设置学号
nNode->iId = iId;
// 设置班级
if(pcClass != NULL)
iSize = strlen(pcClass);
else
iSize = 0;
if(iSize != 0)
{
nNode->pcClass = (char*)malloc(sizeof(char)*(iSize) + 1);
strcpy(nNode->pcClass, pcClass);
nNode->pcClass[iSize] = '\0';
}
// 设置姓名
if(pcName != NULL)
iSize = strlen(pcName);
else
iSize = 0;
if(iSize != 0)
{
nNode->pcName = (char*)malloc(sizeof(char)*(iSize) + 1);
strcpy(nNode->pcName, pcName);
nNode->pcName[iSize] = '\0';
}
// 设置数学成绩
nNode->fMath = fMath;
// 设置英语成绩
nNode->fEng = fEng;
// 设置计算机成绩
nNode->fCmp = fCmp;
// 设置平均成绩
nNode->fAver = (fMath + fEng + fCmp)/3.0;
return nNode;
}
// 删除节点
void Node_delete(Node* nNode)
{
free(nNode->pcClass);
free(nNode->pcName);
free(nNode);
}
// 输出节点的值
void Node_print(Node* nNode)
{
// 输出学号
printf("学号:%d", nNode->iId);
// 输出班级
printf("班级:%s", nNode->pcClass);
// 输出姓名
printf("姓名:%s", nNode->pcName);
// 输出数学成绩
printf("数学:%.1f", nNode->fMath);
// 输出英语成绩
printf("英语:%.1f", nNode->fEng);
// 输出计算机成绩
printf("计算机:%.1f", nNode->fCmp);
// 输出平均成绩
printf("平均分:%.2f
", nNode->fAver);
}
// 新建链表
List* List_new(void)
{
List* lList = (List*)malloc(sizeof(List));
lList->iSize = 0;
lList->nTop = Node_new(0, "", "", 0.0, 0.0, 0.0);
lList->nBottom = Node_new(0, "", "", 0.0, 0.0, 0.0);
lList->nTop->nDown = lList->nBottom;
lList->nBottom->nUp = lList->nTop;
return lList;
}
// 删除链表
void List_delete(List* lList)
{
Node* nNode;
for(; lList->iSize>0; )
{
nNode = lList->nTop->nDown;
lList->nTop->nDown = lList->nTop->nDown->nDown;
Node_delete(nNode);
lList->iSize --;
}
if(lList->nTop != NULL)
Node_delete(lList->nTop);
if(lList->nBottom != NULL)
Node_delete(lList->nBottom);
free(lList);
}
// 节点从链表顶部加入
void List_pushTop(List* lList, Node* nNewNode)
{
// 新节点 nUp 指针连接到链表顶部节点
nNewNode->nUp = lList->nTop;
// 新节点 nDown 指针连接到链表顶部节点的下一节点
nNewNode->nDown = lList->nTop->nDown;
// 链表顶部节点的下一节点 nUp 指针连接到新节点
lList->nTop->nDown->nUp = nNewNode;
// 链表顶部节点 nDown 指针连接到新节点
lList->nTop->nDown = nNewNode;
lList->iSize ++;
}
// 节点从链表顶部取出
Node* List_popTop(List* lList)
{
// 备份将要弹出的节点
Node* nNode = lList->nTop->nDown;
if(lList->iSize > 0)
{
// 链表顶部节点下下节点的 nUp 指针连接到链表顶部节点
lList->nTop->nDown->nDown->nUp = lList->nTop;
// 链表顶部节点的 nDown 指针连接到下下节点
lList->nTop->nDown= lList->nTop->nDown->nDown;
nNode->nUp = NULL;
nNode->nDown = NULL;
lList->iSize --;
}
else
printf("%s
", "List_popTop() 函数报错,此链表是空的,没有节点可取出。");
return nNode;
}
// 节点从链表底部加入
void List_pushBottom(List* lList, Node* nNewNode)
{
// 新节点 nDown 指针连接到链表底部节点
nNewNode->nDown = lList->nBottom;
// 新节点 nUp 指针连接到链表底部节点的上一节点
nNewNode->nUp = lList->nBottom->nUp;
// 链表底部节点的上一节点 nDown 指针连接到新节点
lList->nBottom->nUp->nDown = nNewNode;
// 链表底部节点 nUp 指针连接到新节点
lList->nBottom->nUp = nNewNode;
lList->iSize ++;
}
// 节点从链表底部取出
Node* List_popBottom(List* lList)
{
// 备份将要弹出的节点
Node* nNode = lList->nBottom->nUp;
if(lList->iSize > 0)
{
// 链表底部节点上上节点的 nDown 指针连接到链表底部节点
lList->nBottom->nUp->nUp->nDown = lList->nBottom;
// 链表底部节点的 nUp 指针连接到上上节点
lList->nBottom->nUp = lList->nBottom->nUp->nUp;
nNode->nUp = NULL;
nNode->nDown = NULL;
lList->iSize --;
}
else
printf("%s
", "List_popBottom() 函数报错,此链表是空的,没有节点可取出。");
return nNode;
}
// 节点从链表指定位置插入
void List_insert(List* lList, Node* nNewNode, int iIndex)
{
Node* nOldNode = lList->nTop->nDown;
int i;
for(i=0; i<iIndex; i++)
nOldNode = nOldNode ->nDown;
// 把 nNewNode 节点插到 nOldNode 节点上面
nNewNode->nUp = nOldNode->nUp;
nNewNode->nDown = nOldNode;
nOldNode->nUp->nDown = nNewNode;
nOldNode->nUp = nNewNode;
lList->iSize ++;
}
// 从链表中移除指定节点
void List_remove(List* lList, Node* nOldNode)
{
// 断开 nOldNode节点的前后链接
nOldNode->nUp->nDown = nOldNode->nDown;
nOldNode->nDown->nUp = nOldNode->nUp;
lList->iSize --;
}
// 遍历链表 void (*visit)(Node*) 是指向函数的指针
void List_traverse(List* lList, void (*visit)(Node*))
{
// 得到顶部节点指针
Node* nNode = lList->nTop;
int i, iSize = lList->iSize;
for(i=0; i<iSize; i++)
{
nNode = nNode->nDown;
visit(nNode);
}
}
// 这个节点在链表是第几个节点
int getIndex(List* lList, Node* nOldNode)
{
int i, iSize = lList->iSize;
Node* nNode = lList->nTop;
for(i=0; i<iSize ; i++)
{
nNode = nNode->nDown;
if(nOldNode == nNode)
return i;
}
return -1;
}
// 按平均分排序
void List_sortByAver(List* lList)
{
Node* nNode = NULL;
Node* nMaxNode = NULL;
int i, j, iSize = lList->iSize;
float fMax;
for(i=0; i<iSize; i++)
{
fMax = 0.0;
nNode = lList->nTop;
for(j=iSize-i; j>0; j--)
{
nNode = nNode->nDown;
if(nNode->fAver > fMax)
{
fMax = nNode->fAver;
nMaxNode = nNode;
}
}
// 把最高平均分节点移除
List_remove(lList, nMaxNode);
// 把最高平均分节从链表底部加入
List_pushBottom(lList, nMaxNode);
}
}
// 按计算机成绩排序
void List_sortByCmp(List* lList)
{
Node* nNode = NULL;
Node* nMaxNode = NULL;
int i, j, iSize = lList->iSize;
float fMax;
for(i=0; i<iSize; i++)
{
fMax = 0.0;
nNode = lList->nTop;
for(j=iSize-i; j>0; j--)
{
nNode = nNode->nDown;
if(nNode->fCmp > fMax)
{
fMax = nNode->fCmp;
nMaxNode = nNode;
}
}
// 把最高计算机分节点移除
List_remove(lList, nMaxNode);
// 把最高计算机分节从链表底部加入
List_pushBottom(lList, nMaxNode);
}
}
// 按学号输出
void List_printById(List* lList)
{
int iId;
id:
printf("%s
", "请输入学号,如果要退出,请输入 0:");
scanf("%d", &iId);
// 如果输入的是 0 退出循环
if(iId == 0)
return;
// 得到顶部节点指针
Node* nNode = lList->nTop;
int i, iSize = lList->iSize;
for(i=0; i<iSize; i++)
{
nNode = nNode->nDown;
if(nNode->iId == iId)
{
// 输出学号
printf("学号:%d", nNode->iId);
// 输出班级
printf("班级:%s", nNode->pcClass);
// 输出姓名
printf("姓名:%s", nNode->pcName);
// 输出数学成绩
printf("数学:%.1f", nNode->fMath);
// 输出英语成绩
printf("英语:%.1f", nNode->fEng);
// 输出计算机成绩
printf("计算机:%.1f", nNode->fCmp);
// 输出平均成绩
printf("平均分:%.2f
", nNode->fAver);
return;
}
}
printf("%s
", "没有此学生的记录,请重新输入:");
goto id;
}
// 按姓名输出
void List_printByName(List* lList)
{
char acName[32];
name:
printf("%s
", "请输入姓名,如果要退出,请输入 NULL:");
scanf("%s", &acName[0]);
// 如果输入的是 NULL 退出循环
if((acName[0] == 'N') && (acName[1] == 'U') && (acName[2] == 'L') && (acName[3] == 'L'))
return;
// 得到顶部节点指针
Node* nNode = lList->nTop;
int i, iSize = lList->iSize;
for(i=0; i<iSize; i++)
{
nNode = nNode->nDown;
if(strCmp(nNode->pcName, acName))
{
// 输出学号
printf("学号:%d", nNode->iId);
// 输出班级
printf("班级:%s", nNode->pcClass);
// 输出姓名
printf("姓名:%s", nNode->pcName);
// 输出数学成绩
printf("数学:%.1f", nNode->fMath);
// 输出英语成绩
printf("英语:%.1f", nNode->fEng);
// 输出计算机成绩
printf("计算机:%.1f", nNode->fCmp);
// 输出平均成绩
printf("平均分:%.2f
", nNode->fAver);
return;
}
}
printf("%s
", "没有此学生的记录,请重新输入:");
goto name;
}
main.c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include"list.h"
#include"oper.h"
int main(void)
{
// 创建链表
List* lList = List_new();
int iMenu = 0;
mainMenu:
iMenu = menu("**************************************************************************
\
1------添加记录 2------查询记录 3------排序记录 4------删除记录
\
5------修改记录 6------分析记录 7------输出记录 8------退出系统
\
**************************************************************************
\
请输入选项所对应的数字:
");
switch (iMenu)
{
case 1:
// 添加记录
addRec(lList);
goto mainMenu;
case 2:
// 查询记录
srchRec(lList);
goto mainMenu;
case 3:
// 排序记录
sortRec(lList);
goto mainMenu;
case 4:
// 删除记录
delRec(lList);
goto mainMenu;
case 5:
// 修改记录
modRec(lList);
goto mainMenu;
case 6:
// 分析记录 60.0 是及格线
analRec(lList, 60.0);
goto mainMenu;
case 7:
// 输出记录
oputRec(lList);
goto mainMenu;
case 8:
// 退出系统
break;
default:
printf("%s
", "您输入的选项不存在,请重新输入。");
goto mainMenu;
}
// 删除链表
List_delete(lList);
return 0;
}
代码结束。
这个我记得当时我们书上就有这个代码。。。
要给钱才有人帮你写,而且40财富值没有什么卵用
这个,要有偿才会有人帮你写
这是数据库吧
c语言大作业 学生成绩管理系统
答:printf("\n%10s %6s %6s %6s %6s %6s\n","姓名","学号","C语言","高数"," 英语","平均成绩"); printf("%10s %6d %6.2f %6.2f %6.2f %6.2f\n",xs.name,xs.num,xs.c,xs.math,xs.english,xs.aver); printf("\n请输入该生的C语言成绩:");scanf("%f",&xs.c); printf("\n高数...
C语言大作业,C语言高手们救下小弟啊```
答:这是我在大学做过的课程设计,你看看:/ 程序功能:能完成每位学生的某门课程的平时成绩和期末考试成绩的录入,完成每位学生的总评成绩计算(平时成绩*30%+期末考试成绩*70%)并生成数据文件,生成分数段统计文件(不及格人数,60-69数,70-79人数,80-89人数,90-100人数,及格率),通过学生成绩的数...
C语言大作业 题目是:请设计一个算法完成两个超长正整数的加法。谁会...
答:我记得长整数指的是long型、超过long还有long long、以及__int64 不过显然题目不是这个意思。我想LZ对加法的竖式应该很熟悉、高精度就是用的竖式的原理。我只给你算法、不提供代码、自己写代码才是最好的。首先、输入的时候就不能直接scanf整形了、那就以字符串的形式输入--我想LZ你会的。然后建立四...
学了一学期的C语言,要做大作业。 求一个500行C语言程序代码。 可以在...
答://户籍管理系统, 应该能满足你的要求。//多给点财富吧 include<stdio.h> include<stdlib.h> typedef struct tagHuJiXinXi { char shfzhh[64]; //身份证号 char xm[16]; //姓名 char xb[8]; //性别 int nl; //年龄 char xl[64]; //学历 char zhzh[64]; //住址 char dh[32]; ...
自动售货机的程序代码怎么写? C语言大作业要交的,大路大神帮帮忙٩...
答:整个程序的功能 :商品入库 补货 商品购买 找零 还有乱七八糟的一堆验证 数据只有结构链表存储,退出不保存,你要写文件或数据库保存,你自己写吧,写不动了。演示看下图:include<stdio.h>#include<string.h>#include<malloc.h>#define nameSize 21 //商品名称数组大小 可修改typedef struct ...
求c语言大作业,c++,c#都行,题目啥都行,大约一百行。谢谢。
答:1、 程序运行时,可以由用户选择进行何种操作。2、 开户操作要求输入用户信息后自动获取账号。3、 用户销户后账号被回收,并且该账号可以继续分配给其他账户。4、 不允许用户透支。5、 根据姓名或账号可以进行用户的信息查询。6、 所有的账户信息应存放到一个文件中,可以随时访问和更新...
帮忙做一道C语言程序设计作业
答:include "string.h" /*字符串函数*/ include "conio.h" /*屏幕操作函数*/ include "mem.h" /*内存操作函数*/ include "ctype.h" /*字符操作函数*/ include "alloc.h" /*动态地址分配函数*/ struct score { int mingci;char xuehao[8];char mingzi[20];float score[6];}data,info[...
c语言编程题
答:你需要定义一个结构作存储歌手信息比如:typedef struct singer{ int id;//歌手编号 char name[10];//歌手姓名 。。。//什么地址啊,联系电话啊等等 int score;//歌手最终得分 struct singer *next;//链表指针,如果你是用结构数组,这个成员可以不用 };SIRn个歌手可以用结构...
用C语言编一个简单的图书管理系统(包括借阅查询还书三部分)(学生作业...
答:s.price,s.count,s.time,s.date); for(i=0;i<7;i++) printf("%d\t%s\t%.2f\t%ld\t\t%ld\t\t%ld\n",s.number,s.name,s.price,s.count,s.time,s.date); row(s); }}这是我大一时候做的大作业,虽然不是图书管理系统,你只要改改就行了,原理都...
大学里的大作业是什么?
答:我记忆犹新的是C语言课程的大作业,一个七人小组共同打造了一个成绩管理系统,通过讨论、分工协作,从编写小程序到主程序,每个环节都需要深入理解和实践。数据结构的作业则更为挑战,学生们需使用未学过的模块,这无疑是对理论知识的延伸和应用。我亲身投入其中,从一周的教程研读到长时间的编写调试,...