C语言程序设计实验教程(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-20 18:58:29

点击下载

作者:顾国松 主编

出版社:高等教育出版分社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

C语言程序设计实验教程

C语言程序设计实验教程试读:

前言

C语言是目前国内外使用最为广泛的程序设计语言之一,其具有语法丰富、结构清晰、使用方便、执行效率高以及可移植性好等特点。

C语言程序设计课程是一门实践性很强的课程,通过程序设计、上机调试和分析测试,不仅能使读者理解和掌握基本理论知识,更能增加读者程序编写的能力。

本书是《C语言程序设计》的配套实验教材,以培养程序设计思维为主线,注重实验实例的精选和算法分析,全书系统地介绍了 C 语言的基本知识点和常用的编程算法。

本书的主要核心内容是实验分析与指导,共包括20个实验,每个实验都由实验目的、实验内容、实验分析和提高实验4部分组成。为了满足不同层次读者的需要,本书安排了两个层次的实践内容。第 1 层次是供读者学习、模仿和验证的实验内容,每个实验内容由多个典型实例组成,并为每一个实例提供详细的题意解析、算法分析和程序代码。第 2 层次是本书的提高部分,主要为不满足于完成基本实验内容的读者提供独立分析、设计和编写程序的机会。

本书以培养程序设计思维为主线,同时兼顾 C 语言基本知识点的练习和掌握。因此,在第2部分为读者提供了大量的与理论知识配套的习题集,读者经过练习能更加深刻的理解 C 语言的基本知识。第 3 部分是教材习题的参考答案,读者可对此进行学习和研究,以便掌握更多的程序设计算法,提高自身的程序设计和编写能力。

本书注重程序设计算法的精细剖析,既注重培养读者设计程序的能力,又提倡良好的程序设计风格。全书以最新的 C99 为标准,每个实例的源程序代码均在 C Free 5.0 环境下调试通过,可直接使用。另外,本书提供了所有案例的数据及运行结果,方便读者参考及研究。

本书由多位优秀教师在多年 C 语言教学与程序设计实践的基础上,结合多次编写相关讲义和教材的经验总结而成,同时本书在编写过程中也参考了大量书籍,得到了许多同行的帮助与支持,在此向他们表示衷心的感谢。本书由顾国松任主编,贾小军、骆红波、许巨定任副主编。实验1由方玫编写,实验2由许巨定编写,实验3、4、5和实验14由顾国松编写、实验6、7、8、18和实验 19由贾小军编写、实验 9、10、11和实验 20由骆红波编写,实验12、13和等级考试试题由潘云燕编写和整理、实验 15、16和实验 17由刘锦萍编写。全书由顾国松统稿。

由于时间仓促,编者才疏学浅,书中难免存在不足或者遗漏之处,恳请广大读者提出修改建议。编者2013年10月

第一部分 实验分析与指导

本部分共包含20个实验,每个实验由实验目的、实验内容、实验步骤和提高实验组成。

实验 1 C 语言程序的运行环境和运行方法

实验 2 数据运算

实验 3 顺序结构与分支结构程序设计

实验 4 循环结构程序设计

实验 5 循环综合程序设计

实验 6 一维数组

实验 7 二维数组

实验 8 字符数组

实验 9 函数的基本用法

实验 10 函数的嵌套与递归

实验 11 变量的作用域与存储类别

实验 12 指针变量

实验 13 指针与数组

实验 14 预处理命令

实验 15 结构体变量初始化与引用

实验 16 结构体与函数

实验 17 位运算

实验 18 文件读写

实验 19 文件定位与检测

实验 20 C 语言程序设计综合应用

 

实验1 C语言程序的运行环境和运行方法

1.1 实验目的

1.熟悉 Visual C++ 6.0、C-Free 5.0 两种 C 语言程序设计环境。

2.掌握在两种运行环境下如何编辑、编译、运行和连接一个C程序。

3.通过运行简单的C程序,认识C语言程序的结构特点,学习程序的基本编写方法。

1.2 实验内容

1.熟悉C-Free集成环境的使用。进入C-Free5.0,编辑运行程序,实现输出一行信息。

源程序如下:

#include           /*包含标准库的信息*/

int main()       /*定义名为 main的函数,它不接受参考值*/

{          /*main函数的语句都被包含在花括号中*/

printf("Hello Kitty\n"); /*main函数调用库函数 printf显示打印的序列*/

return 0;          /*其中\n代表换行符*/

}

注:/*…*/表示对程序的注释,包含在/*与*/之间的内容将被编译器忽略。

将程序修改如下,观察输出结果。

#include

int main()

{

printf("Hello");

printf(" Kitty");

printf("\n");

return 0;

}

若将 printf(" \n");删除,观察程序运行结果。

2.Visual C++6.0 运行环境的使用。进入 VC 环境,编辑运行上面的程序。

3.在两种环境中分别编辑运行程序,实现两个整数的加法运算。

#include

int main()

{

int a,b,sum;        /*定义整型变量 a,b,sum*/

a=110; b=120;         /*对变量 a,b赋值*/

sum =a+b;          /*计算 sum的值*/

printf("sum=%d",sum);    /*将 sum的值以整型的方式输出*/

return 0;

}

将以上程序修改如下,实现从键盘上输入任意两个整数,完成加法运算。

#include

int main()

{

int a,b,sum;       /*定义整型变量 a,b,sum*/

scanf("%d,%d",&a,&b);   /*从键盘上输入两个数给 a,b赋值*/

sum =a+b;          /*计算 sum的值*/

printf("sum=%d",sum);    /*将 sum的值以整型的方式输出*/

return 0;

}

注:输入的两个数之间用逗号间隔,如输入4,5。

4.程序的简单语法错误。修改上面的程序,观察运行结果。(1)去掉printf语句末尾的分号,运行程序,观察错误信息。(2)去掉scanf语句中的“&”符号,运行程序,观察错误信息。(3)将程序中的表达式“sum =a+b”修改为“Sum =a+b”,运行程序,观察错误信息。

1.3 实验步骤

1.实验内容1(1)双击打开C-Free快捷方式,运行C-Free。(2)单击工具栏上的“新建”按钮,这样就会产生一个新的代码编辑窗口,在编辑区中输入程序。(3)在主菜单上,单击“文件→保存”菜单,将程序保存成扩展名为.c的文件(如保存为实验1-1.c文件)及选择保存的位置(如D:盘)。(4)对文件进行编译,在主菜单上,单击“构建→运行”菜单或直接按【F5】键运行程序,如图1-1所示;若程序正确,输出结果如图1-2所示。

2.实验内容2

使用 Visual C++6.0 编辑运行程序,新建一个文件有两种方法。

方法一:新建文件,编译后让系统自动生成一个工程。

方法二:先新建工程后新建文件。

下面我们详细介绍这两种方法。

方法一:系统自动生成工程文件。(1)新建文件。选择 File→New,之后选择 File→C++ Source File,输入文件名,扩展名为.c,同时设置文件存放的路径,如图1-3所示。图 1-1 运行程序图 1-2 运行结果(2)输入程序。将程序输入到编辑区。(3)编译程序。选择 Build→Compile。弹出如图 1-4 所示对话框。单击“是”按钮,自动生成默认的工程空间,如图1-5所示。图 1-3 选择 File→C++ Source File图 1-4 “生成默认工程空间”对话框(4)连接程序。选择 Build→Rebuild All。若有错,修改错误到无错误为止。(5)运行程序。选择Build→Execute(或【Ctrl+F5】)。输出结果如图1-6所示。图 1-5 左边画圈处查看自动生成的工程空间图 1-6 查看结果

方法二:先新建工程,后新建文件。(1)新建工程。选择 File→New,选择 Projects 选项卡下的 Win32 Console Application,如图1-7所示。图 1-7 选择 Win32 Console Application

在 Project name 下输入您的工程名(如 C 实验教材),并选择该工程文件所存放的路径(如D:\),最后单击OK按钮。

根据自己需求选择,可选第一项新建一个空的工程,如图1-8所示。单击Finish按钮完成新建工程。图 1-8 默认新建一个空工程(2)新建文件。选择 File→New。之后在 File 选项卡下选择 C++ Source File,输入文件名,如实验 1-1.c,如图 1-9 所示。请注意:若不写扩展名.c 系统也会给文件一个扩展名.cpp,但是即使在程序完成正确的情况下,编译会出现错误。原因是 VC++的编译器认为.c 的为 C 程序,.cpp 的为 C++程序,C 程序与 C++程序中同样的函数在编译后的 obj文件中的 symbol 是不同的,所以以 C 方式编译的 obj 文件与以 C++方式编译的 obj 文件无法成功链接。图 1-9 选择 Files 选项卡下的 C++ Source File(3)输入程序。(4)编译程序。选择Build→Compile。(5)连接程序。选择Build→Rebuild(或【F7】)。(6)运行程序。选择Build→Execute(或【Ctrl+F5】)。

3.实验内容3

在两种环境中分别编辑运行实现两个整数加法运算的程序,并按要求修改程序。

4.实验内容4

根据要求修改程序,观察程序的错误提示信息,并改正。

1.4 提高实验

1.选择一种较熟悉的C语言环境,编辑运行主教材上第1章的程序。

2.进一步熟悉C-free环境。

 

实验2 数据运算

2.1 实验目的

1.了解C语言中数据类型的意义。

2.理解常用运算符的意义。

3.掌握C语言表达式的书写规则。

4.掌握C语言程序基本输入、输出的格式。

5.掌握逗号运算和条件运算的基本规则。

6.掌握关系运算和逻辑运算的基本规则。

2.2 实验内容

1.验证整型数据与字符型数据之间的互用性及限制。

2.观察分析整型数据、无符号整型数据、长整型数据的使用。

3.自加(++)和自减(− −)运算符的使用。

4.各种数据类型的综合使用。

5.输入、输出语句的使用。

6.逗号运算表达式和条件运算表达式的使用。

7.关系运算表达式和逻辑运算表达式的使用。

2.3 实验步骤

1.实验内容1

按照要求修改程序,观察程序结果。程序如下:

/* 实验 2-1_1.C --- data type(char) definition */

#include

int main()

{

char c1, c2;

c1 ='a';

c2 ='b';

printf("%c %c\n", c1, c2);

return 0;

}

程序运行结果如图2-1所示,c1、c2都按照字符格式输出。图 2-1 实验 2-1_1.C 的运行结果

修改 1:在此基础上增加一个语句:printf("%d %d\n",c1,c2);,再运行,并分析结果。程序如下:

/* 实验 2-1_2.C --- data type(char) definition */

#include

int main()

{

char c1, c2;

c1 ='a';

c2 ='b';

printf("%c %c\n", c1, c2);

printf("%d %d\n", c1, c2);

return 0;

}图 2-2 实验 2-1_2.C 的运行结果

运行结果如图2-2所示,c1、c2也可以按照整数格式输出。(字母a的ASCII码是97)

修改 2:再将第 2 行 char c1,c2;改为:int c1,c2;再运行,并分析结果。程序如下:

/* 实验 2-1_3.C --- data type(char) definition */

#include

int main()

{

int c1,c2;

c1 ='a';

c2 ='b';

printf("%c %c\n", c1, c2);

printf("%d %d\n", c1, c2);

return 0;

}

运行结果如图2-3所示。c1、c2可以按照字符格式、整数格式输出。图 2-3 实验 2-1_3.C 的运行结果

修改3:再将第3、4行改为:

c1=a; /* 不用单引号 */

c2=b;

再运行,分析其运行结果。编译通不过,不能运行。

修改4:再将第3、4行改为:

c1="a"; /* 用双引号 */

c2="b";

再运行,分析其运行结果。编译通不过,不能运行。

修改5:再将第3、4行改为:

c1=300; /* 输入大于 255 的整数 */

c2=400;

再运行,分析其运行结果。

程序如下:

/* 实验 2-1_4.C --- data type(char) definition */

#include

int main()

{

int c1,c2;

c1=300;

c2=400;

printf("%c %c\n", c1, c2);

printf("%d %d\n", c1, c2);

return 0;

}

运行结果如图2-4所示,c1、c2按照字符格式输出时,只保留1个字节的数值,并输出和ASCII相对应的字符。图 2-4 实验 2-1_4.C 的运行结果

2.实验内容2

对照程序和运行结果进行分析。

程序如下:

/* 实验 2-2.C --- data and expression */

#include

int main()

{

int i,j,m,n;

scanf("i=%d,j=%d",&i,&j);

m=(i+1,j+2);

n=i>j?i-1:j+1;

printf("i=%d,j=%d\n",i,j);

printf("m=%d,n=%d\n",m,n);

return 0;

}

修改 1:设 i=10,j=90,该程序的运行结果如图 2-5所示。m的值为 92(即 j+2),n的值为91(即j+1,因为i>j不成立)。

修改 2:设 i=80,j=20,该程序的运行结果如图 2-6所示。m的值为 22(即 j+2),n的值为79(即i−1,因为此时i>j成立)。图 2-5 实验 2-2.C 的运行结果之一图 2-6 实验 2-2.C 的运行结果之二

3.实验内容3

按照要求修改程序,观察程序结果,分析自增(++)和自减(− −)运算规律。

程序如下:

/* 实验 2-3_1.C--- ++,-- */

#include

int main()

{

inti,j,m=0,n=0;

i=8;

j=10;

m+=i;

n-=j;

printf("i=%d,j=%d,m=%d,n=%d\n",i,j,m,n);

return 0;

}

运行该程序(实验2-3_1.C),其结果如图2-7所示。观察i、j、m、n各变量的值。

修改 1:将语句“m+=i;”改为“m =i++;”,再将语句“n-=j;”改为“n =++j;”,并将程序文件另存为“实验2-3_2.C”。运行该程序,其结果如图2-8所示。观察i、j、m、n各变量的值(对于m=i++,先执行m=i,此时i的值为8,然后i自加1;对于n=++j,先执行j自加1,然后执行n=j,此时j的值为11)。图 2-7 实验 2-3_1.C 的运行结果图 2-8 实验 2-3_2.C 的运行结果

修改 2:将程序“实验 2-3_1.C”中的 printf 语句改为:

printf("%d,%d,%d,%d\n", ++i, ++j,m,n);

并将程序文件另存为“实验2-3_3.C”。运行该程序,其结果如图2-9所示。观察i、j、m、n各变量的值,并与图2-7的运行结果进行比较。(在输出时,i先自加1,然后输出i的值9;j也先自加1,然后输出j的值11。)

修改 3:再将程序“实验 2-3_3.C”中的语句“m+=i;”改为“m+ =i++;”、语句“n-=j;”改为“n- =--j;”,并将程序文件另存为“实验2-3_4.C”。运行该程序,其结果如图2-10 所示。观察i、j、m、n各变量的值,并与图2-9的运行结果进行比较(先执行m=i,即m=8;然后i有2次自加1,输出i的值10;j先自减1,使得n为−9,然后j自加1,最后输出j的值10)。图 2-9 实验 2-3_3.C 的运行结果图 2-10 实验 2-3_4.C 的运行结果

4.实验内容4

运行程序“实验2-4_1.C”,观察程序结果并分析不同数据类型的混合使用规则(提示,根据整型、字符型、浮点型的特点,分析输出结果)。

程序如下:

/* 实验 2-4_1.C --- data type */

#include

int main()

{

int a,b;

float d,e;

char c1,c2;

a=61; b=62;

c1='a'; c2='b';

d=3.56; e=-6.87;

printf("a=%d,b=%d,c1=%c\n",a,b,c1);

printf("c2=%c,d=%6.2f,e=%6.2f\n",c2,d,e);

return 0;

0}

程序“实验2-4_1.C”的执行结果如图2-11所示。图 2-11 实验 2-4_1.C 的运行结果

运行程序“实验2-4_2.C”,观察程序结果并分析(提示:假设输入的字符为 x 和 y。根据整型、无符号整型、字符输入/输出函数的特点,分析输出结果)。

程序如下:

/* 实验 2-4_2.C --- data type */

#include

int main()

{

int a, b;

char c1, c2;

unsigned int p, q;

a=50000; b=-60000;

c1=getchar(); c2=getchar();

p=32768; q=800000000;

printf("a=%d,b=%d\n",a,b);

printf("p=%u,q=%u\n",p,q);

putchar(c1);putchar(c2);

printf("\n");

return 0;

}

程序“实验2-4_2.C”的执行结果如图2-12所示。图 2-12 实验 2-4_2.C 的运行结果

5.实验内容5

按照要求修改程序,观察程序结果并分析逻辑表达式的使用规则。

程序如下:

/* 实验 2-5_1.C --- logical expression */

#include

int main()

{

int a,b,c;

a=10;

b=20;

c=0;

printf("%d,%d\n",!a*b,!c);

printf("%d,%d\n",a&&b-10||c,a+c>b&&b>a);

printf("%d,%d\n",a||(c=a+b),c);

return 0;

}

运行程序“实验 2-5_1.C”,其执行结果如图 2-13 所示(提示,逻辑值“真”用 1表示,逻辑值“假”用 0 表示。反过来,0 表示“假”,非 0表示“真”。没有执行语句“c=a+b”)。

修改1:使b=0,c=20,将程序文件另存为“实验2-5_2.C”。再运行该程序并分析结果。其执行结果如图2-14所示(提示:!a*b等价于(!a)*b,没有执行语句“c=a+b”)。图 2-13 实验 2-5_1.C 的运行结果图 2-14 实验 2-5_2.C 的运行结果

修改 2:使 a=0,b=20,c=10,将程序文件另存为“实验 2-5_3.C”。再运行该程序并分析结果。其执行结果如图 2-15 所示(提示,printf ("%d,%d\n", a||(c=a+b), c);语句,先输出 c的值10,然后执行c=a+b,使c的值为20)。

修改3:使a=0,b=20,c=0,将程序文件另存为“实验2-5_4.C”。再运行该程序并分析结果。其执行结果如图 2-16 所示(提示,printf ("%d,%d\n", a||(c=a+b), c);语句,先输出 c 的值0,然后执行c=a+b,使c的值为20)。图 2-15 实验 2-5_3.C 的运行结果图 2-16 实验 2-5_4.C 的运行结果

2.4 提高实验

1.设a=0,b=1,c=2,设计一个简单的程序,验证下面两个表达式的结果。

表达式1:a==10&&b||c==5

表达式2:++a&&b−−&&(c=5)

2.设m、n为整数,设计一个简单的程序,根据m>n、m=n、m

表达式1:i=m+1,j=n−3,k=m+n

表达式2:m>=n?m+50:n−18

 

实验3 顺序结构与分支结构程序设计

3.1 实验目的

1.掌握顺序结构程序设计方法。

2.理解if、if...else和if...else...if结构的规则,掌握其程序设计方法。

3.理解switch结构的规则,掌握其程序设计方法。

4.掌握分支结构的嵌套程序设计方法。

3.2 实验内容

1.设计程序:用户输入圆的半径,求出该圆的面积和周长。

2.设计程序:用户输入x的值,求解y的值。x、y的关系式如下:

3.设计程序:用户输入三个数作为三角形的三条边长,判断该三角形的类型(等边、等腰、直角、其他)。

4.某服装店经营套服,也单件出售。若买的不少于50套,每套80元;不足50套,每套90元;只买上衣每件60元;只买裤子每条45元。(假定所有款式价格都一样,任何上衣配裤子都算套装),设计程序实现输入购买的上衣和裤子数,计算应付款。

5.设计程序:输入两个数和一个运算符号(+,−,*,/),求出这两个数的计算结果。例如,输入4+5,输出“result=9.00”。

3.3 实验步骤

1.实验内容1

分析:由题意可知计算机需要一个输入的量作为圆的半径(设变量为r)。根据圆面积和周长的计算公式,写出C语言的计算表达式。设面积变量area,周长变量为circle_length,符号常量PI为3.1415926,写出表达式为:area=PI*r*r;circle_length=2*PI*r。程序运行效果如图3-1所示,程序代码如下:图 3-1 实验内容 1 运行结果

#include

#define PI 3.1415926 //符号常量

int main()

{

float r,area,circle_length;

printf("input r=");

scanf("%f",&r);

area=PI*r*r;

circle_length=2*PI*r;

printf("area=%.2f\ncircle_len=%.2f\n",area,circle_length);

return 0;

}图 3-2 实验内容 2 运行结果

2.实验内容2

分析:分段函数,根据x的范围,计算出对应的y值,这里的关键有两个:第一个是判断x的值的范围,第二个是用C语言来描述对应x的y的函数表达式。需要注意的是三角函数、平方根函数和幂指数函数的应用都需要包含math.h 头文件(CFREE 5.0 可省略这个操作,但不提倡)。程序运行结果如图3-2所示,程序代码如下:

#include

#include

int main()

{

float x,y;

printf("input x:");

scanf("%f",&x);

if(x<=-1)

y=x*x+1/x;

else if(x>-1&&x<=1)

y=sin(x)+pow(2,x);

else if(x>=2)

y=sqrt(x+1)+3;

printf("y=%f\n",y);

return 0;

}

3.实验内容3

分析:设3个变量a、b和c。3个变量的值由用户输入,将它们作为三角形的三条边来判断三角形的类型:等边、等腰、直角、其他三角形和非三角形(即无法组成三角形)。根据三角形类型的数学定义,对a,b,c的各种关系进行判断。程序结果如图3-3所示,程序代码如下:

#include

int main()

{

float a,b,c;

printf("input three numbers:");

scanf("%f%f%f",&a,&b,&c);

if(a>0&&b>0&&c>0&&(a+b>c)&&(a+c>b)&&(b+c>a))

{

if(a==b&&b==c)

printf("Equilateral triangle!\n");

else if(a==b||b==c||a==c)

printf("Isosceles triangle!\n");

else if(a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a)

printf("Right triangle!\n");

else

printf("Other triangle!\n");

}

else

printf("Not a triangle!\n");

return 0;

}

4.实验内容4

分析:设衣服的数量为 upper_num,裤子的数量为 pants_num。由题意可知,零卖的衣服或裤子价格是固定的,因此不需要区分数量多少。但是,套装的价格和数量是有关系的,所以首先要区分套装的数量,然后再计算零卖的衣服或裤子的应付款。关系如表 3-1所示。表3-1 衣服裤子关系表

程序结果如图3-4所示,程序代码如下:

#include

int main()

{

int upper_num,pants_num,payment;

printf("input upper_num and pants_num:");

scanf("%d%d",&upper_num,&pants_num);

if(upper_num>=50&&pants_num>=50)

if(upper_num>pants_num)

payment=80*pants_num+(upper_num-pants_num)*60;

else

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载