C语言实验指导书
- 格式:pdf
- 大小:522.62 KB
- 文档页数:9
《C语言程序设计》实验指导书
每次实验(10分)一共100分,最后折合成50分计入最
终成绩。
第一次实验(一星期完成)
内容一:熟悉编译环境和工具 在VS中键入以下的这段程序
1) 关键字变色, 自动缩近,智能提醒
2) 代码风格和注释
3) 编译出错, 连接出错。修改错误
4) 调试,断点,监控变量, 进入函数,跳出函数。 监控内存,监控堆栈 在linux中键入以下这段程序
1)熟悉VIM程序,gcc编译程序(开两个终端窗口)
2)熟悉GDB调试程序的基本技巧。 (list,backstrac; break, watch,delete; next, continue, run;
print,set,help) 其中,help命令是一个非常的参考,如果忘记了某条具体的命令,可以随时去参考help命令来得到相关的细节。
3)介绍《鸟歌的私房菜》这本书
内容二:登陆cms.hit.edu.cn网站,在线提交。
1) 熟悉基本的提交方法和规则
2) 现场演示反作弊程序的效果
程序: 输入:两个整数,用空格分隔,
输出:两个整数的和,计算两个整数的和的功能,要求用函数实现,同时如果输入有错误,
例如(12 abc)程序能够给出“error input”的提示。
参考输入:
12 33
参考输出:
45
参考输入:
12 abc
参考输出: error input
思考和扩展(无标准答案)
如果用户输入 12 12abc 如何判断并终止程序,输出“error input”的提示
第二次实验(一星期完成)
内容一:登陆ACM,演示OJ系统 1)介绍这个网站,有兴趣的同学可以去尝试一下()
内容二:计算工资/小时程序
1)强制类型转换
2)一共有多少位的算法
3)整形数的溢出,以及针对特定问题,如何解决溢出问题
注意:linux编译下应该加上 –lm 开关。
程序: 输入:工资数,小时数(整数,空格分隔)。
输出:工资/小时数(精确到小数点后2位),并根据四舍五入取整,然后将取整的数平方后
计算一共有几位,后三位分别是什么?
参考输入:
2345 2 input (separate by space)
参考输出:
1172.50 average salary 1173 round off to integer
7 number of digit
0 2 5 the last three digit (separate by space)
第三次实验(两星期完成)
内容一:介绍linux 下的grep,并给出相应的实例。重点介绍下面要用到的四个符号。
内容二:正则表达式
^ 代表字符串开始
. 代表任意字符
$ 代表字符串末尾
程序: 输入:正则表达式字符串 待匹配字符串,如果输入”$$$ $$$”程序终止。 输出:如匹配成功,输出整个字符串,如果匹配不成功,输出lost,然后等待下一次用户的
输入。
参考输入输出:
^a.$ abc regular express and target string (separate by space),input lost result, output
ab.$ ababc regular express and target string (separate by space), input
ababc match successfully, print the target string, output
$$$ $$$ 结束整个程序
编码提示:
1)分为4种情况
2)没有开始符号和结束符号的regular express 需要双层循环
第四次实验(两星期完成)
内容一:登陆project.software.hit.edu.cn 1)介绍这个网站,同时介绍git软件。鼓励同学们利用git跟踪和参与别人的源代码 2)介绍Git书籍
内容二:学习函数和字符串处理的函数 编写以下函数
函数一:单词内是否包含数字 int IsNumIn(char word[])
函数二:单词内是否包含空格 int IsSpcIn(char word[]) 函数三:去掉单词的前后空格,tab键 Trim(char oldWord[], char newWord[])
函数四:单词内部有空格,分解成多个单词 Seg(char words[], char wArray[][100] ) 假设单词
内部只有一个空格,没有两个连续空格的情况发生。
要求用利用gets来获得用户输入的字符串,不能用scanf来获得用户输入的字符串
内容三: 运用以前的几个函数,在main中完成下面的流程图的功能。
程序: 输入:字符串
输出:根据流程图处理后的字符串
参考输入:
Ros1e
参考输出:
error
参考输入:
︺代表一个空格
︺︺hello︺
参考输出:
hello 否单词中是否包含空格 单词中是否包含数字
去掉前后空格
根据空格分词, 并输出每一个词
结束 开始
输出“error” 是
输出单词 否
是 参考输入:
︺︺hello world︺
参考输出: hello
world
第五次实验(两星期完成)
内容一:
1)分别编写冒泡排序和快速排序两个算法。最后要变成两个函数,完成字符数组排序
功能 QuickSort(char wordList[30][30], int low, int high); high 代表数组最后一个元素的下标
BubbleSort(char wordList[30][30], int n); n代表数组中有多少个字符串需要排序
内容二: 1)编写循环读入每一个单词,直到读入$$$后终止; 2)把读入的单词输入到字符串数组中,分别调用两个排序功能对其进行排序。
3)提交两个不同的文件,quick.c , bubble.c 分别进行测试。分别占5分,加起来的和为
10分。
程序: 输入:20个单词
输出:排好序的20个单词
参考输入:
zhaoyan say
hello
world
to
you 参考输出:
hello
say
to
world you
zhaoyan
第六次实验(两星期完成)
内容一:
1) 把实验四和实验五的的函数分别写成 tool.c tool.h. Sort.c sort.h 四个文件,以便方便
别人调用。
2) 定义单词的结构体。
Typedef struct word{
Char[30] Eword; 保存英语单词
Char[100] Chinese; 保存词性和汉语意义 }WORD
3) 构造一个WORD结构体数组,利用gets读入每一行,利用Trim去掉前后空格,利
用Seg分割出两个字符串。
4) 用两个字符串对结构体数组中每一个WORD结构中的Eword, Chinese进行填充。
5) 然后修改排序算法,使得他能够对结构体数组进行排序。
6) 输出排完序的结构体数组。
程序: 输入:20行字符串 输出:排好序的20个WORD结构
参考输入:
abasement︺n.滥用
︺︺abandon︺v.抛弃,放弃︺︺ abandonment︺n.放弃
……………………..
参考输出:
abandon︺v.抛弃,放弃
abandonment︺n.放弃 abasement︺n.滥用
………………………………….
第七次实验(三星期完成)
链表的建立,遍历,插入,删除,查找(主要练习指针的知识),链表的内容来源于我提供的一个词典文本文件dict。
子实验一内容:(4分)
1) 以实验六中的单词的结构体为基础,建立一个链表结构。
2) 从一个文本文件读入,然后保存到一个链表中,将这一部分功能封装到
函数int Create(WORDNODE** head)函数中,返回一共有多少个单词,以
及整个链表的头节点(为什么这里要用指向指针的指针WORDNODE**
head)。
3) 然后遍历这个链表,输出到另外一个文件dict-list中。将这一部分功能封
装到函数Iterate(WORDNODE * head)函数中。
输入:读入一个dict的文本文件,内容如下。利用Create构建链表。 abandon︺v.抛弃,放弃
abandonment︺n.放弃
abasement︺n.滥用 输出:利用Iterate写到一个文件dict-list中, 内容如下:
abandon︺v.抛弃,放弃 abandonment︺n.放弃
abasement︺n.滥用
子实验二内容:(3分)
1) 利用gets函数来完成字符串的读入工作
2) 插入,删除功能中,要调用int IsNumIn(char word[]) 和Trim(char oldWord[], char
newWord[]) 两个函数对输入的单词进行必要的效验,如果输入的单词含有数字,插
入失败,提示用户”error”。用 Seg(char words[], char wArray[][100] )分割输入的字符
串 3) 插入时,考虑这个单词已经存在的情况,删除时,考虑这个单词不存在
的情况
输入:两行文本,第一行为要插入的单词,第二行为需要删除的单词。
google︺n.公司
︺rose︺︺
输出:链表内容写到一个文件dict-list中。同时,单词中含有数字,输出“error”
插入时如果单词存在,在标准输出中输出 “exist”, 删除时如果单词存在,
在标准输出中输出 “no exist”,
子实验三内容:(3分)