1.编写程序,分别用while循环、for循环和do_while循环计算12+22+...+n2的值。比较三个程序在循环控制上的特点。
2.用迭代法求方程 x3-x-1=0在x=1.5附近的根。
要求:首先把方程变换为迭代公式:x=3x?1,用1.5作迭代的初值,结束条件为两次近似解之差的绝对值小于0.0001。
参考程序如下:
#include
{ 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
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
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