C语言程序设计实验指导书—tc版 ( 1 )

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一 C语言程序的编辑和运行
一、实验目的
1.熟悉C语言的系统环境,学习编辑运行C语言程序的基本方法。

2.进一步认识程序的两种错误类型对程序结果的影响,加深对程序测试重要性的认识。

3.认识C语言程序的结构特点,学习程序的基本编写方法
二、实验内容
1.Turbo C 2.0集成环境的使用。

使用Turbo C 2.0集成环境,编辑运行实现乘法运算的程序。

乘法运算的源程序如下:
#include "stdio.h"
main()
{
int a,b;
a=251; /* 使a具有值251 */
b=8; /* 使b具有值8 */
printf("%d\n",a*b);/* 计算并输出表达式a*b */
}
2.标识符和程序的逻辑错误。

修改上面的程序,观察运行结果。

⑴将程序中的表达式“a*b”的“a”改为“A”,然后运行程序。

⑵将程序中的表达式“a*b”修改为“a-b”,然后运行程序。

3.编辑并运行能够对任意两个整数进行乘法运算的程序。

下面是源程序清单:#include "stdio.h"
main()
{
int a,b;
printf("Input a,b:");/* 在屏幕显示提示信息Input a,b: */
scanf("%d,%d",&a,&b);/* 该语句的作用是实现数据的键盘输入 */
printf("a*b=%d\n",a*b);/* 输出乘法运算的结果 */
}
三、实验指导
1.Turbo C 2.0集成环境的使用。

在主教材的第1单元,我们介绍了使用TC2.0上机实现一个C语言程序的一般步骤。

按照所述步骤,操作如下:
⑴启动TC 2.0。

⑵使用“File→New”命令或直接使用“Edit”命令,使TC 2.0进入编辑状态,录入编辑上面的源程序。

⑶源程序录入完毕后,使用“Comple→Compile to OBJ”对源程序进行编译,如果源程序存在语法错误,这时编译系统会把程序中的错误指示出来。

发现错误后,需要立即修改源程序,然后重新编译。

⑷编译无误后,使用“Comple→Link EXE file”连接目标代码,生成可执行文件,这个文件将由运行命令“Run”运行。

上面的⑶、⑷两个步骤,也可以使用“Comple→Build all”或“F9”功能键一步完成。

⑸连接完成后,使用“Run”命令,或者使用“Ctrl+F9”组合键运行程序。

程序运行过程瞬间结束,要察看程序运行结果,需要切换到运行屏幕,用组合健“Alt+F5”实现。

按Alt+F5后,将看到屏幕显示如下结果:
2008
按任意键,屏幕返回程序状态。

对一个未经编译和连接的源程序,TC2.0也可以直接运行它,因此,运行一个C语言程序时,编译和连接的操作步骤可以省略,即编辑好一个源程序后,直接使用Run命令运行它。

此时,并非编译、连接过程不存在了,而是“Run”命令运行程序时,因找不到当前程序的可执行文件,而自动启动编译命令和连接命令。

只有当编译、连接正常进行后,程序才会被运行。

因此,上面的过程可以简化为两个操作步骤:
⑴启动TC2.0,录入编辑源程序。

⑵按“Ctrl+F9”组合键运行程序。

特别提示:
⑴保存源程序是一个重要的操作环节。

在编辑源程序的过程中或源程序编辑完成后,及时保存源程序是十分必要的,但初学者往往忽视这一环节。

操作步骤如下:
①按“F2”功能键,出现图1-1所示屏幕。

白色背景窗口显示了系统为当前程序设定的默认存储位置(D:\TC,该存储位置因系统而异,可以改变)和默认文件名NONAME.C。

图1-1 修改文件名窗口
②输入新的文件名。

为了操作方便,可以使用默认存储位置,指定文件名为mult.c。

操作时只需将NONAME.C改写为mult.c后回车确认即可。

⑵使用Windows的记事本程序提高源程序编辑效率。

