程序设计技能训练Word文档格式.docx
- 文档编号:22693327
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:31
- 大小:34.52KB
程序设计技能训练Word文档格式.docx
《程序设计技能训练Word文档格式.docx》由会员分享,可在线阅读,更多相关《程序设计技能训练Word文档格式.docx(31页珍藏版)》请在冰豆网上搜索。
3
基本知识综合训练(三)
4
综合性应用程序设计
20
说明:
具体实验题目任课老师可以根据授课对象做相应的调整。
实验一基本知识综合训练
(一)
一、实验目的与要求
1.加强程序基本结构、数组、字符数组和指针数组的练习,掌握字符数组和字符串函数的使用。
2.掌握与数组有关的算法。
3.进一步提高程序的设计能力和调试能力
4.要求:
上机前先编制程序并画出程序框图;
独立完成实验;
独立完成实验报告。
二、实验内容
1.输入一串字符,以“?
”结束,统计各字母出现的次数,并按字母出现的多少输出(先输出字母出现多的,次数相同的按照字母表顺序输出,不出现的不输出)。
2.插入排序(在输入的过程中完成排序)。
以任意次序读入20个数,将第1个数放入数组a的第一个元素中。
以后读入的数应与已经存入数组a中的数进行比较,确定它在从小到大排列中所应处的位置。
将该位置及其以后的元素向后推移一个数的位置,将新读入的数填入空出的位置中。
这样在数组a中的数总是从小到大排列的,处理完后输出。
3.从键盘上接收一个最多至9位整数、2位小数的数值,请将其转换成大写金额,即写成:
×
亿×
仟×
佰×
拾×
万×
元×
角×
分
的形式。
例如:
当从键盘上输入374910.56时,输出结果为:
佰叁拾柒万肆仟玖佰壹拾零元伍角陆分
或:
叁拾柒万肆仟玖佰壹拾零元伍角陆分
4.编程实现将字符串中最短的单词输出,在主函数中输入字符串,编写一个函数完成最短单词查找,例如:
输入:
Happynewyear最短单词为new,输出new。
5.用随机函数产生数据,设计二位整数的加、减、乘算式各一题(减法算式应保证被减数大于减数)。
让学生回答,由计算机给出正确与否的判断,并最后给出总得分。
得分计算方法:
算对加、减法各得30分,算对乘法得40分,算错得0分。
然后由计算机输出询问信息,学生选择回答,以决定是否继续一次新的测验。
三、实验步骤及结果
四、分析与体会
实验二基本知识综合训练
(二)
1.掌握结构体类型变量的定义和使用;
2.掌握链表的概念,掌握对链表的综合操作操作;
1.设有n个人围做在圆桌周围,从某个位置开始用自然数进行编号为1,2….,n.然后从编号为k的人从1开始报数,数到m的人便出列;
下一个人(第m+1个)又从容不迫开始报数,数到m的人便是第二个出列的人.如此继续下去直到最后一个人出列为止。
要求输出这个出列的顺序。
这个问题称为约瑟夫问题。
具体要求如下:
(1)n\m\k由键盘输入,输入前要有提示。
(2)在输入n后,动态建立方法说明中所需要建立的数组空间;
程序运行结束时释放该存储空间。
(3)在输出时,各编号之间用两个空格来分隔。
(4)分别用n=8,m=4,k=1以及n=10,m=12,k=4调试运行你的程序.
2.将一条链表上相邻的二个结点合并成一个结点,即将第一个结点与第二结点合并,将第三个结点与第四个结点合并,……。
若链表上的结点个数为奇数,则最后的一个结点不合并,直接作为合并后链表上的最后一个结点。
链上结点的数据结构为:
stuctnode{intdata;
structnode*next;
};
3.从键盘上输入若干个数,以-1结束,按照与输入相反的顺序建立一个链表,并输出。
要求建立链表和输出链表用函数实现。
选作题:
1.读入一串字符,以“?
”结束,将其中的字母组成先进先出的链表并输出链表。
2.读入一串字符,以“?
”结束,将其中的字母组成先进后出的链表并输出链表。
3.读入一批数,以负数结束,将正数组成排序的链表并输出,然后读入一个数,从链表中删除该数并输出。
再读入一个数,将它插入排序链表中并输出。
(用函数)
4.建立某航班的乘客订票链表。
该链表的每个结电包括乘客号和订票张数,且链表是按乘客号排序的。
第一个结点比较特殊,它的乘客号为-1,订票张数为该航班已经订的张数(开始为0)。
每当输入一个乘客号及定票张数时,系统应首先检查已订票张数是否超过该航班允许订票张数(例如200),若超过只能订较少的票或者不能订。
然后检查在链表中有无乘客号相同的,若有则在原订票张数上增加,否则插入。
当输入订票张数为负数时,表示退票,退票必须能查到同号的结点,否则为错。
退票张数只能退原定张数。
如果已全退,应将结点删除。
修改头结点,输出每次实际订票张数、退票张数及出错信息。
当输入乘客号为-100时结束并输出链表。
实验三基本知识综合训练(三)
1.掌握使用文件打开、关闭、读、写等文件操作函数;
2.学会用缓冲文件系统对文件进行的综合操作;
3.进一步提高程序的设计能力和调试能力;
二、实验内容(第六小题必做,其他6选2)
1.编写程序将两个数据递增的整数文件合并,形成一个新的文件,要求保持数据的递增性。
2.有5个学生,每个学生有3门课的成绩,从键盘上输入以上数据,计算平均成绩,将原有的数据和计算出的平均成绩存放在磁盘文件中。
3.将2题中的学生数据,按平均分进行排序处理,将已经排序的学生数据存入一个新文件中。
4.对3题已经排好序的文件进行插入处理,插入一个学生的数据,计算平均成绩,然后按照平均成绩的顺序插入。
插入后建立一个新文件。
5.将一个文本文件中的字符进行加密后另存到。
加密规则为:
字母用下一个字符替换,如:
a换成b,…..z换成a。
其他不变。
6.下表为学生的学习情况(必做)
学号(num)
姓名(name)
年龄(age)
成绩(grade)
20101
Zhangming
19
95.6
20102
Whangyi
18
92.3
20103
Shaoyi
20
81.4
20104
Lilin
88.9
20105
Goujingjing
88.7
20106
Hanxing
19
86.5
20107
Mamingyu
93.2
20108
Gaofang
82.1
20109
Linfang
98.4
20110
Zhangjayi
17
79.8
要求如下:
●将上面的内容按结构体类型写入随机文本文件st.dat中。
●对此文件按成绩从低到高进行排序(用冒泡法),并输出排序结果。
●输入一个分数范围如(80-89.9),统计此分数段内的学生数。
●输入一个分数,用折半(对分)查找法查找获此分数的学生的学习情况并输出。
实验四综合性应用程序设计
1.通过一个综合程序设计,复习和学习C语言知识,将变量、数组、指针、结构体及文件的应用融为一体,通过编程掌握分析问题的方法,掌握利用高级语言程序设计解决问题的方法,进一步提高实践动手能力和程序调试能力。
2.要求:
二、实验内容(2选1)
1、学生管理系统
已知有20个学生记录(包括学号、姓名、班级、性别、出生年月、成绩)的文件student.dat,所有学生以学号从小到大排序(该文件自行建立)。
要求:
编程序实现查询、排序、插入、删除等功能。
具体要求如下:
(1)要求显示如下界面
****************************************
1--------------查询
2--------------排序
3--------------插入
4--------------删除
5--------------退出
通过选择1-4来确定要做哪一个操作。
(2)若选1,则出现如下界面
1.1----------按学号查询
1.2----------按姓名查询
1.3----------按成绩查询
通过选择1.1-1.3来确定要做哪一个操作,其中:
按学号查询用二分法实现;
按姓名查询用顺序法实现;
按成绩查询实现查询成绩小于m分的学生;
找到该生将学生记录输出到屏幕,若查无此人,输出相关信息。
(3)若选2,则按成绩从大到小排序,姓名,学号顺序也随之调整。
(4)若选3,将一个新学生记录按学号顺序插入,并把结果保存到文件student.dat中。
(5)若选4,删除指定学生的记录,并把结果保存到文件student.dat中。
(6)若选5,则退出程序。
(7)以上各个功能均编写成子函数,由主函数调用实现。
2、工资报表管理系统
已知N个职工的姓名、职工编号、基本工资、附加工资和扣除工资。
要求:
编写函数:
①计算每个职工的实发工资;
②按职工编号由小到大顺序排列,相应数据也要随之调整;
③要求输入一个职工编号,用折半查找法找出该职工的数据,从主函数输入要查找的职工号,输出该职工的数据;
④将排列后的所有职工的数据存放在磁盘文件“gzbb.dat”中,磁盘文件的格式如下:
GongZiBaoBiao
************************************************************
bhxmjbgzfjgzkcgzsfgz
802211zhoupeng
……………………………………
*************************************************************
name:
XX-XX-XX
date:
注意:
在name与date中填入个人姓名与制表日期
以上各个功能均编写成子函数,由主函数调用实现。
根据题意此题用5个函数完成:
●main函数:
总控函数
●compute函数:
计算函数(求每个职工的实发工资)
●sort函数:
排序函数(按职工编号从小到大排列)
●search函数:
查找函数(按给定的职工编号进行查找)
●output函数:
输出排列后的所有职工数据(建立磁盘数据文件)
取系统日期函数:
structdated;
getdate(&
d)structdate在头文件dos.h中定义。
选作实验:
求皇后问题
一实验目的要求
1练习为数组动态分配与释放存贮空间。
2掌握回溯法这种算法的设计方法。
二实验内容和步骤
由n2个方块排成n行n列的正方形称为“n元棋盘”。
如果两个皇后位于n元棋盘上的同一行或同一列或同一对角线上,则称它们为互相攻击。
要求输入使n元棋盘上的n个皇后互不攻击的所有布局。
(1)n由键盘输入,输入前要有提示。
(2)在输入n后,动态建立方法说明中所需要建立的数组空间;
程序运行结束时释放该存贮空间。
(3)分别用n=4,5,6运行你的程序。
方法提示:
首先定义一个长度为n+1的一维数组a,其中每一个元素a[i](i=1,2,…,n)随时记录第I行上的皇后所在的列号(为直观起见,其中数组元素a[0]不用)。
容易验证,第i行与第j行上的皇后在某一对角线上的充要条件为|a[i]-a[j]|=|j-1|
而它们在同一列上的充要条件为
a[i]=a[j]
回溯法求解皇后问题的方法如下。
从第一行(即i=1)开始进行以下过程。
设前i-1行上的皇后已布局好,即它们均互不攻击。
现在考虑安排第i行上的皇后的位置,使得与前i-1行上的皇后也互不攻击。
为了实现这一点,可以从第i行皇后的当前位置a[i]开始向右进行搜索:
(1)若a[i]>
n,则将第i行皇后放在第一列,且回退一行,考虑第i-1行上的皇后与前i-2行上的皇后均互不攻击的下一个位置。
此时如果已退到第0行(实际没有这一行),则过程结束。
(2)若a[i]≤n,则需检查第i行上的皇后与前i-1行上的皇后是否互不攻击。
若有攻击,则将第i行上的皇后右移一个位置(即a[i]=a[i]+1),重新进行这个过程;
若无攻击,则考虑安排下一行上的皇后位置,即i=i+1。
(3)若当前安排好的皇后是在最后一行(即第n行),则说明已经找到了n个皇后互不攻击的一个布局,将这个布局输出(即输出a[i],i=1,2,…,n)。
然后将第n行上的皇后右移一个位置(即a[n]=a[n]+1),重新进行这个过程,以便寻找另一种布局。
错误信息
1警告信息
1.'
xxxxxxxx'
declaredbutneveruse
说明了'
但未使用。
在源文件中说明了改变量,但没有使用。
2.'
isassignedavaluewhichisneverused
'
被赋以一个不使用的值。
该变量出现一个赋值语句中,但直到函数结束都未使用过。
3.'
notpartofstructure
不是结构的一部分。
出现在点(.)或箭头(->
)左边的域名不是结构的一部分;
或者点的左边不指向结构。
4.'
ambiguousoperatorsneedparentheses'
二义性操作符需要括号。
如:
两个位移、关系或按位操作符在一起使用而不加括号,一加法或减法操作符不加括号与一位操作符出现在一起
5.bothreturnandreturnofavalueused
即用返回又用返回值。
编译程序发现一个与前面的RETURN语句不一致的RETURN语句。
当某函数只在部分RETURN语句中返回值时,一般会发生本错误。
6.calltofunctionwithprototype
调用无原型函数。
“原型请求”警告可用,且又调用了一无原型函数。
7.calltofunction'
xxxx'
withprototype
调用无原型的'
函数。
原型请求”警告可用,且又调用了一个原先没有原型的函数'
。
8.codehasnoeffect
代码无效。
编译程序遇到一个含无效操作符的语句,如“a+b;
”,对每一变量都不起作用,且可能要引起一个错误。
9.constantislong
常量是Long类型。
当编译程序遇到一个十进制常量大于32767,或一个八进值常量大于65535,而其后没有字母“I”或“L”时,把此常量当作Long类型处理。
10.constantoutofrangeincomparision
比较时常量超出了范围。
在源文件中有一比较,其中一个常量子表达式超出了另一个子表达式类型所允许的范围。
一个无符号量与-1比较就没有意义。
为了得到一个大于32767(十进制)的无赋好书,可以在常量前面加上unsigned(如(unsigned)65535),或在常量后加上字母“u”或“U”(如65535u)
11.conversionmaylosesignificantdignits
转换可能丢失高位数字。
在赋值操作或其他情况下,源程序要求把long或unsignedlong类型转换成int或undesignedint类型。
12.functionshoultreturnavalue
函数应返回一个值。
源文件中说明的当前函数的返回类型即非int型也非void行,编译程序未发现返回值。
13.mixingpointertosignedandunsignedchar
混淆signed和unsignd字符指针。
没有通过显示的强制类型转换,就把一个字符指针转换为无符号指针,或相反。
14.nodeclarationforfunction'
函数'
没有说明。
“说明请求”警告可用,而又调用了一个预先没有说明的函数。
15.non-portablepointerassignment
不可移植指针赋值。
源文件中把一个指针赋给另一个非指针,或相反。
但作为特例,可以把常量赋个一个指针,此时可强行抑制本警告。
16.non-portablepointercomparision
不可移植指针比较。
源文件中把一个指针与另一个非指针做比较。
但作为特例,可以把常量零予以个指针做比较,此时可强行抑制本警告。
17.non-portablereturntypeconversion
不可移植返回类型转换。
Return语句中的表达式类型和函数说明的不一致。
作为特例,如果函数或返回值表达式为一个指针时可以的,在这种情况下,返回指针的函数可能返回一个常量零,被转换成一个合适的指针值。
18.parameter'
isneverused
参数'
没有使用。
函数说明中的某参数在函数体中从未使用,通常是由于参数名拼写错误引起的。
如果在函数体中该标识符被重新定义为一个自动(局部)变量,也将发生本警告。
该参数被标识为自动变量但未使用。
19.possiableuseof'
beforeused
在定义'
之前可能已使用。
源文件中的某一表达式中使用了未经符值的变量,编译程序队员文件进行简单扫描已确定此文件。
如果该变量出现的物理位置在对它赋值之前,就会产生本警告,当然,程序的实际流程可能在使用前已赋值。
20.possibleincorrectassignment
可能的不正确赋值。
例如,编译程序遇到赋值操作符作为条件表达式(如if、while、do-while语句的一部分)的主操作符,这通常是由于把赋值号当作等号使用了。
如希望禁止此警告,可把赋值语句用括号括起来,并把它与零作显示比较,如:
if(a=b)…应写为if((a=b)!
=0)…
21.redefinitionof'
isnotidentical
重定义不相同。
源文件中对命令宏重定义时,使用的正文内容与第一次定义的不相同,新内容将代替旧内容。
22.restartingcompilerusingassembly
用汇编重新启动编译。
编译程序遇到一个未使用命令行选择项-B或#pragmainline语句的asm。
23.structurepassedbyvalue
结构安值传送。
通常是在编制程序时,把结构作为参数传递,而又漏掉了地址操作符(&
)。
24.superfluous&
withfunctionorarray
在函数或数组重油多余的符号“&
”。
取值操作符(&
)对一个数组或函数名是不必要的。
应该去除。
25.suspiclouspointerconversion
值得怀疑的指针转换。
编译程序遇到一些指针转换,这些转换引起指针指向不同的类型。
26.undefinedstructure'
结构'
未定义。
在源文件中使用了该结构,但为定义,。
这可能是由于结构名拼写错误或忘记定义引起的。
27.unknownassemblerinstruction
不认识的汇编指令。
编译程序发现在插入的汇编语句中有一个不允许的操作符
28.unreachablecode
不可达代码。
Break,continue,goto或return语句后没有跟标号或循环函数的结束符。
编译程序使用一个常量测试条件来检查while,do和for循环,并试图知道循环没有失败。
29.voidfunctionmaynotreturnavalue
void函数不可以返回值。
源文件中的当前函数说明为void,但编译程序发现一个带常值的返回语句,该返回语句的值将被忽略。
30.zerolengthstructure
结构长度为零。
在源文件中定义了一个总长度为零的结构,对此结构的任何使用都是错误的。
2编译错误信息
编译系统查出的源程序错误分为三类:
致命错误、一般错误和警告错误。
致命错误一般很少出现,它通常是内部编译出错。
一旦出现这类错误,编译立即停止。
所谓一般普通错误通常是指源程序中的语法错误、存取数据错误或命令错误等。
编译系统遇到这类错误时,一般也要停止编译。
警告信息是指出一些值得怀疑的情况,而这些情况有可能是源程序中合理的一部分。
因此警告信息只是提醒用户注意,编译过程并不停止。
编译系统在发现源程序中各类的错误时,首先显示错误信息,然后显示源文件名以及出错的行号。
但必须注意,真正有错误的位置可能在前一行,甚至可能在前几行,有时,好像发生了许多错误,而实际上可能是有一个错
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 技能 训练