1、C 语言上机实验指导实验内容简介:为了配合C 语言教学的需要,培养学生理论与实践相结合的能力,特编写了C语言上机实验指导,内容包括:数据类型、逻辑运算、函数、数组、指针等方面的内容。实验为 36 个学时,适应于非计算机专业的学生上机实验。目录:实验一:C 语言的基本操作方法实验二:C 程序设计的基本方法实验三:逻辑运算、判断选取控制及循环控制实验四:函数的使用实验五:数组的使用实验六:指针的使用附录: 参考答案【TurboC 下载】实验一:C 语言的基本操作方法实验目的及要求:1. 了解 TURBO C 软件的窗口界面,熟练掌握 TC 的菜单命令及相应的键命令,并在 TC 环境下掌握如何编辑、
2、编译、连接、运行一个C 程序并如何保存和修改C 语言的源程序。2. 通过运行一个简单的C 程序过程,逐步了解C 程序的基本结构及特点。3. 掌握 C 语言的基本数据类型,熟悉它们的使用方法及定义方式,了解几 种类型数据输出时所用的格式转换符(整型、字符型、实型),熟悉各种运算 符和表达式的使用特点,它包括:算术运算、关系运算、逻辑运算及自增和自减运算。4. 熟练掌握 C 中赋值运算的使用。5. 本实验 4 学时完成。实验内容1. 熟悉并掌握 TC 环境下的菜单功能及命令键的使用。如上图是用户进入TC 后的主菜单界面,下面是常用的命令及功能键:File 菜单File 的下拉菜单中有 9 个子命令
3、,其功能是完成文件的创建、存、取、退出等。Load :该命令为装载命令,其功能是将已存盘的文件调入到当前所编辑的屏幕中。Pick :选择最近已编辑过的源程序文件。New :用于创建一个新的文件。Save :用于保存当前所编辑的文件。Write to :可以将当前的文件以另外一个文件名存盘。OS shell :从 Turbo C 切换到 DOS 提示符下,可用EXIT 命令返回。Quit :退出 Turbo C,回到 DOS 提示符下。常用的编辑键(在 Edit 状态下):删除光标所在的字符。:插入、改写转换键。:光标到行首。:光标到行尾。:向上翻页:向下翻页+N:插入一行+Y:删除光标所在行+
4、KB:定义块首+KK:定义块尾+KV:块移动+KC:块复制+KY:块删除+KH:块取消+或+C:中断程序的运行常用热键的使用用加上 Turbo C 菜单栏上所对应的第一个大写字母,方可进入对应菜单+F: 进入文件菜单、+E :进入编辑菜单、+R :进入运行菜单+C:进入编译菜单等。 +F9:运行程序(对应RUN 菜单中的“Run”命令)+F5:从 TC 屏幕切换到用户屏幕(对应 RUN 菜单中的“User screen”命令)F2:将当前所编辑的文件存盘(对应 File 菜单中的“save”命令)F3:装入一个文件(对应File 菜单中的“load”命令)F1:显示当前位置的帮助信息。F4:程
5、序运行到光标所在行。(对应RUN 菜单中的“Go to cursor”命令) 2.进入 TC 环境后,编缉一个简单源程序,程序如下:main()printf(“Hello!How are you?”); 完成如下功能:a.利用 TC 的编辑菜单,输入该源程序,且进行保存(注意保存的路径)。b.对输入的源程序进行编译和运行,得到输出结果。从中熟悉TC 环境下的各种命令及用法,初步掌握编辑、修改、编译、调试运行及排错的全过程。3.输入并运行计算两数之和的C 程序。main()int a,b,sum;a=10;b=30;sum=a+b;printf(“sum=%dn”,sum);对变量 a,b 输入
6、不同的数据时,输出变量内容的变化,若增加一个输入变量C,程序该如何修改。从该程序中了解输入、输出时的数据类型及格式。4.输入并运行下列程序,观察输出结果。main()printf(“Test”);printf(“1”);printf(“2”);printf(“n”);5. 判断下列程序的错误,修改该程序后,得到正确的输出结果。main()int sum; sum=10+12+13+14;print(“The answer is %dn”,sum);6. 执行如下程序: main()char c1,c2,c3; unsigned char c4;c1=a;c2=b;c3=99;c4=256;pr
7、intf(“c1=%c,c2=%c,c3=%c,c4=%cn”,c1,c2,c3,c4);输出结果为多少? 若 在 第 五 行 后 添 加 一 条 语 句 : printf(“c1=%d,c2=%d,c3=%d,c4=%dn”,c1,c2,c3,c4); 输出结果又为多少?将变量c4 改为字符变量(char),将 c1,c2,c3 改为整型变量观察输出结果的变化。7. 分析下列程序,指出程序运行结果。main()int x,y; x=3;y=x+; printf(“%d,%dn”,x,y);若将第四行改为:y=+x,第五行改为: printf(“%d,%dn”,x,+y),显示其输出结果。以上
8、完成的是自增运算,若将程序改为自减运算,输出结果如何。8. 分析下列程序,并指出程序运行结果。main()int a,b,c,x; a=5;b=7;c=9;x=a=b&b=c; printf(“x=%d”,x);从该程序中了解关系运算符的含义。9. 运行如下程序,打印输出结果。main()int a,b; a=65;b=66;printf(“%dt%cn”,a+1,a+1); printf(“%dt%cn”,b-1,b-1);从该程序中了解字符与ASCII 之间的对应关系。10. 用关系表达式自编一程序,完成从键盘输入 3 个数,输出其中最大者。11. 写出下列程序的运行结果,并分析这些结果。
9、main()int a,b,c,p; a=b=c=1; p=(+a)+(+b)+(+c);printf(“%d,%d,%d,%dn”,a,b,c,p);printf(“%d,%d,%d,%dn”,a+,b-,-c,p); a=1;b=1;p=a-&b+; printf(“%d,%d,%d,%dn”,a,b,c,p); p=(ab)?a:b; max=(tempc)?temp:c; printf(“MAX=%dn”,max);输入:Inter A,B,C:5 3 7 输出:MAX=7实验二:C 程序设计的基本方法实验目的及要求:1. 掌握 C 程序设计的基本语句表达方式及基本语句结构的方法。2.
10、 掌握 C 语言中输入、输出函数的基本功能。3. 能独立编写简单的C 程序。4. 本实验 4 学时完成。实验内容1. 指出下面程序的错误并加以修改,输出正确结果。#include ;main()float x,y; scanf(“%d”,x);y=x/z; if(x=0);printf(“你输出的x 值为零n”)else(printf(“y=%dn”,y);2. 判断下面程序从键盘输入的一个运算符号,并进行相应的运算或处理。试指出程序是否有错,为什么?main()int a,b; a=5;b=4;if(getchar()=+)printf(“%d+%d=%d”,a,b,a+b);else if
11、(getchar()=-)printf(“%d-%d=%d”,a,b,a-b); else printf(“Input Error ”);3. 从终端输入一个字符,如果是小写字母则转换成大写后输出,否则原样输出。若将大写字母转换成小写字母,程序如何修改?4. 从键盘上输入三角形三边 a,b,c 的值,计算三角形面积,并输出三角形的三边a,b,c及面积 area 的值。三角形面积的公式s=(a+b+c)/2平方根函数为:sqrt(x),x 和函数值为浮点类型,头文件使用“math.h”。5. 输入一小写字母,分别以字符形式与数值形式输出该小写字母与相应的大写字母。6. 设圆半径为r,圆柱的高为h
12、,求圆周长l、圆面积 s 与圆柱体积 V。 用 scanf() 函数输入数据,用printf()函数输出数据,输出的数据有 8 列宽度,小数点后有两位数字。第 一 题 : #include main()float x,y; float z=50.8;scanf(“%f”,&x); y=x/z;if(x=0)ptintf(“ 你输出的x 值为零n”);elseprintf(“y=%fn”,y);第二题:#include main() a=5;b=4;if(getchar()=+)printf(“%d+%d=%d”,a,b,a+b);else if(getchar()=-)printf(“%d-%
13、d=%d”,a,b,a-b);else printf(“Input Error ”);因为使用getchar 函数之前,必须用#include 包含“stdio.h” 第三题:#include main()int c;printf(“input a character:”); c=getchar();c=a&c=A&c=Z?putchar(c+a-A):putchar(c);即可。第四题:#include main()float a,b,c, s,area;scanf(“%f%f%f”,&a,&b,&c); s=(a+b+c)/2.0;area=sqrt(s1(s1-a) (s1-b) (s1
14、-c) printf(“a=%f b=%f c=%fn”,a,b,c); printf(“area=%fn”,area);运行后输入:10.5 20.4 15.2输出:a=10.500000,b=20.400000,c=15.200000 area=16.157701第 五 题 : #include main()char c; c=getchar( );printf(“%c,%dn”,c,c) c=c-32;printf(%c,%d”,c,c);输入a输出a 97A 65第六题: main()float pi,h,r,l,s,v; pi=3.1415;printf(“Input r,h=?”)
15、;scanf(“%f,%f”,&r,&h); l=2*pi *r;s=r *r *pi; v=pi *r *r *h;printf(“l=%8.2fn”,l);实验三:逻辑运算、判断选取控制及循环控制实验目的及要求1. 熟练掌握 IF 语句及 SWITCH 语句的基本结构和使用方法。2. 熟练掌握循环语句中for 语句、while 语句和 do while 语句使用方法。3.掌握逻辑运算中,真(1)、假(0)判断方法。4.本实验 4 学时完成。实验内容1. 从键盘输入两个实数和一个四则运算符(+、-、*、/),由运算符决定相应的运算。若输入其它字符,则显示“Input Error”信息。分别用
16、IF 语句和 SWITCH 语句实现以上功能。2. 用程序实现下面的分段函数:3. 键盘上输入一行字符,统计出该行中的英文字母、空格、数字和其他字符的个数,并打印输出。4. 输入一个数据,由该数据决定其三角形的高度,输出其三角形的图形。例如:输入一个 2,则三角形为:*输入一个 3,则三角形为:*5. 如果一个 3 位数等于它每一位数的立方和,则称此数为“水仙花数”,求所有水仙花数。例如:153 是一个水仙花数,因为 153=。6. 输入一个字母,输出由这个字母决定其高度的字符“金字塔”。例如:输入小写字母c,则输出如下图形:aa b aa b c b a输入大写字母C,则输出如下图形:AA
17、B AA B C B A第一题:用 IF 语句编写: #include main()float a,b; char op;printf(“Input a,b,op:n”);scanf(“%f,%f,%c”,&a,&b,&op);if(op=+) printf(“%f+%f=%f”,a,b,a+b); elseif(op=-) printf(“%f-%f=%f”,a,b,a-b); elseif(op=*)printf(“%f*%f=%f”,a,b,a*b); elseif(op=/)if(b=0)printf(“divide by 0”); else printf(“%f/%f=%f”,a,b
18、,a/b); elseprintf(“input error”);用 Switch 语句编写:#include “stdio.h” main()float a,b; char op;printf(“input a,b,op:n”);scanf(“%f,%f,%c”,&a,&b,&op); switch(op)case +: printf(“%f+%f=%fn”,a,b,a+b);break; case -: printf(“%f+%f=%fn”,a,b,a-b);break; case *: printf(“%f+%f=%fn”,a,b,a*b);break; case /: if(b=0)p
19、rintf(“divided by 0n”); else printf(“%f/%f=%fn”,a,b,a/b);break; defult:printf(“input error”);第二题:main()int x,y; printf(“input x:”);scanf(“%d”,&x); if(x=1&x10)y=2*x-3; else y=3*x-20;printf(“y=%dn”,y);第三题:#include main()char c;int letters=0,space=0,digit=0,other=0; printf(“input a string:n”); while(c=
20、getchar()!=n)if(c=A&c=a&c=0&c=9)digit+; else other+;printf(“letter%d space=%d digit=%d other=%dn”, letters,space,digit,other);第四题: main()int i,j,k,n; printf(“input n:”);scanf(“%d”,&n); for(i=1;i=n;i+)for(j=1;j=2*n+1-i;j+)printf(“ ”); for(k=1;k=(2*i-1)+n;k+)if(k=n)printf(“ ”); elseprintf(“*”);printf(
21、“n”);第五题: main()int i,j,k,n;printf(水仙花数是:); for(n=100;n1000;n+)i=n/100; j=n/10-i*10; k=n%10;if(i*100+j*10+k=i*i*i+j*j*j+k*k*k)printf(%d,n);printf(n);第六题:#include #include main()char c,c1,c2,top;int i;printf(input a character:n);top=isupper(c=getchar()?A:(islower(c)?a :0); if(top)for(c1=top;c1=c;+c1)
22、 for(i=1;i=40-2*(c1-top);+i) putchar( ); for(c2=top;c2=top;-c2) printf(%2c,c2);printf(n);实验四:函数的使用实验目的及要求1. 理解函数的定义及函数的调用过程(函数的调用格式、调用方式及被调用函数的使用说明)。2. 掌握函数的嵌套与递归调用的全过程。3. 掌握变量的存储类型及变量说明的一般形式,熟练掌握存储类型区分符的表示方式用 auto 表示自动变量、extern(外部)static (静态)register (寄存器)。4本实验 8 学时完成。实验内容1. 找出下面程序的错误,并加以改正。如果输入 10
23、、25、45 三个数字,输出其结果。main()int a,b,c;scanf(“%d,%d,%d”,&a,&b,&c);printf(“%dn”,f(a,b,c);f(a,b,c)int x,y,z,s;s=(xy? x:y);return(sz?s:z);2. 下面是一个不带形式参数的函数addtwo。从中找出错误,并加以改正。假设在 main()中调用它并把它的值赋给N,写出该程序。int addtwo int a,b;scanf(%d%d”,a,b);return(a+b);3. 编一个求最大公约数的函数,由主函数来调用并输出结果。4. 编写对偶数项求和的函数,试从主函数输入 10 个
24、函数及输出和数。5.使用函数的嵌套功能求 1!+2!+3!+4!+n!的值。6. 编写一函数,完成使输入的一个字符串按反序输出,并在主函数中输入和输出该字符串。7. 编一函数 fun 的功能是判断一个整数m 是否是素数,若是返回 1,否则返回 0。在 main()函数中,若 fun 返回 1 输出 YES 并打印该素数,若 fun 返回 0 输出 NO。8.已知一个数列的前三项分别为 0,0,1,以后的各项都是其相邻的前三项之和。写一函数其功能是计算并输出该数列前n 项的平方根之和sum。n 的值通过形参传入。例如:当n=10 时,程序的输出结果为:23.197745。9. 编写求方程零、的根
25、的程序,用三个函数分别求出当大于等于零和小于零的根。要求从主函数输入a,b,c 的值并输出结果。10. 用递归方法编写程序完成求n 阶勒让德多项式的值,递归公式如下:11. 运行下面程序,观察静态局部变量及自动变量的调用过程中的变化,在程序中加入两条打印语句输出三次调用开始和结束b 和 c 的值及输出程序结果。main()int a=3,i; for(i=0;iy? x:y);return(sz?s:z);输入:10,25,45 输出:45第二题: main()int n,addtwo();n=addtw0(); printf(“%d”,n);int addtwo() int a,b; sca
26、nf(%d%d”,&a,&b); return(a+b);第三题: zdg(x,y) int x,y;int a,b,t,r; if(xy)t=x;x=y;y=t; a=x;b=y; while(r=b%a)!=0)b=a;a=r; return(a);main()int x,y,g; scanf(“%d.%d”,&x.,&y);g=zdg(x,y); printf(“%dn”,g);输入:12,24 输出:12第四题: main()int i,s,a10; for(i=0;i10;i+) scanf(“%d”,&ai); s=add(a); printf(“s=%dn”,s);int add
27、(int b10)int i,t=0; for(i=1;i10;i=i+2) t=t+bi; return(t);输入:1 2 3 4 5 6 7 8 9 10输出:30 第五题: main()int n;long sum(); scanf(“%d”,&n);printf(“sum=%ldn”,sum(n);long sum(n) int n;int i; long s=0; long fac();for(i=1;i=n;i+) s=s+fac(i); return(s);long fac(i) int i;if(i=0) return(1); elsereturn(i*fac(i-1);第六
28、题: main()char str80; printf(“input string:n”);scanf(“%s”,str); inverse(str); printf(“%sn”,str);inverse(str) char str;char t; int i,j;for(i=0,j=strlen(str);istrlen(str)/2;i+,j-)t=stri; stri=strj-1; strj-1=t;输入:abcdefghijk 输出:kjihgfedcba 第 七 题 : #include #include int fun(int m)int k=2; while(k=m&(m%k)
29、!=0) k+;if(m=k) return 1;else return 0;main()int n;clrscr();printf(nPlease enter n:); scanf(%d,&n); if(fun(n)printf(YES,%dn,n); else printf(NOn);第 八 题 : #include #include #include float fun(int n)double sum,s0,s1,s2,s;int k; sum=1.0;if(n=2)sum=0.0; s0=0.0;s1=0.0;s2=1.0;for(k=4;k=n;k+)s=s0+s1+s2; sum
30、+=sqrt(s); s0=s1;s1=s2;s2=s;return sum;main()int n; clrscr();printf(Input N=); scanf(%d,&n);printf(%fn,fun(n);第 九 题 : #include float x1,x2,disc,p,q; great(a,b)float a,b;x1=(-b+sqrt(disc)/(2*a);x2=(-b-sqrt(disc)/2(2*a);equal(a,b) float a,b;x1=x2=(-b)/(2*a);small(a,b) float a,b;p=-b/(2*a); q=sqrt(disc
31、)/(2*a); main()float a,b,c; printf(“input a,b,c:n”);scanf(“%f%f%f”,&a,&b,&c); disc=b*b-4*a*c;if(disc0)qreat(a,b); printf(“X1=%ftX2=%fn”,x1,x2);else if(disc=0)equal(a,b); printf(“X1=%ftX2=%fn”,x1,x2);else small(a,b);printf(“X1=%f+%fitX2=%f-%fin”,p,q,p,q);第十题: main()int x,n;float h(); printf(“input n,
32、x:”);scanf(“%d%d”,&n,&x);printf(“N=%d,X=%dn”,n,x); printf(“H%d(%d)=%6.2f”,n,x,h(n,x);float h(n,x) int n,x;if(n=0) return(1); else if(n=1) return(x); elsereturn(2*n-1)*x*h(n-1),x)-(n-1)*h(n-2),x)/n);第十一题: B=0 C=3 B=1 C=4 P=8B=0 C=4 B=1 C=5 P=9B=0 C=5 B=1 C=6 P=10实验五:数组的使用实验目的及要求1. 理解并掌握一维数组、二维数组的定义及引
33、用。2. 熟练掌握数组的查找及排序的编程方法。3. 掌握字符串数组和字符串的使用方法及常用字符串函数在程序中的使用。4. 本实验室 8 学时完成。实验内容1. 输出下列形式的杨辉三角形的前 10 列。111121133 1146 4 1*若三角形为如下形式,程序如何编写。111121133 1146 4 12. 编一程序,将两个 23 二维数组中的对应元素的值相加,输出其结果。3. 从键盘输入两个字符串,将第二个字符串连接到第一个字符串后(不能使用strcat()函数)。4. 编一程序,将一个二维矩阵的行列互换,并输出结果。5. 从键盘输入一个数,然后在一个整型一维数组 A20中,用折半查找法
34、找出该数是数组中第几个元素的值。若该数不在数组中,则打印“NO FOUND”。6. 输入三行文字,每行有 30 个字符。统计其中英文大写字母、小写字母、数字、空格及其它字符的个数。7. 编程打印如下图形:* * * * * * * * * * * * * * * * *8. 比较两个字符串 s1 和 s2,若 s1s2,输出正数 1;若 s1=s2,输出 0;若s1s2输出-1。(不用 strcpy 函数编写)9. 输入 n 个整数,将其按从大到小次序排列输出。10. 编一程序,在 34 的二维数组中统计所有正数之和、所有负数之和及正、负数的个数,并打印其结果。11. 有一电文,已按下列规律译
35、成译码: AZ azB Y byC X cx 即第一个字母变成第 26 个字母,第i 个字母变成第(26-i+1)个字母。非字母字符不变。编一程序将密码译成原文,并输出密码和原文。第一题:#define N 11 main()int i,j,aNN; for(i=1;iN;i+)aii=1;ai1=1;for(i=3;In;i+) for(j=2;j=i-1;j+)aij=ai-1j-1+ai-1j; for(i=1;iN;i+)for(j=1;j=i;j+) printf(“%6d”,aij); printf(“n”);printf(“n”);*main()int a1019,i,j; fo
36、r(i=0;i10;i+) for(j=0;j19;j+) aij=0;for(i=0;i10;i+)ai9-i=1;ai9+i=1;for(i=2;i10;i+) for(j=11-i;j(9+i);j=j+2)aij=ai-1j-1+ai-1j+1; for(i=0;i10;I+)for(j=0;j19;j+)if(aij=0) printf(“ “);else printf(“%3d”,aij);printf(“n”);第二题:main()int i,j,s,a23,b23,c23;printf(“input array a23:”); for(i=0;i2;i+)for(j=0;j3;j+) scanf(“%d”,&aij);printf(“input array b23:”); for(i=0;i=1;i+)for(j=0;j=2;j+) scanf(“%d”,&bij); for(i=0;i2;I+) for(j=0;j3;j+) cij=aij+bij; for(
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。