尤其是编辑较大的程序时,这种方法更有效。

下面是Windows的记事本程序和TC2.0相结合,编辑运行以上乘法程序的步骤。

①启动Windows的记事本程序,录入编辑乘法源程序。

②保存程序,如图1-2所示。

选择合适的存储位置,如上面使用的TC2.0的默认程序目录D:\TC;输入指定的文件名,如mult.c;选择保存类型为“所有文件”。

图1-2 记事本程序文件存盘窗口
③激活TC2.0,按“F3”功能键,屏幕窗口如图1-3所示。

在“Load File Name”框中键入步骤②使用的文件名mult.c,回车确认后将源程序调入TC2.0系统,然后按组合键“Ctrl+F9”运行程序。

图1-3文件装载窗口
2.标识符和程序的逻辑错误。

第一项内容用于验证C语言中标识符的特性,当用“A”取代“a”后,程序将不能运行,说明作为标识符“A”和“a”是不等价的。

请读者自己进行类似的替换,然后察看程序的运行结果。

如,将程序中的“printf”改为“PRINTF”,然后运行程序看结果。

第二项实验内容说明了程序的逻辑错误情况。

若把“a*b”误写为“a-b”,程序会顺利编译运行,但显然不是乘法运算的结果。

3.编辑并运行能够对任意两个整数进行乘法运算的程序。

编辑该程序前,首先使用“File→New”命令使TC2.0进入新程序编辑状态,然后编辑运行该程序。

程序运行后,屏幕将显示下面的提示信息:
Input a,b:
此时,应从键盘输入两个整数数据,然后回车确认。

下面是一个输入实例:
20,35
下面是程序的输出结果:
a*b=700
特别提示:
程序的输入数据往往有格式规定,只有按照正确的格式输入数据,一个正确的程序才会得到正确的结果。

运行上面的程序时,输入的两个数据必须以“,”分隔,否则将得不到正确的结果。

这是程序要求的数据输入格式。

请读者再次运行程序,对输入的两个数据以空格分隔,察看执行结果。

例如:
Input a,b:2035
再次运行程序,然后输入两个很大的整数,察看运行结果。

例如:
Input a,b:20000,35000
显然,上面两次运行的结果都是不正确的。

这说明,既没有语法错误,也没有逻辑错误的程序,运行后也会得不到正确的结果。

第一种情况出错,是因为输入数据时数据之间的分隔形式不符合程序的要求。

第二种情况,输入数据的格式没有问题,但输入的数据超出了程序能够允许的整数范围。

这项实验内容提醒读者,在上机实现一个C语言程序时,各种错误的情况都可能出现。

即便是一个看上去很好的程序,仍然会有许多需要改进之处。

从算法的角度理解,就是任何算法,都可能存在进一步完善的空间。

四、思考题
1.选择一种较熟悉的C语言环境,编辑运行主教材1.3节的自然数累加程序。

2.进一步熟悉TC2.0集成环境的功能。

实验二顺序结构程序设计
一、实验目的
1.掌握printf()、scanf()、putchar()、getchar()等基本输出、输
入函数的格式及其主要用法。

2.熟练掌握顺序结构的程序设计。

二、实验内容
1.基本输入输出函数的用法。

编辑运行下面的程序,并根据执行结果分析程序中各个语句的作用。

#include
main()
{
int a, b;
float d, e;
char c1, c2;
double f, g;
long m, n;
unsigned int p, q;
a=61; b=62;
c1='a'; c2='b';
d=5.67; e=-6.78;
f=1234.56789; g=0.123456789;
m=50000; n=-60000;
p=32768; q=40000;
printf("a=%d,b=%d\nc1=%c,c2=%c\n",a,b,c1,c2);
printf("d=%6.2f,e=%6.2f\n",d,e);
printf("f=%15.6f,g=%15.10f\n",f,g);
printf("m=%ld,n=%ld\np=%u,q=%u\n",m,n,p,q);
}
2.顺序结构程序设计。

