《C程序设计基础》实验指导 下载本文

1.编写程序,分别用while循环、for循环和do_while循环计算12+22+...+n2的值。比较三个程序在循环控制上的特点。

2.用迭代法求方程 x3-x-1=0在x=1.5附近的根。

要求:首先把方程变换为迭代公式:x=3x?1,用1.5作迭代的初值,结束条件为两次近似解之差的绝对值小于0.0001。

参考程序如下:

#include #include main()

{ float x1,x=1.5; do { x1=x;

x=pow((x+1),1.0/3.0); }while(fabs(x-x1)>=0.0001); printf(\}

3. 编写程序,计算菲波那契数列第n项的值。注意数列项的数据类型,应考虑足够大项

的数据表示要求。

4.以下程序,输出下三角形状的乘法九九表。

#include main() { int i,j;

for (i=1;i<=9;i++) /* 打印表头*/ printf(\printf(\ for (i=0;i<=50;i++) printf(\ printf(\

for (i=1;i<=9;i++) /* 循环体执行一次,打印一行*/ { for (j=1;j<=i;j++)

printf(\ /* 循环体执行一次,打印一个数据*/ printf(\ /* 每行尾换行*/ }

printf(\}

输入并执行该程序,观察输出结果,试着修改程序打印上三角形状的乘法九九表。

6

实验6 模块化程序设计

【实验目的】

1.掌握C语言中定义函数的方法

2.掌握函数嵌套调用和递归调用的方法。 3.掌握通过“值传递”调用函数的方法。

4.理解变量作用域和存在期的概念,掌握全局变量和局部变量,动态变量和静态变量的定义、说明和使用方法。

5.学习多文件程序的组织方法 【实验内容】

1. 编写程序,设计一个判别素数的函数,在主函数中输入一个整数,调用这个判别函数,

并输出是否为素数的信息。

参考例4.7相应程序,准备5个以上测试数据。验证程序执行结果是否正确。 2.编写程序,计算下面公式并输出结果。

Cmn?n!

(n?m)!m!要求:(1)编写一个函数计算n!

(2)编写主函数,由键盘输入n和m,调用(1)中的函数完成计算。

(3)输入n和m要给出提示,并检查n和m的合理性,不合理的输入应输出错误信息,并不再进行计算。

(4)运行程序并计算

C、85C、72CC、817、7C08。

3.将一个正整数n以相反的顺序输出的递归算法可以如下描述:

如果 要输出的整数只有一位

则 输出该整数 否则 输出整数的个位数字 反向输出除个位以外的全部数字 结束

据此算法设计的递归算法如下:

void printn(int n) { if ((n>=0)&&(n<=9)) printf(\ else

{ printf(\ printn(n/10); } }

请编写主程序,调用上述算法,反向输出正整数n。如输入123,则输出321。

7

4.按步骤完成多文件程序的设计过程,掌握多文件程序的设计方法。 (1)输入源文件file1.c和file2.c。

file1.c的内容如下:

#include

extern void count(int); /*函数count的定义在本文件以外。 main() { int k;

for (k=5;k<=10;k++) count(k); }

file2.c的内容如下:

void count(int n) { static int num=0; num++;

printf(\}

函数count显示该函数被调用的次数及从调用函数传入的参数值。

(2)建立项目文件,Turbo C 2.0建立项目文件的方法非常简单:建立一个新文件,输入下列内容: file1.c file2.c

存盘时,指定文件名的扩展类型为prj即可。本例将文件存盘为work.prj。 (3)执行Project/Project Name,在输入框中输入work.prj回车。

(4)编译连接,生成的执行文件应为work.exe。如果源文件中出错,编译程序会将出错文件打开。修改错误后重新进行编译。

实验7 编译预处理

【实验目的】

1.掌握宏定义的方法

2.掌握文件包含的处理方法 3.掌握条件编译的方法 【实验内容】

1.下面定义的宏,互换两个参数的值。在主函数中调用此宏分别完成两个整数、实数的互换,输出已交换后的值。

#define change(a,b) t=b;b=a;a=t; main() { int a,b;

8

float c,d; { int t;

printf(\ scanf(\ change(a,b);

printf(\ }

{ float t;

printf(\ scanf(\ change(c,d);

printf(\ } }

输入并运行该程序,观察运行结果,体会宏定义实现的过程。比较宏调用与函数调用的区别。

2. 输入并运行下面的程序,体会编译程序对包含文件的处理过程。 (1)在当前目录中建立下面头文件head.h

#define OK \#define ERROR \int g;

(2)在当前目录中建立下面程序文件

#include #include \main() { int k=1; g=5;

printf(\

printf(\}

包含文件head.h 的处理:将文件内容就地展开,相当于定义了两个字符串常量和一个全局整型变量。

3.用条件编译方法实现以下功能:

定义一个控制条件编译的宏,对输入的一个字符串,或者按原文输出,或者按倒序输出。

要求:

(1)定义宏ORDER,控制字符串的输出方式。 (2)定义倒序输出字符串的函数reverse(char *);

(3)编写主函数用条件编译实现对输出方式的控制。

9

实验8 使用数组程序设计

【实验目的】

1.掌握一维数组与二维数组的定义、使用及初始化方法。 2.学习数组作为函数参数的用法。

3.掌握字符数组和字符串函数的使用方法。

4.掌握数组的一种排序算法,进一步理解模块化程序设计的方法。 实验内容

1.设计程序按步骤完成下列任务:

(1)编写函数sort,实现对整数数组排序的功能,具体排序方法可以使用冒泡或选择法,

由用户自定。

(2)主函数中,定义数组并使用初始化方法给出数组初值。测试数据为{16,5,8,12,

1,17,3,6,10,2}。

(3)主函数中调用sort函数实现对测试数据排序的功能。要求分别打印出排序前后数组

元素的值。

2. 下面程序实现将一个字符串倒置的功能,编写程序,从键盘接受一个字符串,利用给出的函数daozhi判定输入的字符串是否为回文。

倒置是指将字符串中的字符按相反顺序排列,如abcde倒置后变为edcba。所谓回文是指正序和反序字符排列方式相同的字符串,如abcDcba是回文。

字符串倒置的函数如下:

void daozhi(char str[]) {int i,k,n; char c,*s=str;

for (n=0;s[n]!='\\0';n++); /* 统计串长*/

n--; /* 最后一个字符位置*/ printf(\ for (i=0;i<=n/2;i++) { c=str[i];

str[i]=str[n-i]; str[n-i]=c; } }

提示:使用字符串函数strcpy和strcmp。

3. 使用字符指针数组表示一个星期中每天的英文名称,编写程序,从键盘输入0-6中间

的一个数字,输出对应星期几的英文名称。 要求:使用switch结构。 4.设有下列矩阵:

10