文档库 最新最全的文档下载
当前位置:文档库 › 实验

实验

《C语言程序设计》实验指导
=========================

一、实验目的

1) 加深对课堂讲授内容的理解,熟练掌握语法规则;
? 2) 熟悉C语言程序设计开发环境,熟悉具体计算机系统(包括硬件和软件)的操作方法;
3) 掌握上机调试程序的基本功,培养调试程序的能力;
4) 具有C语言程序设计的基本能力。

二、实验准备工作

1) 了解计算机系统的性能和使用方法,包括操作系统Linux与编译器gcc;
2) 复习与实验相关的教学内容;
3) 根据实验要求,分析问题,提出算法,独立编写程序,仔细检查,书写工整,符合语法规范;事先估计程序运行中可能出现的问题,标记程序中的疑点,上机时加以观察;
4) 准备调试和运行时需要的数据。

三、实验过程

1) 启动文本编辑器vim/vi,输入准备好的源程序,仔细编辑,检查录入错误并加以修改;要尽快熟练掌握这一步骤。
2) 启动C编译器gcc,编译和链接程序。这一步骤可能需要反复进行,其中出现的错误都必须改正,直到不再出现错误信息为止。
3) 运行程序,观察运行结果,分析是否合理,判断是否正确。必要时,重复运行几遍,包括采用不同的数据,检查程序在不同情况下的运行情况。
4) 打印输出或者记录程序清单和运行结果。
5) 整理并写出实验报告。

四、实验报告书

在实验报告书首页,认真填写姓名、学号、班级、专业、实验课程和实验日期等。

实验报告书包括以下内容:

(一)实验目的
(二)实验内容
(三)源程序[60%]
(四)程序调试情况[15%]
(五)程序清单(这是经过调试的、能够运行的、通常能够得到正确运行结果的程序。)[10%]
(六)运行结果[10%]
(七)分析与讨论(可选)[5%]

其中,方括号里面的百分数为实验报告评分比例。



实验一 C程序运行环境与运行方法
------------------------------

一、实验目的

1. 了解Linux操作系统的基本操作,包括普通用户如何登录与退出系统、命令行及常用命令的使用;
2. 初步学会独立使用vim/vi编辑器编辑C源程序;
3. 初步掌握gcc编译、链接C程序的基本使用方法;
4. 运行简单的C程序,掌握C程序设计的基本过程。

二、实验内容

1. 建立并运行K&R的著名Hello程序:
#include
int main (void) {
printf("Hello, World!");
}
编译时是否有警告信息?如果有,需要如何修改呢?


2. 通过下列方法缩写程序dweight.c:
(1) 用初始化式替换对变量height、length和width的赋值;
(2) 去掉变量weight,在最后的

printf语句中计算(volume + 165) / 166。

3. 编写程序,要求用户输入一个美元数量,然后显示出如何用最少的20美元、10美元、5美元和1美元来付款:
Enter a dollar amount: 93

$20 bills: 4
$10 bills: 1
$5 bills: 0
$1 bills: 3

三、预习内容

1. 《C语言程序设计--现代方法》(第2版)第1、2章;
2. 文档“C实验环境与工具”。


实验二 简单程序设计
-------------------

一、实验目的

1. 巩固已掌握的C程序开发基本过程、技术与方法;
2. 学会给程序添加注释,掌握C程序书写规范;
3. 了解变量的概念及应用;
4. 初步掌握输入输出函数的使用;
5. 掌握简单程序的一般形式,编写简单程序。

二、实验内容

1. 编写程序,要求用户输入一个美元数量,然后显示出增加3%税率后的相应金额。格式如下所示:

Enter an amount: 98.00
With tax added: $100.94

2. 编写程序,要求用户输入贷款金额、年利率和每月还款金额,然后计算
第一、第二、第三个月还贷后剩余的贷款金额,输出时保留两位小数:

Enter amount of loan: 10000.00
Enter interest rate: 6.0
Enter monthly payment: 386.66

Balance remaining after first payment: 9663.34
Balance remaining after second payment: 9325.00
Balance remaining after third payment: 8984.96

提示:每个月的贷款余额减去还款金额后,还需要加上贷款余额与月利率的乘积即利息。
把用户输入的年利率转换成百分数后再除以12就是月利率。

三、预习内容

1. 《C语言程序设计--现代方法》(第2版)第2章;
2. 文档“C实验环境与工具”。


实验三 格式化输入/输出
----------------------

一、实验目的

1. 理解并掌握转换说明、转义序列和格式串的概念和使用方法;
2. 学会正确调用printf函数;
3. 学会正确调用scanf函数。

二、实验内容

1. 编写程序,提示用户以格式(xxx) xxx-xxxx输入电话号码,并以格式xxx.xxx.xxxx显示该号码:

Enter phone number [(xxx) xxx-xxxx]: (404) 231-9883
You entered 404.231.9883

2. 编写程序,要求用户按任意次序输入从1到16的所有整数,然后用4X4矩阵的形式将它们显示出来,并计算出
每行、每列和每条对角线上的和:

Enter the numbers from 1 to 16 in any order:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

