第一篇:C语言实验报告
实验一 C程序的运行环境和运行C程序的办法
1.实验目的
(1)了解所用的计算机系统的基本操作方法,学会独立使用该系统。(2)了解在该系统上如何编辑、编译、连接和运行一个C程序。(3)通过运行简单的C程序,初步了解C源程序的特点。(2)进入所用的集成环境。
(3)熟悉集成环境的界面和有关菜单的使用方法。(4)输入并运行一个简单的、正确的程序。
①根据本书介绍的方法对源程序进行编译,观察屏幕上显示的编译信息。若出错则返回修改,无错则连接。② 编译连接无错,运行程序,观察分析运行结果。(5)输入并编译一个有错误的C程序。
(6)输入并运行一个需要在运行时输入数据的程序。(7)运行一个自己编写的程序
心得体会:了解了C程序的运行环境和运行C程序的办法。在学校机房选用的是Turbo C。
实验二 数据类型、运算符和表达式
1.实验目的
(1)掌握C语言数据类型、熟悉如何定义一个整型、字符型和实型的变量,以及对他们的赋值方法。(2)掌握不同数据类型之间的赋值规律。
(3)学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(--)运算符的使用。(4)进一步熟悉C程序的编辑、编译、连接和运行的过程。2.实验内容和步骤(1)输入并运行下面程序: #include
②在上面printf语句下面再增加一个printf语句: printf(“%d %dn”,c1,c2);再运行,并分析结果,结果为97 98 ③将第三行改为 int c1,c2;再使之运行,并观察结果,结果为97 98 ④再将第4、5行改为;c1=a;c2=b;再使之运行,并观察结果,结果为运行出错。⑤再将第4、5行改为:
(1)检查所用计算机系统是否已安装了C编译系统并确定它所在的子目录。
c1=”a”;c2=”b”;再使之运行,并观察结果,结果为404 406 ⑥再将第4、5行改为: c1=300;c2=400;再使之运行,并观察结果,结果为300 400;
心得体会:在编写C程序时,有些细小的错误会影响结果的正确性。所以编写的时候要仔细小心。初步编写完成要回过头来再检查一遍
实验三 最简单的C程序设计
1.实验目的
(1)掌握C语言中使用最多的一种语句——赋值语句的使用方法。(2)掌握各种类型数据的输入输出方法,能正确使用各种格式转换符。2.实验内容和步骤
(1)通过下面的程序掌握各种格式转换符的正确使用方法。①输入以下程序 #include
c1=a,c2=b d= 3.56,e=-6.87 f= 3157.890121,g= 0.123456789000 m=50000,n=-60000 p=32768,q=40000 运行程序,分析结果a=-15536,b=5536 c1==,c2=> d=3157.89,e= 0.12 f= 3157.890121,g= 0.123456789000 m=50000,n=-60000 p=50000,q=5536 ④改用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,89.121,0.123456789,50000,-60000,37678,40000 运行结果如下:
61,62,a,b,3.56,-6.87,3157.890121,0.123456789,50000,-60000,37678,40000 a=61,b=62 c1=a,c2=b d= 3.56,e=-6.87 f= 3157.890121,g= 0.123456789000 m=50000,n=-60000 p=37678,q=40000 ⑤在④的基础上将printf改为:printf(“a=%d,b=%dnc1=%c,c2=%cnd=%15.6f,e=%15.12fn”,a,b,c1,c2,d,e);printf(“f=%f,g=%fnm=%d,n=%dnp=%d,q=%n”,f,g,m,n,p,q);a=61,b=62 c1=a,c2=b d= 3.560000,e=-6.869999885559 f=3157.890121,g=0.123457 m=-15536,n=0 p=5536,q=-1
⑥将p,q改用%o格式符输出a=61,b=62 c1=a,c2=b d= 3.560000,e=-6.869999885559 f=3157.890121,g=0.123457 m=-15536,n=0 p=12640,q=177777
⑦将scanf函数中的%lf和%ld改为%f和%d,运行程序分析结果: c1=a,c2=b d= 3.560000,e=-6.869999885559 f=0.000000,g=0.000000
m=-15536,n=1824 p=5536,q=1983(2)按习题4.8要求编写程序,并上机运行。题目为:设半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出结果。输出时要有文字说明,取小数点后两位数字。#include
上机运行程序,比较用printf和putchar函数输出字符的特点。代码:#include
心得体会:如何在代码中使用不同的函数从而简化代码,优化代码需要我们多加练习,多加体会。
实验四 逻辑结构程序设计
1.实验目的
(1)了解C语言表示逻辑量的方法(以0代表“假”,以非0代表“真”)。
(2)学会正确使用逻辑运算符和逻辑表达式。(3)熟练掌握if语句和switch语句。(4)结合程序掌握一些简单的算法。(5)学习调试程序。2.实验内容
(1)习题5.5。有一函数: y=x
(x<1)y=2x-1
(1≦x<10)y=3x-11(x≥10)用scanf函数输入x的值,求y的值。
运行程序,输入的x(分别为x<1,1~10,x≥10这3中情况),检查输出值的准确性。# include
} } 运行结果:x: ⑵ 给出一个百分制绩,要求输入成绩ABCDE。90分以上的为A,81~89分为B,70~79分为C,60~69分为D,60分以下的为E。① 实现编号程序,要求分别用IF和switch语句来实现。运行结果,并检查结果。
② 在运行一次,输入值为负值,这显然时输入错误,修改程序,是只能正确处理结果,当输入数据>100或<0是,通知用户输入错误,程序结束。# include
case 70:grade='C';break;case 60:grade='D';break;case 50: case 40: case 30: case 20: case 10: case 00:grade='E';break;} printf(“score is %5.1fthe grade is %cn”,score,grade);getch();}(3)给一个不多于5为的正整数,要求1:起哦出他是几位数,2:粉笔输出每一位数字3;按逆顺序输出各个数字,例如原数321,应输出123,·要处理的数为1位正整数; ·要处理的数为2位正整数; ·要处理的数为3位正整数; ·要处理的数为4位正整数; ·要处理的数为5位正整数。
除此之外,程序还应当对不合法的输入作必要的处理,例如: ·输入负数;
·输入的数超过5位(如123456)代码:#include
结果:与预期相符。
(4)输入4个整数,要求按由小到大顺序输出。
在得到正确结果后,修改程序使之按由大到小顺序输出。代码1:#include 实验五 循环控制 1.实验目的 (1)熟悉掌握用while语句、do-while语句和for语句实现循环的方法。 (2)掌握在程序设计中用循环的方法实现一些常用算法(如穷举、迭代、递推等)。(3)进一步学习调试程序。2.实验内容 编程序并上机调试运行。 (1)输入两个正整数m和n,求他们的最大公约数和最小公倍数 在运行时,输入的值m>n,观察结果是否正确。 再输入时,使m 修改程序,不论m和n为何值,都能得到正确结果。代码:#include (2)输入一行字符,分别统计出其中的英文字母、空格、数字和其他字符的个数。 在得到正确结果后,请修改程序使之能分别统计大小写字母、空格、数字和其他字符的个数。代码:#include (3)用牛顿迭代法求方程2x3-4x2+3x=6在1.5附近的根。 在得到正确结果后。请修改程序使所设的x初始值由1.5改变为100、1000、10000,在运行,观察结果,分析不同的x处置对结果有没有影响,为什么? 修改程序,使之能输出迭代的次数和每次迭代的结果,分析不同的x初始值对迭代的次数有无影响。代码:#include (4)猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉了一半,又多吃了一个。以后每天早上都吃了前天剩下的一半零一个。到第10天早上再想吃时,见只剩一个桃子了。求第一天共摘了多少桃子。在得到正确结果后,修改题目,改为猴子每天吃了前一天的一半后,再吃两个。请修改程序并运行,检查结果是否正确。代码:#include 代码:#include 实验六 数组 1.实验目的 (1)掌握一维数组和二维数组的定义、赋值和输入输出的方法;(2)掌握字符数组和字符串函数的使用;(3)掌握与数组有关的算法(特别是排序算法)。2.实验内容 编程序并上机调试运行 (1)用选择法对10个整数排序。10个整数用scanf函数输入 代码:#include (1)有15个数存放在一个数组中,输入一个数,要求用折半查找法找出该数组是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”。以15个数用赋初值的方法在程序中给出。要找的数用scanf函数输入。代码:#include void main(){int a[15],i,x,min,max,sign,loca,mid;for(i=0;i<15;i++)scanf(“%d”,&a[i]);for(i=0;i<15;i++)printf(“%3d”,a[i]);scanf(“%d”,&x);max=14;min=0;sign=0;if(xa[14])loca=-1;while((!sign)&&(min<=max)){mid=(max+min)/2;if(x==a[mid]){loca=mid;printf(“%d”,loca+1);sign=1;} else if(x (2)将两个字符串连接起来,不要用strcat函数。代码:#include } 结果:与预期结果相符。 (2)找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。 应至少准备两组测试数据: ① 二维数组有鞍点,例如: ② 二维数组没有鞍点,例如: 用scanf函数从键盘输入数组各元素的值,检查结果是否正确。题目并未指定二维数组的行数和列数,程序应能处理任意行数和列数的数组。因此,从理论上来说,应当准备许多不同行数和列数的数组数据,但这样的工作量太大,一般来说不需要这样做,只需准备典型的数据即可。 如果已指定了数组的行数和列数,可以在程序中对数组元素赋初值,而不必用scanf函数。代码:#include 心得体会:数组很重要,要掌握一维、二维数组的定义,并掌握有关算法 实验七 函数 1.实验目的 (1)掌握定义函数的方法; (2)掌握函数实参与形参的对应关系,以及“值传递”的方式;(3)掌握函数的嵌套调用和递归调用的方法; (4)掌握全局变量和局部变量、动态变量、静态变量的概念和使用方式;(5)学习对多文件的程序的译和运行。2.实验内容 (1)写一个判别素数的函数,在主函数输入一个整数,输出是否素数的信息; 本程序应当准备以下测试数据:17、34、2、1、0。分别运行并检查结果是否正确。代码:#include int prime(int n){int flag=1,i;for(i=2;i printf(“n”);getch();} int words(char c){if((c>='a'&&c<='z')||(c>='A'&&c<='z'))return(1);else return(0);} int longest(char string[]){int len=0,i,length=0,flag=1,place=0,point;for(i=0;i<=strlen(string);i++)if(words(string[i]))if(flag){point=i;flag=0;} else len++;else {flag=1;if(len>=length){ length=len;place=point;len=0;}} return(place);} 运行结果:input one line: jkjk jiuiw hodyqyd jak the longest word is: hodyqyd (3)用递归法将一个整数n转换成字符串。代码:#include {putchar('-');number=-number;} convert(number);putchar('n');getch();} void convert(int n){int i;if((i=n/10)!=0)convert(i);putchar(n%10+'0');} 运行结果:input an integer:123345667899 output:123345667899 心得体会:复杂的代码更需要耐心。 实验八 编译预处理 1.实验目的 (1)掌握宏定义的方法;(2)掌握文件包含处理方法;(3)掌握条件编译的方法。2.实验内容 编程序并上机调试运行。 (1)定义一个带参数的宏,使两个参数的值互换。在主函数中输入两个数作为使用宏的实参,输出以交换后的两个值 代码:#include (2)用条件编译方法实现以下功能:输入一行电报文字,可以任选两种输出,一为原文输出;一为将字母变成其下一字母。用#define命令来控制是否要译成密码。代码:#include