⑴已知圆柱体横截面圆半径 r,圆柱高h。

编写程序,计算圆周长 l、圆面积s和圆柱体体积v,并输出计算结果。

⑵编写一个程序,根据本金 a 、存款年数 n 和年利率 p 计算到
期利息。

计算公式如下:到期利息公式为 a*(1+p) n –a
ab的计算公式为 exp(b*ln(a))
三、实验指导
1.基本输入输出函数的用法。

⑴运行所给出的源程序,对照结果分析各语句的作用。

⑵将程序中的第二、第三个printf语句修改为如下形式,然后运
行程序,察看结果。

printf("d=%-6.2f,e=%-6.2f\n",d,e);
printf("f=%-15.6f,g=%-15.10f\n",f,g);
⑶将上述两个printf语句进一步修改为如下形式,然后运行程序,
察看结果。

printf("d=%-6.2f\te=%-6.2f\n",d,e);
printf("f=%-15.6f\tg=%-15.10f\n",f,g);
⑷将程序的第10-15行修改为如下语句:
a=61;b=62;
c1='a';c2='b';
f=1234.56789;g=0.123456789;
d=f;e=g;
p=a=m=50000;q=b=n=-60000;
运行程序,并分析结果。

⑸修改⑴中的程序,不使用赋值语句,而用下面的scanf语句为a、
b、c1、c2、d、e输入数据:
scanf("%d%d%c%c%f%f",&a,&b,&c1,&c2,&d,&e);
①请按照程序原来中的数据,选用正确的数据输入格式,为上述
变量提供数据。

②使用如下数据输入格式,为什么得不到正确的结果?
输入数据:61 62 a b 5.67 -6.78
⑹进一步修改⑸中使用的程序,使f和g的值用scanf()函数输入。

⑺进一步修改上面的程序,使其他所有变量的值都改用scanf()
函数输入。

①参考程序
#include
void main()
{
int a, b;
float d, e;
char c1, c2;
double f, g;
long m, n;
unsigned int p, q;
printf("Input(a,b,c1,c2,d):");
scanf("%d%d%c%c%f%f",&a,&b,&c1,&c2,&d,&e);
printf("Input(f,g):");
scanf("%lf%lf",&f,&g);
printf("Input(m,n,p,q):");
scanf("%ld%ld%u%u",&m,&n,&p,&q);
printf("a=%d,b=%d\nc1=%c,c2=%c\n",a,b,c1,c2);
printf("d=%-6.2f,e=%-6.2f\n",d,e);
printf("f=%-15.6f,g=%-15.10f\n",f,g);
printf("m=%ld,n=%ld\np=%u,q=%u\n",m,n,p,q);
}
②数据输入格式
Input(a,b,c1,c2,d):61 62ab5.67 -6.78
Input(f,g):1234.567890 0.1234567890
Input(m,n,p,q):50000 -60000 32678 40000
⑻修改⑺中的程序,使c1、c2的数据用getchar()函数输入,用
putchar()函数输出。

①可按照如下方法修改程序:
将程序中的“scanf("%d%d%c%c%f%f",&a,&b,&c1,&c2,&d,&e);”语
句用以下四个语句替换:
scanf("%d%d% ",&a,&b);
c1=getchar();
c2=getchar();
scanf("%f%f",&d,&e);
②使用与⑺相同的数据输入格式输入数据。

③请分析:使用如下格式为a、b、c1、c2输入数据时会出现什么
结果?运行程序验证
所分析的结论。

输入数据格式:
61 62
a
b
2.顺序结构程序设计。

⑴参考程序
/* 计算圆周长、面积及圆柱体体积的程序 */
#include
#define PI 3.14159
main()
{
float r,h,l,s,v;
printf("r,h=");
scanf("%f,%f",&r,&h);
l=2*PI*r;
s=PI*r*r;
v=s*h;
printf("L=%f\tS=%f\tV=%f\n",l,s,v);
}
程序调试时要注意如下几点:
①输入数据的格式要与程序中要求的格式一致。

