《程序设计实践》教学大纲.docx

上传人:b****5 文档编号:3244981 上传时间:2022-11-21 格式:DOCX 页数:19 大小:48.01KB
下载 相关 举报
《程序设计实践》教学大纲.docx_第1页
第1页 / 共19页
《程序设计实践》教学大纲.docx_第2页
第2页 / 共19页
《程序设计实践》教学大纲.docx_第3页
第3页 / 共19页
《程序设计实践》教学大纲.docx_第4页
第4页 / 共19页
《程序设计实践》教学大纲.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

《程序设计实践》教学大纲.docx

《《程序设计实践》教学大纲.docx》由会员分享,可在线阅读,更多相关《《程序设计实践》教学大纲.docx(19页珍藏版)》请在冰豆网上搜索。

《程序设计实践》教学大纲.docx

《程序设计实践》教学大纲

课程编号:

02202001

课程名称:

程序设计实践

课程性质:

专业基础限选

总学时:

30(实践学时30)学分:

2

适用专业:

计算机科学与技术

《程序设计实践》教学大纲

一、教学目标

《程序设计实践》课程的教学目标旨在训练学生C语言编程的基本能力。

通过本课程的训练,使学生具备后续程序设计类课程,如数据结构、算法分析与设计等,所要求的编程能力,为这些教学活动的顺利开展打下良好基础。

二、教学说明

《程序设计实践》分模块对学生的C语言编程技能进行训练,涵盖了基本设计方法、输入输出、指针、字符串、参数传递、递归调用、文件操作等项目。

这些技能即是后续与程序设计类课程经常要用到的,也是日后从事C语言程序开发所必备的,乃至对掌握其他编程语言,如C++、Java和C#等也是非常有益的。

训练模块的设计,以及各模块中训练题目的选择是基于以往教学经验,挑选学生普遍薄弱以及未来经常使用的编程技能编辑而成。

教师可根据具体情况,特别是学生对C语言编程的掌握情况,灵活调整训练模块和模块中的训练题目。

目前各模块基本相对独立,前后顺序可以调整,但仍建义将实验一和实验二放在最开始;实验三不晚于实验六;实验四不晚于实验五。

建议每次课能抽出部分时间对与本模块相关的理论知识做简单归纳总结。

本课程是对编程能力的训练,因此反对学生参考成熟的程序,甚至鼓励学生尽量少用库函数,而是自己独立编程实现。

这一点与其他程序设计类课程有所不同,望在教学实施过程中予以注意。

本课程虽是对编程能力的训练,但在注重结果正确的前提下,也应注意对学生良好编程风格的培养。

鼓励学生选择与训练模块相关的,来自于自己程序开发实践活动的题目参与训练,但要事先征得教师的认可。

如果条件允许,应该全程开展对训练结果的机器自动检查。

三、教学内容及要求

实验一基本设计方法训练

(一)实验内容

本次实验对基于程序流程图写代码,以及通过程序流程图分析代码的程序设计方法进行训练。

实验题目分如下两大类,学生可分别从每类中选择1道来完成:

1.流程图转换为代码

(1)写出下列流程图对应的代码

 

(2)写出下列流程图对应的代码

2.代码转换为流程图

(1)画出下列代码的流程图

p=head;

