实验一 熟悉C语言程序的运行环境
一、实验目的
1、了解在该系统上如何编辑、编译、连接和运行一个C 程序;
2、通过运行简单的C程序,初步了解C程序的特点。
二、实验预习
1、认真阅读简单的C程序介绍,C程序上机步骤部分内容;
2、编写好所需要的程序,程序的书写应该清楚整洁,一般检查应该是没有明显的错误。
如果在程序中有疑问的地方,可以标记起来,以便于上机调试时予以注意。初学者特别忌讳
上机前自己不编写程序,到时随便地抄别人的程序。
三、实验指导
1、输入并运行一个简单的程序,从而熟悉所用系统的上机方法与步骤。 (1)选择File->New,使编辑窗口变成空白 (2)输入下面的程序(例题1.1) #include void main( ) { printf("This is a C program.\n"); } (3)按功能键【F9】进行编译和连接,观察屏幕上显示的编译信息。如果出现“出错 信息”,则应找出原因并改正之,再进行编译。
(4)如果编译无错误,按【Ctrl+F9】键使程序运行,按【Alt+F5】键,切换到用户 屏,观察分析运行结果。
2、输入并运行一个需要在运行时输入数据的程序 (1)清空编辑窗口,输入下面的程序(例题1.2)。 #include void main( ) { int a,b,c ; printf("input a & b:"); scanf("%d,%d",&a,&b); c=max(a,b); printf("max=%d",c); } int max(int x,int y) { int z ; if(x>y)z=x ; else z=y ; return(z); } (2)编译并运行,在运行时从键盘输入整数2 和5,格式为:2, 5(注意:两数据间 用逗号分隔开),然后按回车键,按【ALT+F5】键,观察运行结果。 (3)自己试着改动一些数据或输入格式,再运行,观察结果作比较。
四、实验内容
1、在C 编辑环境下编辑实验指导中给出的程序、编译并运行。
2、试编写一程序完成如下信息的显示。 ********************************** "How are you!" **********************************
3、编写一个C 程序(习题1.6):输入a, b, c 三个值,输出其中最大者。 根据上述题目要求编程并上机调试运行。
五、实验报告要求
实验结束后,应整理实验报告,其内容应包括:
1、实验题目
2、设计思路
3、写出程序源代码
4、写出程序运行结果
5、对实验结果进行分析、总结
六、设计思路
1.5题:以main为主函数,对三条语句进行编码,分别输出,即可达到所要求的结果。 1.6题:以main为主函数,先输入三个整形十进制数,任取其一,与其它两个中的任一进行对比,取其最大,再与剩余的一个进行对比,可得最大。
七、源程序清单 1.5题:
#include main() {
printf("\n**********************\n"); printf(" "how are you"\n"); printf("**********************\n"); } 1.6题:
#include main() { int a,b,c,max; scanf("%d,%d,%d",&a,&b,&c); max=a; if(max
八、分析、总结、及心得
通过本次实验让我学会c程序的编写应注意的一些细节,理解一些简单程序的编写方法。
实验二 数据类型,运算符与表达式
一、实验目的
1、掌握C 语言数据类型,,以及对它们赋值的方法;
2、掌握不同的数据类型之间赋值的规律;
3、学会使用C 的有关算术运算符,以及包含这些运算符的表达式,特别是自加和自减运算符的使用;
4、进一步熟悉C 程序的编辑、编译、连接和运行的过程。
二、实验预习
1、认真阅读教材数据类型,算术运算符和表达式,赋值运算符和表达式部分内容。
三、实验指导
1、输入并运行下面的程序: #include void main( ) { int a,b ; unsigned c,d ; long e,f ; a=100 ; b=-100 ; e=50000 ; f=32767 ; c=a ; d=b ; printf(“%d,%d \n ”,a,b); printf(“%u,%u \n ”,a,b); printf(“%u,%u \n ”,c,b); c=a=e ; d=b=f ; printf(“%d,%d \n ”,a,b); printf(“%u,%u \n ”,c,d); } 请对照程序和运行结果分析:
(1)将一个负整数赋给一个无符号的变量,会得到什么结果。
(2)将一个大于32767 的长整数赋给整形变量,会得到什麽结果。
(3)将一个长整数赋给无符号的变量,会得到什麽结果(分别考虑该长整数的值大于或等于65535 以及小于65535 的情况)。
同学们可以改变程序中各变量的值,以便比较。例如: a = 65580, b = -40000, e = 65535,f = 65580。
2、输入下面程序: #include void main( ) { int i,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 各变量的值,分别作以下改动并运行。 (2)将第3 行中m, n 的值改为:m=i++; n=++j; 再运行。 (3)将程序改为: #include void main( ) { int i, j; i=8; j=10; printf(“%d,%d”, i++, j++); } 运行并分析结果。
(4)在(3)的基础上,将printf 语句改为:
printf(“%d,%d”, ++i, ++j); 运行并分析结果。 (5)再将printf 语句改为:
printf(“%d,%d,%d,%d”, i, j, i++, j++); 运行并分析结果。 (6)将程序改为: #include void main( ) { int i,j,m=0,n=0 ; j=10 ; i=8 ; m+=i++; n-=--j ; printf("i=%d, j=%d, m=%d, n=%d",i,j,m,n); } 运行并分析结果。
四、实验内容
1、在C 编辑环境下编辑实验指导中给出的程序、编译并运行。
2、试编一程序实现输入长宽高,计算长方体的表面积。
3、按习题3.7 的要求编程序并上机运行,该题的要求是:
要将“China”译成密码,译码规律是:用原来字母后面的第4个字母代替原来的字母。例如,字母“A”后面第4 个字母是“E”,用“E”代替“A”。因此,“China”应译为“Glmre”。请编一程序,用赋初值的方法使c
1、c
2、c
3、c
4、c5 五个变量的值分别为’C’、’h’、’i’、’n’、’a’,经过运算,使c
1、c
2、c
3、c
4、c5 分别变为’G’、’l’、’m’、’r’、’e’、,并输出。
(1)输入编好的程序,并运行该程序。分析是否符合要求。
五、实验结果 1题:
(1):100,-100 100,65436 100,65436 (2):-15536,32767 (3):5000,32767 2题:
(1):9,119,10 (2):9,11,8,11 (3):8,10 (4):9,11 (5):9,11,8,10 (6):i=9,j=9,m=8,n=-9
六、源程序清单 四.2题
#include void main() { float a,b,c,s; scanf("%f,%f,%f",&a,&b,&c); s=2*a*b+2*a*c+2*b*c; printf("s=%.2f",s); } 3题
#include void mian() { char c1='C',c2='h',c3='i',c4='n',c5='a'; c1+=4; c2+=4; c3+=4; c4+=4; c5+=4; printf("%c%c%c%c%c\n",c1,c2,c3,c4,c5); }
七、分析、总结、及心得
通过本次的实验,熟悉如何定义一个整型、字符型和实型的变量,掌握算术运算符的使用,以及包含这些运算符的表达式,特别是自加和自减运算符的使用,学会一些简单程序编写所注意的问题。
实验三 简单C程序设计
一、实验目的
1、掌握C 语言中赋值语句的使用方法;
2、掌握不同类型数据的输入输出方法,能正确使用各种格式转换符;
二、实验预习
1、认真阅读数据的输入输出部分内容。
三、实验指导
1、从键盘输入两个0 到127 的整数,求两数的平方差并输出其值以及这两个整数的ASCII 码对应的字符。
(1)算法分析:标准ASCII 码值范围是0 到127,所以在这范围内的数可以以字符形式输出,实现方法是用格式输出函数并用格式符c 控制输出。 (2)根据结果书写源程序 #include void main( ) { int x,y,sub ; scanf("%d%d",&x,&y);/* 变量前一定要加取地址符& */ sub=x*x-y*y ; printf("%c,%c,%d",x,y,sub); } (3)在C 编辑环境下编辑源程序。 (4)编译【F9】,直到程序没有错误。 (5)运行【Ctrl+F9】,从键盘输入: 100 50↙
注意输入时两数间应以空格间隔,不能用逗号,只有源程序输入函数中两格式符以逗号间隔时输入才可以是:100,50↙ (6)查看结果【Alt+F5】
2、输入程序
#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.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=%ld,n=%ld\np=%u,q=%u\n",f,g,m,n,p,q); } (1)运行程序并分析结果。
(2)在此基础上,修改程序的第7~11 行: 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; 运行程序,分析结果。 (3)将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); 运行程序,分析结果。
(4)将p、q 改用%o 格式符输出。运行程序,分析结果。
四、实验内容
1、在C 编辑环境下编辑实验指导中给出的程序、编译并运行。
2、本节实验题目:
(1)若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,c1='a',c2='b'。想得到以下的输出格式和结果,请写出程序。 要求输出结果如下:(注意空格的输出) a= 3 b= 4 c= 5 x=1.200000,y=2.400000,z=-3.600000 x+y= 3.60 y+z=-1.20 z+x=-2.40 u= 51274 n= 128765 c1='a' or 97(ASCII) c2='B' or 98(ASCII) (2)假设m是一个三位数,试编写一程序完成将m的个位,十位,百位反序输出(例如:123反序输出为321)。
五、实验结果
三、1:
d,2,7500
2、(1): 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 (2): 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 (3): c1==,c2=> d= 3157.890137,e= 0.123456791043 f=3157.890121,g=0.123457 m=-15536,n=0 p=5536,q=-1 (4): a=15536,b=5536 c1==,c2=> d= 3157.890137,e= 0.123456791043 f=3157.890121,g=0.123457 p=12640,q=177777
六、源程序清单 2(1): #include void main() { int a=3,b=4,c=5; long int u=51274,n=128765; float x=1.2,y=2.4,z=-3.6; char c1='a',c2='b'; printf("a=%2d b=%2d c=%2d\n",a,b,c); printf("x=%f,y=%f,z=%f\n",x,y,z); printf("x+y=%5.2f y+z=%5.2f z+x=%5.2f\n",x+y,y+z,z+x); printf("u=%6ld n=%9ld\n",u,n); printf("%s %s %d%s\n","c1='a'","or",c1,"(ASCII)"); printf("%s %s %d%s\n","c2='B'","or",c2,"(ASCII)");
} (2:) #include void main() { int a,b; scanf("%d",&a); b=a/100+a%100/10*10+a%10*100; printf("%d",b);
}
七、分析、总结、及心得
在本次实验中,学会了赋值语句的使用方法,不同类型数据的输入输出,尤其是某些空格应特别注意,了解了在scanf语句中不能用\n,这也是我一直犯的错误。
实验四 选择结构程序设计
一、实验目的
1、学会正确使用逻辑运算符及逻辑表达式;
2、熟练掌握if 语句与switch 语句;
二、实验预习
1、认真阅读if 语句和switch 语句部分内容。
2、编写好所需要的程序。
三、实验指导
1、输入三角形的三边长,判断这个三角形是否是直角三角形。
(1)算法分析:直角三角形斜边最长,要先找出三边中最长的边,判断最长边的平方 是否等于其余两边的平方和,若相等就是直角三角形。 根据分析结果书写源程序。 #include void main( ) { int a,b,c,t ;/* 三边设为a,b,c,t 是用于交换的中间变量*/ scanf("%d,%d,%d",&a,&b,&c); if(a
t=a ;
a=b ;
b=t ; }/* a 中放a,b 中较长边*/ if(a
t=a ;
a=c ;
c=t ; }/* a 中放a,b,c 中的最长边*/ if(a*a==b*b+c*c)
printf("Y"); else
printf("N"); } (2)编辑源程序 (3)编译【F9】,直到没有错误。 (4)运行【Ctrl+F9】,输入: 3,4,5↙
(5)查看结果【Alt+F5】,输出: Y
四、实验内容
1、在C 编辑环境下编辑实验指导中给出的程序、编译并运行。
2、本节实验题目:
(1)给出一个百分制成绩,要求输出成绩等级A、B、C、D。90 分以上为A,80~89分为B,70~79 分为C,60~69 分为D,60 分以下为E。
①事先编好程序,要求分别用if 语句和switch 语句实现。运行程序,并检查结果是否正确。
②再运行一次程序,输入分数为负值(如-70),这显然是输入时出错,不应给出等级。
③修改程序,使之能正确处理任何数据。当输入数据大于100 或小于0 时,通知用户“输入数据错”,程序结束。
(2)给出一个不多于5位的正整数,要求:①求出它是几位数。②分别打印出每一位数。③按逆序打印出各位数字。
五、简述编程思路
2.1.1首先写一段程序(switch语句)来对不是所要求的输入的判断与执行,其次写出主要要执行的语句对于switch要求用break跳出,if则不同,
六、源程序清单 2.1.1:(用switch) #include void main() { float a; char b; printf("please input a score:"); scanf("%f",&a); while(a100) { printf("input error");
scanf("%f",&a); } switch((int)a/10) {
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:b='E';break;
case 6:b='D';break;
case 7:b='C';break;
case 8:b='B';break;
case 9:
case 10:b='A'; }
printf("b=%c\n",b);
} 2.1.2:(用if)
#include void main() { float a; char b; printf("please input a score:"); scanf("%f",&a); while(a100) { printf("input error");
scanf("%f",&a); } if(a>=0&&a
b='E'; else if (a>=60&&a
b='D'; else if (a>=70&&a
b='C'; else if (a>=80 &&a
b='B'; else
b='A';
printf("b=%c\n",b);
} 2.2: #include void main() { long int a; long int g,s,b,q,w,f,place; scanf("%ld",&a); while(a>99999) { printf("input error"); scanf("%ld",&a); } if(a>9999) place=5; else if (a>999) place=4; else if(a>99) place=3; else if(a>9) place=2; else place=1; printf("%d\n",place); g=a%10; s=a%100/10; b=a%1000/100; q=a%10000/1000; w=a/10000; printf("%ld,%ld,%ld,%ld,%ld\n",g,s,b,q,w); f=a%10*10000+a%100/10*1000+a%1000/100*100+a%10000/1000*10+a/10000; printf("f=%ld\n",f);
}
七、实验心得
通过本次实验,明白了if和switch的联系,以及长整形在打印时注意的地方,学会使用逻辑运算符及逻辑表达式。
实验五 循环控制
一、实验目的
1.熟练掌握for 语句、while 语句、do-while 语句实现循环的方法; 2.理解循环嵌套及其使用方法;
3.掌握break 语句与continue 语句的使用;
4.掌握用循环实现一些常用算法(如穷举、迭代、递推等)。
二、实验预习1.认真阅读本章教材中循环控制部分.2.编写好所需要的程序。
三、实验指导 1.打印如下图案
*
* * *
* * * * * * * * * * * *
(1)算法分析:从图案中找出行数,空格数,星号数间的关系如下: 行数空格数星号数 1 3 1 2 2 3 3 1 5 4 0 7 i 4-i 2*i-1 可用双重循环控制整个图案的输出。若用循环变量i,j 分别控制外层,内层循环,则 i 的取值从1 到4,表示行数,在每行中要确定前面空格个数和星号个数,空格个数是4-i,
星号个数是2*i-1。
(2)根据分析结果写出源程序 #include void main( ) { int i,j ; /*定义循环控制变量*/ for(i=1;i
(6)查看结果【Alt+F5】。输出题目要求的图案。
四、实验内容
1.在C 编辑环境下编辑实验指导中给出的程序,编译并运行。 2.要求学生独立完成如下题目:
(1)输出100到1000之间的所有水仙花数。所谓水仙花数是指一个三位数,其各位数字立方和等于该数本身。
(2)输入一行字符,分别统计出其中英文字母、空格、数字 和其他字符的个数。
(3)试利用图形函数完成极坐标函数ρ=cos(3*X)图像的绘制。【进阶题目,选做】 根据以上题目要求编程并上机调试运行。
五、编程思路
2(1)对一个数字每一位的输出的前提下在利用一个if语句即可。 2(2)先明白英文字母、空格、数字的ASCII,在用if函数即可。
六、程序运行结果 2(1):
#include #include void main() { int a=100,g,s,b; while(a>=100&&a
printf("%d\n",a);
a++; }
} (2):
#include void main() { char c; int i=0,j=0,k=0,l=0; while((c=getchar())!='\n') {
if(c>=65&&c96&&c
i++;
else if(c>=48&&c
j++;
else if(c==32)
k++;
else
l++; } printf("i=%d,j=%d,k=%d,l=%d\n",i,j,k,l);
} (3):
#include #include #define PI 3.1415926
int main() { int gdriver, gmode; float p,x,px,py,zx,zy; gdriver=VGA; gmode=VGAHI; initgraph(&gdriver, &gmode, "c: c"); for(x=0;x
p=cos(3*x);
zx=p*cos(x);
zy=p*sin(x);
px=320+zx*100;
py=240-zy*100;
putpixel(px,py,14); }
getch(); closegraph(); return 0; }
七、实验总结、心得
通过本次实验,理解了一些循环语句的选择、运用,对一些简单循环的嵌套有了更进一步的理解。