C程序设计很好的版本.docx
- 文档编号:23859358
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:14
- 大小:123.93KB
C程序设计很好的版本.docx
《C程序设计很好的版本.docx》由会员分享,可在线阅读,更多相关《C程序设计很好的版本.docx(14页珍藏版)》请在冰豆网上搜索。
C程序设计很好的版本
HUNANCITYUNIVERSITY
C语言课程设计
报告
课程名称:
C语言课程设计
专业:
计算机科学与技术
学生姓名:
周志强
班级学号:
1006402-07
分组成员:
曹立清、王晓洁
指导教师:
谭新良老师
C语言上机实习报告
1006402—07周志强
一、设计时间
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题流程图:
第7题流程图:
第9题流程图:
建立链表的N-S图
n=0
p1=p2=(structstudent*)malloc(LEN):
开辟一个新单元
输入第一个学生的学号和成绩numscore
head=NULL头指针不知想任何有用的储存单元
while(p1->num!
=0)
n=n+1
Tn等于1
F
haed=p1
P2->next=p1
p2=p1
P1=(structstudent*)malloc(LEN)
输入学生的学号和成绩scanf(“%d,%d,&p1->=num,&p1->score”)
P2->next=NULL
返回有指针所指的内容
合并链表的N-S图
Pa2=pa1=ah
Pb2=pb1=bh
While((pb1->num>pa1->num)&&(pa1->next!
=NULL)
pa2=pa1
pa1=pa1->next
Pb1指向的等号小于
T
或等于所指向的学号
F
ah=pal
T
F
ah=pb1
Pa2->next=pb1
Pb1=pb1->next
Pb2->next=pa1
Pa2=pb2;pb2=pb1
While(pa1->next!
=NULL)||(pa1==NUL:
L&&pb1!
=NULL)
(pb1!
=NULL)&&(pb1->num>
T
Pai->num)&&(pa1->next=NULL)
F
Pa1->next=pb1
返回ah
十、课程设计心得体会
经过这次的课程设计我体会到拥有实的基础很关键,因为如果你平时学得就不怎么样,那么你面对这么一个比较有难度的程序,你可能会望而却步,看他人的程序都是个难点,更别说让你自己去设计。
为了解决此。
类问题,最好就是多向同学,老师请教,不要怕难为情。
尤其是老师,评他们多年的编写程序的经验,要解决我们的问题,对他们来说只是smallcase。
此外我非常感谢老师们给了我们这次的课程设计,它使我更加深刻地体会到多看专业书的重要性,只有掌握了一定量的专业知识才能得心应手地解决诸多问题;另外,做任何事都要有耐心,不要一遇到困难就退缩;在学习和工作中要时刻谨记“团结”二字,它好比通向成功的铺路石,不可或缺。
在这次程序中有过山穷水尽的困惑;有过柳暗花明的惊喜;有过唇枪舌剑的辩论;有过相互鼓励的安慰。
一个多礼拜的时间我们经历了很多,也收获了很多。
与其说它是体力与脑力的作业,不如说它是合作精神和毅力的考验。
经过这次课程设计,我不仅学到了很多知识和技能,更重要的是我们学会了如何运用所学知识去解决实际问题.十一、源程序(每句语言要有详细解释)
1.学生成绩管理系统
管理n个学生的成绩。
每个学生包括学号NO.、姓名name、语文score1、数学score2、外语score3等信息。
输入这n个学生的信息,求出每人的平均分,打印出总分最高的学生的姓名。
#defineN3//定义一个3次循环的N
structstudent//定义"student"这个整体
{charnum[10];//定义num,装载学号,最多占10个字符
charname[10];//定义name,装载名字,最多占10个字符
intscore[4];//定义score,整形变量,装载分数,最多4个字符
floatave;//定义浮点型ave,装载一名学生的平均分
}stu[N];
main()//主函数
{inti,j,max,maxi,sum;//定义整形i,j,max,maxi,sum
floataverage;//定义浮点型average,用来装每个学生的平均分
for(i=0;i printf("Pleaseinputscoresofstudent%d: \n",i+1);//屏幕显示循环次数 printf("NO.: ");//输入循环的学生学号 scanf("%s",stu[i].num);//输入学号,赋值给每次循环的num printf("name: ");//提示输入学生名字 scanf("%s",stu[i].name);//输入学生名字,赋值给每次循环的name for(j=0;j<3;j++){//设置一个进行3次的循环 printf("score%d: ",j+1);//屏幕显示输入分数,输完后循环+1 scanf("%d",&stu[i].score[j]);//输入分数,分别赋值给每次循环的学生,P.S: 此语句一共将循环3*3=9次 } } average=0;//将average的初值设置为0,用来装每个学生的平均分 max=0;//将max的初值设置为0,用来装所有学生成绩最高的 maxi=0;//将maxi的初值设置为0,用来装最大分数学生的学号 for(i=0;i sum=0; for(j=0;j<3;j++)sum+=stu[i].score[j];//将每名学生的成绩加起来,赋值给sum,循环N次 stu[i].ave=sum/3.0;//求出每个学生的平均分,赋值给ave average+=stu[i].ave;//将每个学生的平均分加起来,赋值给average if(sum>max) {max=sum;//当sum>max时,将sum的值赋给max maxi=i;//将学生的顺序编号赋值给maxi,此时,maxi为最大学生的顺序编号 } } average/=N;//求所有学生的平均分 printf("NO.namescore1score2score3average\n"); for(i=0;i printf("%5s",stu[i].num);//将每位学生的学号输出,占5字符 printf("%10s",stu[i].name);//将每位学生的姓名输出,占10字符 for(j=0;j<3;j++)printf("%9d",stu[i].score[j]);//将每位学生的分数输出,占9个字符 printf("%8.2f\n",stu[i].ave);//输出每名学生的平均成绩 } printf("average=%6.2f\n",average); printf("Thehighestscoreis: %s,scoretotal: %d\n",stu[maxi].name,max);//将最高成绩输出 getch();//停止 } 7.打印n*n方阵: #include #include voidmain()/*打印n*n的方阵*/ { intm,n,s=0,i=1,j=1,h,a[21][21]; /*定义一个二维数组,m、n、i、j控制行列,s控制数值*/ printf("Pleaseinputn(1~20): "); scanf("%d",&n);/*输入一个1~20范围内的数*/ for(m=0;m { for(h=0;h<=m;h++) { a[i][j]=++s; if(m%2==0){i++;j--;} else{i--;j++;} } if(m%2==0)j=j+1; elsei=i+1; }/*控制行列*/ for(m=n-1;m>0;m--)/*为n维数组赋初值*/ { for(h=0;h { if(m%2==0){i--;j++;} else{i++;j--;} a[i][j]=++s; } if(m%2==0)j=j+1; elsei=i+1; }/*控制行列*/ for(i=1;i<=n;i++) { printf("\n"); for(j=1;j<=n;j++) printf("%4d",a[i][j]); }/*以n列为一行输出数组*/ getch();/*将数组输出到屏幕*/ } 9.已有a,b两个链表,每个链表中的结点包括号学号、成绩。 要求把两个链表合并,按学号升序排列。 #include #include /*在malloc.h头文件中已包含了宏定义#defineNULL0,故在程序中不必再重复定义*/ #defineLENsizeof(structstudent) structstudent { Longnum; Intscore; Structstudent*next; }; Structstudentlista,listb; intn,sum=0; voidmain() { structstudent*creat(void);//函数声明 Structstudent*insert(structstudent*,structstudent*);//函数声明 voidprint(structstudent*);//函数声明 structstudent*ahead,*bhead,*abh; printf(“inputlista: \n”); ahead=creat();//调用creat函数,输入表A sum=sum+n; printf(“inputlistb: \n”); bhead=creat();//调用creat函数,输入表B sum=sum+n; ab=insert(ahead,bhead);//调用insert函数,将两表合并 print(abh);//输出合并后的链表 } Structstudent*creat(void)//建立链表函数 { Structstudent*p1,*p2,*head; n=0; p1=p2=(structstudent*)malloc(LEN); printf(“inputnumber&scoresofstudent: \n”); printf(“ifnumberis0,stopinputing.\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=(structstudent*)malloc(LEN); scanf(“%ld,%d”,&p1->num,&p1->score); } P2->next=NULL; return(head); } structstudent*insert(structstudent*ah,structstudent*bh) //定义insert函数,用来合并两个链表 { structstudent*pa1,*pa2,*pb1,*pb2; pa2=pa1=ah; pb2=pb1=bh; do { while((pb1->num>pa1->num)&&(pal->next! =NULL)) { pa2=pa1; pa1=pa1->next; } If(pb1->num<=pa1->num) { if(ah==pa1) ah=pb1; elsepa2->next=pb1; pb1=pb1->next; pb2->next=pa1; pa2=pb2; pb2=pb1; } }while((pa1->next! =NULL)||(pa1==NULL&&pb1! =NULL)); If((pb1! =NULL)&&(pb1->num>pa1->num)&&(pa1->next==NULL)) pa1->next=pb1; return(ah); } voidprint(structstudent*head)//输出函数 { structstudent*p; printf(“\nThereare%drecords: \n”,sum); p=head; if(p! =NULL) do {printf(“%ld%d\n”,p->num,p->score); p=p->next; }while(p! =NULL); } 参考文献 [1]张强华.C语言程序设计[M].北京: 人民邮电出版社,2001. [2]徐新华.C语言程序设计教程[M].北京: 中国水利水电出版社,2001. [3]谭浩强.C程序设计(第四版)[M].北京: 清华大学出版社,2010.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 很好 版本