C语言程序设计实验指导书E4.docx
《C语言程序设计实验指导书E4.docx》由会员分享,可在线阅读,更多相关《C语言程序设计实验指导书E4.docx(18页珍藏版)》请在冰豆网上搜索。
C语言程序设计实验指导书E4
实验一C程序环境认识
――掌握在集成环境中编辑、编译、连接和运行C语言程序的方法
(蓝色笔体内容可以不写在实验报告里,理解并掌握即可。
)
一,实验目的:
1,掌握TC的使用.
2,理解C程序的结构.
3,掌握C程序设计,调试,运行的步骤,方法.
4,理解最简单的C程序设计方法.
二,实验准备:
1,计算机基本操作练习.
2,TC软件使用预习.
3,设计出习题1.5、习题1.6的程序.
三,实验内容:
1.VC6.0或TC程序运行环境;
2.程序调试的全部过程;
3.菜单的用法;
4.常用功能键的用法。
四,实验要求:
1.认真阅读和掌握和本实验相关的教材内容;
2.认真阅读和掌握本章相关内容的程序,例1.1、例1.2、例1.3;
3.上机运行程序;
4.保存和打印出程序的运行结果,并结合程序进行分析;
5.按照你对运行环境的操作需要,编写一简单C程序并运行,打印出文件清单和运行结果。
五,实验步骤:
1,开机,启动TC.
(1)开机.
(2)进入TC目录.
(3)启动TC.
命令格式:
TC[文件名[.扩展名]]
说明:
若缺省文件名,则直接启动.进入TC界面,并显示版本信息.此时按ESC键进入编辑状态.
若给定文件名,(缺省扩展名则默认为.C)则打开该文件(若不存在则新建该文件)进行编辑.
2,TC的使用
(1)启动TC后,进入TC的界面.该界面分为四部分:
菜单区,编辑区,信息区,提示行.
A,菜单区:
TC界面的最上面一行,是TC的主菜单.包括8项:
File文件操作
Edit编辑操作
Run运行
Compile编译
Project工程(项目)
Option选项
Debug调试
Break/Watch中断/监视
每个菜单项下都包含有各项具体功能,用户可以通过选择,执行相应的功能.
B,编辑区.TC界面的主要部分,由标题Edit,状态行和文本编辑区域组成.状态行中指示光标所在行,列.现在是否处于插入状态(若有Insert标志表示处于插入状态,没有则处于改写状态)以及正在编辑的文件名.
C,信息区.由标题message和信息显示区域组成,用来显示编译文件后的错误.单步执行时要监测变量的值等信息.
D,提示行.TC界面的最下面一行,用于提示用户一些最常用的操作:
F1――帮助,F5――窗口的缩放,F6――窗口的切换,F8――单步执行程序,F9――编译连接,F10――激活主菜单.
(2)菜单的操作
A,激活菜单F10或Alt
B,移动光条方向键
C,选择某项回车
D,放弃选择ESC
E,主菜单项的直接选中Alt―高亮度的字符
如:
要选中File按Alt―F
F,子菜单的直接选中选中主菜单项后,直接按高亮度的字母
如:
选中File后,要选中Save按"s"Ⅶ.部分快捷键(直接按该键就会击活菜单项具体的功能)
除前面提示行中列出的以外,常用的还有:
F2――保存
F3――装入文件
F4――从坐标所在位置单步执行
F7――单步跟踪
Alt-F1:
查看最近一次的帮助信息
Alt-F3:
选择文件装入
Alt-F5:
查看运行结果
Alt-X:
退出TC
Ctrl-F1:
查看与光标所在位置内容相关的帮助信息
Ctrl-F2:
取消单步执行
Ctrl-F8:
设置断点
Ctrl-F9:
编译,连接并运行
(3)文件操作
A,新建文件可采用以下方法:
(a)在启动TC时不带文件名,则系统默认为NONAME.C,存盘时再输入文件名.
(b)启动TC时带新文件名.
(c)在TC环境下选择File下的New.
B,打开文件可采用以下方法:
(a)启动TC时带文件名.
(b)在TC环境下选择File下的Load,再输入文件名.
(c)以通过Load打开过的文件再次打开,可选择File下的Pick,进行选择.
C,保存文件可采用以下方法:
(a)选择File下的Save,存盘.若原文件名是NONAME.C,则存盘时还要输入文件名.
(b)选择File下的Writeto,输入文件名,则将文件换名存盘.
(4)编辑操作
TC采用的是全屏幕编辑器,即凡输入过内容的地方都可将光标移到该处直接修改.
A,移动光标:
左移一个字符→
右移一个字符←
上移一行↑
下移一行↓
移动到行首Home
移动到行末End
向下翻页PageDown
向上翻页PageUp
移动到窗口左上角Ctrl-Home
移动到窗口右上角Ctrl-End
移动到文件头Ctrl-PageUp
移动到文件尾Ctrl-PageDown
B,删除内容:
删除光标前的字符Backspace(退格)
删除光标位置上的字符Delete(del)
删除一行Ctrl-Y
C,块操作:
定义块首Ctrl-KB定义块尾Ctrl-KK
块复制Ctrl-KC块移动Ctrl-KV
块删除Ctrl-KY块取消Ctrl-KH
(5)C程序的调试,运行
A,输入程序
B,编译,运行形成可执行文件
选择Compile下的
CompiletoOBJ编译生成目标文件
Compile/linkEXEfile将目标文件连接成可执行文件
Compile/makeEXEfile编译直接生成可执行文件
(程序输入后,用快捷键F9即表示makeexefile,完成编译和连接).
C,执行
选择Run下的Run(Ctrl-F9).
D,查看结果
运行按Alt-F5,查看后按任意键返回.
(6)退出TC
选择File下的Quit或直接按Alt-X.
3.简单的C程序设计,调试,运行.
六,实验报告:
1,源程序.
2,调试过程中出现的错误及修改情况.
3,实验结果.
4,实验的感受及体会.
实验二顺序结构程序及基本I/O
(蓝色笔体内容可以不写在实验报告里,理解并掌握即可。
)
一,实验目的:
1,掌握C语言中使用最多的一种语句――赋值语句的使用.
2,掌握数据的输入输出方法,能正确使用各种格式转换符.
二,实验准备:
1,复习C语言的赋值运算符"=",同时区分"="和"=="的区别.
2,复习printf和scanf的格式及要求.
3,源程序.
三,实验步骤及内容:
1,输入并运行以下程序:
main()
{inta,b;
floatd,e;
charc1,c2;
doublef,g;
longm,n;
unsignedintp,q;
a=61;b=62;
c1='a';c2='b';
d=3.56;e=-6.87;
f=3157.890121;g=0.123456789;
m=50000;n=-60000;
p=32768;q=40000;
printf("a=%d,b=%d\nc1=%c,c2=%c\nd=%6.2f,e=%6.2f\n",a,b,c1,c2,d,e);
printf("f=%15.6f,g=%15.2f\nm=%ld,n=%ld\n
p=%u,q=%u\n",f,g,m,n,p,q);}
在以上基础上,做以下改动:
(1)将程序第8―13行改为
a=61;b=62;
c1=a;c2=b;
f=3157.890121;g=0.123456789;
d=f;e=g;
p=a=m=50000;q=b=n=-60000;
运行程序,分析结果.
(2)在
(1)的基础上将printf语句改为:
printf("a=%d,b=%d\nc1=%c,c2=%c\nd=%15.6f,e=%15.6f\n",a,b,c1,c2,d,e);
printf("f=%f,g=%f\nm=%d,n=%d\np=%d,q=%d\n",
f,g,m,n,p,q);}
(3)将p,q改用%o格式符输出.
(4)改用scanf函数输入数据而不用赋值语句,scanf函数如下:
scanf("%d,%d,%c,%c,%f,%f,%lf,%lf,%ld,%ld,%u,%u",
&a,&b,&c1,&c2,&d,&e,&f,&g,&m,&n,&p,&q);
输入的数据如下:
61,62,a,b,3.56,-6.87,3157.890121,0.123456789,50000,-60000,37678,40000
(说明:
lf和ld格式符分别用于double型和long型数据)分析运行结果.
2,程序填空
(1)输入一球体的半径求球体的体积.
____________________________________
main()
{
doubler,v;
printf("inputr:
");
scanf("_d%______",&r);
v=_4/3.0________*PI*_r*r*r________;
printf("=%.2lf\n",v);
}
问题:
第3个空白处填写4/3是否合理,为什么?
答:
不合理,因为那样就不精确了。
(2)任意输入一个整数X,求它的平方根.
提示:
平方根函数在库函数math.h文件中定义,他的格式为:
doublesqrt(doublex)
__#include_____________________
main()
{intx;
printf("Inputx:
");
scanf("%d",_&x_______);
printf("sqrt(x)=%.2lf\n",_sqrt(x)___________);
}
3,运行程序并回答问题
#include
main()
{intn,x,y,z;
printf("请输入一个不大于1000的整数:
");
scanf("%d",&n);
x=n/100;
y=(n-x*100)/10;
z=(n-x*100-y*10);
printf("\n%d%d%d\n",x,y,z);
}
问题:
此程序的功能是什么你能用其他方法实现同样的功能吗请上机调试.
4,编写程序,用getchar函数读入两个字符给c1,c2,然后分别用putchar和printf函数输出这两个字符.(即P90习题3.8,附带的三道小题也需回答)
四,实验报告:
1,源程序.
2,调试过程中出现的错误及修改情况.
3,实验结果.
4,根据实验结果分析原有程序和修改后的程序的差别.
5,实验的感受及体会.
实验三选择结构程序设计
(蓝色笔体内容可以不写在实验报告里,理解并掌握即可。
)
一,实验目的:
1,了解C语言表示逻辑量的方法(以0代表"假",以1代表"真").
2,学会正确使用逻辑运算符和逻辑表达式.
3,熟练掌握if语句和switch语句.
二,实验准备:
1,复习关系,逻辑,条件运算符和表达式.
2,复习if语句的三种形式.
3,复习if语句的嵌套并能够正确分析.
4,复习多分支选择switch语句.
5,源程序.
三,实验步骤及内容:
1,运行程序并回答问题
main()
{inta,b,max,min;
scanf("%d%d",&a,&b);
if(a>b)
{max=a;min=b;}
else
{min=a;max=b;}
printf("max=%d,min=%d\n",max,min);
}
问题:
a,此程序的功能是什么答:
比较两个数的大小,先输出大的后输出小的。
b,请用条件表达式语句(?
:
)修改程序使之完成相同的功能.
2,输入一个不大于4位的正整数,判断它是几位数,然后输出各位之积.
main()
{intx,a,b,c,d,n;
printf("请输入个不大于4位的正整数X:
");
scanf("%d",&x);
if(x>__999____________)
n=4;
elseif(x>__99____________)
n=3;
elseif(x>____9__________)
n=2;
else
n=1;
a=x/1000;/*x的个,十,百,千位分别用d,c,b,a表示*/
b=_x/100_____________________;
c=_x/10_____________________;
d=_x_____________________;
swith(_n__)
{
case4:
printf("%d*%d*%d*%d=%d\n",a,b,c,d,a*b*d*c);
___break__________________________;
case3:
__printf("%d*%d*%d=%d\n",a,b,c,a*b*c)___;
___break__________________________;
case2:
_printf("%d*%d=%d\n",a,b,a*b)____;
___break__________________________;
case1:
__printf("%d*%d=%d\n",a,a____;
___break__________________________;
}
}
3,编程
(1)
解答P112习题4.4
(2)
解答P112习题4.5
(3)
解答P112习题4.6
(4)
解答P113习题4.8
(5)
解答P113习题4.10
四,实验报告:
1,源程序.
2,调试过程中出现的错误及修改情况.
3,实验结果.
4,实验的感受及体会.
实验四循环控制
(蓝色笔体内容可以不写在实验报告里,理解并掌握即可。
)
(实验课后的下一周的周三,请班长分别收好预习报告和实验报告,交电气学院403室。
)
一,实验目的:
1.熟悉用while语句,do―while语句和for语句实现循环的方法.
2.掌握在程序设计中用循环的方法实现各种算法(如穷举,迭代,递推等).
二,实验准备:
1,复习while语句,do―while语句和for语句的特点和适用条件.
2,复习continue语句和break语句的区别.
3,源程序.
三,实验步骤及内容:
1,以下程序是用来计算S=1+2+3+…+10,请更正下列程序的错误,并上机调试.
(1)main()
{inti=1;
while(i<10)
sum+=i;
++i;
printf("sum=%d\n",sum);
}
(2)main()
{inti=sum=0;
do{sum+=i;
++i;
}while(i<10)
printf("sum=%d\n",sum);
}
(3)main()
{inti,sum=0;
for(i=1;i<10;++i)
{sum=sum+i;
printf("sum=%d\n",sum);
}
}
2,完善程序并回答问题
下列程序用来计算S=1+1/1!
+1/2!
+1/3!
+…+1/N!
main()
{intt,n,i;
floats;
s=0__________;t=_1__________;
scanf("%d",&n);
for(i=1;i<=__n_________;++i)
{
t=_t*i_____________;
s=s+1/t_________________;}
printf("s=%f\n",s);
}
问题:
1)此程序用双循环怎么实现请写出程序上机调试(提示:
内循环计算阶乘,外循环实现累加).
(2)若要计算S=1/2!
+1/4!
+1/6!
+…+1/10!
用哪种算法比较合适请编程上机调试.
3,编写下列问题的源程序并上机调试.
(1)输入两个正整数,求其中最大公约数和最小公倍数.(习题5.3)
(2)输入一行字符,分别统计出其中的英文字母,空格,数字和其它字符的个数.(习题5.4)
(3)用牛顿迭代法求方程2x^3-4x^2+3x-6=0在1.5附近的根.(习题5.14)
(4)猴子吃桃问题.猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个.第二天早上又将剩下的桃子吃掉一半,又多吃了一个.以后每天早上都吃了前天剩下的一半零一个.到第10天早上想再吃时,见只剩下一个桃子了.求第一天共摘了多少桃子.(习题5.12)
三,实验报告:
1,源程序.
2,错误原因及其修改记录.
3,实验结果记录.
4,实验体会.
实验五数组
一,实验目的:
1,掌握一维数组和二维数组的定义,赋值和输入输出的方法.
2,掌握字符数组和字符串函数的使用.
3,掌握与数组有关的算法(特别是排序算法).
二,实验准备:
1,复习数组的基本知识.
2,复习字符串数组的特点和常用的字符串处理函数.
3,源程序.
三,实验步骤及内容:
1,编程求两个3*3二维数组的和:
2,编程计算3*3矩阵两条对角线元素之和:
3,编写下列问题的源程序并上机调试运行.
(1)用选择法对10个整数排序(10个整数用scanf函数输入).(习题6.2)
(2)找出一个二维数组的"鞍点",即该位置上的元素在该行上最大,在该列上最小.也可能没有鞍点.(习题6.8)
此二维数组可以设定如下:
98020540
90-60961
210-310189
数组元素的值用赋初值方法在程序中指定.
(3)将两个字符串连接起来,不要用strcat函数.(习题6.13)
四,实验报告:
1,源程序.
2,错误原因及其修改记录.
3,实验结果记录.
4,实验体会.
实验六函数
一,实验目的:
1,掌握定义函数的方法.
2,掌握函数实参与形参的对应关系,以及"值传递"的方式.
3,掌握函数的嵌套调用和递归调用的方法.
4,掌握全局变量和局部变量动态变量,静态变量的概念和使用方法.
二,实验准备:
1,复习函数调用的基本理论知识.
2,复习函数的嵌套调用和递归调用的方法.
3,复习全局变量,局部变量;静态变量,动态变量;外部变量等概念和具体使用.
4,源程序.
三,实验步骤及内容:
1,运行程序并回答问题
(1)程序
main()
{play(3);
}
voidprint_star()
{printf("**********\n")
}
voidprint_message()
{printf("GoodFriend!
\n");
}
voidplay(n)
intn;
{inti;
for(i=1;i<=n;++i)
{print_star();
print_message();
}
}
问题:
运行后出现什么错误为什么应如何修改请上机调试.
(2)以下程序用于计算1+2+3+4+5.
main()
{inti,sum;
for(i=1;i<=5;++i)
sum=add(i);
printf("sum=%d\n",sum);
}
add(a)
inta;
{ints=0;
s=s+a;
return(s);
}
问题:
此程序能否得到正确结果为什么请在不增加语句的条件下,修改程序并上机调试.
(3)程序
intx=567;
main()
{printf("x=%d,y=%d\n",x,y);
}
inty=890
问题:
运行程序后出现什么错误为什么如何修改
2,程序填空
本程序的作用是在三位正整数中寻找符合下列条件的整数,它既是完全平方数,又有两位数字相同,例如144,676等,下列程序要找出所有满足上述条件的三位数并输出.
main()
{intn,k,a,b,c;
for(k=10;;k++)
{
___________;
if(n>999)
__________;
a=n/100;
b=___________;
c=n%10;
if(flag(a,b,c))
printf("N=%d=%d*%d\n",n,k,k);
}
}
flag(x,y,z)
____________;
{return!
((x-y)*(____)*(y-z));
}
3,编写下列问题的源程序并上机调试运行.
(1)用一个函数来实现将一行字符串中最长的单词输出.此行字符串从主函数传递给该函数.(习题7.10)
(2)写一个函数,输入一个十六进制数,输出相应的十进制数.(习题7.16)
四,实验报告:
1,源程序.
2,错误原因及其修改记录.
3,实验结果记录.
4,实验体会.
实验七编译预处理
一,实验目的要求:
1,掌握宏定义的方法.
2,掌握文件包含处理方法;.
3,掌握条件编译的方法.
二,实验准备:
1,复习宏定义,文件包含,条件编译的概念.
2,复习宏定义,文件包含,条件编译的使用方法.
3,源程序.
三,实验步骤及内容:
程序填空:
(1)#include__________
main()
{printf("%d\n",2);
}
(2)#include_________
#include_________
main()
{inta=4;
printf("%d\n",sqrt(a));
}
(3)#include______
#include______
main()
{charstr[12]={'s','t','r','i','n','g'};
printf("%d\n",strlen(str));
}
2,编写下列问题的源程序并上机调试运行.
(1)定义一个带参数的宏,使两个参数的值互换.在主函数中输入两个数作为使用宏的实参,输出已交换后的两个值.
说明:
在程序主函数使用宏时只能用两个实参,如SWAP(A,B),不能用三个实参.
(2)设计输出实数的格式,包括:
1>一行输出一个实数;
2>一行内输出两个实数;
3>一行内输出三个实数.实数用"%6.2f"格式输出.
用一个文件"print-format.h"包含以上用#define命令定义的格式.在自己的文件(自己命名)中用#define命令将"print-format.h"文件包含进来.在程序中用scanf函数读入三个实数给f1,f2,f3.然后用上面定义的三种格式分别输出
(1)f1;
(2)f1,f2;
(3)f1,f2,f3.
(3)用条件编译方法实现以下功能:
输入一行电报文字,可以任选两中输出,一为原文输出;一为将字母变成其下一字母(如'a'变成'b',...,'z'变成'a'.其它字符不变).用#define命令来控制是否要译成密码.例如:
#defineCHANGE1
则输出密码.若
#defineCHANGE0
则不译成密码,按原码输出.
用条件编译方法来处理.
四,实验报告:
1,源程序.
2,错误原因及其修改记录.
3,实验结果记录.
4,实验体会.
实验八指针
一,实验目的:
1,掌握指针的概念,会定义和使用指针变量.
2,学会使用数组的指针和指向数组的指针变量.