如上述程序要用“,”分隔数据。

②根据程序运行情况,调整输入、输出数据的格式,使数据的输
入输出格式更符合使用习惯。

③运行程序,输入负数数据,察看程序的执行结果。

⑵参考程序
/* 计算存款利息的程序 */
#include
#include
main()
{
int n;
float a,p,acc;
printf("a,n,p=");
scanf("%f,%d,%f",&a,&n,&p);
acc=a*exp(n*log(1.0+p))-a;
printf("Accrual=%-10.2f\n",acc);
}
四、思考题:
1.在“基本输入输出函数的用法”内容⑶中,e和g都是用“\t”
进行格式控制,但为什么没有显示在同一列的位置上?
2.改进实验内容2的参考程序,使得输入负数时不进行计算,并且显示相应的提示信息。

实验三、选择结构程序设计
一、实验目的
1.学会使用逻辑表达式表示条件的方法。

2.掌握if语句三种形式的用法。

3.掌握switch语句的用法。

4.学会设计有实际价值的分支结构程序。

二、实验内容
1.简单if语句的用法。

编写调试程序:从键盘输入一个任意大小的实
数x,如果x满足如下条件,则输出x及其绝对值。

输出x的条件:
-29.5≤x≤29.5
2.if-else语句的用法。

修改上面的程序,使得x满足-29.5≤x≤29.5 时输出x及其
绝对值,否则只输出x。

3.if-else if语句的用法。

编写一个能够进行加减法运算的程序,要求:从键盘任意输入两个实数,然后输入一个运算符,当运算符为“+”时对两个数进行加法运算,为“-”时对两个数进行减法运算,其他符
号时,只显示输入的符号不进行运算。

4.switch语句的应用。

编写计算器程序。

要求从键盘任意输入两个数值,然后输入一个四则运算符,自动完成运算后输出结果。

三、实验指导
1.简单if语句的用法。

⑴编程分析
正确表示条件,将数学不等式-29.5≤x≤29.5表示为如下逻辑表达式:x>=-29.5&&x<=29.5 或 (x>=-29.5)&&(x<=29.5)
也可以使用x的绝对值形式表示,如下:
fabs(x)<=29.5
⑵参考程序
#include "math.h"
void main()
{
float x;
printf("x=");
scanf("%f",&x);
if(x>=-29.5&&x<=29.5)
printf("x=%f\t|x|=%f\n",x,fabs(x));
}
⑶程序调试
输入数据时,至少应考虑的几种情况
①输入满足输出条件的数,包括正数、负数、零。

②输入不满足输出条件的数,包括正数、负数。

③输入数据为整数。

2.if-else语句的用法。

⑴编程分析
只需修改上面程序中的if语句即可。

将if语句修改为如下形式:
if(x>=-29.5&&x<=29.5)
printf("x=%f\t|x|=%f\n",x,fabs(x));
else
printf("x=%f\n",x);
⑵程序调试
输入数据时,除考虑上面指出的三种情况的数据外,输入一个字符数据,观察会是什么结果。

3.if-else if语句的用法。

⑴参考程序
#include "math.h"
#include "stdio.h"
void main()
{
float x,y;
char op;
printf("x,y: ");
scanf("%f,%f",&x,&y);
getchar();
printf("operator: ");
scanf("%c",&op);
if(op=='+')
printf("%f+%f=%f\n",x,y,x+y);
else if(op=='-')
printf("%f-%f=%f\n",x,y,x-y);
else
printf("operator:%c\n",op);
}
⑵程序调试
运行程序时,应考虑如下问题:
①参考程序中的“getchar();”语句的作用是什么?去掉该语句后,
再运行程序,观察并分析运行的结果。

②输入数据时必须要考虑到题目要求的三种情况。

4.switch语句的应用。

⑴编程分析
①四则运算共有加(+)、减(-)、乘(*)、除(/)四种运算,要
做出判断需使用switch语句。

