1、C程序设计很好的版本 HUNAN CITY UNIVERSITYC语言课程设计 报 告 课程名称: C语言课程设计 专 业: 计算机科学与技术 学生姓名: 周志强 班级学号: 1006402-07 分组成员: 曹立清、王晓洁 指导教师: 谭新良老师 C 语 言 上 机 实 习 报 告 100640207 周志强一、设计时间2011年11月 24日11月28日二、设计地点湖南城市学院1实验楼计算机机房406三、设计目的1.熟练掌握C语言的基本知识:数据类型(整形、实型、字符型、数组、结构等);运算符(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);大
2、程序的功能分解方法(即函数的使用);预处理命令(宏定义、文件包含、条件编译)等。2.掌握各种函数的应用,包括输入输出函数、数学函数、字符操作函数、字符串操作函数、时间函数、绘图函数等。3.程序=数据结构+算法。掌握一些常用的算法,包括用辗转相除法求最大公约数;用牛顿迭代法、二分法、弦截法等求高次方程的根;用冒泡法、选择法排序;穷举法等。4.理解递归函数的运行实现过程,掌握递归程序的编写。5.学握指针的使用、学会利用位运算处理实际问题,懂得文件的基本操作。四、设计小组成员1006402-47 曹立清,1006402-07 周志强 1006402-57 王晓洁五、指导老师 谭新良老师 六、设计课题
3、 我们组成员选取第1,7,9三题进行编程设计七、基本思路及关键问题的解决 (1)基本思路: 分析题目所要涉及的函数类型、数据类型分析数据结构及算法编写程序运行并检查程序(2)关键问题的解决:在画N-S流程图的过程中,关键是搞清程序所表达的意思,然后弄清楚当型、直当型、for以及while的流程图结构和嵌套语句在流程图中的画法。八、调试过程中出现的问题及相应解决办法 (1)调试运行中的问题 程序中有死循环;程序在等待某些输入信息,并且直到输入正确后才会得出结果;(2)解决方法在开始调试这样一个程序时,应该先检查一下程序结构,然后再按执行顺序依次查看程序的各个部分,看看它们是否能正确运行。 程序中
4、有死循环:先检查检查一下循环结构,重新编辑运行;如果运行出错,直接关闭程序。程序在等待某些输入信息,并且直到输入正确后才会得出结果:运行程序时注意输入值的限制条件,在进行运行。九、算法及流程图 第1题流程图:第7题流程图:第9题流程图:建立链表的N-S图 n=0p1=p2=(struct student *)malloc(LEN): 开辟一个新单元输入第一个学生的学号和成绩 num scorehead=NULL 头指针不知想任何有用的储存单元while(p1-num !=0)n=n+1T n等于1F haed=p1P2-next=p1p2=p1P1=(struct student *)mall
5、oc(LEN)输入学生的学号和成绩 scanf(“%d,%d,&p1-=num,&p1-score ”)P2-next=NULL返回有指针所指的内容合并链表的N-S图Pa2=pa1=ahPb2=pb1=bhWhile(pb1-numpa1-num)&(pa1-next !=NULL)pa2=pa1pa1=pa1-nextPb1指向的等号小于 T 或等于所指向的学号 F ah =palTFah =pb1Pa2-next=pb1Pb1=pb1-nextPb2-next=pa1Pa2=pb2 ; pb2=pb1While(pa1-next !=NULL) | (pa1=NUL:L&pb1!=NULL
6、) (pb1 !=NULL)&(pb1-numTPai-num)&(pa1-next=NULL) FPa1-next=pb1返回ah十、课程设计心得体会 经过这次的课程设计我体会到拥有实的基础很关键,因为如果你平时学得就不怎么样,那么你面对这么一个比较有难度的程序,你可能会望而却步,看他人的程序都是个难点,更别说让你自己去设计。为了解决此。类问题,最好就是多向同学,老师请教,不要怕难为情。尤其是老师,评他们多年的编写程序的经验,要解决我们的问题,对他们来说只是small case。此外 我非常感谢老师们给了我们这次的课程设计,它使我更加深刻地体会到多看专业书的重要性,只有掌握了一定量的专业知识
7、才能得心应手地解决诸多问题;另外,做任何事都要有耐心,不要一遇到困难就退缩;在学习和工作中要时刻谨记“团结”二字,它好比通向成功的铺路石,不可或缺。在这次程序中有过山穷水尽的困惑;有过柳暗花明的惊喜;有过唇枪舌剑的辩论;有过相互鼓励的安慰。一个多礼拜的时间我们经历了很多,也收获了很多。与其说它是体力与脑力的作业,不如说它是合作精神和毅力的考验。经过这次课程设计,我不仅学到了很多知识和技能,更重要的是我们学会了如何运用所学知识去解决实际问题.十一、源程序(每句语言要有详细解释)1. 学生成绩管理系统管理n个学生的成绩。每个学生包括学号NO.、姓名name、语文score1、数学score2、外语
8、score3等信息。输入这n个学生的信息,求出每人的平均分,打印出总分最高的学生的姓名。#define N 3 /定义一个3次循环的Nstruct student /定义student这个整体 char num10; /定义num,装载学号,最多占10个字符 char name10; /定义name,装载名字,最多占10个字符 int score4; /定义score,整形变量,装载分数,最多4个字符 float ave; /定义浮点型ave,装载一名学生的平均分stuN;main() /主函数int i,j,max,maxi,sum; /定义整形i,j,max,maxi,sum float
9、average; /定义浮点型average,用来装每个学生的平均分 for(i=0;iN;i+) /定义i,为N个学生循环N次,printf(Please input scores of student %d :n,i+1); /屏幕显示循环次数 printf(NO.:); /输入循环的学生学号 scanf(%s,stui.num); /输入学号,赋值给每次循环的num printf(name:); /提示输入学生名字 scanf(%s,stui.name); /输入学生名字,赋值给每次循环的name for(j=0;j3;j+) /设置一个进行3次的循环printf(score %d :,
10、j+1); /屏幕显示输入分数,输完后循环+1 scanf(%d,&stui.scorej); /输入分数,分别赋值给每次循环的学生,P.S:此语句一共将循环3*3=9次 average=0; /将average的初值设置为0,用来装每个学生的平均分 max=0; /将max的初值设置为0,用来装所有学生成绩最高的 maxi=0; /将maxi的初值设置为0,用来装最大分数学生的学号 for(i=0;iN;i+) /定义一个循环N次的循环sum=0; for(j=0;jmax) max=sum; /当summax时,将sum的值赋给max maxi=i; /将学生的顺序编号赋值给maxi,此时
11、,maxi为最大学生的顺序编号 average/=N; /求所有学生的平均分 printf( NO. name score1 score2 score3 averagen); for(i=0;iN;i+) printf(%5s,stui.num); /将每位学生的学号输出,占5字符 printf(%10s,stui.name); /将每位学生的姓名输出,占10字符 for(j=0;j3;j+) printf(%9d,stui.scorej); /将每位学生的分数输出,占9个字符 printf(%8.2fn,stui.ave); /输出每名学生的平均成绩 printf(average=%6.2f
12、n,average); printf(The highest score is : %s,score total :%dn,stumaxi.name,max); /将最高成绩输出 getch(); /停止7打印n*n方阵:#include#include void main() /*打印n*n的方阵*/ int m,n,s=0,i=1,j=1,h,a2121; /*定义一个二维数组,m 、n、i、j控制行列,s控制数值*/ printf(Please input n (120):); scanf(%d,&n); /*输入一个120范围内的数*/ for(m=0;mn;m+) /*确定方阵为n行
13、n列*/ for(h=0;h0;m-) /*为n维数组赋初值*/ for(h=0;hm;h+) /*用m来控制每次对角线数字的个数*/ if(m%2=0)i-;j+; else i+;j-; aij=+s; if(m%2=0)j=j+1; else i=i+1; /*控制行列*/ for(i=1;i=n;i+) printf(n); for(j=1;j=n;j+) printf(%4d,aij); /*以n列为一行输出数组*/ getch(); /*将数组输出到屏幕*/9.已有a,b两个链表,每个链表中的结点包括号学号、成绩。要求把两个链表合并,按学号升序排列。#include#include
14、 /*在malloc.h头文件中已包含了宏定义#define NULL0,故在程序中不必再重复定义*/#define LEN sizeof(struct student)struct student Long num; Int score; Struct student *next;Struct student lista,listb;int n,sum=0;void main()struct student *creat(void); /函数声明Struct student * insert(struct student *,struct student *); /函数声明void prin
15、t(struct student * ); /函数声明struct student * ahead,*bhead,*abh;printf(“input list a:n”);ahead=creat(); /调用creat函数,输入表Asum=sum+n;printf(“input list b:n”);bhead=creat(); /调用creat函数,输入表Bsum=sum+ n;ab=insert(ahead,bhead); /调用insert函数,将两表合并print(abh); /输出合并后的链表Struct student *creat(void) /建立链表函数Struct stu
16、dent *p1,*p2,*head;n=0;p1=p2=(struct student *)malloc(LEN);printf(“input number & scores of student:n”);printf(“if number is 0,stop inputing.n”);scanf(“%ld,%d”,&p1-num,&p1-score);head=NULL;while(p1-num!=0) n=n+1; If(n=1) Head=p1;else p2-next=p1;p2=p1;p1=(struct student *)malloc(LEN);scanf(“%ld,%d”,&
17、p1-num,&p1-score);P2-next=NULL;return(head);struct student *insert(struct student *ah,struct student *bh) /定义insert函数,用来合并两个链表struct student *pa1,*pa2,*pb1,*pb 2;pa2=pa1=ah;pb2=pb1=bh;do while(pb1-numpa1-num)&(pal-next!=NULL) pa2=pa1; pa1=pa1-next; If(pb1-numnum) if(ah=pa1) ah=pb1; else pa2-next=pb1
18、; pb1=pb1-next; pb2-next=pa1; pa2=pb2; pb2=pb1;while(pa1-next!=NULL)|(pa1=NULL&pb1!=NULL);If(pb1!=NULL)&(pb1-numpa1-num)&(pa1-next=NULL) pa1-next=pb1;return (ah);void print(struct student *head) /输出函数 struct student *p; printf(“n There are %d records: n”,sum); p=head; if(p!=NULL) do printf(“%ld%dn”,p-num,p-score); p=p-next; while(p!=NULL); 参考文献1张强华.C语言程序设计M.北京:人民邮电出版社,2001. 2徐新华.C语言程序设计教程M.北京:中国水利水电出版社,2001.3谭浩强.C程序设计(第四版) M.北京:清华大学出版社,2010.
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1