C程序设计很好的版本.doc_第1页
C程序设计很好的版本.doc_第2页
C程序设计很好的版本.doc_第3页
C程序设计很好的版本.doc_第4页
C程序设计很好的版本.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

HUNAN CITY UNIVERSITYC语言课程设计 报 告 课程名称: C语言课程设计 专 业: 计算机科学与技术 学生姓名: 周志强 班级学号: 1006402-07 分组成员: 曹立清、王晓洁 指导教师: 谭新良老师 C 语 言 上 机 实 习 报 告 100640207 周志强一、设计时间2011年11月 24日11月28日二、设计地点湖南城市学院1实验楼计算机机房406三、设计目的1.熟练掌握C语言的基本知识:数据类型(整形、实型、字符型、数组、结构等);运算符(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即函数的使用);预处理命令(宏定义、文件包含、条件编译)等。2.掌握各种函数的应用,包括输入输出函数、数学函数、字符操作函数、字符串操作函数、时间函数、绘图函数等。3.程序=数据结构+算法。掌握一些常用的算法,包括用辗转相除法求最大公约数;用牛顿迭代法、二分法、弦截法等求高次方程的根;用冒泡法、选择法排序;穷举法等。4.理解递归函数的运行实现过程,掌握递归程序的编写。5.学握指针的使用、学会利用位运算处理实际问题,懂得文件的基本操作。四、设计小组成员1006402-47 曹立清,1006402-07 周志强 1006402-57 王晓洁五、指导老师 谭新良老师 六、设计课题 我们组成员选取第1,7,9三题进行编程设计七、基本思路及关键问题的解决 (1)基本思路: 分析题目所要涉及的函数类型、数据类型分析数据结构及算法编写程序运行并检查程序(2)关键问题的解决:在画N-S流程图的过程中,关键是搞清程序所表达的意思,然后弄清楚当型、直当型、for以及while的流程图结构和嵌套语句在流程图中的画法。八、调试过程中出现的问题及相应解决办法 (1)调试运行中的问题 程序中有死循环;程序在等待某些输入信息,并且直到输入正确后才会得出结果;(2)解决方法在开始调试这样一个程序时,应该先检查一下程序结构,然后再按执行顺序依次查看程序的各个部分,看看它们是否能正确运行。 程序中有死循环:先检查检查一下循环结构,重新编辑运行;如果运行出错,直接关闭程序。程序在等待某些输入信息,并且直到输入正确后才会得出结果:运行程序时注意输入值的限制条件,在进行运行。九、算法及流程图 第1题流程图:开始20=N输入num输入name0=ii+1=i0=jjjN0=average0=max0=i0=sum0=jsumj=sumj+scorejavej=sumj/3j+1=jsummaxYNji输出num输出name0=j输出scorej+1=jj3i3Y输出average输出max,maxiN结束第7题流程图: 否i-;j+s=0,i=1,j=1输入n建立一个二维数组a2121for(m=0;mn;m+)for(h=0;h0;m-)for(h=0;hm;h+) 是 否i-;j+i+;j-aij=+sm%2=0 否j=j+1 i=i+1for(i=1;i=n;i+)for(j=1;jnum !=0)n=n+1T n等于1F haed=p1P2-next=p1p2=p1P1=(struct student *)malloc(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) (pb1 !=NULL)&(pb1-numTPai-num)&(pa1-next=NULL) FPa1-next=pb1返回ah十、课程设计心得体会 经过这次的课程设计我体会到拥有实的基础很关键,因为如果你平时学得就不怎么样,那么你面对这么一个比较有难度的程序,你可能会望而却步,看他人的程序都是个难点,更别说让你自己去设计。为了解决此。类问题,最好就是多向同学,老师请教,不要怕难为情。尤其是老师,评他们多年的编写程序的经验,要解决我们的问题,对他们来说只是small case。此外 我非常感谢老师们给了我们这次的课程设计,它使我更加深刻地体会到多看专业书的重要性,只有掌握了一定量的专业知识才能得心应手地解决诸多问题;另外,做任何事都要有耐心,不要一遇到困难就退缩;在学习和工作中要时刻谨记“团结”二字,它好比通向成功的铺路石,不可或缺。在这次程序中有过山穷水尽的困惑;有过柳暗花明的惊喜;有过唇枪舌剑的辩论;有过相互鼓励的安慰。一个多礼拜的时间我们经历了很多,也收获了很多。与其说它是体力与脑力的作业,不如说它是合作精神和毅力的考验。经过这次课程设计,我不仅学到了很多知识和技能,更重要的是我们学会了如何运用所学知识去解决实际问题.十一、源程序(每句语言要有详细解释)1. 学生成绩管理系统管理n个学生的成绩。每个学生包括学号NO.、姓名name、语文score1、数学score2、外语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 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,); /输入学生名字,赋值给每次循环的name for(j=0;j3;j+) /设置一个进行3次的循环printf(score %d :,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,此时,maxi为最大学生的顺序编号 average/=N; /求所有学生的平均分 printf( NO. name score1 score2 score3 averagen); for(i=0;iN;i+) printf(%5s,stui.num); /将每位学生的学号输出,占5字符 printf(%10s,); /将每位学生的姓名输出,占10字符 for(j=0;j3;j+) printf(%9d,stui.scorej); /将每位学生的分数输出,占9个字符 printf(%8.2fn,stui.ave); /输出每名学生的平均成绩 printf(average=%6.2fn,average); printf(The highest score is : %s,score total :%dn,,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行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 /*在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 print(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 student *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”,&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; 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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论