对上面的程序进行适当修改可得到本程序。

②当输入符号为四则运算符之外的符号时,不进行任何运算,但应给出相应的提示信息。

当使用提示信息是,switch语句应含有default子句。

⑵参考程序
#include "stdio.h"
void main()
{
float x,y;
char op;
printf("请输入运算数(两个运算数之间以“,”分隔):");
scanf("%f,%f",&x,&y);
printf("请输入运算符: ");
getchar();
op=getchar();
switch(op)
{
case '+':
printf("%f+%f=%f\n",x,y,x+y);
break;
case '-':
printf("%f-%f=%f\n",x,y,x-y);
break;
case '*':
printf("%f*%f=%f\n",x,y,x*y);
break;
case '/':
printf("%f/%f=%f\n",x,y,x/y);
break;
default:
printf("运算符输入不正确!\n");
}
}
⑶程序调试
①参考程序中使用了中文提示信息,如果使用的C语言系统不支持汉字,应将这些提示信息换用英文信息。

②调试程序时,+、-、*、/ 及非四则运算符的情况都应予以调试。

四、思考题
1.在输入数值数据时,有时错误地输入了字符,导致程序运行后出现
不正常的结果。

请读者考虑,如何改进程序,使得发生这种错误输入时能检查出来?2.改进学生成绩分等程序,使得输入成绩数据时能正确处理如下情况:
⑴实验考核成绩输入了小写字母。

⑵实验考核成绩输入了等级以外的字符。

实验三、分支循环结构程序设计
一、实验目的
1.通过本实验,加深对循环控制结构有关概念的理解。

2.熟练掌握while、do-while和for三种循环控制语句的特点,掌握循环结构程序设计和调试方法。

3.掌握二重循环结构程序的设计方法。

二、实验内容
1.用while循环实现数据统计问题。

数据统计问题:从键盘输入一批任意数量的整数,统计其中不大于100的非负数数值的个数。

2.编写并调试程序,使用do-while循环控制语句实现上面的数据统计问题。

调试数据仍参照上面给出的几种情况设计使用。

3.编写并调试程序,使用for循环控制语句实现上面的数据统计问题。

4.阶乘累加问题。

编写程序,求1+2!+3!+…+n!的值(习题5.9)。

三、实验指导
1.用while循环实现数据统计问题。

⑴编程分析
由于输入数据个数是不确定的,因此每次执行程序时,循环次数都是不
确定的。

在进行程序设计时,确定循环控制的方法是本实验的一个关键
问题。

循环控制条件可以有多种确定方法:
①使用一个负数作为数据输入结束标志。

②输入一个数据后通过进行询问的方式决定是否继续输入下一个数据。

⑵参考程序
l 参考程序一
/* 使用负数作为数据输入结束标志的程序 */
#include "stdio.h"
void main()
{
int m,counter=0;
while(1)
{
printf("请输入一个整数:");
scanf("%d",&m);
if(m<0)break;
if(m<=100)counter++;
printf("\n");
}
printf("符合要求的整数个数为: %d\n",counter);
}
l 参考程序二
/* 通过进行询问的方式决定是否继续输入下一个数据的程序 */
#include "stdio.h"
void main()
{
int m,counter=0;
char ask;
while(1)
{
printf("请输入一个整数:");
scanf("%d",&m);
getchar();
if(m>=0&&m<=100)counter++;
printf("继续输入下一个数据?(Y/N)");
ask=getchar();
getchar();
if(ask!='y'&&ask!='Y')break;
printf("\n");
}
printf("符合要求的整数个数为: %d\n",counter);
}
⑶程序调试
这里只对“参考程序一”的调试数据进行设计。

该程序输入数据时,应考虑多种数据组合,对每一组数据察看并分析结果。

例如:
①输入的一组数据之间全部以空格分隔,只有最后一个数为负数,以回车键结束。

如:
16 35 7 –10
②输入的一组数据之间全部以空格分隔,在负数之后又有正数数据,最后一个数不为负数,以回车键结束。

