C语言课设1
- 格式:doc
- 大小:217.50 KB
- 文档页数:12
C语言程序设计课程标准-V1C语言程序设计课程标准重新整理一、概述1.1 课程背景C语言是一门广泛应用于系统编程、嵌入式系统开发以及科学计算等领域的高级编程语言。
C语言的学习使得学生掌握基本的程序设计方法和程序调试能力,为后续的软件开发和计算机科学学习打下坚实的基础。
1.2 课程目标本课程旨在通过讲授语法、数据类型、运算符、控制结构、函数、指针和数组等基本概念来培养学生的C语言编程技能。
讲授完毕后,学生应该能够:- 理解C语言的基本语法和编程规范- 能够使用变量、条件语句、循环语句等语法结构编写简单的程序- 能够使用函数和指针来模块化程序设计- 能够使用数组来处理数据集合的问题- 能够使用结构体和联合体来组织数据1.3 课程内容本课程的重点内容包括:- C语言概述和编程环境搭建- 基本的数据类型、变量和常量- 运算符和表达式- 控制结构:if语句、switch语句、while循环和for循环- 函数和函数调用- 数组和指针- 结构体和联合体1.4 课程评估针对C语言程序设计,考核形式将主要为实验成绩和课程期末考试成绩,其中实验成绩占20%左右,期末考试成绩占80%左右。
二、课程内容详述2.1 C语言概述和编程环境搭建- C语言的历史和应用领域- 编程环境的搭建- 第一个C程序的编写2.2 基本的数据类型、变量和常量- int、float、double等数据类型- 变量和常量的定义和使用- 数据类型转换2.3 运算符和表达式- 算术运算符、关系运算符和逻辑运算符- 运算符优先级- 表达式的求值2.4 控制结构- if语句和嵌套if语句- switch语句- while循环和do-while循环- for循环2.5 函数和函数调用- 函数的定义和调用- 函数参数和返回值- 全局变量和局部变量2.6 数组和指针- 数组的定义和使用- 指针的定义和使用- 指针算术运算和指针比较2.7 结构体和联合体- 结构体的定义和使用- 联合体的定义和使用- 结构体指针和联合体指针三、课程总结本课程的学习使得学生具备了基本的C语言编程技能,包括基本的语法、数据类型、运算符、控制结构、函数、指针和数组等概念。
《C语言程序设计》课程设计课题表一、A类1.职工信息管理系统设计2.职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。
试设计一职工信息管理系统,使之能提供以下功能:3.1、职工信息录入功能(职工信息用文件保存)--输入4.2、职工信息浏览功能--输出5.3、职工信息查询功能--算法6.查询方式:按学历查询、按职工号查询、条件组合查询7.职工信息删除、修改功能(可选项)8.图书信息管理系统设计9.图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。
10.试设计一图书信息管理系统,使之能提供以下功能:11.1、图书信息录入功能(图书信息用文件保存)--输入12.2、图书信息浏览功能--输出13.3、图书信息查询功能--算法14.查询方式:按书名查询、按作者名查询、条件组合查询15.图书信息的删除与修改(可选项)16.图书管理系统设计17.图书管理信息包括:图书名称、图书编号、单价、作者、存在状态、借书人姓名、性别、学号等18.功能描述:19.1、新进图书基本信息的输入。
20.2、图书基本信息的查询。
21.3、对撤消图书信息的删除。
22.4、为借书人办理注册。
23.5、办理借书手续。
24.6、办理还书手续25.要求:使用文件方式存储数据。
26.实验设备管理系统设计27.实验设备信息包括:设备编号,设备种类(如:微机、打印机、扫描仪等等),设备名称,设备价格,设备购入日期,是否报废,报废日期等。
28.主要功能:29.1、能够完成对设备的录入和修改30.2、对设备进行分类统计31.3、设备的破损耗费和遗损处理32.4、设备的查询33.要求:使用文件方式存储数据。
34.学生信息管理系统设计35.学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。
试设计一学生信息管理系统,使之能提供以下功能:36.1、系统以菜单方式工作37.2、学生信息录入功能(学生信息用文件保存)--输入38.3、学生信息浏览功能--输出39.4、学生信息查询功能--按学号查询、按姓名查询、40.5、学生信息的删除与修改(可选项)41.要求:使用文件方式存储数据。
《C语⾔课程设计与游戏开发实践课程》1-3章总结⽬录:⼀、知识点归纳第⼆章知识点第三章⽣命游戏思考题⼆、代码实践2.1飞机⼤战 2.2反弹⼩球 2.3flappying bird 3.1⽣命游戏⼀、知识点归纳1//第⼀章2 system("cls"); // 清屏函数34 Sleep(50); // 等待若⼲毫秒56if(kbhit()) // 判断是否有输⼊7 {8 input = getch(); // 不必输⼊回车9 }1//第⼆章23//飞机游戏4//解决画⾯闪烁严重5 #include <windows.h>6void gotoxy(int x,int y) //光标移动到(x,y)位置7 {8 HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);9 COORD pos;10 pos.X = x;11 pos.Y = y;12 SetConsoleCursorPosition(handle,pos);13 }1415void show() // 显⽰画⾯16 {17 gotoxy(0,0); // 光标移动到原点位置,以下重画清屏18 }19202122//解决光标闪烁严重23void HideCursor() // ⽤于隐藏光标24 {25 CONSOLE_CURSOR_INFO cursor_info = {1, 0}; // 第⼆个值为0表⽰隐藏光标26 SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);27 }2829void startup() // 数据初始化30 {31 HideCursor(); // 隐藏光标32 }3334//增加esc键游戏暂停35if(input==27)3637 system("pause");383940//2.2反弹球411//开头加,因为kbhit()报4996错422#pragma warning(disable:4996);3 #include <cwindow.h>需要改成#include <windows.h>判断接触障碍物43if ( (ball_y>=left) && (ball_y<=right) ) // 被挡板挡住44未接触45if ((bird_x >= bar1_xDown) && (bird_x <= bar1_xTop)) //⼩鸟通过障碍4647⽣成⼀个范围内的随机数48 block_y = rand()%width; // 产⽣范围内的新的⽅块49502.3 flappy bird5152障碍物循环出现53if (bar1_y <= 0) // 再新⽣成⼀个障碍物55 bar1_y = width;//从最右边移动56int temp = rand() % int(high * 0.8);//画⾯内随机⼀个缝隙57 bar1_xDown = temp - high / 10;//缝隙点上下留high/1058 bar1_xTop = temp + high / 10;59 }1第三章233.1⽣命游戏⼜称细胞⾃动机、康威⽣命游戏4规则:以格⼦内是否存活,与周围8个格⼦有关,3个⽣为⽣,2个为⽣死不明,1个为死5简单的就上下左右加⼀遍判断6 NeibourNumber = cells[i-1][j-1] + cells[i-1][j] + cells[i-1][j+1]+ cells[i][j-1] + cells[i][j+1] + cells[i+1][j-1] + cells[i+1][j] + cells[i+1][j+1];思考题:(⽐较有趣)尝试修改规则,⽐如初始化不同的数据,或者3,2的时候都增加;增加另⼀个物种,⾷⾁动物、⾷草动物,互相抑制;增加不同地形,⽐如某块区域有⽔源,⽣命更容易⽣存;交互投⾷,按+加速、按-减速;模拟⽣态进化、还有模拟⼤⽓污染、谣⾔传播等等。
C语言程序设计课程标准专业:软件技术编写人:C语言项目组教研室主任:教学院长:二级学院(盖章)目录一,课程性质与任务 (1)二,课程目标 (1)1.知识目标 (1)2.能力目标 (2)3.素质目标 (2)4.证书目标 (2)三,参考学时 (2)四,课程学分 (2)五,课程内容与要求 (2)六,课程实施 (5)1.教学方法 (5)2.评价方法 (6)3.教学条件 (6)4.教学资源 (6)C语言程序设计课程标准依据2018级软件技术专业人才培养调研报告与2020级软件技术专业人才培养方案,特编制C语言程序设计课程标准。
一,课程性质与任务《C语言程序设计》是计算机软件技术专业地专业必修课程,课程类型属于B 类课程(理论+实践),课程类别属于基础课。
通过本课程地学习,使学生掌握C语言地基本语法知识,熟练使用Dev-C++平台进行程序设计与调试,建立结构化程序设计思想,培养学生编程思想。
该课程是后续专业课程教学地基础,为后续《数据结构》,《JAVA面向对象程序设计》等课程地学习与应用起着理论与实践铺垫作用。
二,课程目标1.知识目标(1)掌握C语言基本数据类型,运算规则,函数与数组地定义与使用;(2)掌握算法地特性与程序地三种基本结构,可以使用流程图或N-S图来描述算法;(3)熟练使用顺序结构,选择结构,循环结构进行结构化程序设计;(4)初步运用指针,结构体,文件基本知识;2.能力目标(1)可以分析与理解C语言程序,具有阅读程序地能力;(2)可以进行初步地数据结构描述与算法设计,具有将实际问题抽象为计算机程序语言地能力;(3)建立结构化程序设计思想与良好地编码规范,可以使用C语言进行小型程序开发,具有软件开发能力;(4)具备在Dev C++平台下进行程序开发,编码,调试地能力。
3.素质目标(1)培养职业素质,爱岗敬业,遵守职业道德规范,诚实,守信。
(2)培养人文素质,善于思考,深入研究,良好地自主学习地习惯,细致缜密地工作态度,较强地沟通交流与书面表达能力;(3)培养心理素质,克服苦难,积极进取,团结协作地良好品质;(4)培养身体素质,热爱生活,热爱工作,可以适应工作需求。
人事管理系统前言:现代计算机技术的发展为人们的学习、生活、工作提供了很大的帮助, 各行各业都需要特定计算系统的运用, 我们需要了解这些系统是怎么样为我们服务以及他们是怎样编辑出来的。
我们需要学习C语言编程, 根据课堂讲授内容, 做相应的自主练习, 消化课堂所讲解的内容;通过调试典型例题或习题积累调试C程序的经验;通过完成辅导教材中的编程题, 逐渐培养编程能力、用计算机解决实际问题的能力, 能够按照要求编辑一些基本的程序, 提高自己的思维能力。
题目:(1)某高校主要人员有: 在职人员(行政人员、教师、一般员工)、退休人员及临时工。
现在需要储存这些人员的人事档案信息, 内容包括编号、姓名、年龄、职务、职称、政治面貌、最高学历、任职时间、来院时间、人员类别。
其中, 人员编号唯一, 不能重复。
(2)添加删除功能:能根据学院人事的变动情况, 添加删除记录。
(3)查询功能: 能根据编号和姓名进行查询。
(4)编辑功能(高级): 根据查询对相应的记录进行修改并记录。
(5)统计功能:能根据多种参数进行人员的统计(在职人数、党员人数、女工人数, 高学历高职称人数), 统计要求同时显示被统计着的信息。
排序功能: 按照年龄、来院时间进行排序。
保存功能: 能对输入的数据进行相应的存储。
分析:我们编辑的程序要能够满足题目的要求, 可以进行这么多的功能的计算!但是在开始我们运行使用程序的时候必须要知道我们要运用这些功能中的哪一个!这就要求我们可以程序中任意选择我们所需要的功能!很显然我们要编辑存储人员的信息自然要运用到文件!而人员的信息必须要以结构体的形式来表示才能够方便我们提取信息!我们选择了要运行的功能分支之后!这些功能是以主函数以外的被调函数!当有需要时被调函数还可以调用其他的被吊函数!例如我们题目中的统计和查询功能, 就可以用这种方式来编辑程序!方便清楚!设计:很显然主程序要用到SWICTH函数, 这样可以选择要运行的那个功能的函数来执行, 而其他的功能函数则不必运行!三、解题思路1.定义结构struct staff{char num[10];char name[20];char sex[10];int age;char title[20];char p_landscape[30];char Qualifications[30];int Service_time;char come_time[30];char category[30];}staff[100];2.主程序进入主菜单函数void main(){menu();}/*******************主菜单函数**********************/void menu(){char w0;do{system("cls");fflush(stdin); /*清除缓冲区输入*/puts("***********************高校人事管理系统**********************\n\n");puts("\t\t\t\t1)增加人员信息\n"); puts("\t\t\t\t2)删除人员信息 \n"); puts("\t\t\t\t3)查询人员信息\n"); puts("\t\t\t\t4)修改人员信息\n"); puts("\t\t\t\t5)统计人员信息\n"); puts("\t\t\t\t6)对人员排序\n");puts("\t\t\t\t7)保存人员信息\n"); puts("\t\t\t\t8)浏览人员信息\n"); puts("\t\t\t\t9)退出\n");printf("\t\t\t\t 请选择 [ ]\b\b"); w0=getchar();}while(w0<'1'||w0>'9'); switch(w0-48){case 1:add();break;case 2:delete_data();break;case 3:search();break;case 4:modify();break; case 5:stastic();break;case 6:sort();break;case 7:save();break;case 8:browse();break;case 9:break;} }(1)查询功能int search_data()/*{int i,flag; char s[30],w0;system("cls");/*清屏*/ n=load(); do{fflush(stdin); /*清除缓冲区输入*/printf(" 通过1)编号 2)姓名 [ ]\b\b"); w0=getchar(); }while(w0<'1'||w0>'2'); if(w0=='1'){/*按编号查找*/ flag=0;puts("输入人员编号:"); scanf("%s",s); for(i=0;i<n;i++){if(strcmp(s,staff[i].num)==0){printf_face();printf_one(staff[i]); flag=1;break;} else continue; }if(flag==0)puts("该人员不存在!"); }else {/*按姓名查找*/ flag=0;puts("输入人员姓名:"); scanf("%s",s); for(i=0;i<n;i++){if(strcmp(s,staff[i].name)==0){printf_face();printf_one(staff[i]);flag=1;break;}else continue;}if(flag==0) puts("该人员不存在!");}return i;void search(){int k;char w1;loop: k=search_data();do{fflush(stdin); /*清除缓冲区输入*/printf("1)回主菜单 2)退出 3)继续查询 [ ]\b\b"); w1=getchar();}while(w1<'1'||w1>'3');if(w1=='1')menu();else if(w1=='2')exit(0);void add(){char w0,w1;loop: system("cls");puts("请输入编号(如001):");scanf("%s",s.num);if(test(s.num))goto loop;/*编号重复*/puts("请输入姓名:");scanf("%s",);puts("请输入性别(男,女):");scanf("%s",s.sex);puts("请输入年龄:");scanf("%d",&s.age);puts("请输入职务(教授副教授讲师助教学生后勤人员):");scanf("%s",s.duty);puts("请输入职称 (无初级高级 ):");scanf("%s",s.title);puts("请输入政治面貌( 党员非党员 ):");scanf("%s",s.p_landscape);puts("请输入最高学历(小学初中高中大学硕士学位更高):");scanf("%s",s.Qualifications);puts("请输入任职时间:");scanf("%d",&s.Service_time);puts("请输入来院时间(如20050101):");scanf("%s",e_time);puts("请输入人员类别(行政人员教师一般员工退休人员临时工):");scanf("%s",s.category);do{fflush(stdin); /*清除缓冲区输入*/printf("是否保存?1)是 2)否 [ ]\b\b");w0=getchar();}while(w0<'1'||w0>'2');switch(w0){case 1:save(s);break;case 2:break;}do{fflush(stdin); /*清除缓冲区输入*/printf("1)继续增加人员信息 2)回主菜单 3)退出 [ ]\b\b");w1=getchar();}while(w1<'1'||w1>'3');if(w1=='1')goto loop;else if(w1=='2')menu();else exit(0);}(3)保存信息void save(){char w0;save_all();printf("所有信息已保存!\n");do{fflush(stdin); /*清除缓冲区输入*/printf("1) 回主菜单 2) 退出 [ ]\b\b");w0=getchar();}while(w0<'1'||w0>'2');if(w0=='1')menu();else exit(0);}void save_all()/*保存所有数据函数*/{int i;FILE *fp;if((fp=fopen("text.txt","wb"))==NULL){printf("无法打开文件!");exit(0);}for(i=0;i<n;i++){if(staff[i].age!=0)fprintf(fp,"%s %s %s %d %s %s %s %s %d %s %s\n",staff[i].num,staff[i].name, staff[i].sex,staff[i].age,staff[i].duty,staff[i].title,staff[i].p_landscape,sta ff[i].Qualifications,staff[i].Service_time,staff[i].come_time,staff[i].category );else continue;}fclose(fp);}(4)删除人员void delete_data(){int k; char w0,w1;loop: k=search_data();if(k<n){do{fflush(stdin); /*清除缓冲区输入*/printf("确认要删除该人员信息? 1)是 2)否 [ ]\b\b");w0=getchar();}while(w0<'1'||w0>'2');if(w0=='1'){staff[k].age=0;save_all();puts("该人员信息已被删除!");} } do{fflush(stdin); /*清除缓冲区输入*/printf("1)继续删除数据 2)回主菜单 3)退出w1=getchar();}while(w1<'1'||w1>'3'); if(w1=='1') goto loop; else if(w1=='2')menu(); else exit(0); }(5)修改人员信息 void modify() {int k=0,w0,g; char h[30],w1,w2; loop: g=search_data(); if(g<n){ do{puts("\t\t\t 修改: 1)编号"); puts("\t\t\t 2)姓名"); puts("\t\t\t 3)性别"); puts("\t\t\t 4)年龄"); puts("\t\t\t 5)职务"); puts("\t\t\t 6)职称"); puts("\t\t\t 7)政治面貌"); puts("\t\t\t 8)最高学历"); puts("\t\t\t 9)任职时间"); puts("\t\t\t 10)来院时间"); puts("\t\t\t 11)人员类别"); printf(" 请选择 : [ ]\b\b"); scanf("%d",&w0);}while(w0<1||w0>11); switch(w0){case 1:puts("请输入新编号:");scanf("%s",h);strcpy(staff[g].num,h);break; case 2:puts("请输入姓名:");scanf("%s",h);strcpy(staff[g].name,h);break; case 3:puts("请输入性别:");scanf("%s",h);strcpy(staff[g].sex,h);break; case 4:puts("请输入年龄:");scanf("%d",&k);staff[g].age=k;break; case 5:puts("请输入职务:");scanf("%s",h);strcpy(staff[g].duty,h);break; case 6:puts("请输入职称:");scanf("%s",h);strcpy(staff[g].title,h);break;scanf("%s",h);strcpy(staff[g].p_landscape,h);break;case 8:puts("请输入最高学历:");scanf("%s",h);strcpy(staff[g].Qualifications,h);break;case 9:puts("请输入任职时间:");scanf("%d",&k);staff[g].Service_time=k;break;case 10:puts("请输入来院时间:");scanf("%s",h);strcpy(staff[g].come_time,h);break;case 11:puts("请输入人员类别:");scanf("%s",h);strcpy(staff[g].category,h);break;}do{fflush(stdin); /*清除缓冲区输入*/printf("是否保存?1)保存 2)否[ ]\b\b");w1=getchar();}while(w1<'1'||w1>'2');if(w1=='1'){save_all(); puts("保存修改成功!");}}do{fflush(stdin); /*清除缓冲区输入*/printf("1)继续修改 2)回主菜单 3)退出[ ]\b\b");w2=getchar();}while(w2<'1'||w2>'3');if(w2=='1')goto loop;else if(w2=='2')menu();else exit(0);}(6)统计人员信息void stastic(){int i,count;char w0,w1;n=load();if(n==0){puts("没有数据!");getchar();menu();}loop: system("cls");do{fflush(stdin); /*清除缓冲区输入*/printf("通过1)在职人员 2)党员\n");printf(" 3)女工人数 4)最高学历 [ ]\b\b");w0=getchar();}while(w0<'1'||w0>'4');if(w0=='1'){/*统计在职人员*/printf_face();for(i=0,count=0;i<n&&staff[i].age;i++)if(strcmp(staff[i].category,"退休人员")!=0&&strcmp(staff[i].category,"临时工")!=0){count++; printf_one(staff[i]);} printf("\t\t\t\t 共有%d 条记录",count); }else if(w0=='2'){/*统计党员*/ printf_face();for(i=0,count=0;i<n;i++)if(strcmp(staff[i].p_landscape,"党员count++; printf_one(staff[i]);} printf("\t\t\t\t 共有%d 条记录",count);}else if(w0=='3'){/*统计女工人员*/ printf_face();for(i=0,count=0;i<n;i++)if(strcmp(staff[i].sex,"女")==0){count++; printf_one(staff[i]);}printf("\t\t\t\t 共有%d 条记录",count);}else {/*统计高学历人员*/printf_face();for(i=0,count=0;i<n;i++)if(strcmp(staff[i].Qualifications,"硕士学位")==0||strcmp(staff[i].Qualifications,"更高")==0){count++; printf_one(staff[i]);} printf("\t\t\t\t 共有%d 条记录",count);} do{fflush(stdin); /*清除缓冲区输入*/printf("\n1)继续统计 2)回主菜单 3)退出 [ ]\b\b"); w1=getchar();}while(w1<'1'||w1>'3'); if(w1=='1') goto loop; else if(w1=='2')menu(); else exit(0); }(6) 排序功能void sort() {int i,j;char w0,w1; struct staff s1; loop: n=load();system("cls"); do{fflush(stdin); /*清除缓冲区输入*/printf("通过 1)年龄 2)来院时间w0=getchar();}while(w0<'1'||w0>'2');if(w0=='1'){/*按年龄排序*/for(i=0;i<n-1;i++)/*选择法排序*/for(j=i+1;j<n;j++)if(staff[i].age>staff[j].age){s1=staff[i];staff[i]=staff[j];staff[j]=s1;}}else {/*按来院时间排序*/for(i=0;i<n-1;i++)/*选择法排序*/for(j=i+1;j<n;j++)if(strcmp(staff[i].come_time,staff[j].come_time)>0){s1=staff[i];staff[i]=staff[j];staff[j]=s1;}}printf_face();for(i=0;i<n;i++) /*显示排序结果*/printf_one(staff[i]);do{fflush(stdin); /*清除缓冲区输入*/printf("\n1)回主菜单 2)继续排序 3)退出[ ]\b\b");w1=getchar();}while(w1<'1'||w1>'3');if(w1=='1') menu();else if(w1=='2')goto loop;else exit(0);}四、运行与测试报告*********************************高校人事管理系统******************************1)增加人员信息2)删除人员信息3)查询人员信息4)修改人员信息5)统计人员信息6)对人员排序7)保存人员信息8)浏览人员信息9)退出请选择【 1】请输入编号(如001):20071003335请输入姓名:majianbo请输入性别(男,女):nan请输入年龄:20请输入职务(教授副教授讲师助教学生后勤人员): jiaoshou请输入职称 (无初级高级 ):gaoji请输入政治面貌( 党员非党员 ):danyuan请输入最高学历(小学初中高中大学硕士学位更高): shuoshi请输入任职时间:20070901请输入来院时间(如20050101):20070901请输入人员类别(行政人员教师一般员工退休人员临时工): jiaoshi是否保存?1)是 2)否 [1]该信息已成功保存!1)继续增加人员信息 2)回主菜单 3)退出 [ ]程序:#include<stdlib.h>#include <stdio.h>#include <string.h>struct staff/*定义结构体*/{char num[10];/*编号*/char name[20];/*姓名*/char sex[10];/*性别*/int age;/*年龄*/char duty[20];/*职务*/char title[20];/*职称*/char p_landscape[30];/*政治面貌*/char Qualifications[30];/*学历*/int Service_time;/*任职时间*/char come_time[30];/*来院时间*/char category[30];/*人员类别*/}staff[100];struct staff s;int n;void menu();void printf_face()/*显示数据结构项目函数*/{printf("编号姓名性别年龄职务职称政治面貌学历任职时间来院时间人员类别\n");}void printf_one(struct staff p)/*输出单个数据函数*/{printf("%-4s%-7s%-5s%-3d%-7s%-5s%-8s%-12s%-5d%-12s%-3s\n",p.num,,p.se x,p.age,p.duty,p.title,p.p_landscape,p.Qualifications,p.Service_time,e_tim e,p.category);}int load()/*加载函数*/{int i=0;FILE *fp;if((fp=fopen("text.txt","rb"))==NULL){return 0; exit(0);}for(i=0;!feof(fp);i++){ /*输出数据到结构体*/fscanf(fp,"%s %s %s %d %s %s %s %s %d %s %s\n",staff[i].num,staff[i].name,staff [i].sex,&staff[i].age,staff[i].duty,staff[i].title,staff[i].p_landscape,staff[i ].Qualifications,&staff[i].Service_time,staff[i].come_time,staff[i].category);} fclose(fp);return i;}int search_data()/*查找单个数据函数*/{int i,flag;char s[30],w0;system("cls");/*清屏*/n=load();do{fflush(stdin); /*清除缓冲区输入*/printf(" 通过1)编号 2)姓名 [ ]\b\b");w0=getchar(); }while(w0<'1'||w0>'2');if(w0=='1'){/*按编号查找*/flag=0;puts("输入人员编号:");scanf("%s",s);for(i=0;i<n;i++){if(strcmp(s,staff[i].num)==0){printf_face();printf_one(staff[i]);flag=1;break;}else continue;}if(flag==0)puts("该人员不存在!");}else {/*按姓名查找*/flag=0;puts("输入人员姓名:");scanf("%s",s);for(i=0;i<n;i++){if(strcmp(s,staff[i].name)==0){printf_face();printf_one(staff[i]);flag=1;break;}else continue;}if(flag==0) puts("该人员不存在!");}return i;}void save_all()/*保存所有数据函数*/{int i;FILE *fp;if((fp=fopen("text.txt","wb"))==NULL){printf("无法打开文件!");exit(0);}for(i=0;i<n;i++){if(staff[i].age!=0)fprintf(fp,"%s %s %s %d %s %s %s %s %d %s %s\n",staff[i].num,staff[i].name, staff[i].sex,staff[i].age,staff[i].duty,staff[i].title,staff[i].p_landscape,sta ff[i].Qualifications,staff[i].Service_time,staff[i].come_time,staff[i].category );else continue;}fclose(fp);}int test(char h[10])/*检查编号是否重复*/{int i;n=load();for(i=0;i<n;i++)if(strcmp(h,staff[i].num)==0){puts("输入的编号有重复!请重新输入编号!");system("pause");return 1;}return 0;}void single_save(struct staff p)/*保存单个数据函数*/{FILE *fp;if((fp=fopen("text.txt","ab+"))==NULL){printf("无法打开文件!");exit(0);}fprintf(fp,"%s %s %s %d %s %s %s %s %d %s %s\n",p.num,,p.sex,p.age,p.duty ,p.title,p.p_landscape,p.Qualifications,p.Service_time,e_time,p.category);printf("该信息已成功保存!\n");fclose(fp);}/*********************************修改模块**********************************/ void modify(){int k=0,w0,g;char h[30],w1,w2;loop: g=search_data();if(g<n){do{puts("\t\t\t修改: 1)编号");puts("\t\t\t 2)姓名");puts("\t\t\t 3)性别");puts("\t\t\t 4)年龄");puts("\t\t\t 5)职务");puts("\t\t\t 6)职称");puts("\t\t\t 7)政治面貌");puts("\t\t\t 8)最高学历");puts("\t\t\t 9)任职时间");puts("\t\t\t 10)来院时间");puts("\t\t\t 11)人员类别");printf(" 请选择 : [ ]\b\b");scanf("%d",&w0);}while(w0<1||w0>11);switch(w0){case 1:puts("请输入新编号:");scanf("%s",h);strcpy(staff[g].num,h);break;case 2:puts("请输入姓名:");scanf("%s",h);strcpy(staff[g].name,h);break;case 3:puts("请输入性别:");scanf("%s",h);strcpy(staff[g].sex,h);break;case 4:puts("请输入年龄:");scanf("%d",&k);staff[g].age=k;break;case 5:puts("请输入职务:");scanf("%s",h);strcpy(staff[g].duty,h);break;case 6:puts("请输入职称:");scanf("%s",h);strcpy(staff[g].title,h);break;case 7:puts("请输入政治面貌:");scanf("%s",h);strcpy(staff[g].p_landscape,h);break;case 8:puts("请输入最高学历:");scanf("%s",h);strcpy(staff[g].Qualifications,h);break;case 9:puts("请输入任职时间:");scanf("%d",&k);staff[g].Service_time=k;break;case 10:puts("请输入来院时间:");scanf("%s",h);strcpy(staff[g].come_time,h);break;case 11:puts("请输入人员类别:");scanf("%s",h);strcpy(staff[g].category,h);break;}do{fflush(stdin); /*清除缓冲区输入*/printf("是否保存?1)保存 2)否[ ]\b\b");w1=getchar();}while(w1<'1'||w1>'2');if(w1=='1'){save_all(); puts("保存修改成功!");}}do{fflush(stdin); /*清除缓冲区输入*/printf("1)继续修改 2)回主菜单 3)退出[ ]\b\b");w2=getchar();}while(w2<'1'||w2>'3');if(w2=='1')goto loop;else if(w2=='2')menu();else exit(0);}/************************保存模块******************************/void save(){char w0;save_all();printf("所有信息已保存!\n");do{fflush(stdin); /*清除缓冲区输入*/printf("1) 回主菜单 2) 退出 [ ]\b\b");w0=getchar();}while(w0<'1'||w0>'2');if(w0=='1')menu();else exit(0);}/*************************查找模块*****************************/ void search(){int k;char w1;loop: k=search_data();do{fflush(stdin); /*清除缓冲区输入*/printf("1)回主菜单 2)退出 3)继续查询 [ ]\b\b");w1=getchar();}while(w1<'1'||w1>'3');if(w1=='1')menu();else if(w1=='2')exit(0);else goto loop;}/***************************增加模块*****************************/ void add(){char w0,w1;loop: system("cls");puts("请输入编号(如001):");scanf("%s",s.num);if(test(s.num))goto loop;/*编号重复*/puts("请输入姓名:");scanf("%s",);puts("请输入性别(男,女):");scanf("%s",s.sex);puts("请输入年龄:");scanf("%d",&s.age);puts("请输入职务(教授副教授讲师助教学生后勤人员):");scanf("%s",s.duty);puts("请输入职称 (无初级高级 ):");scanf("%s",s.title);puts("请输入政治面貌( 党员非党员 ):");scanf("%s",s.p_landscape);puts("请输入最高学历(小学初中高中大学硕士学位更高):");scanf("%s",s.Qualifications);puts("请输入任职时间:");scanf("%d",&s.Service_time);puts("请输入来院时间(如20050101):");scanf("%s",e_time);puts("请输入人员类别(行政人员教师一般员工退休人员临时工):");scanf("%s",s.category);do{fflush(stdin); /*清除缓冲区输入*/printf("是否保存?1)是 2)否 [ ]\b\b");w0=getchar();}while(w0<'1'||w0>'2');switch(w0-48){case 1:single_save(s);break;case 2:break;}do{fflush(stdin); /*清除缓冲区输入*/printf("1)继续增加人员信息 2)回主菜单 3)退出 [ ]\b\b");w1=getchar();}while(w1<'1'||w1>'3');if(w1=='1')goto loop;else if(w1=='2')menu();else exit(0);}/*******************************删除模块*****************************/void delete_data(){int k; char w0,w1;loop: k=search_data();if(k<n){do{fflush(stdin); /*清除缓冲区输入*/printf("确认要删除该人员信息? 1)是 2)否 [ ]\b\b");w0=getchar();}while(w0<'1'||w0>'2');if(w0=='1'){staff[k].age=0;save_all();puts("该人员信息已被删除!");}}do{fflush(stdin); /*清除缓冲区输入*/printf("1)继续删除数据 2)回主菜单 3)退出 [ ]\b\b");w1=getchar();}while(w1<'1'||w1>'3');if(w1=='1') goto loop;else if(w1=='2')menu();else exit(0);}/********************************统计模块*******************************/void stastic(){int i,count;char w0,w1;n=load();if(n==0){puts("没有数据!");getchar();menu();}loop: system("cls");do{fflush(stdin); /*清除缓冲区输入*/printf("通过1)在职人员 2)党员\n");printf(" 3)女工人数 4)最高学历 [ ]\b\b");w0=getchar();}while(w0<'1'||w0>'4');if(w0=='1'){/*统计在职人员*/printf_face();for(i=0,count=0;i<n&&staff[i].age;i++)if(strcmp(staff[i].category,"退休人员")!=0&&strcmp(staff[i].category,"临时工")!=0){count++; printf_one(staff[i]);}printf("\t\t\t\t共有%d条记录",count);}else if(w0=='2'){/*统计党员*/printf_face();for(i=0,count=0;i<n;i++)if(strcmp(staff[i].p_landscape,"党员")==0){count++; printf_one(staff[i]);}printf("\t\t\t\t共有%d条记录",count);}else if(w0=='3'){/*统计女工人员*/printf_face();for(i=0,count=0;i<n;i++)if(strcmp(staff[i].sex,"女")==0){count++; printf_one(staff[i]);}printf("\t\t\t\t共有%d条记录",count);}else {/*统计高学历人员*/printf_face();for(i=0,count=0;i<n;i++)if(strcmp(staff[i].Qualifications,"硕士学位")==0||strcmp(staff[i].Qualifications,"更高")==0){count++; printf_one(staff[i]);}printf("\t\t\t\t共有%d条记录",count);}do{fflush(stdin); /*清除缓冲区输入*/printf("\n1)继续统计 2)回主菜单 3)退出 [ ]\b\b");w1=getchar();}while(w1<'1'||w1>'3');if(w1=='1') goto loop;else if(w1=='2')menu();else exit(0);}/*******************************排序模块***********************************/ void sort(){int i,j;char w0,w1;struct staff s1;loop: n=load();system("cls");do{fflush(stdin); /*清除缓冲区输入*/printf("通过 1)年龄 2)来院时间 [ ]\b\b");w0=getchar();}while(w0<'1'||w0>'2');if(w0=='1'){/*按年龄排序*/for(i=0;i<n-1;i++)/*选择法排序*/for(j=i+1;j<n;j++)if(staff[i].age>staff[j].age){s1=staff[i];staff[i]=staff[j];staff[j]=s1;}}else {/*按来院时间排序*/for(i=0;i<n-1;i++)/*选择法排序*/for(j=i+1;j<n;j++)if(strcmp(staff[i].come_time,staff[j].come_time)>0){s1=staff[i];staff[i]=staff[j];staff[j]=s1;}}printf_face();for(i=0;i<n;i++) /*显示排序结果*/printf_one(staff[i]);do{fflush(stdin); /*清除缓冲区输入*/printf("\n1)回主菜单 2)继续排序 3)退出[ ]\b\b");w1=getchar();}while(w1<'1'||w1>'3');if(w1=='1') menu();else if(w1=='2')goto loop;else exit(0);}/********************************浏览模块**************************************/void browse(){int i;char w0;n=load();system("cls");printf_face();for(i=0;i<n ;i++)printf_one(staff[i]);printf("\t\t\t\t共有%d条人员记录\n",n);do{fflush(stdin); /*清除缓冲区输入*/printf(" 1)回主菜单 2)退出 [ ]\b\b");w0=getchar();}while(w0<'1'||w0>'2');if(w0=='1') menu();if(w0=='2') exit(0);}/********************************主菜单函数*************************************/void menu(){char w0;do{system("cls");fflush(stdin); /*清除缓冲区输入*/puts("*********************************高校人事管理系统*******************************\n\n");puts("\t\t\t\t1)增加人员信息\n");puts("\t\t\t\t2)删除人员信息 \n");puts("\t\t\t\t3)查询人员信息\n");puts("\t\t\t\t4)修改人员信息\n");puts("\t\t\t\t5)统计人员信息\n");puts("\t\t\t\t6)对人员排序\n");puts("\t\t\t\t7)保存人员信息\n");puts("\t\t\t\t8)浏览人员信息\n");puts("\t\t\t\t9)退出\n");printf("\t\t\t\t请选择 [ ]\b\b");w0=getchar();}while(w0<'1'||w0>'9');switch(w0-48){case 1:add();break;case 2:delete_data();break;case 3:search();break;case 4:modify();break;case 5:stastic();break;case 6:sort();break;case 7:save();break;case 8:browse();break;case 9:break;}}/***********************************主函数****************************************/void main(){menu();}。
一、需求分析所做题号为1,包含6个小题,分别如下:1、字符类型统计器:编写程序,在终端用键盘输入字符串,以CTRL+Z 组合表示输入完毕,统计输入的字符串中空格符、制表符、换行符的个数,并显示统计结果。
2、舍罕王的失算:相传国际象棋是古印度舍罕王的宰相达依尔发明的。
舍罕王十分喜爱象棋,决定让宰相自己选择何种赏赐。
这位聪明的宰相指着8*8共64格的象棋棋盘说:“陛下,请您赏给我一些麦子吧。
就在棋盘的第1格中放1粒,第2格放2粒,第3格放4粒,以后每一格都比前一格增加一倍,依此放完棋盘上64格,我就感激不尽了。
”舍罕王让人扛来一袋麦子,他要兑现他的许诺。
请问,国王共要多少麦子赏赐他的宰相?3、汉诺塔:一块板上有三根针:A 、B 、C 。
A 针上套有64个大小不等的圆盘,大的在下,小的在上,如下图所示。
要把这64个圆盘从A 针移动到C 针上,每次只能移动一个圆盘,移动可以借助B 针进行。
但在任何时候,任何针的圆盘都必须保持大盘在下,小盘在上。
求移动的步骤。
4、用递推化梯形法求定积分:⎰=10sin dx xxI 的值。
5、算法设计题:输入一个字符串并将它输出,以ctrl+z 组合键表示输入完毕,要求将输入的字符串中多于一个的连续空格符合并为1个。
6、一个有序的字母序列:a ,b ,d ,f ,h ,j ,l ,p ,t ;编写一个程序,要求从终端输入一个字幕,将该字母插入这个序列中使得字母序列依然保持有序,然后输出新的字母序列。
注意:如果输入的字母在原序列中存在,就将该字母插入到已存在字母的后面。
二、总体设计1、因为计算机存储的都是ASCII 码,查表可知空格符、制表符、换行符的ASCII 码值分别为32、9、10。
要判断是否输入完毕,所以也需要知道CTRL+Z 输入的字符在计算机中对应什么,查询可知CTRL+Z 输入的字符在计算机中对应EOF 结束标志。
(经过操作输入CTRL+Z 无法结束,所以改为输入为1时结束)流程图如下:2、达依尔要求:第一个格子1粒麦子,第二个格子2粒麦子,第三个格子4粒麦子,……以后每一小格都比前一个小格的麦粒数增加一倍,直到64个小格子为止。
可知:第i 个格子的麦粒数为1-i 2(i=1,2,...,64),所以总数为:∑=641i 1-2i可以用for 循环做。
(在c 语言中有两种方法计算1-i 2,直接调用pow 函数或者采用for 循环)3、因为要大盘在上,小盘在下。
所以这样移动:(1)现将第1~63个盘子移到B针上,保证大盘在下小盘在上。
(2)再将最下面的盘子移动到C针上。
(3)将B针上的63个盘子移到C针上。
关键在于第(1)步和第(3)步,由于每次只能移动一个圆盘,所以在移动过程中必须要借助另外一根针,即第(1)步将第1~63个盘子借助C针移到B 针上;第(3)步将B针上的63个盘子借助A针移到C针上。
这又是两个新的汉诺塔问题。
将上第1~63个盘子借助C针移到B针上:(1)将A针第1~62个盘子借助B针移到C针上,保证大盘在下小盘在上。
(2)再将最下面的(第63个)盘子移动到B针上。
(3)将C针上的62个盘子借助A针移到B针上。
将B针上的63个盘子借助A针移到C针上:(1)将B针第1~62个盘子借助C针移到A针上,保证大盘在下小盘在上。
(2)再将最下面的(第63个)盘子移动到C针上。
(3)将A针上的62个盘子借助B针移到C针上。
这明显是一个递归问题。
4、梯形法计算⎰=10sin dx xxI : 定步长:若有)(dx dy x f =,则用梯形法有))1()((2hy y k 1k +++=+k f k f 流程图:5、本题要求输入的字符串中多于一个的空格符合并为一个,因此可以在输入每个字符时判断它是否为空格符。
若是,则接下来的空格符不输出输出。
流程图:6、注意数组的大小,因为要插入一个字母。
将输入的字母和原序列的字母按顺序比较ascii码值大小。
确定好位置后,将该位置后的字母按顺序后移一个单位,然后插入该字母。
流程图:三、详细设计1、程序及注释#include<stdio.h>#include<string.h>main(){char c;//定义字符变量int Space=0, Tab=0, Enter=0;//定义整型变量printf("Please input a string:\n");//在运行窗口显示“Please input a string :(请输入一段字符串)”scanf("%c", &c);//输入一个字符while(c!=’1’) //当输入字符不为ctrl+z时,运行while里面的语句{if (c==32) Space++;//当输入的字符的ASCII码等于32(即空格键的ASCII码值)时,Space加一else if (c==9) Tab++; //当输入的字符的ASCII码等于9(即制表键的ASCII码值)时,Tab加一else if (c==10) Enter++; //当输入的字符的ASCII码等于10(即回车键的ASCII码值)时,Enter加一scanf("%c", &c);//输入一个字符}printf("the number of Space:%d\n", Space); //输出显示这串字符串的空格键个数printf("the number of Tab:%d\n", Tab); //输出显示这串字符串的制表键个数printf("the number of Enter:%d\n", Enter);//输出显示这串字符串的回车键个数system("pause"); //加上这句语句,可以看到结果;否则运行界面只会闪一下}2、程序及注释①采用pow函数计算2的i次方。
#include<stdio.h>#include<math.h>void main(){double sum=0;//定义双精度变量int i;//定义整型变量for(i=0;i<64;i++)//进行64次循环sum=sum+pow(2,i);//累加求和printf("the number of qrain is: %lf\n", sum);//显示结果system("pause"); //加上这句语句,可以看到结果;否则运行界面只会闪一下}②采用for循环方式计算2的i次方。
#include<stdio.h>#include<math.h>void main(){double x,sum=0;//定义双精度变量int i,n;//定义整型变量for (n = 0; n <64; n++)//进行64次循环计算sum{x = 1;for (i = 0; i<n; i++)//进行循环计算2的i次方x = 2 * x;//循环结束后x=2的i次方sum = sum + x;//循环结束后sum为最后结果}printf("the number of qrain is: %lf\n", sum);//显示结果system("pause"); //加上这句语句,可以看到结果;否则运行界面只会闪一下}3、#include<stdio.h>move(int n,char x,char y,char z)//定义调用函数move(){if(n==1)printf("move disk from position %c to %c\n",x,z);else{move(n-1,x,z,y);//调用move()函数printf("move disk from position %c to %c\n",x,z);move(n-1,y,x,z);//调用move()函数}}int main(void){int n;//定义整型变量printf("input diskes number:\n");scanf("%d",&n);//从键盘上输入n的值printf("the step to moving %d diskes:\n",n);move(n,'A','B','C');//调用move()函数system("pause"); //加上这句语句,可以看到结果;否则运行界面只会闪一下}4、程序及注释#include<stdio.h>#include<math.h>double func(double x)//定义调用函数func(),计算sin(x)/x的值{if(x!=0)return sin(x)/x;elsereturn 1;}int main(void){double i,y,h,n;//定义双精度变量y=0;scanf("%lf/n", &h);//输入步长值n=1/h;for(i=0;i<n;i++){y=y+0.5*h*(func(i*h)+func((i+1)*h));//梯形法计算}printf("the h is:%lf\n",h);//显示步长printf("the result of integration is :%.10lf\n",y);//显示求和结果system("pause"); //加上这句语句,可以看到结果;否则运行界面只会闪一下}5、程序及注释#include<stdio.h>#include<string.h>main(){char c,lastc='c';//定义字符变量,给lastc初值为“c”printf("Please input a string:\n");scanf("%c",&c);//输入一个字符while(c!=EOF)//当输入ctrl+z时结束循环{if(c!=32){putchar(c);//输出字符lastc=c;//将输入的字符值给lastcscanf("%c" ,&c);//输入一个字符}else{if(lastc!=32) putchar(c);//当lastc的ascii码值不为32(即输入空格键)时,输出字符lastc=c;//将输入的字符值给lastcscanf("%c" ,&c); //输入一个字符}}system("pause"); //加上这句语句,可以看到结果;否则运行界面只会闪一下}6、程序及注释#include<stdio.h>#include<string.h>main(){char c;//定义字符变量char str[10]={'a','b','d','f','h','j','l','p','t'};int i,j,k;//定义整型变量printf("please input a alpha\n");scanf("%c" ,&c);//输入一个字符if((c<'A')||(c>'z')) return(0);if((c>'Z')&&(c<'a')) return(0);if((c>'A')&&(c<'Z')) c=c+32;//当输入的字符为大写字母时,转换为小写字母for(i=0;i<8;i++){if((c>=str[i])&&(c<str[i+1]))k=i+1;}if(c>=str[8])k=9;for(j=8;j>=k;j--)str[j+1]=str[j];str[k]=c;printf("the result is:\n") ;printf("%s",str) ;system("pause"); //加上这句语句,可以看到结果;否则运行界面只会闪一下}四、程序运行结果测试与分析1、结果:分析:由于当我使用EOF作为结束符时,当我在窗口输入ctrl+Z时并不能结束,当我把结束符改为数字1就可以了,所以我用数字1作为结束符。