问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言大作业

发布网友 发布时间:2022-04-28 11:10

我来回答

5个回答

热心网友 时间:2023-10-02 13:28

上接另一个账号<梅园寨主>

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\t", nNode->iId);
 // 输出班级
        printf("班级:%s\t", nNode->pcClass);
 // 输出姓名
        printf("姓名:%s\t", nNode->pcName);
 // 输出数学成绩
        printf("数学:%.1f\t", nNode->fMath);
 // 输出英语成绩
        printf("英语:%.1f\t", nNode->fEng);
 // 输出计算机成绩
        printf("计算机:%.1f\t", nNode->fCmp);
 // 输出平均成绩
        printf("平均分:%.2f\n", 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\n", "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\n", "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\n", "请输入学号,如果要退出,请输入 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\t", nNode->iId);
   // 输出班级
   printf("班级:%s\t", nNode->pcClass);
   // 输出姓名
   printf("姓名:%s\t", nNode->pcName);
   // 输出数学成绩
   printf("数学:%.1f\t", nNode->fMath);
   // 输出英语成绩
   printf("英语:%.1f\t", nNode->fEng);
   // 输出计算机成绩
   printf("计算机:%.1f\t", nNode->fCmp);
   // 输出平均成绩
   printf("平均分:%.2f\n", nNode->fAver);
   return;
  }
 }
 printf("%s\n", "没有此学生的记录,请重新输入:");
 goto id;
}
// 按姓名输出
void List_printByName(List* lList)
{
 char acName[32];
name:
 printf("%s\n", "请输入姓名,如果要退出,请输入 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\t", nNode->iId);
   // 输出班级
   printf("班级:%s\t", nNode->pcClass);
   // 输出姓名
   printf("姓名:%s\t", nNode->pcName);
   // 输出数学成绩
   printf("数学:%.1f\t", nNode->fMath);
   // 输出英语成绩
   printf("英语:%.1f\t", nNode->fEng);
   // 输出计算机成绩
   printf("计算机:%.1f\t", nNode->fCmp);
   // 输出平均成绩
   printf("平均分:%.2f\n", nNode->fAver);
   return;
  }
 }
 printf("%s\n", "没有此学生的记录,请重新输入:");
 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("**************************************************************************\n\
1------添加记录 2------查询记录 3------排序记录 4------删除记录\n\
5------修改记录 6------分析记录 7------输出记录 8------退出系统\n\
**************************************************************************\n\
请输入选项所对应的数字:\n");
 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\n", "您输入的选项不存在,请重新输入。");
   goto mainMenu;
 }
 // 删除链表
 List_delete(lList);
 return 0;
}

代码结束。

热心网友 时间:2023-10-02 13:29

这个我记得当时我们书上就有这个代码。。。

热心网友 时间:2023-10-02 13:29

要给钱才有人帮你写,而且40财富值没有什么卵用

热心网友 时间:2023-10-02 13:30

这个,要有偿才会有人帮你写

热心网友 时间:2023-10-02 13:31

这是数据库吧
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
索尼NEX-6单头套机(E 16-50mm)主要参数 索尼NEX-6单头套机(E 18-200mm LE)主要参数 索尼NEX-6单头套机(E 18-200mm LE)基本参数 索尼NEX-6单头套机(16-80mm)基本参数 追加诉前财产保全的条件是什么 电脑开机硬盘灯循环亮灭电脑开机后硬盘灯一下亮一下灭是怎么回事_百度... ...不能开机了?显示器亮橘色的灯,风扇能转,就是主机上的灯不亮... ...重起时电源灯是常亮, 风扇是转的,但硬盘灯不亮, 屏幕无显示_百度知 ... 硬盘灯常亮电脑无法正常运行电脑开机后硬盘指示灯常亮不闪是什么原因... 电脑硬盘不亮电脑硬盘指示灯不亮 格力3代手机配备4000mAh锂聚合物电池,大约待机多久?接听电话多久? 荣耀手机50se电池能用多久 c语言中的开方 C++中数的平方是什么函数? c语言中开平方用什么函数 计算机c语言中,平方怎么表示? c语言中开方怎么输 C语言中怎么计算一个数的平方? C语言中开平方函数是什么? C语言中开平方,平方都怎么表示? C语言中开平方函数 上高速走错逆行匝道一点就上去会不会扣分 营口南高速 上错匝道。到回来会被拍到吗 高速公路匝道进收费站后进错匝道后倒车怎样处罚 上错高速口,匝道有开口转弯回来,同高速口下高速,怎么处罚? 昨天在上海 没看清道路上错匝道30米左右 掉头。扣多少分? 走错了匝道? 今天我上高速不小心上错了下高速的匝道就行进了十米不到,我掉头回来重新上了正确的匝道会被扣分吗 上高速过了收费站,上错匝道了,倒车重新走怎么处罚啊 高速上错匝道成了逆行怎么免于处罚上高速走错了,走到下高速的匝道上面,在下高速的匝道口掉头后回到上高_百度问一问 C语言大作业怎么做 C语言大作业. C语言大作业,这题该怎么写? C语言大作业求帮助 c语言大作业做什么好? c语言的大作业 C语言大作业的问题 c语言大作业 最少100行 写什么啊? C语言大作业―学生信息管理系统 假设学生人数为10,实现学生信息的管 c语言大作业,输入五个学生的学号,姓名,性别,然后可以用年份输出,班级输出,性别输出,求改错 做一份c语言程序,大作业 求c语言大作业 帮帮我 !C语言大作业 不会啊!!高人来 c语言大作业要求:程序中要具备结构体类型的数据操作,是什么意思? 急急急,大神们,C语言大作业要求用到数组,指针,循环,选择最少两项,内容随便编写,超过80行 学了一学期的C语言,要做大作业。 求一个500行C语言程序代码。 可以在VC++6.0上运行的。 C语言大作业 题目是:请设计一个算法完成两个超长正整数的加法。谁会的帮帮忙? 梦见给家人迁坟回家的路上迷路了? 求高手解梦,为在世亲人迁坟,坟中有鱼。 hello如果把好友拉黑,自己还会出现在对方好友列表么?