如:
16 35 7 –10 96 17
③输入的一组数据之间全部以空格分隔,输入数据中有多个负数,以回车键结束。

如:
16 35 7 –10 96 17 –87 7
④输入的数据中有大于100的整数。

如:
16 35 7 –10 96 117 –87 267 66
⑤数据之间既用空格分隔,也用回车键分隔。

如:
76 35 376 22 717
96 67
96 17 –87 719 66 98 2 -16 31
⑥每输入一个数据后均按回车键。

⑦输入的第一个数据即为负数。

⑧在输入的数据中使用数值很大的整数。

如:
17 66778 98765 17 899 -109 87
⑷在上面的“参考程序一”中,使用了常数“1”作为循环控制的条件,这是常用的循环控制方式。

请修改上面的程序,不使用常数循环条件,仍然使用while语句实现数据统计问题。

2.编写并调试程序,使用do-while循环控制语句实现数据统计问题。

⑴参考程序
/* 使用负数作为数据输入结束标志的程序 */
#include "stdio.h"
void main()
{
int m,counter=0;
do
{
printf("请输入一个整数:");
scanf("%d",&m);
if(m<0)break;
if(m<=100)counter++;
printf("\n");
}while(1);
printf("符合要求的整数个数为: %d\n",counter);
}
⑵调试指导
调试数据仍参照上面给出的几种情况设计使用。

3.编写并调试程序,使用for循环控制语句实现上面的数据统计问题。

⑴参考程序
/* 用for循环控制语句实现的数据统计问题程序 */
#include "stdio.h"
void main()
{
int m,counter;
for(counter=0;1;)
{
printf("请输入一个整数:");
scanf("%d",&m);
if(m<0)break;
if(m<=100)counter++;
printf("\n");
}
printf("符合要求的整数个数为: %d\n",counter);
}
注意:
for循环控制语句的一般格式通常有三个表达式,本参考程序中使用的for循环控制语句在格式上只有两个表达式。

请读者注意学习这种用法。

⑵请修改程序,使用完整格式的for循环控制语句实现上面的数据统计问题。

4.阶乘累加问题。

⑴编程分析
①本实验内容是求解阶乘问题。

②求n!用一个循环即可实现。

③求1+2!+3!+…+n!的值即为求1+ ,需要在求n!程序之外增加一个外重循环。

⑵参考程序
/* 求1+2!+3!+…+n!程序 */
#include "stdio.h"
void main()
{
long int s=1,t;
int i,j,n;
printf("n=");
scanf("%d",&n);
for(i=2;i<=n;i++)
{
for(t=1,j=1;j<=i;j++)
t*=j;
s+=t;
}
printf("s=%ld\n",s);
}
⑶程序调试
①输入一个不大的正整数,分析程序执行结果。

②输入一个零或者负数,分析程序执行结果。

③输入一个很大的正整数,分析程序执行结果。

④当程序结果不符合要求时,修改程序,直到对任何输入数据都能输出
正确的执行结果,或者给出一个明确的提示信息。

例如,当输入数据非
法时,给出一个恰当的提示信息。

四、思考题
1.完善实验内容1的“数据统计问题”程序,使得对于任何数值,都能
进行正常的数据统计。

2.用一个单循环程序实现实验内容4的阶乘累加问题。

3.修改实验内容4的程序,实现对任意多个整数求阶乘的累加和。

实验四、数组程序设计
一、实验目的
1.了解数组的特点,掌握一维数组的定义、初始化及其使用方法。

2.掌握字符串的输入输出方法,熟悉常用的字符串操作函数。

3.掌握二维数组的定义、初始化及其使用方法。

4.巩固“数组基础”教学单元的知识。

二、实验内容
1.求最大值问题。

任意定义一个一维数组,并为其初始化,然后将最大
值找出来,并指明它是数组的第几个元素。

2.数据分类问题。

向一维数组输入20个整数,并把所有的负数存储在数组的前部,其他数据存储在负数的后面。

