资源描述
实验一 C语言运行环境
一、实验目的
1.了解TC环境的组成。
2.学习TC环境的使用方法。
3.了解C语言程序从编辑、编译、连接到运行并得到运行结果的过程。
二、实验内容
1.了解TC环境的组成。
开机后进入WINDOWS系统的"资源管理器",找到TC环境所在的文件夹。一般情况下,TC环境都安装在名为"TC"的子目录下,具体存于硬盘的哪个分区请询问实验室管理员。查看在TC目录下的以字母TC开头的文件,是否包括了TC.EXE、TCC.EXE、TLINK.EXE、TCCONFIG.TC等文件;查看INCLUDE、LIB两个子目录下的文件。复习这些文件的作用。
2.进入、退出和定制TC环境。
运行TC目录下的TC.EXE文件,就可进入TC环境。
在WINDOWS环境下运行文件的方法是用鼠标双击要运行的文件名,或在桌面上双击快捷图标;在DOS环境下进入到TC子目录,用命令方式运行TC.EXE程序。进入TC环境后屏幕上显示出TC环境的主画面。
退出TC环境,可在"FILE"菜单下选择"QIUT"菜单项,或用热键<Alt+X>,计算机返回到操作系统的控制下。
在程序开发的过程中,有时需要返回到操作系统界面下观察程序的运行情况,但是又要保留运行的TC环境,操作方法是:选择"File"菜单下的"OS shell"菜单项返到DOS操作 系统界面,用"EXIT"命令可重新进入TC环境;用<Alt>+<空格>键返到WINDOWS界面,TC环境缩小为屏幕下方任务条上的一图标,用鼠标单击该图标重新进入TC环境。注意此时是返到操作系统,TC环境没有真正退出,如果此时再次运行TC.EXE文件,刚才是返到WINDOWS环境时,会重新打开一个TC窗口,返到DOS环境时会给出一个错误提示:"Program too big to fit in memory",这是因为DOS操作系统只管理640K的内存,放不下两个TC环境。
WINDOWS操作系统对TC环境是作为一个窗口进行管理的,因此WINDOWS窗口的一些属性也是有效的。从TC环境返回WINDOWS系统时会出现一个快捷菜单(在任务条的TC图标上单击鼠标右键也可以出现快捷菜单),选择"属性"菜单项,屏幕出现一个名为"TC属性"的窗口,在该窗口里选择"屏幕"一页,在"用法"一项里选中"屏幕"单选钮,单击"应用"按钮,关闭"TC属性"的窗口,TC环境以WINDOWS窗口形式出现。在窗口上方出现工具条,可以对窗口进行定制,注意"全屏幕"和"中文"两个工具钮的作用。
TC环境下的"Options"菜单下可对TC环境进行设置,初学者要了解"Directories"的作用,一般不要改变系统的其它设置。关于"Directories"各项的作用和设置参阅本书关于TC环境的介绍,学会改变输出文件的目录。
3.运行演示程序
在TC目录下有一个名为"BGIDEMO.C"的源程序,这本是为TC图形函数提供的演示程序,运行这个演示程序。在"File"菜单下选"Load"项,在屏幕出现的"Load File Name"窗口里输入"BGIDEMO.C",该程序被装入编辑窗口,按<Alt+R>键,程序被编译、连接并运行。注意运行此程序需要图形库文件,一般被装在TC目录下,没有这个图形库文件就不 能运行图形演示程序。
4.编写自己的第一个程序
按键盘<Alt+E>键,激活编辑窗口,录入如下C源程序:
main( )
{ printf("This is a C Program\n")
printf("I am a student\n");
}
按<Alt+R>键,编译、连接、运行程序。屏幕出现错误提示:
statement missing ;in function main
通过提示,可以知道上面程序第二行的最后漏敲一个分号,改正后程序运行。按<Alt>+<F5>键观察输出结果。
按<F2>键,程序存入硬盘,文件名自定(如:test1)。通过资源管理器观察当前目录下名为test1的几个文件,它们的扩展名分别是什么。
改变"Options" 菜单下"Directories"项下的输出文件目录,用<F2>键把程序再存一次并运行。在新设定的输出目录下观察名为test1的文件的存储情况。
用"File"菜单下的"Write to"项,把文件存在新设定的输出目录处,文件名仍为test1。
录入如下程序:
main( )
{ printf("This is another C Program\n");
}
按<F2>键并用test1文件名保存,然后运行这个程序。
按<Alt>+<F3>键,屏幕出现刚才操作过的几个文件的名字,将刚才设定目录下的test1.c装入编辑器后运行它,我们观察到输出的仍是后来键入的程序的内容。这是因为TC编 译系统在接收"RUN"命令后,对test1.c、test1.obj、test1.exe三个文件的建立时间进行比较,如果扩展名为.c的文件建立时间晚于.exe文件,它就认为源文件进行了修改,所以对源文件重新进行编译连接,如果.exe文件的时间晚于源文件的建立时间,就直接运行这个文件,不再重新编译连接。因为我们两次输入的程序名称都是test1,新设定目录 中存放的是第一个程序的test1.c和第二个程序的test1.exe,就出现了现在的情况。
5.分别编译、连接、运行程序
"Run"命令是将编译、连接、运行一次完成,实际完成了三件工作,下面分别进行编译、连接和运行。
用<ALT+C>命令打开"Compile"菜单,并选择"Compile to object"命令编译该源程序文件,然后选择"Compile"菜单的"Link EXE file"命令调用连接程序连接成可执行文件,最后 用"Run"菜单的"Run"命令运行程序,用"Run"菜单的"User screen命令"查看运行结果。由于编译、连接、运行是分别进行的,所以编译系统不再对相关三个文件的建立时间进行比 较,我们看到的就是编辑器里当前的程序输出结果。
6.编写程序,实现求整数10、20和35的平均值。
三、实验要求
1.学习TC的基本操作,编写程序。
2.运行程序并记录运行结果。
3.将源程序、目标文件、可执行文件和实验报告存在服务器的指定文件夹中。
实验二 数据类型及顺序结构
一、实验目的
1.进一步熟悉TC环境的使用方法。
2.学习C语言赋值语句和基本输入输出函数的使用。
3.编写顺序结构程序并运行。
4.了解数据类型在程序设计语言中的意义。
二、实验内容
1.编程序,输出如下图形:
*
***
*****
*******
2.编写程序,实现下面的输出格式和结果( 表示空格):
a= 5,b= 7,a-b=-2,a/b= 71%
c1=COMPUTER,c2=COMP ,c3= COMP
x=31.19,y= -31.2,z=31.1900
s=3.11900e+002,t= -3.12e+001
3.编写程序,输入变量x值,输出变量y的值,并分析输出结果。
⑴ y = 2.4 * x - 1 / 2
⑵ y = x % 2 / 5 - x
⑶ y = x > 10 && x < 100
⑷ y = x >= 10 || x<= 1
⑸ y = ( x -= x * 10 , x /= 10 )
要求变量x、y是float型。
4. 调试下列程序,使之能正确输出3个整数之和及3个整数之积。
main( )
{ int a,b,c;
printf("Please enter 3 numbers:");
scanf("%d,%d,%d",&a,&b,&c);
ab=a+b;
ac=a*c;
printf("a+b+c=%d\n",a+b+c);
printf("a*b*c=%d\n",a+c*b);
}
输入:40,50,60↙
5.运行下述程序,分析输出结果。
main( )
{ int a=10;
long int b=10;
float x=10.0;
double y=10.0;
printf("a = %d, b = %ld, x = %f, y = %lf\n",a,b,x,y);
printf("a = %ld, b = %d, x = %lf, y = %f\n",a,b,x,y);
printf("x = %f, x = %e, x = %g\n",x,x,x);
}
从此题的输出结果认识各种数据类型在内存的存储方式。
三、实验要求
1.复习赋值语句和输入输出函数各种格式符的使用。
2.复习数据类型和运算符的有关概念。
3.编写程序,运行程序并记录运行结果。
4.将源程序、目标文件、可执行文件和实验报告存在服务器的指定文件夹中。
四、选做题
输入圆半径(5)和圆心角(600),输出圆的周长、面积和扇形周长。
实验三 选择结构程序设计
一、实验目的
1.正确使用关系表达式和逻辑表达式表达条件。
2.学习分支语句if和switch的使用方法。
3.进一步熟悉TC集成环境的使用方法,学习TC环境提供的调试工具。
二、实验内容
1.调试下列程序,使之具有如下功能:输入a、b、c三个整数,求最小值。写出调试过程。
main()
{ int a,b,c;
scanf("%d%d%d",a,b,c);
if((a>b)&&(a>c))
if(b<c)
printf("min=%d\n",b);
else
printf("min=%d\n",c);
if((a<b)&&(a<c))
printf("min=%d\n",a);
}
程序中包含有一些错误,按下述步骤进行调试。
⑴ 设置观测变量。按<Alt+B>键,屏幕弹出"Add watch"窗口,在窗口中可输入要观察的变量或表达式,此处输入a,重复以上操作并分别输入b、c,在屏幕下方的"message"窗口显示变量名a、b、c,且变量名的后面有提示,如a的后面是undefined symbol 'a',这是因为程序没有运行,变量没有登记,所以TC环境不知道a是什么。
⑵ 单步执行程序。按<F8>键,屏幕上半部"Edit"窗口中的程序第一行程序的文字背景色变为兰色,表示此语句将被执行。连续按<F8>键,兰色条一句句下移。
⑶ 通过单步执行发现程序中的错误。当单步执行到scanf()函数一句时,屏幕自动切换到DOS窗口,等待用户的输入,假定我们输入"1 2 3",变量a、b、c接受后应在屏幕信息窗口显示出来,但是此时我们看到的却不是我们输入的数据。这时我们就要检查程序。发现在调用scanf()函数中变量名前面没有取地址运算符"&"。我们输入的数据没有正确存入到变量中。经改正后再单步运行,变量a、b、c的值被正确输入。继续单步执行,程序正确找到最小值并输出。
⑷ 通过充分测试发现程序中的错误。虽然程序可以运行,并不能说程序就是正确的,因为编译系统检查程序没有语法错误就可运行了,但是编译系统不能发现程序中的逻辑错误。一个程序必须通过严格的测试,把可能存在的错误都找出来并改正。关于如何进行程序测试不在本书的讲述范围,此处仅对此例进行测试的一些原则进行介绍。刚才给出的输入是变量a为最小值,且a、b、c都不相等的情况,可能的合理输入还有:a为最小值且a、b、c相等,a为最小值且b、c相等,b为最小值且a、b、c互不相等,b为最小值且a、c相等,等等。严格说,在调试过程中对这些可能的情况都要进行测试,才能保证软件的质量。所以程序的调试、测试是一项非常烦琐的工作,也是非常重要的工作。对于初学者来说应该建立良好的习惯,在调试程序的时候,应该尽可能考虑到程序运行时各种可能,设计相应的用例。
我们再次运行程序,输入为"2,1,3",程序输出却是"min=2"。用单步执行的方法,马上发现变量a、b、c的值是不对的,原因是程序要求输入数据的分隔符是 (还允许使用回车或<Tab>键。改正输入后,程序没有输出,还是用单步执行的方法,监视程序的执行过程,发现程序中条件设计有误,经过改正的程序如下:
main()
{ int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if((a<b)&&(a<c))
printf("min=%d\n",a)
else if((b<a)&&(b<c))
printf("min=%d\n",b);
else if((c<a)&&(c<b))
printf("min=%d\n",c);
else
printf("No find minimum\n");
}
上述程序是按在三个数中仅有一个最小值时才称其为最小值进行设计的。另外,注意程序的书写格式,一定要采用缩进格式,即不同层次(分支)的语句左起的空格不同,这样可以有效地提高程序的可读性。
2.编写程序,求解下列分段函数:
3.某托儿所收2岁到6岁的孩子,2岁、3岁孩子进小班(Lower class);4岁孩子进中班(Middle class);5岁、6岁孩子进大班(Higher class)。编写程序(用switch语句),输入孩子年龄,输出年龄及进入的班号。如:输入:3,输出:age:3,enter Lower class。
三、实验要求
1.复习关系表达式、逻辑表达式和if 语句、switch语句。
2.学习程序的调试方法。
3.编写程序,运行程序并记录运行结果
4.将源程序、目标文件、可执行文件和实验报告存在软盘上。
四、选做题
1.自守数是其平方后尾数等于该数自身的自然数。例如:
25*25=625
76*76=5776
任意输入一个自然数,判断是否自守数并输出:如:
25 yes 25*25=625
11 no 11*11=121
2.输入月号,输出月份的英文名称。
实验四 循环结构程序设计
一、实验目的
1.学习循环语句for、while和do-while语句的使用方法。
2.学习用循环语句实现各种算法,例如穷举法、迭代法等。
3.进一步熟悉TC集成环境的使用方法。
二、实验内容
1.下列程序计算SUM的值。调试该程序,使之能正确地计算SUM。写出调试过程。计算公式如下:
main( )
{ int t,s,i,n;
scanf("%d",&n);
for(i=1;i<=n;i++)
t=1/i;
s=s+t;
printf("s=%f\n",s);
}
在调试过程中,用单步执行的方法观察变量s和t的值的变化,找到程序中存在的问题,加以改正。
2.下面程序的功能是计算n!。
main()
{ int i,n,s=1;
printf("Please enter n:");
scanf("%d",&n);
for(i=1;i<=n;i++)
s=s*i;
printf("%d! = %d",n,s);
}
首次运行先输入n=4,输出结果为4!=24,这时正确的。为了检验程序的正确性,再输入n=10,输出为10!=24320,这显然是错误的。为了找到程序的错误,可以通过单步执行来观察变量的变化。这次我们在for循环体中增加一条输出语句,把变量s每次的运算结果显示出来。显示的结果是:
s=1
s=2
s=6
s=24
s=120
s=720
s=5040
s=-25216
s=-30336
s=24320
运算过程中居然出现的负值,从显示看出s=5040是7!,再乘以8应是40320,实际却是一个负数。分析产生这种现象的原因,把程序改正过来,再用n=20进行实验,分析所得到的结果。
2.北京市体育彩票采用整数1、2、3、……、36表示36种体育运动,一张彩票可选择7种运动。编写程序,选择一张彩票的号码,使得这张彩票的7个号码之和是105且相邻两个号码之差按顺序依次是1、2、3、4、5、6。如果第一个号码是1,则后续号码应是2、4、7、11、16、22。
3. 编写程序实现输入整数n,输出如下所示由数字组成的菱形。(图中n=5)
1
1 2 1
1 2 3 2 1
1 2 3 4 3 2 1
1 2 3 4 5 4 3 2 1
1 2 3 4 3 2 1
1 2 3 2 1
1 2 1
1
三、实验要求
1.复习for、while 、do-while语句和continue、break语句。
2.在程序调试中,要实现准备充分的测试用例。
3.编写程序,运行程序并记录运行结果。注意程序的书写格式。
4.将源程序、目标文件、可执行文件和实验报告存在服务器的指定文件夹中。
四、选做题
已知2001年1月1日是星期一,编写程序,在屏幕上输出2000年的年历。关于闰年的计算方法:如果某年的年号能被400除尽, 或能被4除尽但不能被100除尽,则这一年就是闰年。
实验五 数组
一、实验目的
1.掌握数组的定义、赋值和输入输出的方法。
2.学习用数组实现相关的算法(如排序、求最大和最小值、对有序数组的插入等)。
2、熟悉TC集成环境的调试数组的方法。
二、实验内容
1.调试下列程序,使之具有如下功能:输入10个整数,按每行3个数输出这些整数,最后输出10个整数的平均值。写出调试过程。
main( )
{ int i,n,a[10],av;
for(i=0;i<n;i++)
scanf("%d",a[i]);
for(i=0;i<n;i++)
{ printf("%d",a[i]);
if(i%3==0)
printf("\n");
}
for(i=0;i!=n;i++)
av+=a[i];
printf("av=%f\n",av);
}
上面给出的程序是完全可以运行的,但是运行结果是完全错误的。调试时请注意变量的初值问题、输出格式问题等。请使用前面实验所掌握的调试工具,判断程序中的错误并改正。在程序运行过程中,可以使用<Ctrl>+<Break>键终止程序的运行,返回到TC环境。
2.编写程序,任意输入10个整数的数列,先将整数按照从大到小的顺序进行排序,然后输入一个整数插入到数列中,使数列保持从大到小的顺序。
3.输入4×4的数组,编写程序实现:
⑴ 求出对角线上各元素的和;
⑵ 求出对角线上行、列下标均为偶数的各元素的积;
⑶ 找出对角线上其值最大的元素和它在数组中的位置。
三、实验要求
1.复习数组的定义、引用和相关算法的程序设计。
2.编写程序,运行程序并记录运行结果。
3.将源程序、目标文件、可执行文件和实验报告存在软盘上。
四、选做题
1.设某班50人,写一程序统计某一单科成绩各分数段的分布人数,每人的成绩随机输入,并要求按下面格式输出统计结果;("××" 表示实际分布人数)
0 -- 39 ××
40 -- 49 ××
50 -- 59 ××
…… ……
90 -- 100 ××
2.有一个n行m列的由整数组成的矩阵,请对矩阵中的元素重新进行排列,使得同行元素中右边的元素大于左边的元素,同列元素中下边的元素大于上边的元素。
实验六 字符数据处理
一、实验目的
1.掌握C语言中字符数组和字符串处理函数的使用。
2.掌握在字符串中删除和插入字符的方法。
3.熟悉TC集成环境的调试字符串程序的方法。
二、实验内容
1.调试下列程序,使之具有如下功能:任意输入两个字符串(如:"abc 123"和"china"),并存放在a,b两个数组中。然后把较短的字符串放在a数组,较长的字符串放在b数组。并输出。
main()
{ char a[10],b[10];
int c,d,k;
scanf("%s",&a);
scanf("%s",&b);
printf("a=%s,b=%s\n",a,b);
c=strlen(a);
d=strlen(b);
if(c>d)
for(k=0;k<d;k++)
{ ch=a[k];a[k]=b[k];b[k]=ch;}
printf("a=%s\n",a);
printf("b=%s\n",b);
}
程序中的strlen是库函数,功能是求字符串的长度,它的原型保存在头文件"string.h"中。调试时注意库函数的调用方法,不同的字符串输入方法,通过错误提示发现程序中的错误。
2.编写程序,输入若干个字符串,求出每个字符串的长度,并打印最长一个字符串的内容。以"stop"作为输入的最后一个字符串。
3.编写程序,输入任意一个含有空格的字符串(至少10个字符),删除指定位置的字符后输出该字符串。如:输入"BEIJING123"和删除位置3,则输出:"BEIING123"。
三、实验要求
1.复习字符串处理函数和字符数组的使用、库函数的调用方法。
2.编写程序,运行程序并记录运行结果。
3.将源程序、目标文件、可执行文件和实验报告存在软盘上。
四、选做题
1.编写程序,输入字符串s1和s2以及插入位置f,在字符串s1中的指定位置f处插入字符串s2。如:输入"BEIJING"、"123"和位置3,则输出 :"BEI123JING123"。
2.编写程序,将输入的两个字符串进行合并,合并后的字符串中的字符按照其ASCII码从小到大的顺序排序,在合并后的字符串中相同的字符只出现一次。
实验七 函数(1)
一、实验目的
1.学习C语言中函数的定义和调用方法。
2.掌握通过参数在函数间传递数据的方法。
3.熟悉TC集成环境对包含函数调用的程序的调试方法。
二、实验内容
1.调试下列程序,使之具有如下功能:fun函数是一个判断整数是否为素数的函数,使用该函数求1000以内的素数平均值。写出调试过程。
#include "math.h"
main( )
{ int a=0,k; /* a保存素数之和 */
float av; /* av保存1000以内素数的平均值 */
for(k=2;k<=1000;k++)
if(fun(k)) /* 判断k是否为素数 */
a+=k;
av=a/1000;
printf("av=%f\n",av);
}
fun(int n) /* 判断输入的整数是否为素数 */
{ int i,y=0;
for(i=2;i<n;i++)
if(n%i==0) y=1;
else y=0;
return y;
}
本题调试的重点是如何判断一个数是否为素数。根据素数的定义,一个正整数只能被1和它本身整除,这个数是素数。调试中采用TC环境提供单步执行功能时,注意热键<F7>和<F8>的区别。
对于一个大型程序,如果仅需要对程序中的某一部分单步执行时,可设置一些断点,用"Run"命令执行程序到断点处,然后再单步执行程序。通过本例说明这样调试程序的方法。在程序被运行前,将屏幕光标移到fun函数的for循环一句处,按<Ctrl>+<F8>键,该句背景色变为红色;用"Run"命令运行程序,程序执行到此处暂停执行,背景色为淡兰色,再用<F7>或<F8>单步执行下面的程序;当不需要单步执行时,使用"Run"命令可以连续执行程序,当程序再次执行到断点处又会停下等待用户的指令。将屏幕光标移到已设断点处,再按<Ctrl>+<F8>键,可以取消断点。
2.编写一个求水仙花数的函数,求3位正整数的全部水仙花数中的次大值。所谓水仙花数是指三位整数的各位上的数字的立方和等于该整数本身。例如:153就是一个水仙花数:
153 = 13 + 53 + 33
3.编写一个函数,对输入的整数k输出它的全部素数因子。例如:当k=126时,素数因子为:2,3,3,7。要求按如下格式输出:126 = 2 * 3 * 3 * 7。
三、实验要求
1.复习函数的定义和调用方法。
2.学习使用设置断点的方法调试程序。
3.编写程序,运行程序并记录运行结果。
4.将源程序、目标文件、可执行文件和实验报告存在软盘上。
四、选做题
1.任意输入一个4位自然数,调用函数输出该自然数的各位数字组成的最大数。
2.某人购买的体育彩票猜中了4个号码,这4个号码按照从大到小的顺序组成一个数字可被11整除,将其颠倒过来也可被11整除,编写函数求符合这样条件的4个号码。关于体育彩票号码的规则见实验四;可被11整除颠倒过来也可被11整除的正整数例如341,它可被11整除,颠倒过来143也可被11整除。
实验八 函数(2)
一、实验目的
1.掌握含多个源文件的程序的编译、连接和调试运行的方法
2.学习递归程序设计,掌握递归函数的编写规律。
3.熟悉TC集成环境的调试函数程序的方法
二、实验内容
1、编写两个函数,其功能分别为:
⑴ 求N个整数的次大值和次小值
⑵ 求两个整数的最大公约数和最小公倍数
输入10个整数,调用函数求它们的次大值和次小值,及次大值和次小值的最大公约数和最小公倍数。
要求:这两个函数和主函数分属3个文件。
求最大公约数和最小公倍数的方法(以12和8为例):
辗转相除法:两数相除,若不能整除,则以除数作为被除数,余数作为除数,继续相除,直到余数为0时,当前除数就是最大公约数。而原来两个数的积除以最大公约数的商就是最小公倍数。
12 8
12%8 的余数为4
8%4 的余数为0
则 4 为最大公约数,12*8/4为最小公倍数。
相减法:两个数中的大数减小数,其差与减数再进行大数减小数,直到差与减数相等为止,此时的差或减数就是最大公约数。而原来两个数的积除以最大公约数的商就是最小公倍数。
12 8
12-8=4 8-4=4
则 4 为最大公约数,12*8/4为最小公倍数。
假定保存主函数的文件名是"file1.c", 保存求次大值和次小值函数的文件名是"file2.c", 保存求最大公约数和最小公倍数函数的文件名是"file3.c"。现在再编辑一个文件,它的内容如下:
file1.c
file2.c
file3.c
保存这个文件为"find.prj"。这是一个项目文件,表示文件中指定的几个函数将连接为一个名为"find.exe"的可执行文件。我们要将项目文件名通知TC环境,按<Alt+P>键,选择"Project"菜单的"Project Name"选项,在"Project Name"窗口输入项目文件名。编译系统这时将根据项目文件指出的源文件名分别进行编译,然后把编译后的目标文件(.obj文件)连接成一个可执行文件。
2.用递归的方法求下面函数f(x)的值:
f(x,n)= (n层根号)
设 n=5,x=100
3.编写一个递归函数,实现将任意的十进制正整数转换为八进制数。
三、实验要求
1.复习递归程序设计和多文件程序的编写和调试方法
2.编写程序,运行程序并记录运行结果。
3.将源程序、目标文件、可执行文件和实验报告存在软盘上。
四、选做题
1.编写一个递归函数,实现将任意的正整数按反序输出。例如,输入12345,输出54321。
2.按下述递归定义编写一个计算阿克曼函数的递归函数:
实验九 指针(1)
一、实验目的
1.掌握指针变量的定义与引用。
2.掌握指针与变量、指针与数组的关系。
3.掌握用数组指针作为函数参数的方法。
4.熟悉TC集成环境的调试指针程序的方法。
二、实验内容
以下均用指针方法编程:
1. 调试下列程序,使之具有如下功能:用指针法输入12个数,然后按每行4个数输出。写出调试过程。
main()
{ int j,k,a[12],*p;
for(j=0;j<12;j++)
scanf("%d",p++);
for(j=0;j<12;j++)
{ printf("%d",*p++);
if(j%4 == 0)
printf("\n");
}
}
调试此程序时将a设置为一个"watch",数组a所有元素的值在一行显示出来。调试时注意指针变量指向哪个目标变量。
2. 在主函数中任意输入10个数存入一个数组,然后按照从小到大的顺序输出这10个数,要求数组中元素按照输入时的顺序不能改变位置。
3. 自己编写一个比较两个字符串s和t大小的函数strcomp(s,t),要求s小于t时返回-1,s等于t时返回0,s大于t时返回1。在主函数中任意输入4个字符串,利用该函数求最小字符串。
三、实验要求
1.复习指针的定义与使用方法。
2.编写程序,运行程序并记录运行结果。
3.将源程序、目标文件、可执行文件和实验报告存在服务器的指定文件夹。
四、选做题
1.在主函数中任意输入9个数,调用函数求最大值和最小值,在主函数中按每行3个数的形式输出,其中最大值出现在第一行末尾,最小值出现在第3行的开头。
2.请编程读入一个字符串,并检查其是否为回文(即正读和反读都是一样的)。例如:
读入:MADA M I M ADAM. 输出:YES
读入:ABCDBA. 输出:NO
实验十 指针(2)
一、实验目的
1.掌握C语言中函数指针的使用方法。
2.掌握C语言中指针数组的使用方法。
3.熟悉TC集成环境的调试指针程序的方法。
二、实验内容
1.调试下列程序,使之具有如下功能:任意输入2个数,调用两个函数分别求:
⑴ 2个数的和,
⑵ 2个数交换值。
要求用函数指针调用这两个函数,结果在主函数中输出。
main()
{ int a,b,c,(*p)();
scanf("%d,%d",&a,&b);
p=sum;
*p(a,b,c);
p=swap;
*p(a,b);
printf("sum=%d\n",c);
printf("a=%d,b=%d\n",a,b);
}
sum(int a,int b,int c)
{ c=a+b;
}
swap(int a;int b)
{ int t;
t=a;
a=b;
b=t;
}
调试程序时注意参数传递的是数值还是地址。
2.输入一个3位数,计算该数各位上的数字之和,如果在[1,12]之内,则输出与和数相对应的月份的英文名称,否则输出***。
例如:输入:123 输出:1+2+3=6→ June
输入:139 输出:1+3+9=13→ ***
用指针数组记录各月份英文单词的首地址。
3.任意输入5个字符串,调用函数按从大到小顺序对字符串进行排序,在主函数中输出排序结果。
三、实验要求
1.复习函数指针和指针数组的使用方法。
2.编写程序,运行程序并记录运行结果。
3.将源程序、目标文件、可执行文件和实验报告存在服务器的指定文件夹中。
四、选做题
1.对数组A中的N(0<N<100)个整数从小到大进行连续编号,要求不能改
展开阅读全文