Row sums: 10 26 42 58
Column sums: 28 32 36 40
Diagonal sums: 34 34

3. 修改P32的程序addfrac.c,使用户可以同时输入两个分数,中间用加号隔开:

Enter two fractions separated by a plus sign: 3/4+

2/5
The sum is 23/20

三、预习内容

《C语言程序设计--现代方法》(第2版)第3章


实验四 表达式
-------------

一、实验目的

1. 理解并掌握算术运算符;
2. 理解并掌握赋值运算符;
3. 理解并掌握自增运算符和自减运算符;
4. 理解并掌握表达式的概念、求值和表达式语句。

二、实验内容

1. 编写程序,要求用户输入一个两位数,然后按数位的逆序打印出这个数。

Enter a two-digit number: 49
The reversal is: 94

2. 编写程序,读入用户输入的整数,然后按八进制数打印出来。

Enter a number between 0 and 32767: 2643
In octal, your number is: 05123

注意,由于32767对应的八进制数为77777,所以输出应为5位数。

3. 修改P39的程序upc.c,使用户可以一次输入11位数字,而不用先录入1位,再录入5位,最后再录入5位。

Enter the first 11 digits of a UPC: 0515*******
Check digit: 8

三、预习内容

《C语言程序设计--现代方法》(第2版)第4章


实验五 选择语句
---------------

一、实验目的

1. 理解并掌握逻辑表达式;
2. 理解并掌握if语句;
3. 理解并掌握switch语句。

二、实验内容

1. 编写程序,让用户输入4个整数,要求尽可能少地使用if语句,从中找出最大值和最小值:

Enter four integers: 21 67 10 5
Largest: 67
Smallest: 5

2. 编写程序,提示用户输入两个日期,然后显示哪一个日期更早:

Enter first date (mm/dd/yy): 10/2/13
Enter second date(mm/dd/yy): 2/28/10
2/28/10 is earlier than 10/2/13

3. 编写程序,要求用户输入一个两位数,然后显示该数对应的英文单词:

Enter a two-digit number: 53
You entered the number fifty-three

提示:两位数11-19需要特殊处理。除此之外,可把数分解为十位和个位两个数字,然后
使用switch语句显示十位数字对应的单词(如fifty);
再用switch语句显示个位数字对应的单词(如three)。

三、预习内容

《C语言程序设计--现代方法》(第2版)第5章


实验六 循环
-----------

一、实验目的

1. 理解并掌握循环控制的概念与方法;
2. 熟练掌握while语句、do语句和for语句。

二、实验内容

1. 编写程序,要求用户输入一个整数,然后逆序打印出这个数。

Enter a number: 9325
The reversal is: 5239

提示:使用do循环将输入的数重复除以10,直到值为0。

2. 修改实验二程序2,要求用户输入还贷的次数并显示每次还贷后剩余的贷款金额。


3. 数学常量e的值可以用一个无穷级数表示


e = 1 + 1/1! + 1/2! + 1/3! + ...
编写程序,用下面的公式计算e的近似值:
1 + 1/1! + 1/2! + 1/3! + ... + 1/n!
其中,n是用户输入的整数。

4. 修改上一程序,让用户输入一个较小的浮点数ε,并使程序持续执行加法运算,直到当前项小于ε为止。


三、预习内容

《C语言程序设计--现代方法》(第2版)第6章


实验七 基本类型
---------------

一、实验目的

1. 理解和掌握整数类型;
2. 理解和掌握浮点类型;
3. 理解和掌握字符类型;
4. 理解和掌握类型转换。

二、实验内容

1. 编写程序,根据用户输入的英文名和姓,先显示姓氏,其后跟一个逗号,然后显示名的首字母,最后加一个点:

Enter a first and last name: Bruce Molay
Molay, B.

2. 编写程序,计算句子的平均词长(保留一位小数):

Enter a sentence: Why do we try to make programming like something else?
Average word length: 4.5

为简单起见,程序中把标点符号看作其前面单词的一部分。

3. 编写程序,计算正整数的阶乘:

Enter a positive integer: 7
Factorial of 7: 5040

先用short类型变量,然后分别使用int、long、long long、float、double和long double等类型变量存储阶乘的值。
为了正确打印出n的阶乘,各种类型的n的最大值是多少?

注意,程序对于float、double和long double等类型可能显示阶乘的近似值,不一定是准确值。

三、预习内容

《C语言程序设计--现代方法》(第2版)第7章


实验八 数组
-----------

一、实验目的

1. 理解数组的概念,包括一维数组和二维数组;
2. 学会定义数组、初始化数组以及引用数组元素;
3. 掌握常量数组。

二、实验内容

1. 网络新手B1FF有一种独特的编写消息的方法。下面是一条常见的B1FF公告:

H3Y DUD3, C 15 R1LLY C00L!!!!!!!!!!

编写一个“B1FF过滤器”,读取用户录入的消息并把消息翻译成B1FF的表达风格:

Enter message: Hey dude, C is rilly cool
In B1FF-speak: H3Y DUD3, C 15 R1LLY C00L!!!!!!!!!!