3.字母统计问题。

输入一个长度小于80的字符串,统计其中字母的个数。

4.奇偶数问题。

设有一维整型数组共有20个元素,且偶数与奇数各占一半,将该数组变换为2×10的二维数组且偶数和奇数各成一行。

5.鞍点问题。

在二维数组中,若某一位置上的元素在该行中最大,而在
该列中最小,则该元素即为该二维数组的一个鞍点。

要求从键盘输入一
个二维数组,当鞍点存在时,把鞍点找出来。

三、实验指导
1.求最大值问题。

⑴编程分析
①假设首元素为最大值元素,用max标识。

②将其余元素依次与max比较,并将大值保存在max中,将大值元素下
标保存在m中。

③输出max和m。

⑵参考程序
/* 求最大值问题程序 */
#include "stdio.h"
#define N 10
void main()
{
int a[N]={20,9,10,-16,-9,18,96,7,11,33};
int i,max=a[0],m=0;
for(i=1;i<N;i++)
if(max<a[i])
{
max=a[i];
m=i;
}
printf("max=%d,为第%d个元素\n",max,m+1);
}
2.数据分类问题。

⑴编程分析
①定义一个长度为20的一维数组a。

②用键盘向一维数组输入20个整数,并依次输出这20个数据。

③对数据分类。

分类的方法有多种,可以再定义一个长度是20的一维
数组b,依次对a进行扫描,将负数在b中由前到后存储,将其他数据在b中由后向前存储。

最终b存储的是分类后的数据。

④输出分类后的数据。

⑵参考程序
/* 数据分类问题程序 */
#include "stdio.h"
#define N 20
void main()
{
int a[N],b[N],i,j=0,k=N-1;
printf("请输入数据:\n");
for(i=0;i<N;i++)
scanf("%d",&a[i]);
for(i=0;i<N;i++)
{
printf("%d ",a[i]);
if(a[i]<0)
b[j++]=a[i]; /* 将负数放在b的前部 */
else
b[k--]=a[i]; /* 将其他数放在b的后部 */
}
printf("\n");
for(i=0;i<N;i++)
printf("%d ",b[i]);
}
⑶程序调试
①调试程序时通常先将N定义为一个小数值,当程序调试成功后再将N 定义为常数20,这样可以提高程序的调试效率。

②在设计调试用数据时,应考虑各种数据情况,以便提高程序的可靠性。

3.字母统计问题。

⑴编程分析
①定义一个长度是80的字符数组s,将字符串存储在字符数组s中。

②向s中存储字符串的方法有多种,可以使用标准输入函数,也可以使
用字符串输入函数。

③判断字母的方法有多种,使用ASCII码值是一种简便的判断方法。

