C语言socket课程设计报告

2024-11-05

C语言socket课程设计报告(共8篇)

1.C语言socket课程设计报告 篇一

课 程 报 告 课 程 名 称: 专 业 班 级 : 学 生 姓 名 : 学 号 : 程序设计实践 ****** 20104683**** 任 课 教 师 : 学 2010期 :2010-2011 学年第二学期 课程报告任务书 课程报告任务书 报告 题 目 图书信息管理系统 开发一个图书信息管理系统,图书信息包括:图书编号、书名、作者、出版社、类别、出版时间、价格等基本信息(也可以根据自己情况进行扩充,比如是否借出、库存量 等)。使之能提供以下基本功能 基本功能 基本功能:(1)图书信息录入功能(图书信息用文件保存)--输入?(2)图书信息浏览功能--输出 主要 内容(3)查询功能(至少一种查询方式)、排序功能(至少一种排序方式): ? ①按书名查询 ②按作者名查询 ③ 按照价钱排序 ④按出版时间排序等等(4)图书信息的删除与修改 扩展功能:可以按照自己的程度进行扩展。比如(1)简单的权限处理(2)报表打 功能 印功能(3)甚至根据自己情况,可以加上学生信息,并扩充为图书借阅系统。(4)模糊查询(5)综合查询(6)统计功能 比如统计处某一类别的图书信息 或 筛 选出小于指定数量库存的图书信息等等,总之,可以根据自己需求进行分析功能。

一、提交材料应包括:(1)系统源代码(2)课程报告

