语言实到验报告.docx
《语言实到验报告.docx》由会员分享,可在线阅读,更多相关《语言实到验报告.docx(28页珍藏版)》请在冰豆网上搜索。
语言实到验报告
《C程序设计》实验报告
(2007-2008学年第一学期理科类)
系:
班级:
学号:
姓名:
信息工程学院
2007.9.1
实验1C程序的运行环境和运行方法
一、实验目的
(1)了解如何编辑、编译、连接和运行一个C程序。
(2)通过运行简单的C程序,初步了解C程序的特点。
二、实验内容和步骤
1.进入C的工作环境(TurboC2.0)
Windows环境下:
找到“TC”文件夹,双击TC.EXE文件。
此时屏幕上出现TurboC的工作环境。
(最大化用ALT+Enter组合键)
2.熟悉TurboC2.0集成环境
1了解和熟悉编辑(Edit)窗口和信息(Message)窗口的作用。
按功能键F5,观察它有什么作用,再按一次F5,再观察它有什么作用。
按F6,观察它有什么作用;再按一次F6,再观察它有什么作用。
F5的作用:
F6的作用:
2按功能键F10,并按回车键,观察“File”菜单,了解它们的作用和用法。
3选择File菜单中的New,在编辑窗口中随意输入几行字符,观察窗口顶部左端line和col后面数字的变化。
{所有源程序应按章号和题号命名(如文件名T1_1表示第一章第一个实验题),并提到网上,以备后查}
3.输入并运行一个简单的程序
1选择File菜单中的New命令,新建新的源程序文件(编辑窗口变成空白)。
输入下面的程序。
#include
voidmain()
{printf(“ThisisaCprogram.\n”);
}
2选择File菜单中的save保存,输入文件名T1_1(选择好路径),也可按功能键F2进行存盘。
3选择compile菜单中的compile命令编译源程序,观察屏幕上显示的编译信息。
如果出现“出错信息”,则应找出原因并改正之,再进行编译,最后生成.obj文件,(也可按功能键ALT+F9进行编译)
4选择compile菜单中的link命令连接,生成可执行程序文件(.exe文件)。
③、④步也可通过选择compile菜单中的make命令连接来一次性完成
5如果编译无错误,选择run菜单中的run命令运行程序,(也可按Ctrl+F9键使程序运行)
6按Alt+F5键,切换到用户屏,观察运行结果。
按任意键返回。
运行结果:
4.输入并编辑一个C程序
1再选择File→New,使编辑窗口变成空白。
2输入以下程序。
#include
voidmain()
{inta,b,sum;
a=123;b=456;
sum=a+b;
printf(“sumis%d\n”,sum);
}
保存源程序文件,输入文件名T1_2。
3进行编译、连接,然后运行程序,观察运行结果。
运行结果:
6.输入并运行一个需要在运行时输入数据的程序
1选择File菜单中的New,使编辑窗口变成空白,输入下面的程序。
#include
voidmain()
{inta,b,c;
printf("inputa,b:
");
scanf("%d,%d",&a,&b);
c=max(a,b);
printf("max=%d",c);
}
intmax(intx,inty)
{intz;
if(x>y)z=x;
elsez=y;
return(z);
}/*所有程序全部输入,max部分也是整个C程序的一部分*/
按功能键F2进行存盘,输入文件名T1_3。
2编译并运行,在运行时从键盘输入整数2和5,然后按回车键,按Alt+F5键,观察运行结果。
运行结果:
7.运行一个自己编写的程序
题目:
输入a、b、c三个值,输出其中最大者。
1输入自己编写的源程序,以T1_4作为文件名。
(可仿照上一题程序)
源程序:
2运行程序,输入数据,观察结果。
运行结果:
3用File→New将编辑窗口清空,再选File→Load将该文件读入,检查编辑窗口中的内容是否是刚才保存的程序。
4选择File→Quit关闭TurboC,也可用ALT+X关闭。
实验2数据类型、运算符和表达式
一、实验目的
(1)掌握C语言数据类型,熟悉如何定义一个整型、字符型和实型的变量,以及对它们赋值的方法。
(2)掌握不同的类型数据之间赋值的规律。
(3)学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(――)运算符的使用。
(4)进一步熟悉C程序的编辑、编译、连接和运行的过程。
二、实验内容和步骤
1.输入并运行下面的程序
#include
voidmain()
{charcl,c2;
cl='a';
c2='b';
printf("%c%c\n",cl,c2);
}
①运行此程序。
运行结果:
②在此题最后增加一个语句:
printf("%d%d\n",c1,c2);
再运行。
运行结果:
③将第3行改为:
intc1,c2;
再使之运行。
运行结果:
④再将第3,4行改为:
c1=a;/*不用撇号*/
c2=b;
再使之运行。
分析出错原因
⑤再将第4、5行改为:
c1="a";/*用双撇号*/
c2="b";
再使之运行,分析其运行结果。
分析出错原因
⑥再将第4、5行改为:
c1=300;/*用大于255的整数,在charcl,c2;的基础上*/
c2=400;
再使之运行。
运行结果:
2.输入并运行教材第3章习题3.6给出的程序
#include
Voidmain()
{charc1='a',c2='b',c3='c',c4='\101',c5='\116';
printf("a%cb%c\tc%c\tabc\n",c1,c2,c3)
printf("\t\b%c%c",c4,c5);
}
上机前先用人工分析程序,写出应得结果:
上机运行结果:
3.输入并运行下面的程序
#include
voidmain()
{inta,b;
unsignedc,d;
longf;
a=100;b=-100;c=32769;f=65580;
printf(“%d,%d\n”,a,b);
c=a;d=b;
printf(“%u,%u\n”,c,d);
a=f;c=f;
printf(“%d,%u,%u\n”,a,c,f);
}
1请对照程序和运行结果分析
2将一个负整数赋给一个无符号的变量,会得到什么结果。
并分析原因。
结果:
原因:
3将一个大于32767的长整数赋给整型变量,会得到什么结果。
并分析原因。
结果:
原因:
4将一个长整数赋给无符号变量,会得到什么果.。
并分析原因。
结果:
原因:
4.输入习题3.10
#include
Voidmain()
{inti,j,m,n;
i=8;j=10;
m=++i;n=j++;
printf("%d,%d,%d,%d",i,j,m,n);
}
1运行程序,注意i、j、m、n各变量的值。
运行结果:
②将第4、5行改为:
m=i++;
n=++j;
再运行。
运行结果:
5.编程序并上机运行
要将“China”译成码,译码规律是:
用原来字母后面的第4个字母代替原来的字母。
例如,字母“A”后面第4个字母是“E”,用“E”代替“A”。
因此,“China”应译为“Glmre”。
请编一程序,用赋初值的方法使c1、c2、c3、c4、c5五个变量的值分别为'C'、'h'、'i'、'n'、'a',经过运算,使c1、c2、c3、c4、c5分别变为'G'、'1'、'm'、'r'、'e',并输出。
1源程序:
(以T2_5为文件名)
2改变c1、c2、c3、c4、c5的初值为:
'T'、'o'、'd'、'a'、'y',修改程序并运行。
运行结果为:
实验3最简单的C程序设计
一、实验目的
(1)掌握C语言中使用最多的一种语句——赋值语句的使用方法。
(2)掌握各种类型数据的输入输出的方法,能正确使用各种格式转换符。
二、实验内容和步骤
1.掌握各种格式转换符的正确使用方法
1输入程序
#include
Voidmain()
{inta,b;
floatd,e;
charc1,c2;
doublef,g;
longm,n;
unsignedp,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.12f\nm=%1d,n=%1d\np=%u,q=%u\n",f,g,m,n,p,q);
}
2运行此程序写出结果:
3在此基础上,修改程序的第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;
运行程序,写出结果:
4将printf语句改为:
printf("a=%d,b=%d\nc1=%c,c2=%c\nd=%15.6f,e=%15.12f\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);
运行程序,写出结果:
2.编写程序
设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。
用scanf输入数据(r,h),输出计算结果。
输出时要有文字说明,取小数点后两位数字。
源程序:
(以T3_2作为文件名。
)
运行结果:
3.编程序,输入一个华氏温度,要求输出摄氏温度。
公式为
输出时要有文字说明,取2位小数。
(注意:
在什么情况下为实型除法,这里不是指整型除法哦!
)
源程序:
(以T3_3作为文件名。
)
分别用90,100,32做为测试数据,写出运行结果:
实验4逻辑结构程序设计
一、实验目的
(1)了解C语言表示逻辑量的方法(以0代表“假”,以非0代表“真”)。
(2)学会正确使用逻辑运算符和逻辑表达式。
(3)熟练掌握if语句和switch语句。
(4)结合程序掌握一些简单的算法。
(5)学习调试程序。
二、实验内容
本实验要求事先编好解决下面问题的程序,然后上机输入程序并调试运行程序。
1.有一函数:
要求用scanf函数输入x的值,求y值并用printf函数输出y。
源程序:
(以T4_1作为文件名。
)
运行程序,分别用-4,6,28做为测试数据,写出运行结果:
输入:
-4
输出:
输入:
6
输出:
输入:
28
输出:
2.给一个不多于5位的正整数,要求:
①求出它是几位数;②分别打印出每一位数字;③按逆序打印出各位数字,例如原数为321,应输出123。
源程序:
(以T4_2作为文件名。
)
运行程序,分别用2,18,135,3467,45796做为测试数据,写出运行结果:
输入:
2
输出:
输入:
18
输出:
输入:
135
输出:
输入:
3467
输出:
输入:
45769
输出:
除此之外,程序还应当对不合法的输入作必要的处理。
例如:
·输入负数;
·输入的数超过5位。
程序修改部分:
输入:
-3
输出:
输入:
123456
输出:
3.输入一个日期(含年、月、日),编程序输出该日期是该年度中的第几天。
要求:
①输入格式为年/月/日;②程序应当对不合法的输入作必要的处理。
如:
·月份超过12,日期超过31
·年月日为负数。
源程序:
(以T4_3作为文件名。
)
运行程序,分别用以下测试数据测试,写出运行结果:
输入:
2002/3/23
输出:
输入:
2004/15/34
输出:
输入:
-1004/4/-5
输出:
4.下列程序实现从键盘接收3个数,输出最大数和最小数
源程序:
(以T4_4作为文件名)
实验5循环控制
一、实验目的
熟悉掌握用while语句,do-while语句和for语句实现循环的方法。
掌握在程序设计中用循环的方法实现一些常用算法(如穷举、迭代、递推等)。
进一步学习调试程序。
二、实验内容
编程序并上机调试运行。
1.输入两个正整数m和n,求它们的最大公约数和最小公倍数。
在运行时,输入的值m>n,观察结果是否正确。
重新运行,输入时使m源程序:
(以T5_1作为文件名。
)
运行程序,分别用8和12、22和10做为测试数据,写出运行结果:
2.猴子吃桃问题。
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上想再吃时,见只剩一个桃子了。
求第一天共摘了多少桃子。
源程序:
(以T5_2作为文件名。
)
运行程序,写出运行结果:
3.编程计算1+(1+2)+(1+2+3)+(1+2+3+4)+...+(1+2+3+...+n)的值。
(本题中的n从键盘输入,且假设在20以内)
源程序:
(以T5_3作为文件名。
)
4.试编程:
找出1至99之间的全部同构数。
同构数是这样一组数:
它出现在平方数的右边。
例52=25,5在25的右边,5是同构数;252=625,25在625的右边,25是同构数。
源程序:
(以T5_4作为文件名。
)
运行程序,写出运行结果:
4.编程求100~300之间的全部素数的和
源程序:
(以T5_5作为文件名。
)
运行程序,写出运行结果:
5.
运行程序,写出运行结果:
课后思考题(以前考试题):
1.利用下面公式求s的值(求20项之和)
s=1/(1*2*3)-1/(2*3*4)+1/(3*4*5)-1/(4*5*6)+...+1/(19*20*21)-1/(20*21*22)
2.一个素数加上1000以后是43的倍数,求满足这个条件的最小素数。
3.有2个小于40的正整数a和b,a的平方与b的和是1053,b的平方与a的和是873,请编程求满足条件的a和b的值。
(提示:
满足条件的a,b的值唯一)
4.一个自然数除以2余1,除以3余2,除以4余3,除以5余4,除以7余5,求满足这个条件的最小的自然数?
5.求所有的"水仙花数"之和。
所谓"水仙花数"是指一个三位数,其各位数字的立方和等于该数本身。
例如153是一个"水仙花数",因为:
153=1*1*1+5*5*5+3*3*3。
6.分别计算500到1300之间所有既能被7整除又能被13整除的奇数和偶数之和。
7.统计用0-9之间不同的3个数构成一个三位数有多少种方法
实验6数组
一、实验目的
(1)掌握一维数组和二维数组的定义、赋值和输入输出的方法;
(2)掌握字符数组和字符串函数的使用;
(3)掌握与数组有关的算法(特别是排序算法)。
二、.实验内容
编程序并上机调试运行。
1.已有一个已排好序的数组,今输入一个数,要求按原来排序的规律将它插入到数组中,要插入的数用scanf函数输入。
源程序:
(以T6_1作为文件名。
)
运行程序,测试数据为:
有序数组3,5,6,17,23,41,45,54,68,90,102,123,156,178,195
输入:
2
结果:
输入100
结果:
2.找出一个二维数组的“鞍点”的值及位置,即该位置上的元素在该行上最大,在该列上最小。
若没有鞍点,则输出“无鞍点”。
源程序:
(以T6_2作为文件名。
)
运行程序,测试数据为:
①二维数组有鞍点
98020540
90-60961
210-310189
结果:
②二维数组没有鞍点
98020540
90-601961
210-310189
45541567
结果:
3.判断输入的字符串是否"回文"(即顺读和倒读都一样,例如:
ABCBA,字符串首部和尾部的空格不参与比较),是输出“yes”,否则输出“no”。
源程序:
(以T6_3作为文件名。
)
输入ABCDCBA,结果是:
输入ABCDEFG,结果是:
4.删除字符串s(从键盘输入)中的所有数字字符,然后输出
源程序:
(以T6_4作为文件名。
)
运行程序,测试字符串为:
“ab1,C2D34,E”
结果:
5.输入一串字符,以‘?
’结束,统计各字母出现的次数,并按字母出现的多少输出,不出现的字母不输出。
。
例:
输入5B3A+4-HDEH5DH?
输出A1
B1
D2
E1
H3
源程序:
(以T6_5作为文件名。
)
运行程序,测试数据为:
5BBB3AD+4366TM-HDEH5DH?
结果:
课后思考题(以前考试题):
1.用冒泡法对输入的10个整数进行排序
2.用选择法对输入的10个整数进行排序
3.从键盘输入10个整数存入数组a中,再将数组中的元素逆序存放后输出。
4.有15个有序数存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。
如果该数不在数组中,则输出“无此数”。
要找的数用scanf函数输入。
5.分别将有序数组a和b中的数归并到c数组中(C数组中仍然有序)。
6.编程输出以下的杨辉三角形(输出前7行)。
实验7函数
一、实验目的
(1)掌握定义函数的方法;
(2)掌握函数实参与形参的对应关系以及“值传递”的方式;
(3)掌握函数的嵌套调用和递归调用的方法;
(4)掌握全局变量和局部变量、动套变量、静态变量的概念和使用方法。
(5)学习对多文件程序的编译和运行。
二、实验内容
编程序并上机调试运行。
1.求两个整数的最大公约数和最小公倍数。
用一个函数求最大公约数,用另一函数根据求出的最大公约数求最小公倍数。
①不用全局变量,分别用两个函数求最大公约数和最小公倍数。
两个整数在主函数中输入,并传送给函数1,求出的最大公约数返回主函数,然后再与两个整数一起作为实参传递给函数2,以求出最小公倍数,再返回到主函数输出最大公约数和最小公倍数。
源程序:
(以T7_1作为文件名。
)
#include
gcd(inta,intb)
{
}
gxd(inta,intb,intg)
{
}
voidmain()
{intx,y;
inti,j;
scanf("%d%d",&x,&y);
i=gcd(x,y);
j=gxd(x,y,i);
ptintf("%dand%dgcdis%d,gxdis%d\n",x,y,i,j);
}
运行程序,测试数据为:
35215
结果:
②用全局变量的方法,分别用两个函数求最大公约数和最小公倍数,但其值不由函数带回。
将最大公约数和最小公倍数都设为全局变量,在主函数中输出它们的值。
修改程序如下:
(以T7_1_1作为文件名。
)
2.递归法将一个整数n转换成字符串。
例如,输入483,应输出字符串“483”。
N的位数不确定,可以是任意的整数。
源程序:
(以T7_2作为文件名。
)
运行程序,测试数据分别为:
1234
结果为:
测试数据分别为:
783
结果为:
测试数据分别为:
46778
结果为:
3.写一函数,输入一个两位的十六进制数,输出相应的十进制数。
子函数:
(以T7_3作为文件名。
)
voidmain()
{charhx[2];intd;
printf("pleaseinputanum(hex):
")
scanf("%c%c",&hx[0],&hx[1]);
d=change(hx);
printf("thisnumis:
",d);
}
运行程序,测试数据分别为:
AB
结果为:
4.验证歌德巴赫猜想(任何充分大的偶数都可以由两个素数之和表示)。
用一个函数进行判定素数,再用此函数将一个偶数用两个素数之和表示,主函数中输出4—100之间的所有偶数用两个素数之和表示:
(以T7_4作为文件名。
)
子函数1:
子函数2:
main()
{inti;
for(i=4;i<=100;i=i+2)
{print(i);/*将i用两个素数之和表示*/
printf("\n");
}
}
运行程序结果为:
课后思考题(以前考试题):
1.用递归的方法求n!
。
2.自己设计一mystrcat()函数,实现将字符串b连接到字符串a的后面。
3.输出100~200之间的全部素数的和(用一函数来判断一个数是否为素数)
4.用递归的方法计算F(n)(n给定,F(n)函数定义如下:
F
(1)=1,F
(2)=1,F(n)=F(n-1)+F(n-2))。
实验8指针
一、实验目的
(1)通过实验进一步掌握指针的概念,会定义和使用指针变量;
(2)能正确使用数组的指针和指向数组的指针变量;
(3)能正确使用字符串的指针和指向字符串的指针变量;
(4)能正确使用指向函数的指针变量;
(5)了解指向指针的指针的概念及其使用方法。
二、实验内容
1.写结果并分析原因:
swap1(intx,inty)
{intt;
t=x;x=y;y=t;
}
swap2(int*x,int*y)
{intt;
t=*x;*x=*y;*y=t;
}
swap3(int*x,int*y)
{inta,int*t=&a;
t=x;x=y;y=t;
}
main()
{inta=10,b=30;
int*p1=&a,*p2=&b;
swap1(a,b);
printf("%d,%d\n",a,b);
}
运行结果为:
将swap1(a,b)改为swap2(a,b),运行结果为:
将swap1(a,b)改为swap2(a,b),运行结果为:
分析原因:
2.将一个3×3的矩阵转置,用一函数实现之。
要求:
在主函数中用scan