1、课程设计报告1 基础任务1) 学生成绩排名2) 用指针优化学生成绩排名1.1 任务要求1学生成绩排名1) 定义一个数组a11,用以存放学生的成绩。2) 从键盘输入10个学生成绩3) 采用冒泡法,将学生成绩按照从高到低进行排序4) 再输入一个学生的成绩,将此成绩按照排序规律插入原学生成绩数组5) 将排好序的成绩单进行反序存放,即原来是从高到低,现在改为从低到高排列。将以上每一步骤的结果均打印输出,验证程序是否正确实现题目要求2. 用指针优化学生成绩排名1) 定义数组stu10存放10个学生的成绩,从键盘输入数据,用指针实现2) 将数组stu10的内容输出到屏幕上,要求用指针实现3) 将成绩数组按
2、照从高到低进行排序,要求用指针实现4) 将第三步内容放在函数中实现,在主函数中调用实现排序,用指针实现,输出排序后的成绩单5) 采用指针方法,输入字符串“student score ”,复制该字符串并输出(复制字符串采用库函数或用户自定义函数)1.2 算法流程图开始输入10名学生的成绩从高到低排列成绩插入一个新成绩重新排列倒序排列将每次的结果输出结束1.3 主要代码1.学生成绩排名for(j=0;jN-1;j+)/冒泡法排序for(i=0;iN-(j+1);i+)if(aiai+1)t=ai;ai=ai+1;ai+1=t;printf(按从高到低排列成绩:n);for(i=0;iN;)prin
3、tf(%4d,ai+);printf(请再输入一个学生的成绩:n);scanf(%d,&number);printf(第%d个学生的成绩是:%dn,N+1,number);/宏定义用得好!end=aN-1;/插入一个新数据按原顺序排列 是难点!if(numberend)aN=number;/先要判断是否落在数组尾端,否则不能按下列方法移动每个数据elsefor(i=0;iai)t=ai;ai=number;for(j=i+1;jN+1;j+)t1=aj;/关键是要引入两个临时变量aj=t;t=t1;break;printf(插入后成绩排序是:n);for(i=0;iN+1;i+)printf(
4、%4d,ai);2 指针优化后的学生成绩排名#include #include #define NULL 0#define N 10int main ()void sort(int *p,int n);void sort2(int *p,int n);void inv(int *p,int n);void copy_string(char *,char *);int stuN;int *p=stu;int i;char a20,b20,c20;char *p1=a,*p2=b,*p3=c;printf(请输入%d个学生的成绩:n,N);for(i=0;iN;i+)scanf(%d,p+);pr
5、intf(这%d个学生的成绩是:n,N);for(p=stu,i=0;iN;i+)printf(%4d,*p+);printf(n);printf(从高到低排序:n);p=stu;/指针复位,一定不能漏!sort(p,N);for(i=0;iN;i+)printf(%4d,*p+);printf(n);printf(逆序存放且输出:n);p=stu;/指针复位,一定不能漏!inv(p,N);for(i=0;iN;i+)printf(%4d,*p+);printf(n);printf(realize the copy_stringn);/字符串输入和复制printf(please enter s
6、tudent scoren);getchar();/防止回车被下面的gets被吞掉gets(p1);/若用scanf则空格时0copy_string(p1,p2);/自定义函数实现strcpy(p3,p1);/库函数实现printf(string_a=%sn,p1);printf(string_b=%sn,p2);printf(string_c=%sn,p3);return 0;void sort(int *p,int n)/冒泡法排列int i,j,t;for(j=0;jN-1;j+)for(i=0;iN-1-j;i+)if(*(p+i)*(p+i+1)/特点是相邻两项比较t=*(p+i);
7、*(p+i)=*(p+i+1);*(p+i+1)=t;void sort2(int *p,int n)/选择法排序int i,j,k,t;for(i=0;in-1;i+)k=i;for(j=i+1;jn;j+)if(*(p+k)*(p+j)/特点是一个与剩下的所有依次比较k=j;if(i!=k)t=*(p+i);*(p+i)=*(p+k);*(p+k)=t;void inv(int *p,int n)/逆序存放且输出int *i,*j,*m=p+(n-1)/2;/p为指针,加上整数便自动类型转换成指针,故可以不用强制转换 (int *)(p+(n-1)/2)int temp;for(i=p,j
8、=p+n-1;i=m;i+,j-)/i= 右边一定要是指针,同类型!temp=*i;*i=*j;*j=temp;void copy_string(char *from,char *to)for(;*to+=*from+;);2.课题任务院职工工资管理系统2.1 任务介绍院职工工资管理系统应包含职工的全部信息。每个职工是一条记录,包括姓名、性别、出生年月、年龄、婚姻状况、家庭住址、职称、工资级别情况等。本系统重点进行工资管理,系统登陆后可计算职工工资总额和平均工资,可按工资进行排序,并能够找出工资级别相同的职工名单。2.2设计说明1) 用C语言实现程序设计;2) 利用结构体数组实现职工信息的保存
9、;3) 系统的各个功能模块要求用函数的形式实现;4) 界面友好(良好的人机交互),程序加必要的注释。2.3程序组成框图与流程图三大模块:定义常变量N(职工数)声明函数声明结构体定义结构体变量主函数进入函数switch选择菜单(1)查看职工信息 view_person进入函数(2)查看工资情况view_salary功能函数模块2.4 主要函数功能void view_person();查看职工基本信息void view_salary();查看工资情况float sum(float ,float ,float );工资求和(三个月工资之和)void sort();按平均工资由大到小排序void se
10、arch();寻找工资等级相同的职工2.5 关键代码int main()printf(院职工工资管理系统n);printf(1)查询职工基本信息n(2)查看工资情况n请输入1 or 2 继续n);switch(getchar()case 1:view_person();break;case 2:view_salary();break;printf(n);return 0;void view_salary()int i;char c;printf(院职工工资情况统计表n);printf(工号姓名一月二月三月总计平均n);for(i=0;iN;i+)printf(%3d %6s %8.2f %8.2f %8.2f %8.2f %8.2fn,sali.num,sali.name,sali.mon1,sali.mon2,sali.mon3,sali.sum,sali.aver);printf(n按a进行排序 按b进行找寻n);getchar();if(getchar()=a)sort();else if(getchar()=b)search();3总结与体会 通过这次C语言课程设计,我加深了对模块化编程思想的理解,还对所学的编程知识有了进一步地巩固。我体会到了了不断调试、摸索最后成功的乐趣,看到屏幕上呈现自己想要的结果的那一刻我会感到莫大的成就感,这恐怕也是编程的巨大魅力所在吧!
版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。
Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1
陕公网安备 61072602000132号 违法和不良信息举报:0916-4228922