二、整个设计过程具体要求(1)需求分析 需求分析 任务 要求 要求学生对案例系统进行分析,设计出需要完成的功能,完善 各个模块的调用关系;(2)设计过程 要求学生进一步明确各模块调用关系,进一步完善模块函数细节 设计过程(函数名、参数、返回值等)(3)实现过程 要求学生养成良好的编码习惯、完成各个模块并进行测试,最终 实现过程 完成系统整体测试;(4)总结阶段 按照要求完成系统设计和实现报告,并进行总结、答辩。总结阶段 报告撰写情况(报告撰写情况(30 分)内容 规范程度 程序测试 20 分 5分 5分 系统完成情况(答辩情况(系统完成情况 30 分)答辩情况(40 分)完成 基本功能 扩展功能 自述情况 答辩情况 20 分 10 分 10 分 30 分 成绩 评定 总分 成绩评定教师: 成绩评定教师: 教师 1 需求分析 经过大一上学期的理论学习,在基础实验的基础上,本学期我们继续开设了 C 语言程序 设计实践课。课程要求我们对已经学习的基础实验进行整合与衔接处理,并最终形成一个系 统性质的规模较大的程序。本次课程设计要求我们达到能独立完成一个图书管理系统,完成后要求实现的功能有对 图书信息的录入、删除、修改,浏览(即输出)按某种方式查询(要求至少一种查询方式),按某种方式排序(要求至少一种排序方式)。当然,我们可以根据自己的能力对系统进行完善 性的拓展,例如自己加入简单的权限处理,统计功能,模糊查询等,甚至可以拓展为图书借 阅系统。通过整个程序的开发过程,最终使我们掌握利用计算机解决实际问题的基本方法,熟悉 C 语言开发的全过程,提高综合应用 C 语言的能力、编程和调试能力,为学习计算机和通信 专业的后续课程打好专业基础。2 概要设计(1)图书信息及数据格式 图书信息: 图书信息包括图书编号、图书类别、图书书名、作者、出版社、出版时间、图 书价格。数据格式: 本系统采用单向链表来对图书信息进行各项操作。其中图书的编号为整型数 据,价格为双精度浮点型,其余的类别、书名、作者、出版社与出版时间均为字符 串类型 struct tushu_node{ int num;char leibie[20];char name[30];char author[20];char press[20];char time[20];double price;struct tushu_node*next;};一个结点的示意图如下图所示: num leibie name author press time price next(2)程序的整体框架 主菜单 录 入(删 除 修改)按 不 同方 式 查询 浏览 按 不 同方 式 排序 统 计 图书 数 目 帮助 退出 创 建 删 除 修 改 编 书 价 号 名 格 价 格 出版 时间 子菜单(3)模块划分

1、int quanxian();

2、int inputchioce();

3、void save();

4、void save1();核查权限的函数 显示主菜单的函数 保存链表为文件的函数 覆盖以前的信息 保存链表为文件的函数 不覆盖以前的信息 只在创建时调用

5、struct tushu_node* wjtolb();从文件中读取数据并建立图书信息的链表的函数

6、int luruxinxi();录入学生信息的函数 创建图书信息的函数 插入图书信息的函数

7、struct tushu_node * luruxinxi_chuangjian();

8、struct tushu_node * luruxinxi_charu();

9、struct tushu_node * luruxinxi_shanchu();

10、struct tushu_node * luruxinxi_xiugai();删除图书信息的函数 修改图书信息的函数

11、int liulantushu();浏览图书信息的函数

12、int chaxuntushu();

13、void chaxuntushu_num();

14、void chaxuntushu_name();

15、void chaxuntushu_price();查询图书信息的函数 按编号查询图书 按书名查询图书 按价格查询图书

16、void paixutushu();

17、struct tushu_node* paixutushu_price();

18、struct tushu_node* paixutushu_time();

19、void sfjx();为图书排序的函数 为图书按价格排序的函数 为图书按出版时间排序的函数 写个函数 判断是否继续 排序中使用 20、int tongjitushu_shumu();统计图书数目的函数

21、void shiyongshuoming();使用说明的函数 3 详细设计 程序的主体设计思想是根据结构化程序设计思想分模块进行设计,有一个主函数和多个 自定义函数构成。主函数 对于本程序来说,主函数很简单,就是定义了一个变量 chioce 用来接受核查用户是否 有使用该管理系统的权限的函数 quanxian()函数返回的值,若为 1 即用户获得了使用权限)(,则调出显示主菜单的函数进行具体操作 int { int chioce;chioce=quanxian();核查用户是否有使用该管理系统的权限的函数 main()if(chioce==1){ system(“cls”);inputchioce();} exit(0);} 权限函数 若取得权限 则返回值为 1 用来显示主菜单的函数 核查用户权限的函数使用 do-while 语句来限制用户输入密码的次数仅为三次,并且为了 使界面更具亲切感,会在用户输入密码错误时进行提示引起用户注意及提示剩余输入次数。int quanxian(){ int m=1,n=3,flag=0;char mima[20];do{ printf(“nn 你 好,欢 迎 使 本 图 书 信 息 管 理 系 统!n”);printf(“n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~n”);printf(“【现在进行权限核查】 次输入密码的机会!n”);printf(“n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~n if(n==2||n==1){printf(”注意:你已输入错误%d 次 密码:“,3-n,n);} if(n==3)printf(”剩余输入次数: %d 请输入密码:“,n);剩余输入次数: %d ”);请输入 n--------------------友情提醒:你共有 3 scanf(“%s”,mima);//第一次输入和输错密码后再次输入显示的也卖弄不同 if(strcmp(mima,“chenbo0916”)==0){ flag=1;return flag;} m++;n--;system(“cls”);}while(strcmp(mima,“chenbo0916”)!=0&&m<=3);// 限制输入次数在 3 次之内 printf(“nn 对不起,你连续三次输入密码错误,没有使用该图书管理系统的权限!n”);exit(0);} 显示主菜单的函数 本程序将主菜单单独作为一个函数是为了让用户进入一次系统可以进行多项操作(即为 在每次用户完成一个具体的操作后,都会有对是否继续或返回主菜单有相应的询问,让用户 在想退出系统时才退出),基本思路是通过函数的嵌套调用来实现多项操作。这个函数的功能 就是显示主菜单并对用户进行的选择调用不同的子菜单函数或进入具体功能 int inputchioce(){ int mychioce,x=-1;printf(“n++++++++++++++欢 迎 你++++++++++++++++++nn”);printf(“**+++++++++++++ 主 菜 单 +++++++++++++++++++++**n”);printf(“**1--录入(删除 修改)图书信息 ** **2--(按规则)查询图书信息 **n”);printf(“** printf(”** printf(“** 3--浏览图书信息**** 5--统计图书(数目)0--退出系统 4--为图书(按规则)排序 **** 6--帮助 **n”);**n“);**n”);/* 主菜单 */ ** ** printf(“**++++++++++++++++++++++++++++++++++++++++++++++++++++++++**n”);printf(“n 恭喜你获得使用权限,请你选择:”);scanf(“%d”,&mychioce);switch(mychioce){ case 1: { case 2: { chaxuntushu();break;} luruxinxi();break;} case 3: { case 4: { case 5: { liulantushu();break;} paixutushu();break;} tongjitushu_shumu();printf(“nn 是否继续操作? 请选择(继续-1/退出-0)”);scanf(“%d”,&x);if(x==1){ system(“cls”);inputchioce();} if(x==0){ printf(“nn 谢谢你的使用!exit(0);} if(x!=1&&x!=0){ system(”cls“);printf(”选择有误,默认返回主菜单,请重新选择: n“);inputchioce();} break;} 再见n”);case 6: { case 0: { printf(“ nn 谢谢你的使用!再见 nn”);break;} shiyongshuoming();break;} default: { system(“cls”);printf(“n 选择有误,请重新选择:n”);inputchioce();}break;} } 关于一些录入(修改)查询、、查询 关于一些录入(删除 修改)查询、排序等子菜单的原理及实现方法与主菜单那类似、创建(插入)创建(插入)函数 算法如下图: num 结束输入控制条件 Num!=0 Leibie Name Author Press Time price p->num p->leibie p->name p->author p->press p->time p->price Head 为空 Head=p Head 不 为 空 Tail->next=p 保存为文件 Save()将链表数据保存为文件的函数 首先打开文件以可读写(也可以只写的方式打开 区别在于是否覆盖以前的信息)的方式,p1 作为形参来接受实参 head,只要不为空,写入 p1 后,下移一个节点 void save1(struct tushu_node* p1){ /*将链表保存为文件的函数 不覆盖前面信息 if((fpp=fopen(“1.txt”,“a”))==NULL){ printf(“打开文件失败!”);exit(0);} while(p1!=NULL){ */ fprintf(fpp,“ %d %s %s %s %s %s %lfn”,p1->num,p1->leibie,p1-> name,p1->author,p1->press,p1->time,p1->price);p1=p1->next;} if(fclose(fpp)){ printf(“关闭文件失败!n”);exit(0);} } 从文件中读出数据并创建链表的函数 在调用从文件读取数据创建链表的函数前,先定义 head 链表指针并赋值为空作为实参。打开文件后,从文件中读取一组数据赋给已经被动态分配内存的结点指针 p 第一次 head 为空时 Head P next p1 第二次以后 head head P1->next p2 P next p1 head P1->next P next p2 p1 删除函数 删除函数执行流程图及算法如下图所示: 调浏览函数浏览 全部图书方便看 需要删除那一本 输入需要删除图 书编号 numm 调用读取文件并 形成链表的函数 具体删除过程 Head Head=NULL Return Head!=NULL Head->num 相等(即删除头结点)Numm 比较 head=head->next 不相等(删除其他结点)Ptr1=head Ptr2=head->next Ptr2!=NULL(即不是链表结尾 循环结束条件)Ptr2->next=ptr1-> next 重新保存 覆盖 原来文件中数据 选择是否继续操 作返回主菜单 While 循环 Ptr2->num Numm 比较 相等 不相等 Ptr1=ptr2 Ptr2=ptr1->next Save()函数 重新保存文件 修改函数 修改函数执行流程图如下: 先遍历所有图书信息 方便选择要修改编号 调用文件到链表函数 输出一个显示选择修 改具体成分的界面 输入需要修改的图书 编号 If(Head!=Null)Head->num Numm 比较 不相等 相等 选 择 具体 修 改成分 while(p!=NULL&&p->n um!=numm){ p=p->next;} 直到相等 Swith 语句 输入新的成分替 换原有图书信息 的成分 Save()保存至文件 是 询 问 是否 继 续 否 返回主菜单 浏览遍历函数 重新定义一组变量 num、leibie、name、author、press、time、price,将从文件中读 取一组数据后赋给这组变量并输出它们,使用 while(!feof(fp)),一直执行上述过程实现 遍历浏览全部文件中的图书信息。浏览完成后,同样有对是否继续其他操作的询问,如果选 择继续,则会返回主菜单。int liulantushu(){ int num;char leibie[10];char name[30];char author[20];char press[20];char time[20];double price;int x=-1;/* 浏览图书信息的函数 */ if((fpp=fopen(“1.txt”,“r”))==NULL){ printf(“ exit(0);} else{ printf(”nn 编号 while(!feof(fpp)){ fscanf(fpp,“%d%s%s%s%s%s%lf”,&num,leibie,name,autho r,press,time,&price);printf(“%d %s %s %s %s %s %lfn 类别 书名 作者 出版社 出版时间 价格n”);打开文件失败!“);”,num,leibie,name,author,press,time,price);} } if(fclose(fpp)){ printf(”关闭文件失败!n“);exit(0);} printf(”nn 是否继续操作? 请选择(继续-1/退出-0)“);scanf(”%d“,&x);if(x==1){ system(”cls“);inputchioce();} if(x==0){ printf(”nn 谢谢你的使用!exit(0);} if(x!=1&&x!=0){ system(“cls”);printf(“选择有误,默认返回主菜单,请重新选择:n”);inputchioce();} } 统计图书数目的函数 统计函数简单的实现了对图书数目的统计,其实现思路可以看做在浏览函数的基础上去 掉一些不必要的输出而是另外加上一个变量 n 用在 while 中执行一次循环就 n++一次,就能 统计出图书的数目了,不再具体叙述。由于 feof()函数本身的原理,如果每次写入一行数据 到文件中时最后有换行符号,则会出现 n 多加一问题或输出时最后一行复制,只要将 n 减一 即为图书实际上的数目。查询函数 再见n“);查询函数算法如下图所示: found=0 p=head flag=0 输入要查询的图书 的编号/书名/价格 P P!=NULL 比较 P 中相应的部分 与要查询的是否相 等 不相等 相等 输出查询到的信息 found=1 P=p->next 如果 found 依然为 0,则输出“未找到某图书” 是 询问是否继续 否 返回主菜单 排序函数 排序函数算法叙述如下: 排序函数使用冒泡排序的算法,定义了 i j 两个变量来控制实现双层循环,for(i=1;inext head A B C 辅助 P3 p1 p2 比较 p1 与 p2 的排序项,如 p1 比 p2 小,上图所有指针的指针均后移一位 相反,若上图中 p1 比 p2 大,则变为 P3 A B C P3->next P2->next p1 p2 简单的说———始终是 p1 与 p2 比较,其中一个为前一次比较中的的大的一个,另一个向 后移动 内循环源程序 p4=(struct tushu_node*)malloc(size);p4->next=head;p3=p4;p1=head;p2=head->next;for(j=0;jprice>p1->price){ p3=p1;p1=p2;p2=p2->next;} else { p1->next =NULL;p1->next=p2->next;p3->next=p2;p2->next =p1;p3=p2;p2=p1->next;} } head=p4->next;free(p4);4 调试分析 程序的编写过程中调试时遇到的问题及如何解决: 问题一 界面不美观,进入一次系统只能进行一项操作的问题)解决方法 通过将主菜单的显示作为一个独立的函数(inputchoice(),结合函数的嵌套调 用实现,与清屏函数(system(“cls”)一起,在每次进行完一次具体操作都有以下询问)printf(”nn 是否继续操作? 请选择(继续-1/退出-0)“);scanf(”%d“,&x);if(x==1){ system(”cls“);inputchioce();} if(x==0){ printf(”nn 谢谢你的使用!再见n“);exit(0);} if(x!=1&&x!=0){ system(”cls“);printf(”选择有误,默认返回主菜单,请重新选择:n");inputchioce();} 实现了每次操作完成后,使只显示主菜单可继续进行其他操作 问题二 权限系统以前是输入学号后三位(int)进行验证并且只有一次输入机会,一次输入错 误就退出系统 解决方法 在权限函数中使用字符串变量(char)来作为密码,使用 do-while 语句来实现对 输入次数的控制 问题三 录入时以前的思路是想在输入的同时写入文件只有一组数据想存入文件 解决方法 将保存文件作为一个独立的函数。在创建函数中有一组另外的参数来接收用户输 入的数据,然后再调用保存函数将数据存入文件 问题四 文件的保存与读取问题 解决方法 由于系统要求结合文件的知识使用户的数据在一次输入之后即使关闭退出系统后 在次进入系统时原有数据依然能继续使用。并且在对数据进行创建、删除、修改、排序等相 关的操作之后要重新保存,所以将将链表保存到文件和从文件读取数据建立链表都重新写作 单独的函数,在进行完相关的操作后都调用 save()重新保存,在再次进行操作前就先调用 wjtolb()函数从文件中读取数据创建链表,实现了对数据更及时的保存与利用 问题五 保存数据时覆盖不覆盖原有数据的问题 解决问题 由于以前没有注意细节问题导致虽然数据被修改或是删除后保存成功,但数据不 覆盖原来的数据从而出现文件中数据重复保存的问题,解决方法很简单,只要将打开文件的 方式由可读可写(a)改为只写方式打开(w)就行 问题六 输入时无法结束输入的问题 解决方法 由于在输入时时先输入图书的编号,所以在输入时除了输入第一本图书的信息,即在输入第一本图书之后在输入时先输入图书的编号,加上一个判断循环 while(num!=0)才 继续输入完这本图书的其他信息,即 0 可以作为输入结束标志 问题七 程序漏洞,只有第二本图书信息无法修改的问题 解决方法 程序设计思路有问题及对 do-while 语句了解不充分导致了问题。修改函数的思路 是先让用户先输入要修改的图书编号再依次查询,先看头结点的图书编号与要修改的编号是 否相等,如果相等继续选择要修改的图书信息成分修改,如果不相等,有个循环语句来使结 点后移只带相等再选择要修改的图书信息成分修改。有问题的写法是使用了 do { p=p->next;} while(p!=NULL&&p->num!=numm)从而导致了如果要修改的图书不是第一本而是第二本时,先执行了后移一个结点直接到第三 个结点即无法修改第二本图书的信息。解决后是用 while 循环 while(p!=NULL&&p->num!=numm){ p=p->next;} 就不存在上述问题 问题八 要对图书的信息进行删除后修改前必须先浏览图书不然不知道要选择哪本图书进行 操作的问题 解决方法 由于上述修改与删除的操作是通过用户对图书编号的选择来完成的所以在浏览前 不知道图书对于的编号就使操作具有盲目性即对图书的信息进行删除后修改前必须先浏览图 书。解决时时让修改于删除函数中让用户输入编号前默认直接输出所有图书(遍历所有图书)5 测试结果 编号 类别 4 2 传记 英语 书名 让世界因你而不同 四级词汇 作者 李开复 俞敏洪 出版社 北京工业出版社 群言出版社 出版时间 价格 2008.3 2008.9 28.000000 32.000000 5 3 1 6 7 8 漫画 营销 杂志 教材 教材 教材 我兔斯基你 哈佛市场营销策略 电脑爱好者 思修 大学英语 高等数学 王卯卯 宋海峰 无 罗国杰 王大伟 蒋青 动漫出版社 内蒙古出版社 cfan 杂志社 高等教育出版社 外研社 高等教育出版社 2009.3 2010.4 2010.9 2006.8 2005.1 2007.6 32.000000 28.000000 6.000000 15.50 34.9 25.9 现在给出一组测试数据来全程展示本图书管理系统的所有功能 功能一之核查用户权限: 功能一之核查用户权限: 首先进入系统,你会发现要求对用户使用权限进行核查的界面:(效果图如下)若密码为错误密码,那么你会看到提醒“注意”的界面 上图密码正确,则仍然可以顺利进入系统见到主菜单 如下图 若三次输入错误 将无法进入系统 功能二之浏览全部图书: 功能二之浏览全部图书: 在主菜单界面选择 3 则可遍历现有全部图书信息 功能三之创建或添加图书: 功能三之创建或添加图书: 选择 1 后进入录入(删除 修改)子菜单 继续选择 1 进入创建添加图书功能 以 0 结束输入 结束后自动返回主菜单 再次选择 3(浏览)可查看添加效果(浏览时刚才上图添加的图书信 息“9 IT FLASH8 尹浩琼 电子工业出版社 2006.9 41”显示在最后一行说明程序已经实现了 添加功能)功能四之为图书按规则排序: 功能四之为图书按规则排序: 选择 4 后进入排序子菜单进一步选择按何种规则排序(报告只演示按出版时间排序)当选择 2—按出版时间排序 然后回车键你会看到 选 1 继续返回浏览看到图书已经按出版时间的先后排序完成 功能五之按规则查询图书: 功能五之按规则查询图书: 同排序一样你可以在子菜单选择按何种方式查询(报告只演示按书名查询)选择按书名查询后你可以输入书名 查询图书《当代大学生》的结果是“没有找到这本书” 选择 1 继续按书名查找其他图书 查找到图书《让世界因你而不同》时,这本图书的信息将被全部输出,如图: 功能六之修改已有图书信息: 功能六之修改已有图书信息: 从录入子菜单 1 进入后选择 3 可以进入修改功能 方便你选择要修改哪本图书 首先你会看到目前文件中所有图书的信息 上图选择了修改编号为 1 的图书 现在编号为 1 的图书的信息单独显示出来 提示界面选择修改图书 1 的哪一项成分 你可以再次根据 我们看到图书 1 的作者为“无” 决定将它改为“陈波”(如下图)完成后可以利用浏览函数同样可以查看到修改后的效果 修改成功 功能七之按编号删除某本图书: 功能七之按编号删除某本图书: 选择要删除图书的编号前你也会看到目前所有图书的信息 现在选择删除编号为 8 的图书 浏览看到编号为 8 的图书已被成功删除 功能八之简单的统计功能(统计图书总数目)功能八之简单的统计功能(统计图书总数目): 主菜单中选择 5 即可统计出图书总数目(上图看出还剩余编号为 1、2、3、4、5、6、7、9)八本图书 i 统计正确 现在基本功能演示完毕 选择 0 退出系统 为了完善 系统也设计了一个帮助功能对系统的使用方法做了简单的介绍 6 课程心得总结 经历了几个星期的课程设计,从设计前期的不知如何下手到开始设计时的各种错误的困 扰再到一个个的攻破各个问题,最后到对程序的进一步完善与课程报告的撰写。这一段时间 我们由被程序困扰到几乎崩溃到最后成就感的油然而生;从一整天的坐在电脑屏幕面前到现 在的带着喜悦一遍一遍运行着程序;一遍遍的互相探讨解决大家遇到的问题到越来越发现编 程的有意思,我到现在真的感觉认真自己做完这样一个系统收获颇大:(1)对结构化程序设计与函数的嵌套调用有了更清晰具体的认识(2)对链表的操作更加熟练,更清晰的认识到链表与其他我们前面学习的数据类型(如 结构体)的区别与联系,及使用方法上的异同(3)明确认识到链表的循环操作要注意到的是前一部分对某某进行操作处理,而后要 分析好对于如何实现对某某重新赋值等变化来实现继续循环(4)引入了文件知识可以对电脑硬盘上的数据操作,改变了对 C 语言的狭义认识,认 识 到 C 语言实际上还可以实现更复杂丰富的功能来利用开发的软件来进一步实现 对现实中的问题的解决(5)学习到C语言的学习一定不不能忽视一个很小很小的细节,因为完全会导致不同 的结果(6)对如何用C语言来完成一个较大的系统的整体思路有清晰的认识

2.C语言socket课程设计报告 篇二

一、影响教学效果的关键问题及相应对策

1. 学生学习兴趣不高。

学生对难以理解的概念、术语及语法规则、枯燥无味的例题感觉找不到头绪,认为C语言枯燥、难学,有厌倦心理。部分学生不知学为何用而不感兴趣,部分学生觉得它难学而厌学,还有部分学生学而不得法,不知如何学,教学效果和学习效果均不甚理想。

如何激发学习兴趣,增强学生信心,成为该课程教学设计的关键。首先用应用程序展示C语言的结构、特点,讲明学习C语言是掌握编程能力的必由之路。授课过程中应采用互动式教学,多举一些有趣、实际的例题,每一个例题都与新知识、新概念相关联,完成一个任务也就学到了新知识、新概念。这种“练——学——练一—学”的循环过程让学生学得轻松、学得愉快,使枯燥乏味的理论在生动多样的实际问题中逐步为学生理解、接受和掌握。

2. 传统教学方法的局限性。

计算机语言课一直是“讲概念——分析概念——例题讲解——上机操作”的教学模式。以教师“教”为中心,学生处于被动的接受状态,这种“填鸭式”使师生之间交互少,学生“做”得更少,理论与实践脱节,表现于学生“听得懂,不会编”的现象。“很难培养学生在程序设计上的创新能力和逻辑思维能力,这就给后续课程的教学、毕业设计乃至学生日后从事的工作留下了隐患。”

要突出对学生编程能力的培养,应把解题思路当作授课重点,理解如何用程序设计方法分析、解决问题,建立正确的思维模式。教学内容的组织形式应该是“提出问题——介绍解决问题的方法——归纳出概念或一般规律”,教会学生如何运用C语言编写程序,一些细节、具体规则可以让学生自学,结合提问将问题层层剖析、逐步深入,达到师生互动的效果,充分发挥学生的想象力,以学生自学为主,以教师指导为辅。

3. 实验、考核环节。

不重视实验、考试环节,会使实验只是走过场,无人监管,达不到实验的目的;而单一的考试形式,无法真正测评出学生对所学知识的掌握,二者都影响对学生编程能力的培养。

该课程实践性强,只靠听讲,难以记住,必须多阅读、编写、调试程序才能自然地、熟练地掌握。实验可设计为例题验证、程序修改、独立编程三个层次。例题验证使学生进一步理解基本概念和语法,并树立信心;程序修改是让学生根据课堂中讲过的知识点填充,给予学生发挥的余地;独立编程则要求学生阅读教材和相关资料掌握实验所涉及到的知识,独立完成实验项目。教师只起答疑、解惑的作用,引导和激发学生程序设计欲望和创新动力。

考试应采用机考,以综合性、应用型题目为主,并应增加学生平时实践操作能力所占分值的比例。

二、将软件工程思想、项目驱动教学法融入教学中

1. 注重程序设计风格的培养。

编写程序只有正确性远远不够,必须是可维护的、健壮的、并具有良好的界面风格,要求代码简单、清晰、添加适当的注释,使程序具有可读性;用缩进、空行增加层次感,使程序逻辑清晰,好理解,可维护。现在的程序都是程式化、团队式的开发,每个程序员都按照统一的要求编写程序,保证程序清晰、易维护。学习C语言也是一个养成书写程序习惯的过程,在这个阶段如果养成了不好的习惯,以后将很难改掉,教学中要特别予以重视。

2. 教学中期采用项目驱动教学法。

项目驱动教学法是指在教学过程中以一个项目为主线来展开教学,把相关的知识点融入到项目的各个环节中去,层层推进项目。通过对问题的深化或功能的扩充,来拓宽知识的广度和深度,直至得到一个完整的项目解决方法,从而达到学习知识、培养能力的目的。

学生初步掌握了C语言的数据类型、运算符、表达式三种基本结构后,引入一个精心选择的项目,如学生成绩管理系统。先对项目进行需求分析、设计,而不是急于编代码,避免一边想,一边修改;用流程图、N-S图、PAD图等工具描述模块算法,然后编码。采用项目驱动教学法,把课程的主要知识点分解到各个具体模块,例如,项目初期采用一维数组存放学生成绩,用数组名调用排序函数,随着教学的深入,采用结构数组存储信息,用结构指针调用函数,使教学内容前后衔接,运用自如;随着函数定义、调用、参数传递、变量作用域等概念的学习,运用指针、数组、结构体、文件读写等操作完成项目各个任务,并将软件生命周期各个阶段的任务穿插到教学中,循序渐进、潜移默化地把软件工程思想贯穿教学全过程,使学生在学习程序设计的同时,也掌握了软件工程思想,对培养和提高学生编程能力有极其重要的作用。

3. 培养学生程序调试、测试的能力。

在测试项目各个模块功能时,介绍白盒测试和黑盒测试的概念,使学生懂得测试用例设计不仅要有合理的输入数据,还要有不合理的输入数据;随着教学的不断深入,将各个模块逐个添加到系统中,符合自顶向下增量集成的测试方式,减少了错误数量和测试难度,可向学生灌输集成测试、确认测试的概念,这是完成大型项目开发的必要环节;引导学有余力的学生编写新的模块来完善系统功能,发挥他们的想象力和创造力,使学生始终保持浓厚的学习兴趣。完成一个相对完整的应用程序开发,会有一种“从一盘散沙到一串珍珠”的感觉,既培养了学生自学能力和独立分析、解决问题的能力,又使其了解了软件工程思想,在其后续学习中达到事半功倍的效果。

对于综合型项目,将学生每3-5人分为一组,从需求分析、系统设计、代码编写到程序调试、运行,整个过程都在小组内协作完成,他们一起研究、探讨、设计,再经过思考、改进,不断完善,教师只起一个点拨和指导作用,选出成功的小组经验在全班讲评,促进整体编程能力提高。

三、结束语

3.《C语言程序设计》课程教学研究 篇三

随着计算机的日益普及和互联网的飞速发展,以信息产业发展水平为主要特征的综合国力竞争日趋激烈,软件产业作为信息产业的核心和国民经济信息化的基础,越来越受到世界各国的高度重视。软件技术已成为信息社会的运行平台和实施载体,软件技术应用的全面延伸对用于信息处理的软件技术的发展提出了更高要求,同时促进了软件技术和软件行业的飞速发展,软件技术已经成为人们公认的当今发展最为迅速的技术之一。

《C语言程序设计》是软件工程专业的核心基础课程,其教学效果的好坏,对整个专业教学计划能否顺利完成和专业培养目标能否实现有着重要的作用。本文针对软件工程专业的特点,从培养工程应用型人才的实际需求入手,结合笔者自身的教学实践,对《C语言程序设计》课程教学中的问题进行了分析,从课程教学设计与课程实践教学方面提出软件工程专业《C语言程序设计》课程教学的一系列改进措施。

一、课程教学现状

笔者结合多年的教学实践,并通过调查在校往届学生的学习情况发现,《C语言程序设计》课程教学存在一些问题。

(一)教材内容与实践脱节

教师教授理论课时,大多依据教学大纲指定的配套教材进行讲授,实验课的编程题目多数是验证课本上的例程或者理论课教材后的作业。目前,软件工程专业理论课使用的教材大多以傳授基础理论知识为主,虽然一些知识点后给出了相应的实例,但是这些案例比较孤立,缺乏与工程实践的联系,导致学生觉得日常练习的例程枯燥无味,而且不知道如何将基础理论知识应用于工程实践,使自己具备一定的解决问题能力。由于学生所学知识及其方法与工程实践没有有机结合起来,学以致用的工程意识缺乏日积月累的养成土壤,学习的兴趣和动力不知不觉地消失在盲目与盲从之中。

(二)课程考试与实际应用相关性差

《C语言程序设计》是计算机专业学生学习各类专业课程的重要工具性课程,主要培养学生的工程实践能力。通过调查发现,目前该课程考核仍然以闭卷笔试的形式为主,考试内容主要为基础知识点。这样,学生在面对课程考核时,出于应对考试的需要,知识点背一背、记一记,复习课程和政治课、历史课类似。课程考试方式和内容与实际应用较差的相关性导致学生学习动力不足。

二、课程教学设计

事实上,尽管学习动机不尽相同,学生层次有差异,但绝大多数学生能够认识到自己的需要,希望通过学习提高自己的能力。结合学生特点,笔者认为“做中学”和“基于项目教与学”能够较好地提高《C语言程序设计》课程教学质量。

(一)“做中学”统一知与行

“做中学”是比从“听中学”更好的学习方法,符合人类对客观事物规律的认识,能够把书本上的知识与工作生活联系起来,充分结合了学与做。因此,在设计组织教学活动时应注重实践活动的设计,把教学活动与工作生活实际相结合,鼓励学生在实际活动中学习,并将实践中获得的知识与技能有效运用于解决学习、生活和今后工作中的实际问题,即在实践中学习,在学习中实践。

(二)“做中学”最有效的方法就是进行基于项目的学习

一个完整的项目是从分析开始,经历构思、设计、实现和运作的一个完整过程,在学习学科知识的同时能够提高个人产品过程的认知能力和系统建造的能力。在课程的设计过程中,始终强调以项目为导向,以任务为驱动,以一个具体项目为依托来学习相关的内容,在具体实施中分级设置项目,先易后难、循序渐进地将相关的知识点融入项目的任务之中,通过完成任务掌握相应的知识点,提高相关技能和操作的应用能力。在此过程中,学生不断进行实践、总结、反思,将琐碎的知识点串联起来,逐步培养学生的综合能力。

三、课程教学实施

(一)多方面积极引导,激发学生学习兴趣

学生在学习《C语言程序设计》设计之前,可能通过新生入学教育或从高年级学生中知道这是一门专业必修课程而兴致勃勃,但到真正学习时,如果一直都是面对一堆单调而且枯煤无味的语法知识,则容易使学生产生厌学心理从而逐渐失去学习的兴趣。因此,要改进教学方法。首先,通过展示学校近几年来在各种比赛中获得的好成绩,让学生观看比赛的图片,让学生知道只要努力,在各种竞赛中都可以占有一席之地,这样学生就有可达到的奋斗目标从而消除他们的畏难情绪,激发学生的学习兴趣。

其次,在课堂讲授时尽可能找一些趣味性较强的例子讲解,除布置基本的训练学生掌握语法或者算法的题目外,设计1—2个有趣味性的游戏程序设计,如在选择结构编程练习中简易计算器的开发,在循环结构编程练习中加入猜数字游戏设计,在一维数组编程练习中加入猜牌术游戏等,这些游戏程序设计的开发有一定的难度,鼓励学生结成兴趣小组,互帮互助共同完成,在此过程中,学生的学习自主性和团队协作精神都得到大幅提高。

(二)精心设计实验教学

要根据《C语言程序设计》实验的教学大纲制定实验计划,精心设计每一次实验内容,要综合考虑学生编程能力上的差异,不要把题目设计得太深或者太简单,可以设计必做题和选做题,对基础较差的学生,最低要完成必做题;对能力较强的学生,在完成必做题的基础上,鼓励他们去完成选做题。同时,在实验的编排上,注意验证性、设计性和综合性实验的比例,对验证性实验进行精选,即使是验证性实验,也不要简单验证程序的运行结果,而是首先要求学生阅读程序,写出运行结果或程序实现的功能,然后再上机运行,同时可以设计一些问题让学生思考并对程序进行进一步修改,然后再分析运行结果。减少验证性实验项目,增加设计性和综合性实验项目,由浅入深、由易到难,加强学生动手能力、分析问题和解决问题能力的培养,最终提高学生的编程能力。

(三)灵活运用多种教学手段

在做题过程中,教师的主要任务是及时发现问题,回答学生的疑难问题。但是,在实验练习的过程中,学生主要依靠自己讨论或者上网寻求思路来解决问题。这是一个值得鼓励的好现象,能够充分体现学生独立自主学习的能力,在课堂教学中应当鼓励学生互相讨论,互相交换思想共同解决问题。但是,在教学中教师的作用体现不够充分,不愿意寻求帮助的学生会因为一道题目没有解决而无法正常进行实验练习,教师的作用应该是在学生自主解决问题的同时,能够及时提供帮助,尽量统一实验进度。在上机指导学生实验时,要以问题为中心,广泛采用启发式、参与式和讨论式等教学手段,要打破学生对教师的依赖性,让学生自己去思考如何编程,如果较难的题目允许学生讨论,鼓励学生去查阅相关资料,也可以适当给学生一些提示,但一定不要给学生源代码,重点给出解题的思路与建议性方法,给学生留下足够的独立思考和设计的空间,使学生在实验过程中亲自体会并掌握程序设计思想,提高实验的教学效果。

(四)利用网络教学平台让学生主动学习

充分利用校园网内建立的《C语言程序设计》网络教学平台,在该平台上共享本课程部分教学视频、相关课件、经典算法资料、ACM大赛历年题目,可以让学生通过此网络教学平台更加自主地选择性学习,更重要的是利用此平台与学生进行互动交流,在答疑区对学生提出的问题,老师与学生都可以及时解答,同时其他学生也可以分享交流过程,随时再提出新问题,更好地激发学生的学习兴趣,增强教师与学生、学生与学生之间的互动。通过多种教学方式的结合,不仅加深了学生对所讲知识点的理解,而且激发了学生的学习兴趣,提高了学生学习的自觉性,同时通过互动交流式学习增强了学生的自信心。

参考文献:

[1]张红军.C语言程序设计教学改革初探[J],信息与电脑,2015 (9):140-142.

[2]刘红霞,张永恒.CDIO工程教育模式下的C程序设计教学改革研究[J],榆林学院学报,2015 (4):83-86.

[3]李文锦,游戏化学习在C语言程序设计的应用与实践[J],新课程研究,2015 (7):76-77.

4.C语言课程设计停车场报告 篇四

指导老师:吴杰 学生姓名:刘超 班级序号:02305231 学生证号:20051004279

一.题目要求

设有一个可以停放N辆汽车的狭长停车场,它只有1个大门可以供车辆进出。车辆按到达停车时间的早晚依次从停车场罪戾面向大门口停放。如果停车场已放满N辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排放在便道上的第一辆车就进入停车场。停车场内如有某辆车要开走,在他之后进来的车都必须先退出停车场为它让路,等待其开出停车场后,这些车辆再依原来次序进场。每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。如果停留在便道上的车未进停车场就要离开,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆次序。

二.需求分析

停车场采用栈式结构,停车场外的便道采用队列结构(即便道就是等候队列)。

停车场的管理流程如下:①当车辆要进入停车场时,检查停车场是否已满,如果未满则车辆进栈(车辆进入停车场);如果停车场已满,则车辆进入等候队列(车辆进入便道等候)。②当车辆要求出栈时,该车到栈顶的那些车辆先弹出栈(在它之后进入的车辆必须先退出车场为它让路),再让该车出栈,其他车辆再按原次序进栈(进入车场)。当车辆出栈完毕后,检查等候队列(便道)中是否有车,有车则从队列头取出一辆车压入栈中。

三.总体设计

采用面向对象设计方法:先抽象出类,再分析每个类有哪些成员变量,每个类应该实现哪些功能(即应该有哪些成员函数)。最后,根据要求实现类的成员函数,完成该模拟的逻辑设计和实现。

四.详细设计

#include #include #include

#define MAX 2 /*车库容量*/ #define price 0.05 /*每车每分钟费用*/ typedef struct time{ int hour;int min;}Time;/*时间结点*/ typedef struct node{ char num[10];Time reach;Time leave;}CarNode;/*车辆信息结点*/ typedef struct NODE{ CarNode *stack[MAX+1];int top;}SeqStackCar;/*模拟车站*/ typedef struct car{ CarNode *data;struct car *next;}QueueNode;typedef struct Node{ QueueNode *head;QueueNode *rear;}LinkQueueCar;/*模拟通道*/

void InitStack(SeqStackCar *);/*初始化栈*/ int InitQueue(LinkQueueCar *);/*初始化便道*/ int Arrival(SeqStackCar *,LinkQueueCar *);/*车辆到达*/ void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *);/*车辆离开*/ void List(SeqStackCar,LinkQueueCar);/*显示存车信息*/

void main(){ SeqStackCar Enter,Temp;LinkQueueCar Wait;int ch;InitStack(&Enter);/*初始化车站*/ InitStack(&Temp);/*初始化让路的临时栈*/ InitQueue(&Wait);/*初始化通道*/ while(1){ printf(“n1.the car arrive”);printf(“ 2.the car leave”);printf(“ 3.the schedule ”);printf(“ 4.outn”);while(1){ scanf(“%d”,&ch);if(ch>=1&&ch<=4)break;else printf(“nplease choose: 1|2|3|4.”);} switch(ch){ case 1:Arrival(&Enter,&Wait);break;/*车辆到达*/ case 2:Leave(&Enter,&Temp,&Wait);break;/*车辆离开*/ case 3:List(Enter,Wait);break;/*列表打印信息*/ case 4:exit(0);/*退出主程序*/ default: break;} } }

void InitStack(SeqStackCar *s)/*初始化栈*/ { int i;s->top=0;for(i=0;i<=MAX;i++)s->stack[s->top]=NULL;} int InitQueue(LinkQueueCar *Q)/*初始化便道*/ { Q->head=(QueueNode *)malloc(sizeof(QueueNode));if(Q->head!=NULL){ Q->head->next=NULL;Q->rear=Q->head;return(1);} else return(-1);} void PRINT(CarNode *p)/*打印出站车的信息*/ { int A1,A2,B1,B2;printf(“nplease input thedepart time:/**:**/”);scanf(“%d:%d”,&(p->leave.hour),&(p->leave.min));printf(“nthe number of the car:”);puts(p->num);printf(“nthe time the car arrive: %d:%d”,p->reach.hour,p->reach.min);printf(“the depart time: %d:%d”,p->leave.hour,p->leave.min);A1=p->reach.hour;A2=p->reach.min;B1=p->leave.hour;B2=p->leave.min;printf(“nthe fee: %2.1f元”,((B1-A1)*60+(B2-A2))*price);free(p);} int Arrival(SeqStackCar *Enter,LinkQueueCar *W)/*车辆到达*/ { CarNode *p;QueueNode *t;p=(CarNode *)malloc(sizeof(CarNode));flushall();printf(“ninput the number of the car(例:陕A1234):”);gets(p->num);if(Enter->toptop++;printf(“nthe place of the car.”,Enter->top);printf(“nthe time thecar arrive:/**:**/”);scanf(“%d:%d”,&(p->reach.hour),&(p->reach.min));Enter->stack[Enter->top]=p;return(1);} else /*车场已满,车进便道*/ { printf(“n该车须在便道等待!”);t=(QueueNode *)malloc(sizeof(QueueNode));t->data=p;t->next=NULL;W->rear->next=t;W->rear=t;return(1);} } void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W){ /*车辆离开*/ int i, room;CarNode *p,*t;QueueNode *q;/*判断车场内是否有车*/ if(Enter->top>0)/*有车*/ { while(1)/*输入离开车辆的信息*/ { printf(“n请输入车在车场的位置/1--%d/:”,Enter->top);scanf(“%d”,&room);if(room>=1&&room<=Enter->top)break;} while(Enter->top>room)/*车辆离开*/ { Temp->top++;Temp->stack[Temp->top]=Enter->stack[Enter->top];Enter->stack[Enter->top]=NULL;Enter->top--;} p=Enter->stack[Enter->top];Enter->stack[Enter->top]=NULL;Enter->top--;while(Temp->top>=1){ Enter->top++;Enter->stack[Enter->top]=Temp->stack[Temp->top];Temp->stack[Temp->top]=NULL;Temp->top--;} PRINT(p);/*判断通道上是否有车及车站是否已满*/ if((W->head!=W->rear)&&Enter->tophead->next;t=q->data;Enter->top++;printf(“n便道的%s号车进入车场第%d位置.”,t->num,Enter->top);printf(“n请输入现在的时间/**:**/:”);scanf(“%d:%d”,&(t->reach.hour),&(t->reach.min));W->head->next=q->next;if(q==W->rear)W->rear=W->head;Enter->stack[Enter->top]=t;free(q);} else printf(“n便道里没有车.n”);} else printf(“n车场里没有车.”);/*没车*/ } void List1(SeqStackCar *S)/*列表显示车场信息*/ { int i;if(S->top>0)/*判断车站内是否有车*/ { printf(“n车场:”);printf(“n 位置 到达时间 车牌号n”);for(i=1;i<=S->top;i++){ printf(“ %d ”,i);printf(“%d:%d ”,S->stack[i]->reach.hour,S->stack[i]->reach.min);puts(S->stack[i]->num);} } else printf(“n车场里没有车”);} void List2(LinkQueueCar *W)/*列表显示便道信息*/ { QueueNode *p;p=W->head->next;if(W->head!=W->rear)/*判断通道上是否有车*/ { printf(“n等待车辆的号码为:”);while(p!=NULL){ puts(p->data->num);p=p->next;} } else printf(“n便道里没有车.”);} void List(SeqStackCar S,LinkQueueCar W){ int flag,tag;flag=1;while(flag){ printf(“n请选择 1|2|3:”);printf(“n1.车场n2.便道n3.返回n”);while(1){ scanf(“%d”,&tag);if(tag>=1||tag<=3)break;else printf(“n请选择 1|2|3:”);} switch(tag){ case 1:List1(&S);break;/*列表显示车场信息*/ case 2:List2(&W);break;/*列表显示便道信息*/ case 3:flag=0;break;default: break;} } }

程序运行过程:

1。主系统程序

2.选择所需系统

存储完毕程序继续进行。

选择2为车辆离开启动程序:

选择4退出程序。

五.总结

5.C语言socket课程设计报告 篇五

工程技术学院

课程设计报告书

课程名称:

C语言课程设计

级:

物联网一班

小组成员: 范立恒、陈根、聂俊豪、麦灿文、黄文康

长:

范立恒

指导教师:

楚惟善

二○一三 年 六 月

C语言课程设计实验报告 课程题目及要求及要求

题目一:火车售票系统

任务:结合C语言中相关知识,设计出火车售票系统。录入北京西站车次信息; 2 旅客按车次买票; 统计某日火车票销售金额。

程序要求:

 贯彻结构化的程序设计思想。

 用户界面友好,功能明确,操作方便。

 用户界面中的菜单至少应包括“车次信息录入”、“旅客买票”、“统计某

日销售 金额”、“退

出”4项。

 代码应适当缩进,并给出必要的注释,以增强程序的可读性  为了保证所有的数据可以长期被使用,要求程序能将相关数据存储在外部数据文件中,具体数据格式和文件名、路径等自定;

 根据所设计的算法,定义相应函数分别实现系统的各子功能模块,同时由主程序提供友好的用户界面,使用户可通过选择主菜单来调用课程设计中要求完成的各个功能模块,子程序执行完后可返回到主菜单,继续选择其他功能执行。源程序要求书写规范,结构清晰。重点函数的重点变量,重点功能部分均要求给出清晰的程序注释。

 程序编译、链接成功后,自己设计实现程序功能的一组或多组测试数据,并严格按照此测试数据进行测试,然后分析测试结果。如果程序不能正常运行或结果不正确,则需对程序进行单步调试,在调试过程中认真查找算法实现中存在的问题,并加以分析和 程序分设计说明

经过对程序设计题目的分析可知,整个程序的设计实现大致分为八个模块,每一个模块对应一个函数。在这些函数当中,添加车次数据函数,售票函数,查询总额函数的实现严格按照题目的要求,而显示时间函数和显示车次函数属于附加功能。读取文件函数和保存信息函数对其它函数的实现起辅助作用,主函数及菜单函数控制程序的整体运行。1.添加车次函数

主要实现程序最初运行时车次的录入;

C语言课程设计实验报告

(1)添加学生数据函数add 真以追加方式打开E盘student.txt文件成功?假假输出文件打开失败以追加方式打开E盘student.txt文件成功?真输入添加学生数量n循环变量i=1当i<=n时输入学号、姓名和三门成绩学生信息写入文件 i++关闭文件图2 添加学生数据函数

返回

(2)读取学生数据函数reads 真以读方式打开E盘student.txt文件成功?假循环变量i=0当文件未结束时读取学生信息到数组元素stu[i]中i++关闭文件返回学生人数i图3读取学生数据

输出文件打开失败返回

(3)删除学生记录函数del

C语言课程设计实验报告

n=reads(stu)循环变量i=0当i

j++图5按总分排

4.程序清单

本程序主要由九个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其它函数来实现要求的所有功能。在这些函数当中,添加学生数据函数、删除数据函数和排序函数是程序中较为核心的部分,下面分别进行说明。1.录入车次信息函数

录入车次信息,首先由程序创建一个新文件,并将录入的车次信息写入该文件(e:rain.txt)当中。具体的程序段如下:

if((fp=fopen(“e:rain.txt”,“a”))==NULL)//如果文件已经存在,可以追加车次信息

{

if((fp=fopen(“e:rain.txt”,“w”))==NULL)// 文件不存在时,创建新文件,输入车次信息

{

C语言课程设计实验报告

scanf(“%d”,&j);

tra[i].maipiao=tra[i].maipiao+j;

printf(“n购买成功n”);

printf(“n%12d%11d%11s%11s%11d%11.2fn”,tra[i].num,tra[i].date,tra[i].from,tra[i].ter,tra[i].maipiao,tra[i].tickeprice);

save(tra,n);3.查询销售总额

对于也使用比较日期的方法实现的,这部分程序仍然调用了reads函数,整个排序过程在文件中实现,然后用for循环进行运算,把查询这一天的总额算出。

具体程序如下:

if((fp=fopen(“e:rain.txt”,“r”))==NULL)

{ printf(“读取错误,不能打开该文件!n”);

return;} else

for(i=0;i

fscanf(fp,“ %d %d %s %s %d %fn”,&tra[i].num,&tra[i].date,tra[i].from,tra[i].ter,&tra[i].maipiao,&tra[i].tickeprice);

printf(“请输入你要查询的日期:n”);

scanf(“%d”,&temp.date);

for(i=0;i

C语言课程设计实验报告

知识并在此基础上对数据结构的特点和算法有了更深的了解,C语言是计算机程序设计的重要理论技术基础,它不仅是计算机科学的核心课程,而且已经成为其他理工专业的热门选修课。在计算机的研究和应用中已展现出强大的生命力,它兼顾了诸多高级语言的特点,是一种典型的结构化程序设计语言,它处理能力强,使用灵活方便,应用面广,具有良好的可移植性,同时这两周的学习也提高了我适应实际,实践编程的能力.黄文康:首先这一周的学习,使我在巩固了原有的理论知识上,培养了我灵活运用和组合集成所学过知识及技能来分析、解决实际问题的能力,使我体会到自身知识和能力在实际中的应用和发挥。其次,激发了我创新意识,开发创造的能力和培养沟通能力。另外,让我进一步熟悉了数据结构的设计应用。每一处编码都是在反复的熟悉数据结构的结构特性,及其语法、函数和程序设计思想的过程,对我数据结构的学习和提高很有益处,并且使我明白了程序设计过程有如解决一实际问题,从解决实际问题的角度,我们可以这样来看:第一要了解这个问题的基本要求,即输入、输出、完成从输入到输出的要求是什么;第二,从问题的要害入手,从前到后的解决问题的每个方面,即从输入开始入手,着重考虑如何从输入导出输出,在这个过程中,可确定所需的数据结构的基本类型——线性表、栈、队列、串、数组、树和二叉树以及图等,然后确定处理过程——算法,可得最后结论。最后,在这次课程设计过程中,我们深刻的认识到了自己在学习方面的不足之处,我们知道我们还有太多的基本的思想没有真正的理解,当然我们不会灰心,我们会在以后的日子里努力弥补我们的不足。

麦灿文:一个礼拜的课程设计让我们受益匪浅。要学好一门学科,没有刻苦钻研的精神是不行的,只有在不断的尝试中,不断经历失败,然后又不断的尝试才能获得成功。两个多礼拜中,我们有过山穷水尽的困惑;有过柳暗花明的惊喜;有过唇枪舌剑的辩论;有过相互鼓励的安慰。一个礼拜的时间我们经历了很多,也收获了很多。与其说它是体力与脑力的作业,不如说它是合作精神和毅力的考验。经过这次课程设计,我们不仅学到了很多知识和技能,更重要的是我们学会了如何运用所学知识去解决实际问题。

对于我本人来讲这次课程设计的总体表现,我自己还比较满意,每天做到了按时的出勤,上机遵守机房的管理规定,遵循指导老师的安排并能适时地与老师进行沟通,觉得不足的是不能熟练地掌握c语言的设计技巧使编程的结果缺乏效率,不过我相信这只是我的一个开始,我更应该注重的是这次过程,我坚信我会在以后的学习和训练中不断地弥补自己的不足之处,不断的完善自己的编程能力,因为成功需要一点一点积累。

0

C语言课程设计实验报告

} void menu(){ printf(“

************************* 武昌站火车订票系统************************ ”);

printf(“n 显示当前时间”);

printf(“n 车次信息录入”);

printf(“n 显示”);

printf(“n 旅客买票”);printf(“n 统计某日销售金额”);

printf(“n 退出”);} int reads(struct train tra[N])// 读取车次中的内容 {

FILE *fp;

int i=0;

if((fp=fopen(“e:rain.txt”,“r”))==NULL){

printf(“文件打开失败!n”);

return 0;}

else {

for(i=0;!feof(fp);i++)

fscanf(fp,“%d %d %s %s %d %fn”,&tra[i].num,&tra[i].date,tra[i].from,tra[i].ter,&tra[i].maipiao,&tra[i].tickeprice);

}

fclose(fp);

return i;} void save(struct train tra[N],int n)// 车次信息改变后更新文件 { FILE *fp;

int i=0;

if((fp=fopen(“e:rain.txt”,“w”))==NULL){

printf(“文件打开失败!n”);

return;}

else {

for(i=0;i

C语言课程设计实验报告

getch();}

void sell()// 按顾客要求对车次信息卖票 {

struct train tra[N];

int num,n,j;

int i;

n=reads(tra);

printf(“n请输入待查询的车次号,按回车键确认:n”);

scanf(“%d”,&num);

for(i=0;i

if(num==tra[i].num)break;

if(i>=n)

{

printf(“没有找到该车次信息!n”);

return;

}

else

printf(“n请输入所买票数,按回车键确认:n”);

scanf(“%d”,&j);

tra[i].maipiao=tra[i].maipiao+j;

printf(“n购买成功n”);

printf(“n%12d%11d%11s%11s%11d%11.2fn”,tra[i].num,tra[i].date,tra[i].from,tra[i].ter,tra[i].maipiao,tra[i].tickeprice);

save(tra,n);} void all()//统计销售金额 { struct train tra[N],temp;float sum=0;FILE *fp;int i,j=0;if((fp=fopen(“e:rain.txt”,“r”))==NULL)

{ printf(“读取错误,不能打开该文件!n”);

return;} else

for(i=0;i

fscanf(fp,“ %d %d %s %s %d %fn”,&tra[i].num,&tra[i].date,tra[i].from,tra[i].ter,&tra[i].maipiao,&tra[i].tickeprice);

printf(“请输入你要查询的日期:n”);

C语言课程设计实验报告

4、调试与测试:调试方法,测试结果的分析与讨论,测试过程中遇到的主要问题及采取的解决措施

5、源程序清单和执行结果(光盘):清单中应有足够的注释

二、具体安排:

学生以2—6人为一组,共同完成一个题目,选出一个组长负责分工和管理,共同完成总体框架设计,然后每个学生分工独立完成各自的功能模块的编程,最后要能集成并测试通过。

每组要以光盘形式上交C源文件和可执行文件(放在组长文件袋中,其他成员在报告本中写明源程序在哪个同学的文件袋中)

(注:课程设计报告统一使用学院规定的课程设计报告本和文件袋)

三、备注

每个人可自行附加模块设计心得

及所发现的问题及解决方法

《C语言课程设计报告

6.C语言课程实践-实践1实验报告 篇六

1.程序源代码

程序1 编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,则计算机给出提示“Right!”,否则提示“Wrong!”,并告诉人所猜的数是大还是小,然后结束游戏。要求每次运行程序时机器所“想”的数不能都一样。#include #include #include void main(){

int input_number;

int random_number;srand((unsigned)time(NULL));random_number = rand()%100+1;printf(“输入您想猜的0~100之间的数:”);scanf(“%d”,&input_number);if(input_number >= 0 && input_number <= 100){

if(input_number == random_number)

{

printf(“nright!”);

}

else if(input_number > random_number)

{

printf(“n您猜的数过大n”);

}

else

{

printf(“n您猜的数过小n”);

} }

else

{

printf(“n您猜的数应在0~100之间”);} } 程序2 编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,则结束游戏,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平;否则计算机给出提示,告诉人所猜的数是太大还是太小,直到人猜对为止。#include #include #include void main(){

int input_number;

int random_number;int n;srand((unsigned)time(NULL));random_number = rand()%100+1;for(n=1;;n++){

printf(“输入您想猜的0~100之间的数:”);scanf(“%d”,&input_number);if(input_number >= 0 && input_number <= 100)

if(input_number == random_number)

{

printf(“nright!n”);

if(n==1)

{

printf(“n您猜了%d次,太牛逼了.n”,n);break;

}

else if(n>1&&n<6)

{

printf(“n您一共猜了%d次,水平还行.n”,n);break;

}

else

{

printf(“n您一共猜了%d次,才猜对,很勉强啊.n”,n);break;

}

}

else if(input_number > random_number)

printf(“n您猜的数过大n”);

else

printf(“n您猜的数过小n”);

else

printf(“n您猜的数应在0~100之间”);} } 程序3 编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,则结束游戏,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平;否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10次,如果猜了10次仍未猜中的话,结束游戏。

#include #include #include void main(){

int input_number;

int random_number;int n;srand((unsigned)time(NULL));random_number = rand()%100+1;for(n=1;n<=10;n++){

printf(“输入您想猜的0~100之间的数:”);scanf(“%d”,&input_number);if(input_number >= 0 && input_number <= 100)

if(input_number == random_number)

{

printf(“nright!n”);

if(n==1)

{

printf(“n您猜了%d次,太牛逼了.n”,n);break;

}

else if(n>1&&n<6)

{

printf(“n您一共猜了%d次,水平还行.n”,n);break;

}

else

{

printf(“n您一共猜了%d次,才猜对,很勉强啊.n”,n);break;

}

}

else if(input_number > random_number)

printf(“n您猜的数过大,您还有%d次机会n”,10-n);

else

printf(“n您猜的数过小,您还有%d次机会n”,10-n);

else

printf(“n您猜的数应在0~100之间”);} if(n==11)

printf(“n你输了!n”);}

程序4 编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平,则结束游戏;否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10次,如果猜了10次仍未猜中的话,则停止本次猜数,然后继续猜下一个数。每次运行程序可以反复猜多个数,直到操作者想停止时才结束。#include #include #include void main(){

int input_number;

int random_number;int n,i=1;

game: srand((unsigned)time(NULL));random_number = rand()%100+1;for(n=1;n<=10;n++){

printf(“第%d轮游戏,输入您想猜的0~100之间的数:”,i);scanf(“%d”,&input_number);if(input_number >= 0 && input_number <= 100)

if(input_number == random_number)

{

printf(“nright!n”);

if(n==1)

{

printf(“n您猜了%d次,太牛逼了.n”,n);break;

}

else if(n>1&&n<6)

{

printf(“n您一共猜了%d次,水平还行.n”,n);break;

}

else

{

printf(“n您一共猜了%d次,才猜对,很勉强啊.n”,n);break;

}

}

else if(input_number > random_number)

printf(“n您猜的数过大,您还有%d次机会n”,10-n);

else

printf(“n您猜的数过小,您还有%d次机会n”,10-n);

else

printf(“n您猜的数应在0~100之间”);}

} if(n==11){ printf(“n你输了!n”);i=i+1;goto game;} 2.遇到的问题及解决方法

问题1:随机数如何调用?

解决方法:运用srand((unsigned)time(NULL))函数。

问题2:”直到人猜对为止”功能如何实现? 解决办法:运用一个“无穷循环”,另游戏能够不断进行,并运用break语句停止于猜对情况。

问题3: “以此来反映猜数者“猜”的水平”功能的实现?

解决办法:在猜对情况下的if语句中嵌套if语句实现“猜数次数”的判断,分支输出“猜”的水平。

问题4:“每次运行程序可以反复猜多个数”功能的实现?

解决办法:此功能比较困难,但反复阅读程序后,发现代码并不复杂,运用goto语句和if语句的运用进行循环,即可实现此功能,且不会因为运用goto语句造成程序模块的混乱。

3.总结(心得体会)

这是“C语言课程实践”的第一次实践,由于平时并没接触过Microsoft Visual C++ 6.0这个编译软件,因此刚开始还存在操作方面的苦难。经过一两节课的实践,能够熟悉界面和学会新建工程。

此次实践题目是“猜数游戏”,题目分成4个部分,其实内容相同,只是功能逐渐增加。鉴于这种题目,编写程序中需要思考预留部分,比如运用if语句嵌套时,要注意把“猜对”、“猜错”和“误猜”分支出来,使程序容易阅读也容易进行修改。

在编写程序过程中,遇到几个核心问题,通过学习后把困难一个个突破,并成功实现题目所要求的功能。

7.C语言程序设计实验课程教学探索 篇七

C语言程序设计作为一门重要的程序设计语言入门语言, 在课程体系中的地位不言而喻。盐城师范学院将C语言程序设计作为计算机专业本科生程序设计课程的基础核心课程, 已有多年历史。该课程对培养学生计算思维、编程能力、自学能力和分析解决计算机问题的能力有着至关重要的作用, 并对后续课程, 譬如算法与数据结构、数据库原理、操作系统等核心课程的学习有非常大的支撑作用。但是, C语言中概念多、难点多、语法复杂、设计到的硬件知识多、使用灵活、不易调试等特点, 容易导致学生出现畏难情绪, 极大地遏制了学生的学习兴趣。本文针对以上问题就该课程对应的实验课程做几点思考, 从课程内容、教学方法、教学手段等几个方面进行大胆改革, 积极投身教学实践, 结果显示我们的改革能取得较好的效果。

2 传统教学模式存在的问题 (Defects of traditionalteaching model)

C语言程序设计实验课程是计算机专业进入大学后要学习的第一门程序设计实践课程, 它对提高学生编程兴趣和动手能力有着至关重要的作用。或者说, 该课程是热爱编程和害怕编程的两种学生的分水岭。传统教学模式在实际教学过程会存在以下问题[1]。

(1) 生源的计算机基础参差不齐, 有些学生进入大学前就已经通过计算一级考试, 有些学生还没有接触过计算机。进入大学后同一平台学习程序设计, 后者明显感觉到有压力, 自信心受打击从而出现厌学的情绪。

(2) 传统教学模式的过程以教师为主体, 学生被动的学, 对于实践性很强的课程, 学生逐渐丧失兴趣, 缺乏学习的动力。C语言程序设计实验课程上, 如果只是简单的做些验证性实验, 则不能培养学生独立编程解决问题的能力, 极大地扼杀了学生的创造力。

(3) 由于被动的学习, 造成只是照本宣科, 缺乏钻研精神, 导致学生在后续专业课程或参加设计性、综合性实验课程时, 往往力不从心, 达不到预期的教学效果。

(4) 教师对课程教学目标不明确, 认为将该课程的语法知识传授给学生就达到教学目的, 这样就背离了通过学习C语言应该培养学生能够用编程语言去分析和解决实际问题的能力的宗旨。

3 改革方案 (Project of innovation)

C语言程序设计是一门实践应用性较强的学科, 在日常的教学过程中需要不断强化实验环节, 让学生在操作实践过程中不断地发现、分析和解决新问题。为了实现上述目标, 教师在教学过程中必须要结合有效教学理论的要求, 努力改进教学方法。

3.1 精心设计好教学内容

案例教学教学法的理论依据是构建主义学习理论[2]。构建主义者认为, 教学设计要发挥学习者在学习过程中的主动性和构建, 教师的职责在于使学习者置身于探索知识之中, 为他们提供适当的“情境”[3]。在设计案例时, 要兼顾不同基础的学生, 不能让实验课变成少数人的实验课。因此, 我们将教学内容按层次组织。第一个层次为基本知识, 所有的学生都必须能够通过自身的努力顺利完成, 这样可以极大提高学生的学习积极性。第二个层次为对所学知识简单的应用, 这个层次对基本概念和方法加深理解, 需要学生通过自己的钻研、参考课外资料, 发挥自己的学习能力。通过这一层的学习, 所有的学生应该能够学会主动积极地查阅文献, 切实提高自己的钻研和自学能力, 同时也能鼓舞学生的斗志。第三个层次是用所学知识去解决实际问题, 真正做到培养学生的创造力。这个层次需要通过大量的思考和联系才能达到, 同时也能选拔出具有一定天分的学生。

3.2 激发学生的学习兴趣

兴趣是最好的老师, 同时兴趣也是学好程序设计的关键, 而培养学生对C语言程序设计课程的兴趣关键在于实验课。激发学生的学习兴趣的关键莫过于让学生有解决实验中碰到问题的能力, 不会因为C语言本身的问题丧失学习的信心。比如, 让学生掌握调试手段。首先我们使用一个有趣的现象引出为何要使用调试工具, 以及调试工具使用方法。例如, 我们给出如下所示代码, 请学生写出运行结果。绝大部分学生会给出从246到255的十个数。运行的结果告诉他们结果应该是一个死循环, 这样会激发学生的想知道原因的兴趣。

#include

int main ()

{

unsigned char a;

for (a=246;a<256;a++)

printf (“%dt”, a) ;return 0;

}

我们用VC++ 6.0的调试工具, 在循环体语句前设置一个断点, 执行debug, 并执行单步调试, 发现当a为255后for循环并没有能停止, a的值变成了0, 如图1和图2所示。这时学生会回忆起unsigned char类型的变量取值范围为0—255。当变量a值为255时再加1就回头变成了0。这样学生会对调试工具的使用有一个非常深刻的印象, 同时也会明白掌握调试工具的重要性。更重要的是, 极大地激发了学生的学习兴趣。

3.3 设计考核体系

目前许多高等院校C语言程序设计课程学习成绩的评定, 仅以期末一张考试卷的完成情况而定, 这使得很多学生不重视实验课, 认为实验课学得好与不好对成绩影响不大, 很多学生重理论、轻实验[4]。我们将考核贯穿整个学习过程中, 每学完一个知识点进行一次考核。考核的方式灵活多样, 可以通过诸如答辩、课后撰写小论文、完成实验报告等方式。考核过程中发现的问题决定教师教的过程, 可以通过集中讲授、设计思考题、提供参考资料等方式解决学习过程发现的问题。

4 结论 (Conclusion)

多年来, 我校在C语言程序设计实验课上进行了改革的尝试, 许多老师积极参与教学改革, 取得了辉煌的成果。我们一直在努力寻找提高学生对C语言程序设计实验课程的兴趣、最有效的教学手段, 为计算机专业学生提高动手能力、编程思维能力做出自己的努力。

参考文献

[1]王创伟, 汤克明, 蔡长安.“C语言程序设计”教学改革方案与实践[J].现代计算机, 2010 (10) :23-25.

[2]温彭年, 贾国英.建构主义理论与教学改革:建构主义学习理论综述[J].教育理论与实践, 2002, 23 (5) :17-22.

[3]储岳中, 秦锋, 刘哄申.“C语言程序设计”理论与实践一体化教学的几点实践[J].计算机教育, 2012 (12) :22-25.

8.C语言socket课程设计报告 篇八

【关键词】C语言;教学方式;评价系统

1.引言

现阶段,我们国家的很多高职院校都将C语言看做是比较重要的课程,并且是计算机专业学习的基础,但是,经过相关调查显示,在学校任职的教师在对C语言进行教学的过程中,比较普遍的反映就是比较难教,并且在教学的过程中教师基本上比较注重基本的专业知识的培养,而学生在学习C语言的过程中基本上的反应都是比较难学,所以说在C语言的教学过程中无论教师还是学生都极为不满意。

经过笔者深入的调查研究发现,在实施C语言程序设计的教学过程中主要存在以下几个问题:第一,在教学的过程中教师处于主体地位,学生基本上只是负责接收教师教的基本理论知识,不能有效的和老师进行互动,不能积极的发表自己的观点。第二,在教学过程之中,对学生细微意识的培养还远远不够。第三,对于学生成绩的好坏进行的评价基本上都是以考试成绩进行评价的,这样的评价方式明显是不合理的。第四,对于学生独立思考的培养不够,虽然在教学结束之后学生能够进行简单的编程,但是其综合素质方面是十分不完善的。

2.问题一,转变教学观念和教学模式

在教学过程中要不断的重视学生自主能力的培养,在学习过程之中要不断引导学生积极主动的学习,进而使得他们在学习方式上有所转变。对于在教学的过程中教师的教学地位进行重新的定义,经过研究之后教师在教学的过程中其地位主要在下面几个方面体现:(1)负责对课程进行设计。在教学的过程中,教师对于案例进行合理的分析,然后在此基础上进行教学,主要的目的是对学生的思维能力进行培养,为学生架构比较完善的知识体系结构。(2)在学生之间组织共同学习。在C语言的教学过程中分成不同的小组,然后让小组之间经常进行交流,那么一定程度上能够培养学生独立思考的能力。在教学的过程中最为主要的是要让学生了解为什么要学些C语言,不然在学生不知道为什么学习的情况下进行学习,那么他的学习就会存在一定的盲目性。(3)教师在学生学习过程中还要扮演一个合作者的角色。在教学的过程中要对学生的优点进行肯定,对于不同的学习要采取适合他们的教学方法,培养学生的兴趣,对于不同学习程度的学生设计不同的学习目标。(4)在教学过程中要及时的进行反思。主要是对教学过程中的教育方式、态度以及教学的重点进行反思,在此基础上对教学的过程进行总结,使得教学水平有效的提高。

3.问题二,协同学习与合作研究方式

由于信息技术的快速发展,使得个人获得知识的渠道有限。在教学的过程中可以根据学生的学习水平以及性格等各个方面,将能够互相学习的小组放在一个小组,这样在学习的过程中这些学生能够自主的进行学习。在学习的过程中,为了更好的掌握所学的知识就会更加及时的进行交流,久而久之也就形成了合作研究的学习方式。

4.问题三,编写符合学生思维规律的讲义

在C语言教学的过程中,之前对于语法一直都比较看重,教科书在编写的过程中比较的难懂,处于学习阶段的学生对此根本不能完全理解。在这样的教学模式之下,就使得学生即使能听懂C语言课程,但是却不能妥善的进行应用。在这样的背景之下,在编写C语言的教程的时候,需要按照学生的思维方式进行编写,这样使学生更加容易理解,并且在理解的基础上能够投入实用。教学过程中要注意培养学生的综合素质,不要使得培养的学生只能进行理论研究,却不能够将学习到的知识投入实用。

5.问题四,注重研究带动教学

随着教学改革的实施,现阶段属于一种创新性的教学模式,现代社会的发展最需要的就是创新型人才,要想培养这样的人才就需要运用创新型的教学模式。在创新性教学模式中,教学的主体是学生,教学的过程主体也是学生,因此在教学过程中一定要注重学生、教师间及时的交流沟通,同时强调在教学过程中教师、学生共同参与的重要性,最大限度的使学生创新思维的能力得到有效培养。

6.问题五,丰富教学方法和教学手段

在教学过程中,一定要充分考虑学生要求,然后根据学生可以接受的学习方式来进行教学,改变传统老师教、学生听的教学模式,对比较受学生欢迎的教师组织学习观摩,使得教学成功的案例被有效的推广。随着现如今互联网的快速发展,可以依靠互联网带动教学发展,并把传统教学模式融入到互联网教学中,进而大幅度提高教学小龙。对于那些难以理解的部分,增加动画演示。在教学的过程中要注意引导学生自主进行编程。请比较优秀的学生传授起学习的经验,培养学生合作的精神。

7.总结

经过一段时间的实践之后发现,现阶段我们所使用的教学方法是比较合理的,因为已经取得了非常显著的研究成果。在运用该教学方法之后学生自主编程的能力得到有效的提高,并且学生之间懂得了如何进行团队协作,学生对于为什么学习C语言也有了一个较为全面的认识。对于C语言的教学模式进行改革不是短时间内就能完成的,接下来还需要做很多的研究。

【参考文献】

[1]任正云.课程建设的探索实践与研究——以《C语言程序设计》为例[J].电脑知识与技术,2016(19)

[2]赵震伟.应用型高校《C语言程序设计》课程教学改革[J].黑龙江科技信息,2016(24)

[3]陶荷芳.浅谈如何在C语言教学中培养学生的合作能力[J].读与写(教育教学刊),2014(02)

[4]陈效兰,张岩.师生互动式研究型教学对创新型人才培养的探索[J].教育探索,2008(10):35-36

上一篇:五一记事作文下一篇:美容师座右铭