程序需要把消息转换成大写字母,用数字代替特定的字母(A->4, B->8, E->3, I->1, O->0, S->5),然后添加10个左右的感叹号。

提示:把原始消息存储在一个字符数组中,然后从数组头开始逐个翻译并显示字符。

2. 编写程序,生成一种贯穿10X10(初值全为'.'的)字符数组的“随机步法”。
程序必须随机地从一个元素“走到”另一个元素,每次向上下左右移动一个元素位置,并用字母A到Z标记访问顺序。例如,

A.........
BCD.......

.FE.......
HG........
I.........
J.......Z.
K..RSTUVY.
LMPQ...WX.
.NO.......
..........

提示:利用随机函数生成0、1、2和3四个可能的值,以此指示下一次移动的4种可能方向。
注意,不能走到数组外面,也不能走到已有字母标记的位置。
只要有一个条件不满足,就得尝试换一个方向移动。
如果4个方向都堵住了,程序就必须终止。

下面是一个提前结束的例子:

ABGHI.....
.CF.JK....
.DE.ML....
....NO....
..WXYPQ...
..VUTSR...
..........
..........
..........

3. 编写程序,颠倒句子中单词的顺序:

Enter a sentence: why free software is more important now than ever before?
Reversal of sentence: before ever than now important more is software free why?

提示:用循环逐个读取字符,然后将它们存储在一个一维字符数组中。
当遇到句号、问号或者感叹号等“终止字符”时,循环结束并把终止字符存储在一个char类型变量中。
然后反向搜索数组,找到最后一个单词的起始位置。显示最后一个单词。
然后反向搜索倒数第二个单词,重复这一过程,直至到达数组的起始位置。
最后显示出终止字符。

三、预习内容

《C语言程序设计--现代方法》(第2版)第8章


实验九 函数
-----------

一、实验目的

1. 理解并学会函数的定义、调用和函数声明;
2. 理解并学会实际参数;
3. 理解并掌握return语句exit函数。

二、实验内容

1. 编写程序,要求用户录入n个整数,并把这些整数存储在数组中,然后通过调用selection_sort函数进行排序。
selection_sort函数必须完成以下工作:
1) 搜索数组,找出最大元素,然后把它移到数组的最后;
2) 递归地调用函数本身来对前n-1个数组元素进行排序。

2. 修改实验八程序2,使其包含下列函数:

void generate_random_walk(char walk[10][10]);
void print_array(char walk[10][10]);

main函数首先调用generate_random_walk,把所有数组元素都初始化为字符'.',然后将其中一些字符替换为字母A到Z。
接着,main函数调用print_array函数来显示数组的值。

3. 编写程序,模拟掷(两个)骰子的游戏。

第一次掷的时候,
如果两个骰子的点数之和为7或11则获胜;
如果点数之和为2、3或12则落败;
其他情况下的点数之和称为“目标”,游戏继续。
在后续的投掷中,
如果再次掷出“目标”点数则获胜;

如果点数之和为7则落败;
其他情况被忽略,游戏继续。

每局游戏结束时,程序询问用户是否再玩一次,如果用户输入的回答不是y或Y,程序将显示胜败次数然后终止。

You rolled: 8
Your point is 8
You rolled: 3
You rolled: 10
You rolled: 8
You win!

Play again? y

You rolled: 6
Your point is 6
You rolled: 5
You rolled: 12
You rolled: 3
You rolled: 7
You lose!

Play again? y

You rolled: 11
You win!

Play again? n

Wins: 2 Losses: 1

程序包括main函数和以下两个函数:

int roll_dice(void);
int play_game(void);

roll_dice生成两个[1, 6]的随机数,并且返回它们的和。
play_game进行一次掷骰子游戏,每次调用roll_dice确定点数,玩家获胜则返回TRUE,否则返回FALSE。
还要显示玩家每次掷骰子的结果。
main函数反复调用play_game函数,记录获胜和落败的次数,并显示"yoy win"和"you lose"消息。

三、预习内容

《C语言程序设计--现代方法》(第2版)第9章


实验十 程序结构
---------------

一、实验目的

1. 理解并掌握局部变量;
2. 理解并掌握外部变量;
3. 理解并掌握程序块和作用域;
4. 学会在单个文件中构建C程序。

二、实验内容

1. 修改P166的程序poker.c,增加两个类别:
“同花大顺”即同花色的A、K、Q、J和10,和“小A顺”即A、2、3、4和5。
同花色大顺的级别高于其他所有类别。

2. 修改上一程序,把数组num_in_rank和数组num_in_suit移到main函数中。
main函数将把这两个数组作为实际参数传递给read_cards函数和analyze_hand函数。

3. 把数组num_in_rank、num_in_suit和card_exists从程序1中去掉。
程序改用5X2的hand数组来存储扑克牌。数组的每一行表示一张牌。例如,
hand[0][0]存储第一张牌的等级,hand[0][1]存储第一张牌的花色。

三、预习内容

《C语言程序设计--现代方法》(第2版)第10章


相关文档
相关文档 最新文档