




已阅读5页,还剩43页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C C 语言课程设计语言课程设计 C programming curriculum design 班级 班级 学号 学号 课程设计人课程设计人 指导老师 指导老师 完成时间 完成时间 2 内容提要内容提要 在这次课程设计中 我主要做了四个程序 其中包括两个 基础要求题 平方回文数和小孩吃梨问题 这是 C 语言的两个 经典算法 运用了数组和迭代 此外 还有一个提高训练题 简 易计算器的制作 以及一个综合题 学生成绩管理系统 运用了 子函数的调用和链表及文件的操作 在每个任务中 又介绍了 实验的目的要求 任务的说明 程序的流程图或者功能结构图 详细的源程序代码以及调试运行的具体情况 在报告最后 还 附上了课程设计体会和参考文献 目目 录录 3 1 1 平方回文平方回文 数数 4 1 1 实验目的 1 2 任务说明 1 3 算法框图 1 4 程序代码 1 5 调试及运行情况 2 2 小孩吃梨问小孩吃梨问 题题 6 2 1 实验目的 2 2 任务说明 2 3 提示 2 4 算法框图 2 5 程序代码 2 6 调试及运行情况 3 3 简易计算简易计算 器器 8 3 1 实验目的 3 2 任务说明 3 3 算法框图 4 3 4 程序代码 3 5 调试及运行情况 4 4 学生成绩管理系学生成绩管理系 统统 14 4 1 实验目的 4 2 任务说明 4 3 系统总体设计 4 3 1 系统总功能图 4 3 2 主函数源程序代码 4 4 插入学生成绩子函数 4 4 1 算法框图 4 4 2 程序代码 4 5 改正学生信息子函数 4 5 1 功能说明 4 5 2 算法框图 4 5 3 程序代码 4 6 查找学生信息子函数 4 6 1 功能说明 4 6 2 算法框图 4 6 3 程序代码 4 7 删除学生信息子函数 4 7 1 算法框图 5 4 7 2 程序代码 4 8 其它部分及说明 5 5 课程设计体课程设计体 会会 45 6 6 参考文参考文 献献 45 1 1 平方回文数平方回文数 1 11 1 实验目的 实验目的 练习基本的算法 熟悉程序结构 1 21 2 任务说明 任务说明 求所有不超过 200 的 N 值 N 的平方是具有对称性质的回文数 回文数就是将一个数从左向右读和从右向左读是一样的 如满足题意要求 的数有 N 11 112 121 1 31 3 算法框图算法框图 开始 n 1 N 200 x n nn x是回文数 输出x 结束 N Y 6 图 1 1 找平方回文数的流程图 1 41 4 程序代码 程序代码 include void main int count n i leap array 5 num for n 11 n 200 n num n n i 0 count 0 do array count num 10 将平方数中各位数放入数组 num num 10 while num leap 0 for i 0 i0 j i 1 2i 结束 N Y 输出j 8 图 2 1 推算小孩吃梨个数 2 52 5 程序代码 程序代码 include main int i j FILE fp 文件操作 if fp fopen 2010 T w NULL printf Cannot open n return 0 j 1 for i 17 i 1 i j j 1 2 通过函数的迭代法进行计算 printf 一共有 d 个梨 n j fprintf fp 一共有 d 个梨 n j fclose fp 2 62 6 调试及运行情况 调试及运行情况 9 3 3 简易计算器简易计算器 3 13 1 实验目的 实验目的 学会正确使 用字符串和指针 3 23 2 任任务说明 务说明 编写一个程 序计算表达式 data1 op data2 的 值 其中 op 为 运算符 3 33 3 算算法框图法框图 开始 输入运算式 判断运算符 调用 计算 加减 的函 数 调用 计算 乘除 的函 数 调用处理括号和数字的函数 If 或 If 或 输出结果 结束 10 图 2 1 简易计算器的运行流程图 3 43 4 程序代码 程序代码 include include include char token 61 存放表达式字符串的数组 int n 0 void error void 报告错误函数 printf ERROR n exit 1 void match char expected 检查字符匹配的函数 11 if token n expected token n getchar else error double term void 计算乘除的函数 double factor void 处理括号和数字的函数 double exp void 计算加减的函数 double temp term while token n token n switch token n case match temp term break case match temp term break return temp double term void double div double temp factor while token n token n switch token n 12 case match temp factor break case match div factor if div 0 处理除数为零的情况 printf The divisor is zero n exit 1 temp div break return temp double factor void double temp char number 61 int i 0 if token n match temp exp match else if isdigit token n token n while isdigit token n token n 将字符串转换为浮点数 13 number i token n token n getchar number i 0 temp atof number else error return temp main double result FILE data fopen 61590 4 dat at if data NULL data fopen 61590 4 dat wt if data NULL return 0 token n getchar result exp if token n n token n 0 printf s g n token result fprintf data s g n token result else error fclose data return 0 14 3 53 5 调试及运行情况 调试及运行情况 4 4 学生成绩管理系统学生成绩管理系统 4 14 1 实验目的 实验目的 考查结构体数组 函数 指针 链表及文件等的综合应用 4 24 2 任务说明 任务说明 有 N 个学生 每个学生的数据包含学号 不重复 姓名 三门课的成绩 及平均成绩 试设计一学生成绩管理系统 使之能提供以下功能 1 成绩录入 插入后按学号自动排序 创建链表 2 成绩文件的存取 创建链表 3 成绩的多种查询 修改 4 成绩的多种统计 排序 5 学生增加 删除 列表 4 34 3 系统总体设计系统总体设计 4 3 14 3 1 系统总功能图系统总功能图 15 学生成绩管理系统 输入成绩 从文 件中 读取 从键 盘中 输入 修改 学生 成绩 删除 学生 成绩 排序 学生 成绩 按照 学号 查询 按照 姓名 查询 按课 程名 及分 数段 进行 统计 更新学生成绩查询学生成绩统计学生成绩 按 学 号 删 除 按 得 分 降 序 排 序 按 姓 名 删 除 16 图 4 1 该系统的功能结构图 4 3 24 3 2 主函数源程序代码主函数源程序代码 switch select case 1 Add l break 增加学生记录 case 2 Del l break 删除学生记录 case 3 Qur l break 查询学生记录 case 4 Modify l break 修改学生记录 case 5 Insert l break 插入学生记录 case 6 Tongji l break 统计学生记录 case 7 Sort l break 排序学生记录 case 8 Save l break 保存学生记录 case 9 system cls Disp l break 显示学生记录 default Wrong getchar break 按键有误 必须为数值 0 9 17 4 44 4 添加学生成绩子函数添加学生成绩子函数 4 4 14 4 1 算法框图算法框图 图 4 2 输入学生信息的流程图 4 4 24 4 2 程序代码程序代码 void Add Link l Node p r s 实现添加操作的临时的结构体指针变量 char ch flag 0 num 10 r l 开始 结束 输入学生学号 该学号已存在 输入学生成绩 是否继续输入 输出已有学 生信息 要求重新输入 一个学号 输入学生姓名 将指针移至链表末尾 18 s l next system cls Disp l 先打印出已有的学生信息 while r next NULL r r next 将指针移至于链表最末尾 准备添加记录 while 1 一次可输入多条记录 直至输入学号为 0 的记录结点添加操作 while 1 输入学号 保证该学号没有被使用 若输入学号为 0 则退 出添加记录操作 stringinput num 10 input number press 0 return menu 格 式化输入学号并检验 flag 0 if strcmp num 0 0 输入为 0 则退出添加操作 返回主界面 return s l next while s 查询该学号是否已经存在 若存在则要求重新输入一个未 被占用的学号 if strcmp s data num num 0 flag 1 break s s next if flag 1 提示用户是否重新输入 19 getchar printf The number s is not existing try again y n num scanf c if ch y ch Y continue else return else break p Node malloc sizeof Node 申请内存空间 if p printf n allocate memory failure 如没有申请到 打印 提示信息 return 返回主界面 strcpy p data num num 将字符串 num 拷贝到 p data num 中 stringinput p data name 15 Name p data cgrade numberinput C language Score 0 100 输入 并检验分数 分数必须在 0 100 之间 p data mgrade numberinput Math Score 0 100 输入并检 验分数 分数必须在 0 100 之间 p data egrade numberinput English Score 0 100 输入并检 验分数 分数必须在 0 100 之间 p data total p data egrade p data cgrade p data mgrade 计算总分 p data ave float p data total 3 计算平均分 p data mingci 0 20 p next NULL 表明这是链表的尾部结点 r next p 将新建的结点加入链表尾部中 r p saveflag 1 return 4 54 5 改正学生信息子函数改正学生信息子函数 4 5 14 5 1 功能说明功能说明 此条用于修改学生信息 先按输入的学号查询到该记录 然后提示用户修 改学号之外的值 注意学号不能修改 4 5 24 5 2 算法框图算法框图 图 4 3 改正学生信息的流程图 开始 没有找到 Y N 输入要改正学生 的学号 改正该生信息 n modify success n 结束 No student record 21 4 5 34 5 3 程序代码程序代码 void Modify Link l Node p char findmess 20 if l next system cls printf n No student record n getchar return system cls printf modify student recorder Disp l stringinput findmess 10 input the existing student number 输入并检验该学号 p Locate l findmess num 查询到该节点 if p 若 p NULL 表明已经找到该节点 printf Number s n p data num printf Name s p data name stringinput p data name 15 input new name printf C language score d p data cgrade p data cgrade numberinput C language Score 0 100 printf Math score d p data mgrade p data mgrade numberinput Math Score 0 100 22 printf English score d p data egrade p data egrade numberinput English Score 0 100 p data total p data egrade p data cgrade p data mgrade p data ave float p data total 3 p data mingci 0 printf n modify success n Disp l saveflag 1 else Nofind getchar 23 4 64 6 查找学生信息子函数查找学生信息子函数 4 6 14 6 1 功能说明功能说明 在查找学生信息时 可以有按学号查询和按姓名查询两种办法 給系统使 用者带来了极大的方便 4 6 24 6 2 算法框图算法框图 图 4 4 查找学生成绩的流程图 4 6 34 6 3 程序代码程序代码 void Qur Link l int select 1 按学号查 2 按姓名查 其他 返回主界面 菜单 char searchinput 20 保存用户输入的查询内容 Node p 开始 输入 0 或 1 按照学号查找 0 输入学生学号输入学生姓名 按照姓名查找 输出学生成绩 No student record 结束 YNN NY Y 输出学生成绩 是否找到 0 代表按学号查询 1 代表按姓名查询 是否找到 24 if l next 若链表为空 system cls printf n No student record n getchar return system cls printf n 1 Search by number 2 Search by name n printf please choice 1 2 scanf d if select 1 按学号查询 stringinput searchinput 10 input the existing student number p Locate l searchinput num 在 l 中查找学号为 searchinput 值 的节点 并返回节点的指针 if p 若 p NULL printheader printdata p printf END printf press any key to return getchar else Nofind getchar 25 else if select 2 按姓名查询 stringinput searchinput 15 input the existing student name p Locate l searchinput name if p printheader printdata p printf END printf press any key to return getchar else Nofind getchar else Wrong getchar 26 4 74 7 删除学生信息子函数删除学生信息子函数 4 7 14 7 1 算法框图算法框图 图 4 5 删除学生信息的流程图 4 7 24 7 2 程序代码程序代码 void Del Link l int sel Node p r 开始 输入 0 或 1 按照学号删除 0 输入学生学号输入学生姓名 按照姓名删除 删除该学 生信息 No student record 结束 YNN NY Y 是否找到 0 代表按学号删除 1 代表按姓名删除 删除该学 生信息 输出所有学 生信息 是否找到 27 char findmess 20 if l next system cls printf n No student record n getchar return system cls Disp l printf n 1 Delete by number 2 Delete by name n printf please choice 1 2 scanf d if sel 1 stringinput findmess 10 input the existing student number p Locate l findmess num if p p NULL r l while r next p r r next r next p next 将 p 所指节点从链表中去除 free p 释放内存空间 printf n delete success n getchar saveflag 1 else Nofind 28 getchar else if sel 2 先按姓名查询到该记录所在的节点 stringinput findmess 15 input the existing student name p Locate l findmess name if p r l while r next p r r next r next p next free p printf n delete success n getchar saveflag 1 else Nofind getchar else Wrong getchar 4 84 8 其它部分及说明其它部分及说明 include stdio h 标准输入输出函数库 include stdlib h 标准函数库 include string h 字符串函数库 include conio h 屏幕操作函数库 define HEADER1 STUDENT 29 n define HEADER2 number name Comp Math Eng sum ave mici n define HEADER3 define FORMAT 10s 15s 4d 4d 4d 4d 2f 4d n define DATA p data num p data name p data egrade p data mgrade p data cgrade p data total p data ave p data mingci define END n Extern void goyoxy int x int y int saveflag 0 是否需要存盘的标志变量 定义与学生有关的数据结构 typedef struct student 标记为 student char num 10 学号 char name 15 姓名 int cgrade C 语言成绩 int mgrade 数学成绩 int egrade 英语成绩 int total 总分 float ave 平均分 int mingci 名次 定义每条记录或结点的数据结构 标记为 node typedef struct node struct student data 数据域 struct node next 指针域 Node Link Node 为 node 类型的结构变量 Link 为 node 类型的指 30 针变量 主菜单主菜单 void menu system cls 调用 DOS 命令 清屏 与 clrscr 功能相同 textcolor 10 在文本模式中选择新的字符颜色 gotoxy 10 5 在文本窗口中设置光标 cprintf The Students Grade Management System n gotoxy 10 8 cprintf Menu n gotoxy 10 9 cprintf 1 input record 2 delete record n gotoxy 10 10 cprintf 3 search record 4 modify record n gotoxy 10 11 cprintf 5 insert record 6 count record n gotoxy 10 12 cprintf 7 sort reord 8 save record n gotoxy 10 13 cprintf 9 display record 0 quit system n gotoxy 10 14 cprintf n cprintf 送格式化输出至文本窗口屏幕中 31 void printheader 格式化输出表头 printf HEADER1 printf HEADER2 printf HEADER3 void printdata Node pp 格式化输出表中数据 Node p p pp printf FORMAT DATA void Wrong 输出按键错误信息 printf n n n n n Error input has wrong press any key to continue n getchar void Nofind 输出未查找此学生的信息 printf n Not find this student n void Disp Link l 显示单链表 l 中存储的学生记录 内容为 student 结构中定义的内容 Node p p l next l 存储的是单链表中头结点的指针 该头结点没有存储学生 32 信息 指针域指向的后继结点才有学生信息 if p p NULL NUll 在 stdlib 中定义为 0 printf n Not student record n getchar return printf n n printheader 输出表格头部 while p 逐条输出链表中存储的学生信息 printdata p p p next 移动直下一个结点 printf HEADER3 getchar 作用 用于定位链表中符合要求的节点 并返回指向该节点的指针 参数 findmess 保存要查找的具体内容 nameornum 保存按什么查找 在单链表 l 中查找 Node Locate Link l char findmess char nameornum Node r if strcmp nameornum num 0 按学号查询 33 r l next while r if strcmp r data num findmess 0 若找到 findmess 值的学号 return r r r next else if strcmp nameornum name 0 按姓名查询 r l next while r if strcmp r data name findmess 0 若找到 findmess 值的 学生姓名 return r r r next return 0 若未找到 返回一个空指针 输入字符串 并进行长度验证 长度lens printf n exceed the required length n 进行长度校验 超过 lens 值重新输入 34 while strlen n lens strcpy t n 将输入的字符串拷贝到字符串 t 中 输入分数 0 分数100 t100 tnext system cls Disp l while 1 stringinput s 10 please input insert location after the Number flag 0 v l next 35 while v 查询该学号是否存在 flag 1 表示该学号存在 if strcmp v data num s 0 flag 1 break v v next if flag 1 break 若学号存在 则进行插入之前的新记录的输入操作 else getchar printf n The number s is not existing try again y n s scanf c if ch y ch Y continue else return 以下新记录的输入操作与 Add 相同 stringinput num 10 input new student Number v l next while v if strcmp v data num num 0 printf Sorry the new number s is existing n num printheader printdata v printf n getchar return 36 v v next newinfo Node malloc sizeof Node if newinfo printf n allocate memory failure 如没有申请到 打印 提示信息 return 返回主界面 strcpy newinfo data num num stringinput newinfo data name 15 Name newinfo data cgrade numberinput C language Score 0 100 newinfo data mgrade numberinput Math Score 0 100 newinfo data egrade numberinput English Score 0 100 newinfo data total newinfo data egrade newinfo data cgrade newinfo data mgrade newinfo data ave float newinfo data total 3 newinfo data mingci 0 newinfo next NULL saveflag 1 在 main 有对该全局变量的判断 若为 1 则进行存盘操 作 将指针赋值给 p 因为 l 中的头节点的下一个节点才实际保存着学生的 记录 p l next while 1 if strcmp p data num s 0 在链表中插入一个节点 newinfo next p next p next newinfo break 37 p p next Disp l printf n n getchar 统计该班的总分第一名和单科第一统计该班的总分第一名和单科第一 和各科不及格人数和各科不及格人数 void Tongji Link l Node pm pe pc pt 用于指向分数最高的节点 Node r l next int countc 0 countm 0 counte 0 保存三门成绩中不及格的人数 if r system cls printf n Not student record n getchar return system cls Disp l pm pe pc pt r while r if r data cgradedata mgradedata egradedata cgrade pc data cgrade pc r if r data mgrade pm data mgrade pm r if r data egrade pe data egrade pe r if r data total pt data total pt r r r next printf n the TongJi result n printf C Language 60 d ren n countc printf Math 60 d ren n countm printf English data name pt data total printf The highest student by English score name s totoal score d n pe data name pe data egrade printf The highest student by Math score name s totoal score d n pm data name pm data mgrade printf The highest student by C score name s totoal score d n pc data name pc data cgrade printf n npress any key to return getchar 利用插入排序法实现单链表的按总分字段的降序排序 从高到低利用插入排序法实现单链表的按总分字段的降序排序 从高到低 void Sort Link l Link ll Node p rr s int i 0 if l next NULL system cls 39 printf n Not student record n getchar return ll Node malloc sizeof Node 用于创建新的节点 if ll printf n allocate memory failure 如没有申请到 打印 提示信息 return 返回主界面 ll next NULL system cls Disp l 显示排序前的所有学生记录 p l next while p p NULL s Node malloc sizeof Node 新建节点用于保存从原链表中取出 的节点信息 if s s NULL printf n allocate memory failure 如没有申请到 打印 提示信息 return 返回主界面 s data p data 填数据域 s next NULL 指针域为空 rr ll rr 链表于存储插入单个节点后保持排序的链表 ll 是这个链表的头指 针 每次从头开始查找插入位置 40 while rr next NULL 指针移至总分比 p 所指的节点的总分小的节点位置 if rr next NULL 若新链表 ll 中的所有节点的总分值都比 p data total 大时 就将 p 所指节点加入链表尾部 rr next s else 否则将该节点插入至第一个总分字段比它小的节点的前面 s next rr next rr next s p p next 原链表中的指针下移一个节点 l next ll next ll 中存储是的已排序的链表的头指针 p l next 已排好序的头指针赋给 p 准备填写名次 while p NULL 当 p 不为空时 进行下列操作 i 结点序号 p data mingci i 将名次赋值 p p next 指针后移 Disp l saveflag 1 printf n sort complete n 数据存盘数据存盘 若用户没有专门进行此操作且对数据有修改 在退出系统时 若用户没有专门进行此操作且对数据有修改 在退出系统时 会提示用户存盘会提示用户存盘 void Save Link l 41 FILE fp Node p int count 0 fp fopen c student wb 以只写方式打开二进制文件 if fp NULL 打开文件失败 printf n open file error n getchar return p l next while p if fwrite p sizeof Node 1 fp 1 每次写一条记录或一个节点信 息至文件 p p next count else break if
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 鹊桥关爱活动策划方案
- 河南公考试题及答案
- 焊工车间考试题及答案
- 国企财务考试题及答案
- 光纤产品考试题及答案
- 古筝乐理考试题及答案
- 公会培训考试题及答案
- 幼儿园教学教案设计:安全用绳子
- 钢材销售考试题及答案
- 釜山方言考试题及答案
- 传热学全套PPT完整教学课件
- 部编版六年级道德与法治上册第5课《国家机构有哪些》优秀课件
- 瑞美检验医生工作站操作手册
- 欧美电影文化(上海工程技术大学)【智慧树知到】网课章节答案
- 双人心肺复苏
- 全过程工程咨询服务大纲
- T-GDPA 3-2021 奥利司他胶囊质量标准
- GB/T 31586.2-2015防护涂料体系对钢结构的防腐蚀保护涂层附着力/内聚力(破坏强度)的评定和验收准则第2部分:划格试验和划叉试验
- GB 21258-2007常规燃煤发电机组单位产品能源消耗限额
- GA/T 1499-2018卷帘门安全性要求
- 2型糖尿病的综合管理课件
评论
0/150
提交评论