C语言实验报告

2020-03-03 14:52:04 来源:范文大全收藏下载本文

实验一 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 void main() {char c1,c2; c1='a'; c2='b'; printf("%c %c\n",c1,c2); } ①运行此程序,结果为:a b

②在上面printf语句下面再增加一个printf语句: printf("%d %d\n",c1,c2); 再运行,并分析结果,结果为97 98 ③将第三行改为 int c1,c2; 再使之运行,并观察结果,结果为97 98 ④再将第

4、5行改为; c1=a; c2=b; 再使之运行,并观察结果,结果为运行出错。 ⑤再将第

4、5行改为:

1

(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 void 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= 3.56,e= -6.87 f= 3157.890121,g= 0.123456789000 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=%ld,n=%ld\np=%u,q=%u\n",f,g,m,n,p,q); getch(); } ②运行此程序并分析结果 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=32768,q=40000 ③在此结果上,将程序9~14行改为: a=61,b=62

2

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=%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=%\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

3

m=-15536,n=1824 p=5536,q=1983 (2)按习题4.8要求编写程序,并上机运行。题目为:设半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出结果。输出时要有文字说明,取小数点后两位数字。 #include main() { float r,h,L,S,S1,V,V1,pi=3.1415926; printf("r= "); scanf("%f",&r); printf("h= "); scanf("%f",&h); L=2*pi*r; S=pi*r*r; S1=4*pi*r*r; V=4/3*(pi*r*r*r); V1=S*h; printf("L=%6.2f\nS=%6.2f\nS1=%6.2f\nV=%6.2f\nV1=%6.2f\n",L,S,S1,V,V1); printf("*********\n"); printf("copyright\n"); printf("*********\n"); getch(); 结果:L=9.42 S=7.07 S1=28.26 V=14.13 V1=21.20 (3)编程序,用getchar函数读入两个字符c1,c2,然后分别用putchar函数和printf函数输出这两个字符。

上机运行程序,比较用printf和putchar函数输出字符的特点。 代码:#include void main() {char c1,c2; c1=getchar(); c2=getchar(); putchar(c1); putchar(c2); printf("%c,%c",c1,c2); getch(); } 结果:ab aba,b 比较,一个putchar函数只可以输出一个字符,而一个print函数可以输出多个字符,并可以用符号连接。

心得体会:如何在代码中使用不同的函数从而简化代码,优化代码需要我们多加练习,多加体会。

实验四 逻辑结构程序设计

1.实验目的

(1) 了解C语言表示逻辑量的方法(以0代表“假”,以非0代表“真”)。

4

(2) 学会正确使用逻辑运算符和逻辑表达式。 (3) 熟练掌握if语句和switch语句。 (4) 结合程序掌握一些简单的算法。 (5) 学习调试程序。 2.实验内容

(1)习题5.5。有一函数: y=x

(x

(1≦x

运行程序,输入的x(分别为x void main() { int x,y; printf("x:"); scanf("%d",&x); if(x

} } 运行结果:x: ⑵ 给出一个百分制绩,要求输入成绩ABCDE。90分以上的为A,81~89分为B,70~79分为C,60~69分为D,60分以下的为E。 ① 实现编号程序,要求分别用IF和switch语句来实现。运行结果,并检查结果。

② 在运行一次,输入值为负值,这显然时输入错误,修改程序,是只能正确处理结果,当输入数据>100或<0是,通知用户输入错误,程序结束。 # include void main() {float score; char grade; printf("input student's score:"); scanf("%f",&score); switch((int)(score)) {case 100: case 90:grade='A';break; case 80:grade='B';break;

5

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 %c\n",score,grade); getch(); } (3)给一个不多于5为的正整数,要求1:起哦出他是几位数,2:粉笔输出每一位数字3;按逆顺序输出各个数字,例如原数321,应输出123,

·要处理的数为1位正整数; ·要处理的数为2位正整数; ·要处理的数为3位正整数; ·要处理的数为4位正整数; ·要处理的数为5位正整数。

除此之外,程序还应当对不合法的输入作必要的处理,例如: ·输入负数;

·输入的数超过5位(如123456) 代码:#include void main() {long x;int a,b,c,d,e; scanf("%ld",&x); if (x>=100000||x=0&&x=10&&x=100&&x=1000&&x=10000&&x

6

结果:与预期相符。

(4)输入4个整数,要求按由小到大顺序输出。

在得到正确结果后,修改程序使之按由大到小顺序输出。 代码1:#include void main() {int a,b,c,d,t; scanf("%d,%d,%d,%d",&a,&b,&c,&d); if (a>b) {t=a;a=b;b=t;} if (a>c) {t=a;a=c;c=t;} if (a>d) {t=a;a=d;d=t;} if (b>c) {t=b;b=c;c=t;} if (b>d) {t=b;b=d;d=t;} if (c>d) {t=c;c=d;d=t;} printf("%d,%d,%d,%d",a,b,c,d); getch(); } 代码2: #include void main() {int a,b,c,d,t; scanf("%d,%d,%d,%d",&a,&b,&c,&d); if (a

实验五 循环控制

7

1.实验目的

(1)熟悉掌握用while语句、do-while语句和for语句实现循环的方法。

(2)掌握在程序设计中用循环的方法实现一些常用算法(如穷举、迭代、递推等)。 (3)进一步学习调试程序。 2.实验内容

编程序并上机调试运行。

(1)输入两个正整数m和n,求他们的最大公约数和最小公倍数

在运行时,输入的值m>n,观察结果是否正确。

再输入时,使m

修改程序,不论m和n为何值,都能得到正确结果。 代码:#include #include void main() {int m,n,i; scanf("%d,%d",&m,&n); for(i=fabs(n);i>=1;i--) {if (n%i==0&&m%i==0) break;} printf("%d\n",i); for(i=1;i

(2)输入一行字符,分别统计出其中的英文字母、空格、数字和其他字符的个数。

在得到正确结果后,请修改程序使之能分别统计大小写字母、空格、数字和其他字符的个数。 代码:#include void main() {char s; int a,b,c,d,e; a=0;b=0;c=0;d=0;e=0; while((s=getchar())!='\n') {if(s>='A'&&s='0'&&s='a'&&s

8 e++; else d++; } printf("%d,%d,%d,%d,%d",a,b,c,d,e); getch(); } 结果:与预期结果相符

(3)用牛顿迭代法求方程2x3-4x2+3x=6在1.5附近的根。

在得到正确结果后。请修改程序使所设的x初始值由1.5改变为100、1000、10000,在运行,观察结果,分析不同的x处置对结果有没有影响,为什么?

修改程序,使之能输出迭代的次数和每次迭代的结果,分析不同的x初始值对迭代的次数有无影响。 代码:#include #include void main() {float x1,x0,f,f1; scanf("%f",&x1); do {x0=x1; f=((2*x0-4)*x0+3)*x0-6; f1=(6*x0-8)*x0+3; x1=x0-f/f1; } while(fabs(x1-x0)>=1e-5); printf("%5.2f\n",x1); getch(); } 结果:与预期结果相符,x的初始值对于迭代没有影响。

(4)猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉了一半,又多吃了一个。以后每天早上都吃了前天剩下的一半零一个。到第10天早上再想吃时,见只剩一个桃子了。求第一天共摘了多少桃子。 在得到正确结果后,修改题目,改为猴子每天吃了前一天的一半后,再吃两个。请修改程序并运行,检查结果是否正确。 代码:#include void main() {int s,i; s=1; for (i=1;i

9

代码:#include void main() {int s,i; s=1; for (i=1;i

实验六 数组

1.实验目的

(1)掌握一维数组和二维数组的定义、赋值和输入输出的方法; (2)掌握字符数组和字符串函数的使用; (3)掌握与数组有关的算法(特别是排序算法)。 2.实验内容

编程序并上机调试运行

(1)用选择法对10个整数排序。10个整数用scanf函数输入 代码:#include void main() {int a[11],i,j,min,t; for (i=0;i

(1) 有15个数存放在一个数组中,输入一个数,要求用折半查找法找出该数组是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”。以15个数用赋初值的方法在程序中给出。要找的数用scanf函数输入。 代码:#include

10

void main() {int a[15],i,x,min,max,sign,loca,mid; for (i=0;ia[14]) loca=-1; while((!sign)&&(min

(2)将两个字符串连接起来,不要用strcat函数。代码:#include void main() {char str1[40],str2[40]; int i,j; i=0; j=0; scanf("%s",str1); scanf("%s",str2); while (str1[i]!='\0') i++; while(str2[j]!='\0') str1[i++]=str2[j++]; str1[i]='\0'; printf("%s",str1); getch();

} 结果:与预期结果相符。

(2)找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。

应至少准备两组测试数据: ① 二维数组有鞍点,例如: ② 二维数组没有鞍点,例如:

用scanf函数从键盘输入数组各元素的值,检查结果是否正确。题目并未指定二维数组的行数和列数,程序应能处理任意行数和列数的数组。因此,从理论上来说,应当准备许多不同行数和列数的数组数据,但这样的工作量太大,一般来说不需要这样做,只需准备典型的数据即可。

如果已指定了数组的行数和列数,可以在程序中对数组元素赋初值,而不必用scanf函数。 代码:#include void main() {int a[4][5],i,j,k,max,maxj,flag; for (i=0;imax) {max=a[i][j]; maxj=j;} flag=1; for(k=0;ka[k][maxj]) {flag=0;continue;} if(flag) {printf("%d",max); break;}} if(!flag) printf("no exist"); getch(); } 结果:与预期结果相符。

心得体会:数组很重要,要掌握一维、二维数组的定义,并掌握有关算法

实验七 函数

1.实验目的

(1)掌握定义函数的方法;

(2)掌握函数实参与形参的对应关系,以及“值传递”的方式; (3)掌握函数的嵌套调用和递归调用的方法;

12

(4)掌握全局变量和局部变量、动态变量、静态变量的概念和使用方式; (5)学习对多文件的程序的译和运行。 2.实验内容

(1)写一个判别素数的函数,在主函数输入一个整数,输出是否素数的信息; 本程序应当准备以下测试数据:

17、

34、

2、

1、0。分别运行并检查结果是否正确。 代码:#include main() {int prime(int n); int n; printf("\nintput an integer:"); scanf("%d",&n); if (prime(n)) printf("\n%d is a prime.\n",n); else printf("\n%d is not a prime.\n",n); getch(); }

int prime(int n) {int flag=1,i; for(i=2;i

(2)用一个函数来实现将一行字符串中最长的单词输出。此行字符串从主函数传递给该函数。 把两个函数放在同一个程序文件中,作为一个文件进行编译和运行。 把两个函数分别放在两个程序文件中,作为两个件进行编译、连接和运行。 代码:#include void main() {int words(char); int longest(char[]); int i; char line[100]; printf("input one line:\n"); gets(line); printf("the longest word is:"); for(i=longest(line);words(line[i]);i++) printf("%c",line[i]);

13

printf("\n"); getch(); } int words(char c) {if ((c>='a'&&c='A'&&c=length) { length=len; place=point; len=0; }} return(place); }

运行结果:input one line: jkjk jiuiw hodyqyd jak the longest word is: hodyqyd

(3)用递归法将一个整数n转换成字符串。 代码:#include main() {void convert(int n); int number; printf("input an integer:"); scanf("%d",&number); printf("output:"); if (number

14

{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 #define swap(a,b)t=b;b=a;a=t main() {int a,b,t; printf("input two integer a,b"); scanf("%d,%d",&a,&b); swap(a,b); printf("Now,a=%d,b=%d\n",a,b); } 运行结果:与预期结果相符。

(2)用条件编译方法实现以下功能:输入一行电报文字,可以任选两种输出,一为原文输出;一为将字母变成其下一字母。用#define命令来控制是否要译成密码。 代码:#include #define MAX 80 #define CHANGE 1 main() {char str[MAX]; int i;

15 gets(); #if(CHANGE) {if(i=0;i='a'&&str[i]='A'&&str[i]

心得体会:对宏定义、文件包含处理方法、条件变编译的方法还需要多加练习

实验九

指针

1.实验目的

(1)通过实验进一步掌握指针的概念,会定义和使用指针变量; (2)能正确使用数组的指针的指针数组的指针变量; (3)能正确使用字符串的指针和指向字符串的指针变量; (4)了解指向指针的指针的概念及使用方法。 2.实验内容

(1)输入3个整数,按由小到大的顺序输出,然后将程序改为;输入3个字符串,按由小到大的顺序输出。 代码:#include main() {void swap(int *p1,int *p2); int n1,n2,n3; int *p1,*p2,*p2; scanf("%d,%d,%d",&n1,&n2,&n3); p1=&n1; p2=&n2; p3=&n3; if(n1>n2)swap(p1,p2); if(n1>n3)swap(p1,p3); if(n2>n3)swap(p2,p3); printf("%d,%d,%d\n",n1,n2,n3); } void swap(int *p,int *p) {int p; p=*p;*p1=*p2;*p2=p; } 运行结果:与预期结果相符。

(2)原来第几号的人有n个人围成一圈,顺序排号。从第一个人开始报数,凡报道三的人退出圈子,问最后留下的是原来第几号的人。 代码:#include

16 main() {int i,k,m,num[50],*p; scanf("%d",&n); p=num; for(i=0;i

(3)用指针指向的指针的方法对n个整数进行排序并输出。要求将排序单独写成一个函数。n和个各整数在主函数中输入。最后在主函数中输出。

代码:#include main() {void sort(int **p,int n); int i,n,digit[20],**p,*pstr[20]; scanf("%d",&n); for(i=0;i**(p+j)) {temp=*(p+i);

17

*(p+i)=*(p+j); *(p+j)=*temp;}}}} 运行结果:与预期结果相符。

心得体会:指针是非常重要一部分,要多多练习,多多体会。

实验十

结构体和公用体

1.实验目的:

(1)掌握结构体类型变量的定义和使用; (2)掌握结构体类型数组的概念和应用; (3)掌握链表的概念,初步学会对链表进行操作; (4)掌握共用体的概念与使用。 2.实验内容

编程序,然后上机调试运行。

(1)有5个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入5个学生数据,要求输出3门课总平均成绩、以及最高分的学生的数据,(包括学好、姓名、3门课的成绩、平均分数)。(本题是教材第11章习题11.5) 要求用一个input函数输入5个学生数据;用一个average函数求总平均分;用max函数找出最高分学生数据;总平均分和最高分的学生的数据都在主函数中输出。

(2)13个人围成一圈,从第一个人开始顺序报号

1、

2、3.凡报道“3”者退出圈子,找出最后留在圈子中的人原来的序号(本题是教材第11章习题11.9)。 本题要求用链表实现。

(3)建立一个链表,每个节点包括:学好、姓名、性别、年龄。输入一个年龄,如果链表中的节点所包含的年龄等与此年龄,则将此节点删去(本题是教材第11章习题11.11)。 (4)输入和运行以下程序: #include union data {int i[2]; float a; long b; char c[4]; } void main() {scanf(“%d,%d”,&u,i[0],&u.i[1]; printf(i[0]=%d,i[1]=%da=%fb=%ldc[0]=%c,c[1]=%c,c[2]=%c,c[3]=%c”,u.i[0], u.i[1],u.a,u.b,u.c[0],u.c[1],u.c[2],u.c[3]); } 输入两个整数10000、20000赋给u.i[0]和u.i[1].分析运行结果。然后将scanf语句改为: scanf(“%1d”,&u.b); 输入60000赋给b。分析运行结果。

运行结果:与预期结果相符。

心得体会:掌握链表的使用,耐心分析程序中出现的错误与问题。

18

C语言实验报告

C语言实验报告

C语言实验报告

C语言实验报告

c语言实验报告

C语言实验报告

c语言实验报告

c语言 实验报告

c语言实验报告

C语言 实验报告

《C语言实验报告.doc》
C语言实验报告
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档
下载全文