⑵参考程序
/* 字母统计问题程序 */
#include "stdio.h"
void main()
{
char s[80];
int i=0,counter=0;
printf("请输入字符串:\n");
gets(s);
while(s[i]!='\0')
{
if(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z')
counter++;
i++;
}
printf("Total: %d\n",counter);
}
⑶程序调试
①运行程序,输入一个长度不足80的字符串,察看并分析程序运行结果。

②运行程序,输入一个长度恰好是80的字符串,察看并分析程序运行结果。

③运行程序,输入一个长度超过80的字符串,察看并分析程序运行结果。

④运行程序,输入一个全是字母的字符串,察看并分析程序运行结果。

⑤运行程序,输入一个没有字母的字符串,察看并分析程序运行结果。

⑥运行程序,只输入一个回车符,察看并分析程序运行结果。

⑦运行程序,输入你认为最有特点的一个字符串,察看并分析程序运
行结果。

4.奇偶数问题。

⑴编程分析
①分别定义一维数组a和二维数组b。

②设偶数存储在二维数组b的0行,奇数存储在二维数组b的1行。

则对
一维数组a进行一次遍历后,即可实现在二维数组b中按偶数和奇数的分
行存储。

⑵参考程序
/* 二维数组问题程序 */
include "stdio.h"
void main()
{
int a[20],b[2][10];
int i,j,col1=0,col2=0;
printf("请输入数据:\n");
for(i=0;i<20;i++)
scanf("%d",&a[i]);
for(i=0;i<20;i++)
{
f(a[i]%2==0)
b[0][col1++]=a[i]; /* 偶数存储在b[0]数组 */
else
b[1][col2++]=a[i]; /* 奇数存储在b[1]数组 */
}
for(i=0;i<2;i++)
{
for(j=0;j<10;j++)
printf("%6d",b[i][j]);
printf("\n");
}
}
⑶程序调试
①输入一组数据,其中偶数个数与奇数个数相等,察看并分析程序的运行结果。

②输入一组数据,其中偶数个数与奇数个数不相等,看程序能否正常运行,并对运行
结果进行分析。

③调试完善程序,使得对任何输入数据,程序都能正常运行:或者给出一个正确的执行结果,或者给出一个恰当的提示信息。

5.鞍点问题。

⑴编程分析
①对二维数组按行处理。

②对每一行首先找出它的最大值元素,然后看它在该列上是否为最小值,若是,则找到一个鞍点。

③找到鞍点后输出元素值,及其所在的行列值。

⑵参考程序
/* 鞍点问题程序 */
#include "stdio.h"
#define M 3
#define N 4
void main()
{
int a[M][N],i,j,k;
printf("请输入二维数组的数据:\n");
for(i=0;i<M;i++)
for(j=0;j<N;j++)
scanf("%d",&a[i][j]);
for(i=0;i<M;i++)
{
k=0;
for(j=1;j<N;j++)
if(a[i][j]>a[i][k]
k=j;
for(j=0;j<M;j++)
if(a[j][k]<a[i][k])
break;
if(j==M) /* 在第i行上找到鞍点 */ printf("%d %d,%d\n",a[i][k],i,k);
}
}
⑶程序调试
①输入有鞍点的一组数据,察看并分析程序的运行结果。

例如:
9 80 215 40
60 -60 89 1
210 -3 101 89
②输入没有鞍点的一组数据,察看并分析程序的运行结果。

例如:
9 80 215 40
60 -60 189 1
210 -3 101 89
四、思考题
1.只使用一个一维数组,实现本实验的数据分类问题。

2.分别使用scanf()函数的“%c”格式和“%s”格式输入字符串,实现
本实验的字母统计问题。

3.修改奇偶数问题程序,使得一维整型数组的20个元素保存在10×2的二维数组中,且偶数与奇数分别存储在两列上。

实验五、函数程序设计
一、实验目的
1.掌握自定义函数的一般结构及定义函数的方法。

2.掌握形参、实参、函数原型等重要概念。

3.掌握函数声明、函数调用的一般方法。

二、实验内容
1.求三角形面积函数。

编写一个求任意三角形面积的函数,并在主函
数中调用它,计算任意三角形的面积。

2.菜单程序。

编写一个菜单程序,运行后首先在屏幕显示如下菜单,
当输入数值1后,调用显示“&”图案的函数程序;输入数值2后,调用显示“$”图案的函数程序;输入数值3后结束程序。

**********************************
* Menu section *
* 1. Design(&) *
* 2. Design($) *
* 3. Exit *
**********************************
三、实验指导
1.求三角形面积函数。

⑴编程分析
①设三角形边长为a、b、c,面积area的算法是:
,其中
显然,要计算三角形面积,需要用到三个参数,面积函数的返回值的数
据类型应为实型。

②尽管main()函数可以出现在程序的任何位置,但为了方便程序阅读,通常将主函数
放在程序的开始位置,并在它之前集中进行自定义函数的原型声明。

⑵参考程序
/* 定义和使用求三角形面积函数的程序 */
#include "math.h"
#include "stdio.h"
float area(float,float,float);
void main()
{
float a,b,c;
printf("请输入三角形的三个边长值:\n")。

相关文档
最新文档