for(j=1;j

p=p->next;

while(head->next!

=head)

{

for(j=1;j

p=p->next;

q=p->next;

p->next=q->next;

printf("%d",q->number);

if(q==head)

head=q->next;

free(q);

p=p->next;

}

printf("%d\n",head->number);

(2)画出下列代码的流程图

r1=head1;

p1=head1->next;

r2=p2=head2->next;

while(p1&&p2)

{

if(p1->index==p2->index)

{

p1->modulus=(p1->modulus)+(p2->modulus);

p2=p2->next;

free(r2);

r2=p2;

r1=p1;

p1=p1->next;

}

elseif(p1->index>p2->index)

{

r2->next=p1;

r1->next=r2;

p2=p2->next;

r2=p2;

}

elseif(p1->indexindex)

{

r1=p1;

p1=p1->next;

}

}

(二)实验要求

能写出程序流程图对应的代码,并能画出代码对应的程序流程图。

实验二输入输出格式控制训练

(一)实验内容

本次实验对输入输出语句的使用,主要是格式控制参数的使用进行训练。

实验题目分如下两大类,学生可分别从每类中选择2道来完成:

1.输入语句

(1)读入一组以空格分隔的数,把它们存入数组,用逗号分隔的方式输出,并统计数的个数。

例:

【输入】2037.543587.0【回车】

【输出】20,37.5,43,5,87.0

5

(2)按照“学号【空格】姓名【空格】性别【空格】年龄【回车】”的格式输入若干学生信息,将他们存储在结构体数组中(即每一个学生的信息存储在一个结构体中),输入以“##”结束。

统计学生信息数量,并按行输出每条学生信息(逗号分隔)。

例:

【输入】20142101zhangMale19【回车】

20142102wangFemale18【回车】

##【回车】

【输出】2

20142101,zhang,Male,19【回车】

20142102,wang,Female,18【回车】

(3)读入一组以制表符(Tab)分隔的数,把它们存入数组,并用逗号分隔输出。

例:

【输入】5【Tab】35【Tab】15【Tab】100【回车】

【输出】5,35,15,100【回车】

2.输出语句

(1)打印如下图形,层数由用户输入,最后一行左侧顶格。

*

***

*****

*******

(2)打印如下图形,层数由用户输入,中间一行左侧顶格。

*

***

*****

***

*

(3)打印倒的杨辉三角形,层数由用户输入,第一行左侧顶格。

例:

1331

121

11

1

3.综合类

(1)输入一组以逗号分隔的整数,以回车结尾,以每行5个,空格分隔,左对齐的方式输出它们。

例:

【输入】100,21,3950,7,8,3289,943,495,34134,343,209,47,2,7293,29,2732,843,392,24【回车】

【输出】10021395078

328994349534134343

209472729329

273284339224

(2)输入一组以逗号分隔的整数,以回车结尾,以每行5个,空格分隔,右对齐的方式输出它们。

例:

【输入】100,21,3950,7,8,3289,943,495,34134,343,209,47,2,7293,29,2732,843,392,24【回车】

【输出】10021395078

328994349534134343

209472729329

273284339224

(3)输入一组以空格分隔的英文单词,以回车结尾,以每行5个,空格分隔,左对齐的方式输出它们。

例:

【输入】

MachinelearningisthetermthatreferstolearningpatternsinthedataInotherwords【回车】

【输出】Machinelearningistheterm

thatreferstolearningpatterns

inthedataInother

words

(4)输入一组以空格分隔的英文单词,以回车结尾,以每行5个,空格分隔,右对齐的方式输出它们。

例:

【输入】

MachinelearningisthetermthatreferstolearningpatternsinthedataInotherwords【回车】

【输出】Machinelearningistheterm

thatreferstolearningpatterns

inthedataInother

words

(5)输入一组以逗号分隔的小数,以回车结尾,以每行5个,空格分隔,小数点对齐的方式输出它们。

例:

【输入】10.0,2.1,39.50,7.8,328.9,9.43,49.5,341.34,34.3,2.09,0.47,2.0,7.293,29.00【回车】

【输出】10.02.139.507.8328.9

9.4349.5341.3434.32.09

0.472.07.29329.00

(6)输入一组以空格分隔的英文单词,以回车结尾,以每行5个,空格分隔,中间对齐的方式输出它们。

例:

【输入】

MachinelearningisthetermthatreferstolearningpatternsinthedataInotherwords【回车】

【输出】Machinelearningistheterm

thatreferstolearningpatterns

inthedataInother

words

(二)实验要求

能利用输入输出语句完成相应任务。

实验三指针及字符串训练

(一)实验内容

本次实验对指针的使用和字符串的操作进行训练。

实验题目如下,学生可从中选择2道来完成:

1.用指针操作实现一个二维数组的转置运算。

输入:

输入包含m+1行。

第一行是整数m和n,两项之间用一个空格隔开(1<=m,n<=10)。

其中,m,n分别为数组的行数和列数。

第二行到第m+1行每行均有n个整数,相邻两项之间用一个空格隔开。

输出:

包含n行,是转置后的二维数组。

每行均有m个整数,相邻两项之间用一个空格隔开。

例:

【输入】32【回车】

12【回车】

45【回车】

78【回车】

【输出】147【回车】

258

2.输入一段英文,从中找出最长的英文单词。

英文单词由空格分隔。

(用字符指针实现,且不能调用库函数。

)注:

英文单词只包含大写字母和小写字母;若最长的英文单词有多个,则输出第一个。

3.输入一串符号,将其中连续的阿拉伯数字视为整数,计算并输出它们的和。

(用字符指针实现,且不能调用库函数。

例:

【输入】whde12fkvf834ddei5sdlm3790wo【回车】

【输出】4641(因为12+824+5+3790=4641)

(二)实验要求

能利用指针完成相应任务,并能对字符串进行操作。

实验四参数传递训练

(一)实验内容

本次实验对函数调用过程中的参数传递进行训练。

实验题目如下,学生可从中选择2道来完成:

1.二维矩阵A和B作为输入参数,传入函数ADD,函数ADD完成A+B的运算,结果放在二维矩阵C中。

SELECTMIN函数负责找出C中值最小的元素。

编程实现上述函数,最终要求输出C和C中最小元素的值。

不能用全局变量。

2.字符串str1和str2作为输入参数,分别传入cut函数。

cut函数负责从传入的字符串中截取指定范围(例如:

从第2个字符开始,到第5个字符结束的部分)的内容(截取范围也作为cut函数的输入参数传入。

)。

截取结果分别放在字符串str3和str4中。

再将str3和str4作为输入参数传入connect函数。

connect函数负责将传入的两个字符串顺序拼接在一起。

编程实现上述函数,要求最终输出拼接结果。

不能用全局变量。

3.每个学生信息存储在一个结构体中,结构体包括学号、数学成绩、英语成绩、计算机成绩、平均成绩五部分。

Ave函数负责计算一个学生的平均成绩。

Find函数负责找到平均成绩最高的学生,Print函数负责按表格的形式输出一个学生的全部信息,内容全部左对齐,表头为“No.Math.Eng.Comp.Ave.”。

编程实现上述函数,要求输出一个班中(不少于8人)平均成绩最高的学生的信息。

(二)实验要求

掌握根据需求选择正确的参数传递方式完成相应任务的技能。

实验五递归调用训练

(一)实验内容

本次实验对函数的递归调用进行训练。

实验题目分如下两类,学生可分别从每类中选择1道来完成:

1.基本题

(1)用递归函数完成斐波那契级数的计算,并输出斐波那契级数序列的前n项。

n由用户输入。

(2)用递归函数完成下列函数的计算,并输出序列的前n项。

n由用户输入。

2.提高题

(1)用递归函数实现将给定正整数转换为二进制数的功能,并输出转换结果。

正整数由用户输入。

例:

【输入】256

【输出】100000000

(2)用递归函数实现将给定的纯小数换为二进制数的功能,并输出转换结果。

纯小数由用户输入。

例:

【输入】0.625

【输出】0.101

(二)实验要求

能设计实现递归函数完成相应任务。

实验六文件操作训练

(一)实验内容

本次实验对文件的打开、关闭和读写等操作进行训练。

实验题目分如下三类,学生可分别从每类中选择1道来完成:

1.文件读操作

(1)直接通过对文件的读操作(即不允许将文件内容全部读入到缓冲区中),统计已知的文本文件(txt格式)中总共有多少个英文字符(区分大小写,且不算标点符号)。

例如:

Machinelearningistheterm.中的英文字符为24个。

(2)直接通过对文件的读操作(即不允许将文件内容全部读入到缓冲区中),统计已知的文本文件(txt格式)中的英文单词个数(以空格或标点符号分隔的字符串视为一个英文单词)。

例如:

Machinelearningisn’taword.中的英文单词为6个。

2.文件写操作

(1)通过对文件的直接读写操作(即不允许将文件内容全部读入到缓冲区中,也不允许将缓冲区中的内容写到文件中),将已知的文本文件(txt格式)中的指定字符c1修改为特定字符c2。

c1和c2由用户指定,并作为程序的输入。

(2)通过对文件的直接读写操作(即不允许将文件内容全部读入到缓冲区中),将已知的文本文件(txt格式)中的指定单词w1修改为特定单词w2。

w1和w2由用户指定,并作为程序的输入。

3.文件创建操作

(1)通过对文件的直接读写操作(即不允许将文件内容全部读入到缓冲区中),复制已知文本文件file1中的内容到一个新的文本文件file2中。

注意在file2中保持源文件中的格式。

(2)通过对文件的直接读写操作(即不允许将文件内容全部读入到缓冲区中),将已知文本文件file1中指定位置的指定长度的字符串复制到一个新的文本文件file2中。

指定位置由行号和起始字符位置给出。

例如:

文件file1中第1行的内容为:

Machinelearningistheterm.则复制第1行第5个字符开始的6个字符到file2中后,file2的内容为:

inele

(二)实验要求

能通过对文件的操作完成相应任务。

实验七控制结构训练训练

(一)实验内容

本次实验对控制结构以及控制结构的嵌套进行训练。

实验题目如下,学生可从中选择2道来完成:

1.随机输入n个正整数,编程分别求出其中在奇数位序上的(即第1、3、5、7、….个)奇数的和,以及偶数位序上的((即第2、4、6、8、….个))偶数的和。

2.编写程序,不断读取用户的键盘输入(回车分割)。

如果是英文字母则一律转换为小写字母,依次存入一个足够长的字符数组中;如果是阿拉伯数字(不超过4位)则依次放到一个足够长的整数数组中;如果是其他符号,则将其ASCII存入另一个数组中。

最后输出3个数组中的内容。

3.在一段英文文章中,找到给定字符串str的所有出现,输出其出现的位置。

编程实现之。

(二)实验要求

能利用顺序、分支、循环,以及它们的各种嵌套完成相应的任务。

实验八调试测试训练

(一)实验内容

本次实验对程序的调试和测试进行训练。

实验题目如下,学生可从中选择1道来完成:

1.约瑟夫问题:

假设有n个人围圈而坐,现在从第k人开始数数,数到m的人出列,紧接着的后续人又从1开始数数,到m出列,如此重复下去,直到全体人员出列。

输出出列序列。

#include

#include

#include

typedefstruct_foruse

{

struct_foruse*next;

intnumber;

}foruse,*link;

linkcreate(intn);

voidjoseph(linkhead,intk,intm);

linkcreate(intn)

{

linkhead=(link)malloc(sizeof(foruse));

foruse*tail;

inti;

head->next=head;

head->number=1;

tail=head;

for(i=2;i<=n;i++)

{

foruse*p=(foruse*)malloc(sizeof(foruse));

p->number=i;

p->next=tail->next;

tail->next=p;

tail=p;

}

returnhead;

}

voidjoseph(linkhead,intk,intm)

{

intj;

foruse*p;

foruse*q;

if(m==1&&k==1)

{

p=head;

while(p->next!

=head)

{

printf("%d",p->number);

q=p->next;

free(p);

p=q;

}

printf("%d\n",p->number);

}

elseif(m==1&&k!

=1)

{

p=head;

for(j=1;j

p=p->next;

while(head->next!

=head)

{

q=p->next;

p->next=q->next;

printf("%d",q->number);

if(q==head)

head=q->next;

free(q);

}

printf("%d\n",head->number);

}

else

{

p=head;

for(j=1;j

p=p->next;

while(head->next!

=head)

{

for(j=1;j

p=p->next;

q=p->next;

p->next=q->next;

printf("%d",q->number);

if(q==head)

head=q->next;

free(q);

p=p->next;

}

printf("%d\n",head->number);

}

}

voidmain()

{

linkhead;

intm,n,k;

printf("pleaseinputn,m,k:

");

scanf("%d,%d,%d",&n,&m,&k);

head=create(n);

joseph(head,k,m);

}

2.约瑟夫问题:

假设有n个人围圈而坐,现在从第k人开始数数,数到m的人出列,紧接着的后续人又从1开始数数,到m出列,如此重复下去,直到全体人员出列。

输出出列序列。

#include

#include

typedefstructnode

{

intdata;

structnode*next;

}

LNode,*LinkList;

LinkListlook(LNode*p,inte)

{

LNode*p3;

p3=(LNode*)malloc(sizeof(LNode));

if(!

p3)exit

(1);

p3=p;

while(p3->next!

=p&&p3->data!

=e)p3=p3->next;

if(p3->next==p&&p3->data!

=e)

{

printf("noexist,enteragain\n");

scanf("%d",&e);

look(p,e);

}

return(p3);

}

intmain()

{

intx,s,y,i;

printf("pleaseenterthenumberofpeople:

\n");

scanf("%d",&x);

/*

while(x<=2||x>=50)

{

printf("outofrange,enteragain\n");

scanf("%d",&x);

}

*/

printf("entereachpeople'snumber\n");

LinkListhead=(LNode*)malloc(sizeof(LNode));

LNode*p1,*p2;

p1=head;

for(i=1;i<=x;i++)

{

p1->next=(LNode*)malloc(sizeof(LNode));

scanf("%d",&s);

p1=p1->next;

p1->data=s;

p1->next=head->next;

}

p1=head->next;

for(i=1;i<=x;i++)

{

printf("%d",p1->data);

p1=p1->next;

if(i%10==0)printf("\n");

}

printf("pleaseentertheintervalnumber\n");

scanf("%d",&y);

while(y<1)

{

printf("insignificance,erteragain\n");

scanf("%d",&y);

}

printf("enterthefirstnumber\n");

scanf("%d",&s);

p1=look(head->next,s);

while(p1->next!

=p1)

{

intj=1;

while(j

{

p1=p1->next;

j++;

}

p2=p1->next;

p1->next=p2->next;

printf("%d",p2->data);

free(p2);

p1=p1->next;

}

printf("OK!

\n");

return0;

}

(二)实验要求

能根据提示调试语法错误,能通过测试修正程序。

实验九综合训练

(一)实验内容

本次实验对学生使用前述实验中的各项技能完成所需任务的能力进行训练。

实验题目如下,学生可从中选择1道来完成:

1.手机通讯录中每条记录包括:

姓名、手机号、类别(如:

同学、亲属、同事、好友等)三部分内容。

请编写程序完成从文件导入手机通讯录,能对手机通讯录进行增、删、查、改,并能将手机通讯录导出到文件的功能。

2.编写程序,可以统计任给的一个英文文件(.txt格式)中每个英文字母(区分大小写)出现的频率,以及每个英文单词出现的次数。

并将统计结果分别输出到两个文件中。

结果按频率和次数的升序

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1