第一篇:C语言实习报告
C 语 言 实习报 告
系别:自动化工程系 班级:电力1201班 姓名:张浩 学号:2012110137
一、实习目的
1、目的是培养我们具有初步的C语言程序设计、编程、调试和排除C语言程序语法、逻辑错误的能力。通过实习使我们进一步熟悉并掌握C语言程序的调试运行环境、程序设计过程、程序的基本结构以及程序设计的基本方法。通过实习,使我们将程序设计的理论知识与实践相结合,为我们学习其他计算机编程语言打下基础。
2、培养自己发现程序中的错误、改正错误以使程序能正确运行的能力。不仅要了解和熟悉有关理论和方法,还要求自己动手实现,要求会编写程序并上机调试通过。
3、培养我们观察错误和分析错误的能力,并认真、及时总结。
二、实习内容
1、根据字母判断星期几
第一题:根据字母判断是星期几 #include “stdio.h” int main(){ char a1,a2;while((a1=getch())!='y')
switch(a1)
{
case'M':printf(“Mondayn”);break;
case't':printf(“please input second a2n”);
if((a2=getch())=='u')
printf(“Tuesdayn”);
else
if(a2=='h')
printf(“Thursdayn”);
else
printf(“DATA ERROR!n”);
break;
case'W':printf(“Wednesday”);break;
case'F':printf(“Friday”);break;
case'S':printf(“please input second a2n”);
if((a2=getch())=='a')
printf(“Saturdayn”);
else
if(a2=='u')
printf(“Sundayn”);
else printf(“DATA ERROR!n”);
break;
} }
2.输出正弦曲线
#define PAI 3.14159 #include
if(i==40)printf(“*”);
else printf(“-”);
printf(“n”);for(x=10.0;x<=360.0;x+=10){ y=40+30*sin(x*PAI/180.0);yy=40>y?40:y;
for(i=1;i<=yy;i++)
{if(i<(40>y?y:40))printf(“ ”);
else if(i==40)printf(“|”);
else if((i>40&&i<=y)||(i>=y&&i<=40))
printf(“-”);
}
printf(“n”);} } 通过循环实现打印出菱形 源程序
#include “stdio.h” main(){ int i,j;printf(“电力1201班张浩的第三题的运行结果:n”);for(i=1;i<=3;i++){
for(j=1;j<=6-i;j++)
printf(“ ”);
for(j=1;j<=2*i-1;j++)
printf(“*”);
printf(“n”);} for(i=2;i>=1;i--){
for(j=1;j<=6-i;j++)
printf(“ ”);
for(j=1;j<=2*i-1;j++)
printf(“*”);
printf(“n”);}
第四题:打印出金字塔型 #include “stdio.h”
int main(){
int i,j,k;
printf(“电力1201班张浩的第四题的运行结果:n”);
for(i=1;i<=9;i++){
for(j=1;j<=30-3*i;j++)
printf(“ ”);
for(k=1;k<=i;k++)
printf(“ %d”,k);
for(k=i-1;k>0;k--)
printf(“%3d”,k);
printf(“n”);}
}
五,求完全数 #include
int m,s,i;
printf(“电力1201班张浩的第五题的运行结果:n”);
for(m=2;m<=500;m++)
{s=0;
for(i=1;i if((m%i)==0)s=s+i; if(s==m) { printf(“%d ,Its factors are ”,m); for(i=1;i if(m%i==0)printf(“%d,”,i); printf(“n”); } } return 0; 六,求最大公约数最小公倍数 #include int p,r,u,v,t; printf(“电力1201班张浩的第六题的运行结果:n”); printf(“请输入两个正整数u,v:”); scanf(“%d,%d”,&u,&v); if(u { t=u; u=v; v=t; } p=u*v; while(v!=0) { r=u%v; u=v; v=r; } printf(“它们的最大公约数为:%dn”,u); printf(“它们的最小公倍数为:%dn”,p/u); return 0;} 七、递归函数求6 #include return 1;} else s=x*power(x,n-1);return s;} void main(){ int x,n;printf(“电力1201班张浩的第七题的运行结果:n”);printf(“the value of x and n:n”);scanf(“%d%d”,&x,&n);printf(“power(x.n)=%dn”,power(x,n));} 4 八、选择法排序 #include for(i=0;i<4;i++)for(j=i+1;j<5;j++){if(ch[i]>ch[j]){ temp=ch[i]; ch[i]=ch[j]; ch[j]=temp;} } for(i=0;i<5;i++) printf(“%4d”,ch[i]); } 九、杨辉三角 #include for(i=0;i<10;i++) {a[i][0]=1; a[i][i]=1; } for(i=2;i<10;i++) for(j=1;j a[i][j]=a[i-1][j-1]+a[i-1][j]; for(i=0;i<10;i++) {for(j=0;j<=i;j++) printf(“%5d”,a[i][j]); printf(“n”); } printf(“n”); return 0;} 三、实习中遇到的问题及解决办法 1、漏写标点:认真检查查出漏洞 2、程序编写错误:基础知识学习不踏实,通过翻阅课本和询问同学解决问题 3、程序调用不合理:没有好好理解每个程序语言的用途,通过上机实验得到理解 四、实习心得 为期一周的C语言实习很快就结束了,在这一周的实习中让我受益匪浅,学到了很多课本上讲解的基本知识,通过实习加深了对C语言知识的应用和理解。 在刚开始学C语言这门课的时候让我非常痛苦,开始学习的时候完全摸不着头脑,课堂上要讲授许多关于c语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。然而要使用c语言这个工具解决实际问题,又必须掌握它。所以,我非常认真地做了每道设计题,通过程序的编写渐渐理解了C语言的有关知识,并在编写程序中发现问题,解决问题,使自己对程序的设计有了更深一步的理解。 上机实验是学习程序设计语言必不可少的实践环节,特别是c语言灵活、简洁,更需要通过编程的实践来真正掌握它。对于程序设计语言的学习目的,可以概括为学习语法规定、掌握程序设计方法、提高程序开发能力,这些都必须通过充分的实际上机操作才能完成。 C语言实习很快结束了,我们知道现在人类的发展已经离不开计算机了,计算机已经深入到了人类的方方面面,因此我们要加紧学习计算机的有关知识,准确把握时机,紧跟时代的发展,做时代的领先者。 西安科技大学 《C/C++语言程序设计》 课程设计报告 题 目 院、系(部) 专业及班级 姓 名 日 期 1设计目的 设计一个职工信息管理系统,使之能提供以下功能: 1)录入职工信息并保存 2)显示所有职工信息 3)查询职工信息 4)修改职工信息并保存 5)删除职工信息 需求说明: 职工信息包括职工号、姓名、性别、出生年月、学历、职务、工资、住址、电话等,并且要求职工号不重复; 录入的职工信息要求用文件形式保存,并可以对其进行浏览、查询、修改、删除等基本操作; 职工信息的显式要求有一定的规范格式; 对职工信息应能够分别按工资及按学历两种方式进行,要求能返回所有符合条件的职工的信息; 对职工信息的修改应逐个地进行,一个职工信息的更改不应影响其他的职工记录; 所设计的系统应以菜单方式工作,应为用户提供清晰的使用提示,依据用户的选择来进行各种处理,并要求在此过程中能够尽可能的兼容用户使用过程中的异常情况。总体设计 1.该系统可以按功能进行模块划分,其模块图如下: 系统模块图 其中: 信息输入模块完成职工信息的输入功能,输入信息包括职工号、姓名、性别、出生年月、学历、职务、工资、住址、电话等; 信息浏览模块完成已录入职工信息的显示; 信息查询模块完成职工信息的查询,查询时对应有按工资查询和按学历查询两种方式; 信息修改模块完成职工信息的修改功能; 信息删除模块完成职工信息的删除功能; 菜单选择模块完成用户命令的接收,此模块也是职工信息管理系统的入口,用户所要进行的各种 操作均需在此模块中进行选择并进而调用其他模块实现相应的功能; 2.数据结构 本系统中主要的数据结构就是职工的信息,包含职工号、姓名、性别、出生年月、学历、职务、工资、住址、电话等,在处理过程中各项可以作为一个职工的不同属性来进行处理 3.程序流程 系统的执行应从功能菜单的选择开始,依据用户的选择来进行后续的处理,直到用户选择退出系统为止,其间应对用户的选择做出判断及异常处理。系统的流程图如下: 程序流程图 详细设计 对应于总体设计时的系统功能模块图,各个功能模块的处理逻辑如下: ① 信息输入模块: 打开职工信息文件; while(继续输入){ 读入职工信息; 将读入信息添加到职工信息文件中; 提示是否继续输入; } 关闭职工信息文件; ② 信息浏览模块: 打开职工信息文件; while(不到文件结束){ 从文件中顺序读出一个职工的信息; 按指定格式输出该职工的信息; } 关闭职工信息文件; ③ 信息查询模块: while(仍继续查询){ if(按工资查询){ 读入查询的职工工资条件; 打开职工信息文件; while(不到文件结束){ 顺序读出一个职工的信息; if(该职工信息的工资符合条件)输出该职工的信息; } 关闭职工信息文件; 提示共有几条符合条件的记录; } else if(按学历查询){ 读入学历查询的条件; 打开职工信息文件; while(不到文件结束){ 顺序读出一个职工的信息; if(该职工信息的学历符合条件)输出该职工的信息; } 关闭职工信息文件; 提示符合条件的记录数; } else 提示输入不合适; 提示是否继续查询; } ④ 信息修改模块: while(继续修改){ 从给出信息文件中所有的记录情况; 提示并读入待修改的记录的职工的职工号; 打开职工信息文件; 查找并读出该职工的信息到一个中间变量中; 提示并读入要针对该职工的哪个属性进行修改; 根据用户的选择提示并读入所要修改属性的新值; 在该职工的中间变量中修改刚刚读入的属性值; 提示是否确定要进行修改; 如果用户确定则将中间变量重新写回到原职工信息文件中; 关闭职工信息文件; } ⑤ 信息删除模块: while(继续删除){ 显示所有职工的信息; 提示并读入待删除的职工的职工号; 打开职工信息文件; 查找是否有符合条件的职工记录; if(有符合条件的记录){ 提示是否确认该删除操作; if(用户确认此操作){ 创建一个新的临时文件; 打开原信息文件; while(原信息文件中记录未读完){ 读出原信息文件中的下一条记录; if(此条记录不是待删除记录)写入临时文件中去; } 关闭原信息文件; 关闭临时文件; 读方式打开临时文件; 写方式重建与原信息文件同名的新信息文件; 将临时文件中的内容写入到新信息文件中去; 关闭新信息文件; 关闭临时文件; 删除临时文件; } } else 提示没有符合条件的记录存在; } ⑥ 菜单选择模块: 给出信息提示; 清屏; 绘制菜单(包含输入、显示、查询、修改、删除、退出); 提示菜单选择并读入到变量; 根据读入变量的值调用不同的模块函数; 数据结构: 性别: enum Sex{ male, female };学历 :enum Education{ high, junior, college, master, doctor};日期 :struct Date { int year;int month;int day;};职工信息:struct Info { char num[5];/* 职工号 */ char name[8];/* 姓名 */ enum Sex sex;/* 性别 */ struct Date birthday;/* 出生年月*/ enum Education education;/* 学历 */ char duty[8];/* 职务 */ double wage;/* 工资 */ char addr[12];/* 地址 */ char phone[8];/* 电话 */ }; 新疆昌吉学院 《C语言程序设计》 教学实习报告 部门:信息技术分院 专业:计算机应用技术 班级:2010高职应用 姓名: 指导教师: 《C语言程序设计》教学实习报告 2010高职应用班 一、实习时间: 2011 年 6 月 13 日至 2011 年月 17 日 二、实习地点:第一微机室 三、实习目的:(小4宋体,约150字) (1)能进一步熟悉C程序的编辑、编译、连接和运行的过程; (2)通过C语言环境下的应用实例,能有编写程序的能力,掌握编程的思路和方法,掌握C语言程序设计的基本概念和基本技能; (3)在程序调试过程中,能根据运行结果,运用相应的手段,正确地找出并解决程序中的逻辑错误; (4)可以掌握不同类型数据之间赋值的规律; (5)通过解题、程序设计和上机实践,能加深对所学概念的理解,使得理论与实践相结合的学习方法; (6)通过C语言程序设计的课程实习,我们能具有使用计算机解决相关问题的能力,为今后学习其他计算机应用课程打下较好的程序设计基础。 四、实习内容及方法: 实训一 C语言的编程环境: 1、Turbo C运行环境。 了解TC的基本环境,熟悉常用菜单项和快捷键。 2、C程序的编辑、编译、连接和运行过程。掌握C程序的运行步骤,初步了解C程序的特点。 3、VC6.0环境的熟悉,能按照软件并在软件中能够调试简单的C语言程序。实训二 C语言数据类型、运算符及表达式: 案例3:字母转换问题。本案例在执行时,将提示输入一个字母,如果输入的是小写字母,程序将输入的小写字母转换为大写字母并输出,否则按原样输出。步骤: 1、定义变量,和变量类型; 2、寻找大小写字母的 ASC||码值得关系; 3、输入输出变量。代码: 结果: 实训三 C程序的三种基本结构的应用 案例1:输入某年某月某日,判断这一天是这一年的第几天? 解题步骤: 1、定义变量年year月month、日day、和第几个月的天数总和sum; 2、定义month变量作为switch语句的测试条件; 3、从键盘上输入年、月、日的值; 4、输出这一年的第几天sum。程序分析: 输入某年某月某日,判断这一天是这一年的第几天?那么需要考虑三个变量,年,月,日。 首先,年主要要考虑的因素是否是闰年的问题。月要考虑的是那一个月的问题。因为不同月的天数不一样。日嘛,就不用说了。 还有就是,月份是一月或者二月,那么就不需要考虑是否闰年的问题,因为不需要计算二月总共多少天。 上述程序,首先是在默认闰年的情况下计算某月前面所有月的天数和,然后加上当月的零头天数,最后才是判断当月是否大于二月,如果大于二月,那么必须考虑闰年的问题,再接着判断是否闰年,如果非闰年总天数减一,是闰年不变,因为在开始计算的过程中时默认闰年的。代码: main(){ int day,month,year,sum,leap;clrscr();printf(“nplease input year,month,dayn”);scanf(“%d%d%d”,&year,&month,&day);switch(month){ case1:sum=0;break;case2:sum=31;break;case3:sum=59;break;case4:sum=90;break;case5:sum=120;break;case6:sum=151;break;case7:sum=181;break;case8:sum=212;break;case9:sum=243;break;case10:sum=273;break;case11:sum=304;break;case12:sum=334;break;default:printf(“data error”);break;} sum=sum+day;if(year%400==0||(year%4==0&&year%100!=0))leap=1;else leap=0;if(leap==1&&month>2)sum++;printf(“it is the %dth day.”,sum);getch();}_ 案例4:求200-300之间所有素数,每5个换行。程序分析:先将1挖掉(为什么?因为1不是素数)用2去除它后面的各个数,把能被2整除的数挖掉,用3去除它后面各数,把3的倍数挖掉,用循环体分别将4、5„各数作为除数去除这些数以后的各数。直到除数后面的数已全部挖掉为止 代码: main(){ int i,j,n=0;clrscr();for(i=200;i<=300;i++){ for(j=2;j<=i;j++)if(i%j==0)break;if(j>=i){ printf(“%4d”,i);n++;} if(n%5==0)printf(“n”);} getch();}_ 案例8:打印输出九九乘法表。解题步骤: 1、定义行变量、列变量。 2、循环输出行乘列的值。 3、每行最后输出一个换行符。程序分析: 两个循环嵌套时,第一个循环语句为外循环,第二个循环语句为内循环,外循环执行一次,内循环从头到尾执行一遍(可能执行多次循环体),因此本题的执行次数为:1+2+3+4+5+6+7+8+9=45次。 代码: 结果: 实训四 数组的定义和使用: 案例 3、打印杨辉三角,输出前10行数据。解题步骤:(1)定义变量; (2)确定数组的行与列;(3)FOR循环给数组赋值。(4)输出这个数组。程序分析: 杨辉三角是(a+b)的n次幂的展开式系数,如:(a+b)系统数是1 1(a+b)2展开后的系数是 1 2 1(a+b)3展开后的系数是 1 3 3 1 从而得到杨辉三解的系数规律(指数为n): 1、共有n+1组系数,且第K组(从0)开始有K+1个数。 2、每组最后一位与第一位均为1 3、若用二维数组存放系数,每行存放一组,则从第二行开始除最后一个数与第一个数外,每个数都是其所在行的前一行同一列与前一列之各。代码: #include “stdio.h” main(){ int i,j,a[10][10];for(i=0;i<10;i++)for(j=0;j<10;j++)a[i][j]=0;for(i=0;i<10;i++){ a[i][0]=1;a[i][i]=1;} 6 for(i=0;i<10;i++){ for(j=0;j<10;j++)printf(“%d ”,a[i][j]);printf(“n”);} 结果: 实训五 函数的应用: 案例3:用函数和递归实现求n!程序分析: (1)首先在有限递归中,必须有一个测试避免递归调用的条件,即当满足该条件时,不再递归。而在递归函数中,应该是先测试,后进行递归调用。在本例中,if语句就是这种测试条件,当n等于0时,则不再递归,即退出该递归函数。 (2)在递归函数中,至少要有一个递归调用的语句,并且该语句的参数应该逐渐逼近递归结束的条件。其中,该语句参数n-1是逐次减1,当n为0时,则不再调用递归函数。 (3)完成该递归函数。 代码: 结果: 实训六 指针的应用 案例1:分析并对比如下2个程序,写出运行结果,并上机验证。 1.1 main(){int *p1,*p2,*p,a,b;a=5;b=9;p1=&a;p2=&b;if(a a=5 , b=9 Max=9 , min=5 五、结论(小4宋体,约1500字) 1、收获: (1)通过C语言实训,让我加深了对C语言的了解,而不只是单单的在课本中学到的那些理论,平时乏味的课程,通过自己动手亲自编写,变的生动有趣,而在自己动手的过程中,出现的问题很多,当一个程序写完以后,经常会有很多错误。不过,通过这几天的实训和小组讨论,逐渐让自己积攒了一些经验,有些错误可以很快就看出来。 (2)这次实训让我对C语言有了更深的认识,平时在课堂上学到的东西可以自己动手编写,将其转化成一些实用的技能。如果是一个程序写完一处错误也没有,会有种成就感,于是兴趣就来了,兴趣来了,自然学的东西也就多了,能把理论变成实际的技能,让我对C语言有了较多的兴趣和更深层的认识。 (3)C语言是一个有序的学习,学了最基本的替换,然后扩展到循环,嵌 8 套,条理很清楚,不是一个零散的知识,而是一门较有逻辑思维能力培养的学科。 2、不足: (1)通过实训我也知道了自己的不足,存在的很多问题。比如自己写的写的小程序出了问题,不会解决了就叫同组的帮忙,虽然说一定意义上增加了同学之间的感情,但是会养成一种依赖的心理,碰到问题了个想到的是求助而不是自己独立解决,所以以后要多多锻炼自己的信心和增加自己的能力,争取做到没有别人帮助的时候也可以完成一些简单的程序编写与错误排除。 (2)还有自己的基础知识不扎实,遇到的问题,没有很好的逻辑思维,亲自编写一个陌生的程序的时候会有种无法下手的感觉,找不到突破口。通过实训,逐渐理清了顺序,对于简单的程序和一些相对比较繁琐的嵌套,循环,不在是看着一头雾水。其实只要理清了思路,把基础知识掌握了,然后有条不紊的分析,一步一步理解,感觉C语言还是很有意思的课程。 (3)自己亲自动手编写程序让我增加了对C语言程序开发环境的了解,在上课的时候老师就讲,学习C语言最重要的是学习C语言的逻辑思维,不管以后从事什么行业,学习C语言都对自己的职业很有帮助,如果是从事编程工程工作的话,就更有帮助了,即使以后的编程工作可能不用C语言,但是拥有扎实的C语言基础是对工作很有用的。当初在初步接触C语言的时候,看着一堆“奇形怪状”的符号,觉得甚是无聊,通过这次实训,摆脱了那种似懂非懂的状态! 六、致谢 感谢学校安排这次实训和老师的耐心讲解,让我学到了很多知识,在实训过程中,同学之间的相互探讨,老师的循循善诱,最终让我们达到了举一反三的效果,在学知识的同时,也增加了同学老师之间的感情。希望以后还会有更多类似的实训课程,在有限的大学时间内学到更多的实用技能,为以后的工作打下一个良好的基础。 C 语 言 课 程 实习报 告 所 在 院 系 :经济管理学院 班 级 学 号 :083081 学 序 号 : 20081003628 姓 名 :胡雅雯 程序 已存档 : 指 导 老 师 :__赵 曼____ 评 分 :____________ 二零一零年一月十五日 题目:一担挑游戏 简单计算机模拟棋盘对奕,其中棋盘左上角坐标为(1,1),右下角坐标为(3,3),游戏规则如下:(1)计算机移动时,使用相应函数扫描棋盘矩阵,寻找未占单元,发现空单元后,置为”O”,未发现时,报告平局后退出。 (2)轮到对奕者时,使用相应函数要求对奕者回答想把“X”放在哪里。(3)谁先三点连成一线则报告谁胜出。 (4)计算机与对奕者每下一步棋都会使相应位置变为“O”与“X”,便于在屏幕上显示矩阵。 提示:棋盘位置用二维数组代表,初始位置每一位都置为““空,其分割线可用——或||来分割。 分析: 应有计算机和用户各自选择位置的函数,能通过键盘选择位置。 详细设计: 1 主函数 棋盘的初始化由主函数赋予初值,计算机和用户的每一步都由函数来确定,并由主函数调用。判断赢家时由主函数调用核对函数,并显示最终棋盘格局。 int main(void){ char done; printf(“This is the game of Tic Tac Toe.”); printf(“you will be playing against the computer.n”); done=' '; init_matrix();do { disp_matrix(); get_player_move(); done=check();/*see if winner*/ if(done!=' ')/*winner!*/ break; get_computer_move(); done=check();/*see if winner*/ } while(done==' '); if(done=='X') printf(“You won!n”); else printf(“I won!!n”); disp_matrix();/*show final positions*/ getchar(); return 0;} 2 公共函数 (1)计算机 void get_computer_move(void)/*使计算机走一步*/ { int i,j; for(i=1;i<4;i++){ for(j=1;j<4;j++) if(matrix[i][j]==' ') break; if(matrix[i][j]==' ')break;} if(i*j==16){ printf(“drawn”); exit(0);} else matrix[i][j]='0';}(2) 玩家 void get_player_move(void)/*玩家走一步*/ { int x,y;printf(“Enter X,Y coordinates for your move:”);scanf(“%d%*c%d”,&x,&y);//x--;y--;if(matrix[x][y]!=' '){ printf(“Invalid move, try again.n”);/*所选位置已被计算机占据,则重新选择*/ get_player_move();} else matrix[x][y]='X';/*被选中的位置置为“X“*/ }(3)disp_matrix(void)void disp_matrix(void){ int t;for(t=1;t<4;t++){ printf(“%c |%c |%c ”,matrix[t][1],matrix[t][2],matrix[t][3]);if(t!=3)printf(“n--|--|--n”);} printf(“n”);}(4)init_matrix(void) void init_matrix(void)/* initialize the matrix.*/ { int i,j; for(i=1;i<4;i++) for(j=1;j<4;j++) matrix[i][j]=' ';} (5)核对函数 char check(void)/*是否出现赢家*/ { int i;for(i=1;i<4;i++)/*check rows*/ if(matrix[i][1]==matrix[i][2]&&matrix[i][1]==matrix[i][3]) return matrix[i][1];/*横行*/ for(i=1;i<4;i++)/*check columns*/ if(matrix[1][i]==matrix[1][i]&&matrix[1][i]==matrix[3][i]) return matrix[1][i];/*竖行*/ for(i=1;i<4;i++)/*check diagonals*/ if(matrix[1][1]==matrix[2][2]&&matrix[1][1]==matrix[3][3]) return matrix[1][1];/*斜行*/ for(i=1;i<4;i++) if(matrix[1][3]==matrix[2][2]&&matrix[2][2]==matrix[3][1]) return matrix[1][3];/*斜行*/ return ' ';/*返回值*/ } 运行结果 主菜单函数 人机各走一步后 选择被占位置 计算机赢家 用户赢家 显示最终格局 总结: 通过该实例的学习,我初步掌握了开发一个小型实用系统的基本法,学会了调试较长程序和利用流程图表示算法,进一步掌握和提高了C语言进行程序设计的能力.附录 5、/*一担挑游戏 */ #include “stdio.h” #include “stdlib.h” char matrix[3][3];/*the tic tac toe matrix*/ char check(void);void init_matrix(void);void get_player_move(void);void get_computer_move(void);void disp_matrix(void);int main(void){ char done;printf(“This is the game of Tic Tac Toe.”);printf(“you will be playing against the computer.n”);done=' ';init_matrix();do { disp_matrix();get_player_move();done=check();/*see if winner*/ if(done!=' ')/*winner!*/ break;get_computer_move();done=check();/*see if winner*/ } while(done==' ');if(done=='X')printf(“You won!n”);else printf(“I won!!n”);disp_matrix();/*show final positions*/ getchar();return 0;} /* initialize the matrix.*/ void init_matrix(void){ int i,j;for(i=0;i<3;i++)for(j=0;j<3;j++)matrix[i][j]=' ';} /*get a player's move.*/ void get_player_move(void){ int x,y;printf(“Enter X,Y coordinates for your move:”);scanf(“%d%*c%d”,&x,&y);x--;y--;if(matrix[x][y]!=' '){ printf(“Invalid move, try again.n”);get_player_move();} else matrix[x][y]='X';} /*get a move from the computer*/ void get_computer_move(void){ int i,j;for(i=0;i<3;i++){ for(j=0;j<3;j++)if(matrix[i][j]==' ')break;if(matrix[i][j]==' ')break;} if(i*j==9){ printf(“drawn”);exit(0);} else matrix[i][j]='0';} /*display the matrix on the screen*/ void disp_matrix(void){ int t;for(t=0;t<3;t++){ printf(“%c |%c |%c ”,matrix[t][0],matrix[t][1],matrix[t][2]);if(t!=2)printf(“n--|--|--n”);} printf(“n”);} /*see if there is a winner.*/ char check(void){ int i;for(i=0;i<3;i++)/*check rows*/ if(matrix[i][0]==matrix[i][1]&&matrix[i][0]==matrix[i][2])return matrix[i][0];for(i=0;i<3;i++)/*check columns*/ if(matrix[0][i]==matrix[1][i]&&matrix[0][i]==matrix[2][i])return matrix[0][i];for(i=0;i<3;i++)/*check diagonals*/ if(matrix[0][0]==matrix[1][1]&&matrix[0][0]==matrix[2][2])return matrix[0][0];for(i=0;i<3;i++)if(matrix[0][2]==matrix[1][1]&&matrix[1][1]==matrix[2][0])return matrix[0][2];return ' ';} 课程设计心得 通过这次课程设计才真正实践编程明白编程是一件很细致的事情需要不断的深入的仔细研究,尤其是发现程序运行不了的时候,需要找错误是一件很麻烦的事,但是运行出来的时候的喜悦将这一切又全部忘记了,在此次实践当中正是老师和同学的不断帮助才使我不断提高。作为新时代的大学生,我们就是要在不断实践不断研究中不断地提高自己的能力,如今的社会日新月异,知识信息高速发展,而作为这个时代的标志,计算机更是一个飞速更新的东西,也可能c语言几年后就会被淘汰,所以这就要求我们不仅要掌握现有的知识,还要不断和时代的进步发展相结合,不仅要掌握现有的知识更重要的是学会迅速上手每个出现的新事物,从整体的视角把握新时代的脉搏.知识只是把书本和表象摄入底片的照相机,能力才是洞穿事物的本质和内核的透视仪,所以善于抓住一切机会积极实践,努力提高自己的能力,这才是最重要的。 目 录 一、前言„„„„„„„„„„„„„„„„„„„„„„„„„2 二、引言„„„„„„„„„„„„„„„„„„„„„„„„„2 2.1系统开发工具„„„„„„„„„„„„„„„„„„„„ 2 2.2实习目的„„„„„„„„„„„„„„„„„„„ 3 2.3实习基本内容与要求„„„„„„„„„„„„„„„„„3 2.4实习时间安排„„„„„„„„„„„„„„„„„„„„ 3 2.5实习地点„„„„„„„„„„„„„„„„„„„„„„ 3 2.6实习内容„„„„„„„„„„„„„„„„„„„„„„„„„„„ 3 三、学生成绩管理系统分析„„„„„„„„„„„„„„„„„3.1系统概况„„„„„„„„„„„„„„„„„„„„„„4 3.2需求分析„„„„„„„„„„„„„„„„„„„„„„4 3.3总体功能要求„„„„„„„„„„„„„„„„„„„„5 3.3.1总体功能模块„„„„„„„„„„„„„„„„„„ 5 3.3.2各函数的功能和实现„„„„„„„„„„„„„„„„ 6 3.3.3各部分流程图„„„„„„„„„„„„„„„„„„„„„„„ 6 3.3.4性能要求„„„„„„„„„„„„„„„„„„„„„„„„„ 8 四、详细设计„„„„„„„„„„„„„„„„„„„„„„„8 4.1关键部分的代码、说明及运行结果图„„„„„„„„„„„„„„„8 1、全局定义部分„„„„„„„„„„„„„„„„„„„„„8 2、主程序部分„„„„„„„„„„„„„„„„„„„„„„8 3、输入信息部分„„„„„„„„„„„„„„„„„„„„„10 4、输出信息部分„„„„„„„„„„„„„„„„„„„„„12 5、排序部分„„„„„„„„„„„„„„„„„„13 6、插入信息部分„„„„„„„„„„„„„„„„„„14 7、删除部分„„„„„„„„„„„„„„„„„„15 4.2总程序„„„„„„„„„„„„„„„„„„„„„„„„16 五、实习心得体会„„„„„„„„„„„„„„„„„„„„„24 六、附录:参考文献„„„„„„„„„„„„„„„„„„„„25 一、前言 随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。作为计算机应用的一部分,使用计算机对学生成绩信息进行管理,具有手工管理所无法比拟的优点。例如,检索迅速,查找方便,可靠性高,存储量大,保密性好,寿命长,成本低等。这些优点能极大地提高学生档案管理的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件。因此,开发学生成绩管理系统很有必要。 学生成绩管理系统是为了适应现代化学校的管理,加快推进数字化校园的建设、充分利用校园网,利用网络、多媒体等计算机应用技术和手段,提高办公效率、改善质量的高效管理学校系统。 学生成绩管理系统是系科综合管理系统的重要组成部分,为学校学生层面的管理提供了一个有用的数字化学生成绩管理系统的工具,在学校学生管理中起着举足轻重的作用。 为了培养自己正确的程序设计思想,使平时学习的理论联系实际,培养自己严肃认真,实事求是的科学态度和勇于探索的创新精神,培养自己综合运用所学知识与实践经验,分析和解决相应领域的工程技术问题或进行软件项目开发的能力。学院依照课程教学大纲和课程设计大纲提出了本次课程设计的题目及要求。 要求掌握C程序的基本结构和C语言基本的数据结构,熟悉C程序的编辑、编译、调试和运行过程,了解程序设计的一般方法、结构化程序设计的思想,熟悉算法的描述工具—N—S流程图的使用及常用算法,能够熟练地阅读用C语言编写的程序,能够运用结构化程序设计编写C程序。 二、引言 2.1系统开发工具简介 WIN-TC是一个TC2 WINDOWS平台开发工具。该软件使用TC2为内核,提供WINDOWS平台的开发界面,因此也就支持WINDOWS平台下的功能,例如剪切、复制、粘贴和查找替换等。而且在功能上也有它的独特特色例如语法加亮、C内嵌汇编、自定义扩展库的支持等。并提供一组相关辅助工具 令你在编程过程中更加游刃有余,如虎添翼。本软件用于编写C语言程序。2.2实习目的 进一步加深、巩固所学专业课程(《C语言程序设计》)的基本理论知识,理论联系实际,进一步培养自己综合分析问题和解决问题的能力。掌握运用C语言独立地编写、调试应用程序和进行其它相关设计的技能。 使学生在掌握C语言的基本语法的基础上,能够更好的理解和运用其解决实际问题。在实践实习操作中让学生对结构化程序设计有更进一步深刻的认识与了解,提高学生的实践操作能力。2.3、实习基本内容与要求: 用链表实现简单的学籍管理 1、总体功能要求 (1)链表的建立:每个节点包括:学号、姓名、性别、语文、数学、英语、总分; (2)节点的插入:按学号的顺序插入;(3)删除链表中的节点:按学号或者姓名;(4)链表的输出:按学号排序、按总分排序。 2、性能的要求: (1)各个功能分别用函数实现;(2)节点信息让用户通过键盘输入;(3)总分通过计算获得;(4)有简单的操作界面; (5)尽可能考虑程序的容错性、可操作性。 3、写实习报告以及心得体会 2.4实习时间安排 2011年7月12日 在服务器上下载应用程序、实习报告模板,练习书本第11章的例题 2011年7月13日 在自己的机器上程序设计 2011年7月14日 程序设计 2011年7月15日 撰写实习报告及心得体会 2011年7月16日 交实习报告 2.5 实习地点:c1 2楼机房 2.6实习内容 对学生信息(包括姓名、学号、语文、数学、英语、平均分、总分)进行管理,包括学生成绩的信息输入、输出、查询、删除、排序、退出、保存.将学生的成绩信息进行记录,信息内容包含:(1)学生的学号(2)学生的姓名(3)学生的成绩。假设,现收集到了一个班学生的所有成绩信息,要求用C语言编写一个简单的成绩管理系统,可进行录入、查询、修改、排序和浏览等功能。学习相关开发工具和应用软件,熟悉系统建设过程。 三、学生成绩管理系统分析 3.1系统概况 本次实习是通过建立一个学生学籍管理系统来更好的认识和掌握C语言中链表这一重要的知识内容.本系统实现的功能如下: 1.创建学生学籍信息,每个学生学籍信息包括:学号、姓名、语文、数学、英语、平均分、总分; 2.插入信息:按照学号由小到大的循序插入信息; 3.查找信息:通过选择按照学号或者姓名来查找到该学生的信息; 4.删除信息:通过选择按照学号或者按照姓名删除某个学生学籍信息; 5.输出信息:通过选择按学号(由小到大)或者总分(由小到大)或者平均分(由小到大)来输出信息; 6.保存信息:对学生学籍系统中的信息以记事本的学生进行保存。 本系统的亮点是在运用模块来组建该学生学籍管理系统,也就是说各个功能以模块的实现,通过主函数来调用模块,实现管理功能,这样程序结构清晰,容易检查到错误所在模块,减少了调试的压力。其次,是运用结构体来组织数据,数据结构规范,通过指针的操作很容易实现简单的查找、删除、输出等操作。最后,容错性较好,比如输入成绩输入时按照我们百分制输入,必须输入1-100之间的数字,如果输入的不是1-100中的数据,在系统将显示信息错误信息,要求重新输入。 软件配备:TurboC2.0,Windows 2000/20003/xp等; 硬件配备:内存:512MB及以上; 外存:60GB及以上; CPU: 奔4及以上; 3.2需求分析 1、用C语言实现系统; 2、对学生信息(包括学号、姓名、语文、数学、英语、平均分)进行管理,包括学生成绩的信息输入、输出、查询、删除、排序、统计、退出.3、学生信息包括:其内容较多,为了简化讨论,要求设计的管理系统能够完成以下功能: (1)、每一条记录包括一个学生的学号、姓名、3门课成绩 (2)、成绩信息录入功能:(成绩信息用文件保存,可以一次完成若干条记录的输入。)(3)、成绩信息显示浏览功能:完成全部学生记录的显示。(4)、查询功能:完成按姓名查找学生记录,并显示。(5)、成绩信息的删除:按学号进行删除某学生的成绩.(6)、排序功能:按学生平均成绩进行排序。 (7)、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观!3.3总体功能要求 3.3.1总体功能模块 学生成绩管理信息系统的主界面,包括六个内容:信息输入,信息输出,信息删除,信息的排序,信息的查找和信息的保存。 信息输入包括创建信息和信息添加:其中创建的学生信息包括学生的学号,姓名,性别以及语文,数学,英语三门课程的成绩。信息添加的内容也是创建的所有学籍信息。 信息删除是按照学生的学号进行删除。 信息的排序也可以分为三种方法进行:一是按照学号进行排序,二是根据学生语文、数学、英语三门课程的总分进行排序,三是根据学生语文、数学、英语三门课程的平均分进行排序。 信息的查找时按照学生的学号进行查找。 信息的保存是通过程序与文件的链接进行的,可以直接将学生成绩以记事本的形式保存到指定文件夹中。 总 体 功 能 模 块 图 3.3.2各函数的功能和实现 1、输入初始的学生信息:输入信息包括学生的姓名、学号以及学生的成绩等相关信息;可用函数void input(STUDENT *data, int *len)来实现此操作。 2、成绩输出模块:输出学生的信息以及成绩void output(STUDENT *data, int len):通过学生的姓名来查看学生的相关成绩,同时也可以分别通过caverage()、maverage()、eaverage()和comaverage()来输出成绩的平均分数、最高和最低分数。 3、成绩查询模块:可用void find(STUDENT *data, int len)来实现。找到就输出此学生全部信息。 4、删除模块:用函数void delete_item(STUDENT *data, int *len)来实现 5、排序模块:用函数void sort(STUDENT *data, int len)来实现 6、统计功能能:用函数void stat(STUDENT *data, int len)来实现 7、退出系统:可用一个函数exit()来实现,首先将信息保存到文件中,释放动态创建的内存空间,再退出此程序。 3.3.3各部分流程图 1.学生信息输入流程图 2.学生信息输出流程图 3.删除的流程图 4.插入信息的流程图 5.对信息的排序流程图 3.3.4性能要求 1、功能分别用函数实现; 2、信息让用户通过键盘输入; 3、通过计算获得; 4、简单的操作界面; 5、可能考虑程序的容错 四、详细设计 4.1关键部分的代码、说明及运行结果图 1、全局定义部分 #include 2、主程序部分 main()/*主函数*/ {struct student *head,*stu;long del_num;int N;a: printf(“The student information management system n”);printf(“n(LIST)n”);printf(“ 1.Create a new namelistn”);printf(“ 2.Print the namelistn”);printf(“ 3.Delete a record from the namelistn”);printf(“ 4.insert a recordn”);printf(“ 5.sort the programmen”);printf(“ 0.exit the programmen”);printf(“please enter the number:”);scanf(“%d”,&N);switch(N){case 0:exit(0);goto end;case 1: printf(“input records:n”);head=creat();print(head);break;case 2: print(head);break;case 3: printf(“ninput the delete number :”);scanf(“%1d”,&del_num);while(del_num!=0){head=del(head,del_num);print(head);printf(“ninput the deleted number:”);scanf(“%1d”,&del_num);}break;case 4: printf(“ninput the insert record:”);stu=(struct student *)malloc(LEN);printf(“nplease input number :”);scanf(“%ld”,&stu->num);printf(“please input name”);scanf(“%s”,&stu->name);printf(“please choose sex(f or m):”);scanf(“%s”,&stu->sex);printf(“please input chinese score:”);scanf(“%d”,&stu->chinese);printf(“please input maths score:”);scanf(“%d”,&stu->maths);9 printf(“please input english score:”);scanf(“%d”,&stu->english);while(stu->num!=0){head=insert(head,stu);print(head);printf(“ninput theinsert record:”);stu=(struct student*)malloc(LEN);printf(“nplease input number:”);scanf(“%ld”,&stu->num);printf(“please input name:”);scanf(“%s”,&stu->name);printf(“please choose sex(f or m):”);scanf(“%s”,&stu->sex);printf(“please input chinese score:”);scanf(“%d”,&stu->chinese);printf(“please input maths score:”);scanf(“%d”,&stu->maths);printf(“please input english score:”);scanf(“%d”,&stu->english);break;case 5: head=sort(head);print(head);break; }goto a;end:;} } 3、输入信息部分 /*输入数据*/ scanf(“%ld”,&p1->num);if(p1->num!=0){ a: printf(“Input student's name: ”);scanf(“%s”,&p1->name);b: printf(“Input student's sex(f or m): ”);scanf(“%s”,&p1->sex);c: printf(“Input chinese score: ”);scanf(“%d”,&p1->chinese);if(p1->chinese>100||p1->chinese<0)/*验证成绩是否在0——100之间*/ {printf(“Please enter a number between 0 to 100!n”);10 goto c;} d: printf(“Input math score: ”);scanf(“%d”,&p1->math);if(p1->math>100||p1->math<0){printf(“Please enter a number between 0 to 100!n”);goto d;} e: printf(“Input english score: ”);scanf(“%d”,&p1->english);if(p1->english>100||p1->english<0){printf(“Please enter a number between 0 to 100!n”);goto e;} } 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);printf(“nInput student's number(press 0 to exit): ”);scanf(“%ld”,&p1->num);if(p1->num!=0){printf(“Input student's name: ”);scanf(“%s”,&p1->name);printf(“Input student's sex(f or m): ”);scanf(“%s”,&p1->sex);printf(“Input Chinese score: ”);scanf(“%d”,&p1->chinese);if(p1->chinese>100||p1->chinese<0){printf(“Please enter a number between 0 to 100n”);/*绩是否在0——100之间*/ goto c;} printf(“Input math score: ”);scanf(“%d”,&p1->math);if(p1->math>100||p1->math<0){printf(“Please enter a number between 0 to 100n”);/*是否在0——100之间*/ 11 验证成验证成绩 goto d;} printf(“Input english score: ”);scanf(“%d”,&p1->english);if(p1->english>100||p1->english<0){printf(“Please enter a number between 0 to 100n”);goto e;} } } p2->next=NULL;return(head);} 输入界面如下: 4、输出信息部分 /*输出链表*/ void print(struct student *head){ struct student *p;printf(“n=============Student information=============n”);printf(“nthe %d recrods are:n”,n);printf(“| NO.| Name | Sex |Chi |math|Eng | sum|n”);printf(“|----------|--------|-----|----|----|----|------|n”);p=head;if(p!=NULL)do { p->sum=p->chinese+p->math+p->english;/*求总分赋给totalscorescore*/ /*输出各项值*/ 12 printf(“|%10ld|%8s|%5s|%4d|%4d|%4d|%6d|n”, p->num, p->name,p->sex,p->chinese,p->math, p->english,p->sum);p=p->next;/*将p原来指向的节点中next的值赋给p,使p指向第下一个节点*/ p->sum=NULL;/*将总分totalscorescore赋空地址*/ }while(p!=NULL);else printf(“nNo recordsn”);printf(“===============END====================n”);} 5、排序部分 struct student *sort(struct student *head)/*{int i=0;struct student *p,*q,*t,*h1;h1=head->next;head->next=NULL;while(h1!=NULL){t=h1;h1=h1->next;p=head;q=head;while(t->total>p->total&&p!=NULL){q=p;p=p->next;} if(p==q){t->next=p;head=t;} else {t->next=p;q->next=t;} } p=head;while(p!=NULL){i++;p->order=i;p=p->next;} printf(“sort sucess!n”);return(head);} 如按总分排序,界面如下: 排序函数*/ 按学号排序,界面如下: 6、插入信息部分 /*插入结点函数*/ struct student *insert(struct student *head,struct student *stud){struct student *p0,*p1,*p2;p1=head;p0=stud;if(head==NULL){head=p0;p0->next=NULL;} else {while((p0->num>p1->num)&&(p1->next!=NULL)){p2=p1;p1=p1->next;} if(p0->num<=p1->num){if(head==p1)head=0;else p2->next=p0;14 p0->next=p1;} else {p1->next=p0;p0->next=NULL;} } n=n+1;p1->order=n;return(head);} 7、删除部分 /*删除节点*/ struct student *del(struct student *head,long num)/*参数为起始地址head和学号number*/ { struct student *p1,*p2;if(head==NULL){printf(“nlist null!n”);} p1=head;while(num!=p1->num&&p1->next!= NULL)/**p1指向的不是所要找的节点,并且后面还有节点*/ { p2=p1;p1=p1->next;/**p1后移一个节点*/ } if(num==p1->num){ if(p1==head)head=p1->next;/*若p1指向的是头节点,把第二个节点地址赋予head*/ else p2->next=p1->next;/*否则将下一节点地址赋给前一节点地址*/ printf(“delete:%ldn”,num);n=n-1;} else printf(“%ld not been found!n”,num);/*找不到该节点*/ return(head);} 界面如下:删除后 4.2、总程序 #include int n;/*n为全局变量,定义为节点个数*/ /*创建链表,带回一个指向链表头的指针*/ struct student *creat(vonum){ struct student *head;struct student *p1,*p2;n=0;p1=p2=(struct student*)malloc(LEN);/*开辟一个新单元*/ 16 printf(“nInput student's number:(press 0 to exit)”);/*输入数据*/ scanf(“%ld”,&p1->num);if(p1->num!=0){ a: printf(“Input student's name: ”);scanf(“%s”,&p1->name);b: printf(“Input student's sex(f or m): ”);scanf(“%s”,&p1->sex);c: printf(“Input chinese score: ”);scanf(“%d”,&p1->chinese);if(p1->chinese>100||p1->chinese<0)/*验证成绩是否在0——100之间*/ {printf(“Please enter a number between 0 to 100!n”);goto c;} d: printf(“Input math score: ”);scanf(“%d”,&p1->math);if(p1->math>100||p1->math<0){printf(“Please enter a number between 0 to 100!n”);goto d;} e: printf(“Input english score: ”);scanf(“%d”,&p1->english);if(p1->english>100||p1->english<0){printf(“Please enter a number between 0 to 100!n”);goto e;} } 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);printf(“nInput student's number(press 0 to exit): ”);scanf(“%ld”,&p1->num);if(p1->num!=0){printf(“Input student's name: ”);17 scanf(“%s”,&p1->name);printf(“Input student's sex(f or m): ”);scanf(“%s”,&p1->sex);printf(“Input Chinese score: ”);scanf(“%d”,&p1->chinese);if(p1->chinese>100||p1->chinese<0){printf(“Please enter a number between 0 to 100n”);/*验证成绩是否在0——100之间*/ goto c;} printf(“Input math score: ”);scanf(“%d”,&p1->math);if(p1->math>100||p1->math<0){printf(“Please enter a number between 0 to 100n”);/*是否在0——100之间*/ goto d;} printf(“Input english score: ”);scanf(“%d”,&p1->english);if(p1->english>100||p1->english<0){printf(“Please enter a number between 0 to 100n”);goto e;} } } p2->next=NULL;return(head);} /*输出链表*/ void print(struct student *head){ struct student *p;printf(“n=============Student information=============n”);printf(“nthe %d recrods are:n”,n);printf(“| NO.| Name | Sex |Chi |math|Eng | sum|n”);printf(“|----------|--------|-----|----|----|----|------|n”);p=head;if(p!=NULL)do { p->sum=p->chinese+p->math+p->english;/*求总分赋给totalscorescore*/ /*输出各项值*/ 18 验证成绩 printf(“|%10ld|%8s|%5s|%4d|%4d|%4d|%6d|n”, p->num, p->name,p->sex,p->chinese,p->math, p->english,p->sum);p=p->next;/*将p原来指向的节点中next的值赋给p,使p指向第下一个节点*/ p->sum=NULL;/*将总分totalscorescore赋空地址*/ }while(p!=NULL);else printf(“nNo recordsn”);printf(“===============END====================n”);} /*删除节点*/ struct student *del(struct student *head,long num)/*参数为起始地址head和学号number*/ { struct student *p1,*p2;if(head==NULL){printf(“nlist null!n”);} p1=head;while(num!=p1->num&&p1->next!= NULL)/**p1指向的不是所要找的节点,并且后面还有节点*/ { p2=p1;p1=p1->next;/**p1后移一个节点*/ } if(num==p1->num){ if(p1==head)head=p1->next;/*若p1指向的是头节点,把第二个节点地址赋予head*/ else p2->next=p1->next;/*否则将下一节点地址赋给前一节点地址*/ printf(“delete:%ldn”,num);n=n-1;} else printf(“%ld not been found!n”,num);/*找不到该节点*/ return(head);} /*插入节点*/ struct student *insert(struct student *head,struct student *stud)/*stud是一个指针变量,从实参传来待插入节点的地址给stud*/ { struct student *p0,*p1,*p2;p1=head;/*使p1指向第一个节点*/ p0=stud;/*p0指向要插入的节点*/ if(head==NULL)/*原来的链表是空表*/ {head=p0;p0->next=NULL;/*使p0指向的节点作为头节点*/ 19 } else { while((p0->num>p1->num)&&(p1->next!=NULL)){ p2=p1;/*使p2指向刚才p1指向的节点*/ p1=p1->next;/*p1后移一个节点*/ } if(p0->num num){ if(head==p1)head=p0;/* else p2->next=p0;/* p0->next=p1;} else {p1->next=p0;p0->next=NULL;} /* } n=n+1;/*节点数加1*/ return(head);} /*exchange the element of chain*/ void swap(struct student* q1,struct student* q2){long temp_num;char temp_name;char temp_sex[10];int temp_chinese;int temp_math;int temp_english;int temp_sum;char s1[20]; temp_num=q1->num;q1->num=q2->num;q2->num=temp_num; strcpy(s1,q1->name);strcpy(q1->name,q2->name);strcpy(q2->name,s1); temp_sex[10]=q1->sex[10];q1->sex[10]=q2->sex[10];q2->sex[10]=temp_sex[10]; 插到原来第一个节点之前*/ 插到p2指向的节点之后*/ 插到最后的节点之后*/ temp_chinese=q1->chinese;q1->chinese=q2->chinese;q2->chinese=temp_chinese; temp_english=q1->english;q1->english=q2->english;q2->english=temp_english; temp_math=q1->math;q1->math=q2->math;q2->math=temp_math; temp_sum=q1->sum;q1->sum=q2->sum;q2->sum=temp_sum;} /*sort by num*/ struct student * sort_num(struct student* head){struct student *p0,*p1,*p2;p0=head;do{ p1=p0;p2=p1;do{ if(p1->num>p2->num)p1=p2;p2=p2->next;}while(p2!=NULL);if(p1!=p0)swap(p0,p1);p0=p0->next;}while(p0!=NULL);return(head);} /*sort by totalscore form high to low*/ struct student * sort_sum(struct student* head){struct student *p0,*p1,*p2;p0=head;do{ p1=p0;p2=p1;do{ if(p1->sum sum)p1=p2;21 p2=p2->next;}while(p2!=NULL);if(p1!=p0)swap(p0,p1);p0=p0->next;}while(p0!=NULL);return(head);} /*主程序*/ main(){struct student *head,*stu;char aa;long del_num;M: printf(“n************welcome System************nn”); to the School Management printf(“***************************************************************n”);printf(“n************ made by GIS1011 chenliuqing 1020209124 ************n”);printf(“* 1.Input students' records 2.Print students' records *n* 3.Delete records 4.Insert records *n* 5.Sort by number 6.Sort by totalscore *n* 7.System Information 8.Exit *n ”); printf(“********************END****************************************n”);printf(“********* ***************n”);aa=getch();aa=tolower(aa);switch(aa){ case'1': printf(“nInput students' records”);head=creat();/*返回头指针*/ print(head);/*输出全部节点*/ break;/*调用输出链表函数*/ case'2':print(head);/*输出全部节点*/ break;/*调用删除节点函数*/ case'3': printf(“nInput the deleted number(press 0 to exit): ”);scanf(“%ld”,&del_num);while(del_num!=0){head=del(head,del_num);/*返回头指针*/ print(head);/*输出全部节点*/ please choose the number before command 22 printf(“nInput the deleted number(press 0 to exit): ”);scanf(“%ld”,&del_num);} break;/*调用插入节点函数*/ case'4': printf(“nInput the inserted record”);stu=(struct student*)malloc(LEN);printf(“nInput student's number(press 0 to exit): ”);scanf(“%ld”,&stu->num);if(stu->num!=0){ printf(“Input student's name:”);scanf(“%s”,stu->name);printf(“Input student's sex(f or m):”);scanf(“%s”,stu->sex);printf(“Input chinese score: ”);scanf(“%d”,&stu->chinese);printf(“Input math score: ”);scanf(“%d”,&stu->math);printf(“Input english score: ”);scanf(“%d”,&stu->english);} while(stu->num!=0){ head=insert(head,stu);print(head);/*输出全部节点*/ printf(“Input the inserted record”);stu=(struct student *)malloc(LEN);printf(“nInput student's number(press 0 to exit): ”);scanf(“%ld”,&stu->num);printf(“Input student's name: ”);scanf(“%s”,stu->name);printf(“Input student's sex(f or m): ”);scanf(“%s”,stu->sex);printf(“Input Chinese score:”);scanf(“%d”,&stu->chinese);printf(“Input math score:”);scanf(“%d”,&stu->math);printf(“Input english score:”);scanf(“%d”,&stu->english);} break;/*调用按学号(从小到大)排序函数*/ case '5': head=sort_num(head);print(head);/*输出全部节点*/ 23 break;/*调用按总分(从高到低)排序函数*/ case '6': head=sort_sum(head);print(head);/*输出全部节点*/ break;case'7':printf(“n~~~~~~~~~~~~System Information~~~~~~~~~~~~n”);printf(“School Management SystemnMade Time:2010-7-24nVersion number:1.0nn”);printf(“~~~~~~~~~~~~~~~~~~ /*显示系统信息*/ break;case'8':exit();/*退出程序*/ /*调用创建链表函数*/ } goto M;/*返回、显示主菜单*/ } END By xugaohongnFinish ~~~~~~~~~~~~~~~~~~nnn”); 五、实习心得体会 由于本课题中的许多知识点都没有学过都要靠自己到课外的资料中去查找。在用的时候难免出现这样那样的错误。如开始设计出来的菜单不是预想的那样,而是总个窗中出现混乱。解决的这个问题的办法是调整。一个系统的菜单和提示信息非常重要。如果没有这些用户根本不知道怎么用你设计的这个系统。在设计的调试过程中也无法顺利的完成调试工作。有了一个清晰简单的菜单和一些提示信息这后,调试过程完成的非常顺利。通过本次C语言程序设计的实习,我学得了很多知识,虽然在之前老师没有详细讲链表的内容,但是我通过自己看书,同学一起讨论,会用链表处理简单的实际问题了,并对链表的建立、结点的插入、删除节点以及链表的输出等一系列链表知识有了较为深刻的认识。而且自己的实际操作能力也有了提高。 回顾起此次课程设计,我感慨颇多,的确,从拿到题目到完成整个编程,从理论到实践,在整整两个礼拜的日子里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能 24 真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体„„通过这次课程设计之后,一定把以前所学过的知识熟悉了,本次课程设计结束了,我们通过这次实践学到了许多知识。学到了设计一个简单的系统。要注意哪些方面。也使我们知道自己哪些方面做得还不够。这不仅是程序设计,更是锻炼我们处理问题的能力,同时也使我们了解到团队合作的可贵.编写程序是件细心活,稍不留神就会出错,这就必须要求我们对待事情要认真!在编写程序的过程中,错误不断出现,不同的类型(如少写了一个符号,写错了字母,用错了函数等等)层出不穷,这考验我们待事细心,耐心,能不能坚持到底,不能半途而废。但我们总结出了一点点的经验如下: 1、要对系统的功能和要求做出详细的分析,并合理分解任务。 2、把分解出来的子任务,做给一个相对独立的模块。 3、在设计一个模块之前,要简单构想一下总界面的显视情况。 4、针对构想出来的界面进行程序的编写。 六、附录: 参考文献 教材和主要参考书目:(1)教材:《C程序设计》,谭浩强编著,清华大学出版社(2)主要参考书目: ①《C程序设计教程》,谭浩强编著,清华大学出版社; ②《C语言程序设计——习题与实验指导》,谭浩强编著,清华大学出版社。第二篇:c语言实习报告
第三篇:C语言实习报告
第四篇:C语言实习报告
第五篇:c语言实习报告