1、 《C语言程序设计》 实验报告 2013~2014学年第二学期 班 级 姓 名 学 号 指导教师 实验一 实验项目名称:C程序的运行环境和运行C程序的方法 所使用的工具软件及环境:Visual C++ 6.0 一、实验目的: 1.了解在Visual C++ 6.0环境下如何编辑、编译、连接和运行一个C程序; 2.通过运行简单的C程序,初步了解C源程序的特点。 二、预习内容: 教材《C语言程序设计教程》第1章。 三、实验内容: 1. 在Visu
2、al C++ 6.0环境下输入并运行下面的程序:
#include
3、d\n”,a,b,sum);
return 0;
}
四、实验结果:
1. 运行结果(或截图):
This is a C program.
Press any key to continue
2. (1) 改正后的源程序:
#include
4、果(或截图): 3+4=7 五、思考题: 1. 一个C程序上机的步骤有哪些? 答:上级输入与编辑源程序 — 对原程序进行编译 – 与库函数链接 – 运行可执行的目标程序。 2. 组成C程序的基本单位是函数,一个函数包括哪几个部分? 答:一个函数包括两部分:分别为函数头或函数首部 和 函数体。 成绩 指导教师签名 实验二 实验项目名称:数据类型、运算符和表达式 所使用的工具软件及环境:
5、Visual C++ 6.0 一、实验目的: 1.掌握整型、实型与字符型这三种基本类型的概念; 2.掌握常量及变量的使用方法; 3. 掌握基本算术运算符及其表达式的使用方法; 4. 掌握++、--运算符、赋值运算符及其表达式的使用方法。 二、预习内容: 教材《C语言程序设计教程》第2章。 三、实验内容: 1. 在Visual C++ 6.0环境下输入下面的程序,编译、连接、调试该程序。 main( ) { char m,n; m=280; n=320; printf(“%d\t%d\n”,m,n); printf(“%c\t%c\n”,m,n
6、);
}
2. 在Visual C++ 6.0环境下输入并运行下面的程序,观察分析运行结果。
#include
7、
a=b=c=d=3;
i=a++;
j=++b;
m=c--;
n=--d;
printf("a=%d,b=%d,c=%d,d=%d,i=%d,j=%d,m=%d,n=%d\n",a,b,c,d,i,j,m,n);
}
4. 在Visual C++ 6.0环境下输入并运行下面的程序,观察分析运行结果。
#include
8、 @ 2. 运行结果(或截图): d=3.000000,e=3.500000 d=3.000000,e=3.375000 3. 运行结果(或截图): a=4,b=4,c=2,d=2,i=3,j=4,m=3,n=2 4. 运行结果(或截图): a=-32 五、思考题: 1. 给变量命名应该注意哪些问题? 答:每个变量必须进行数据类型说明; 2. 程序2的运行结果中,d和e的值为什么不同? 答:d的赋值语句中,除法
9、是两个整型数字的运算,其结果没有小数位;而e中对b进行了强制转换为实型,所以其除法运算结果有小数位。 3. 程序3的运行结果中,i和j的值为什么不同?m和n的值为什么不同?//改为程序3 答:i(m)是通过后自增(后自减)实现的,而后自增(后自减)是先参与其他运算,后对变量递增(递减); 而j(n)是通过前自增(前自减)实现的,其是先对变量递增(递减),后再参与其他运算。 4. 请分析表达式a+=a-=a*a+a的运算过程(写出运算步骤)。 答:先将a -(a*a+a)赋值给a,再将a+a 赋值
10、给a 。 成绩 指导教师签名 实验三 实验项目名称:简单的输入输出及顺序程序设计 所使用的工具软件及环境:Visual C++ 6.0 一、实验目的: 1. 掌握整型、实型与字符型数据的正确输入方法(scanf函数的使用); 2. 掌握整型、实型与字符型数据的正确输出方法(printf函数的使用); 3. 掌握编写顺序程序的方法。 二、预习内容: 教材《C语言程序设计教程》第3章。 三、实验内容: 1. 编写C程序,按下列公式计算并
11、输出S的值,其中a和b的值有键盘输入。
main()
{ int a,b;
float s;
scanf(“%d,%d”,&a,&b);
s=2.0*a*b/(a+b) /(a+b);
printf(“s=%f\n”,s);
}
①输入并调试。
②将scanf函数改为scanf(“%d%d”,&a,&b);再编译,运行。
③观察结果。
2. 在Visual C++ 6.0环境下输入并运行下面的程序,观察分析程序运行过程及结果。
#include
12、一个整数:"); scanf("%d",&a); printf("请输入第二个整数:"); scanf("%d",&b); sum=a+b; printf("%d+%d=%d\n",a,b,sum); } 3. 设圆半径r=1.5,编写程序求圆周长、圆面积和圆球的体积。要求用scanf语句输入半径,输出时取小数点后两位。 四、实验结果: 1. 输入数据 4,5 输入修改后的数据 4 5 4↙5↙ 运行结果 s=0.493827 运行结果 s=0.493827 s=0.493827 原因 字符控制串中有“,”,所以输入时必须有“
13、 原因 字符控制串中没有除说明符以外的其他字符,所以输入时可以通过空格分隔 字符控制串中没有除说明符以外的其他字符,所以输入时可以通过回车分隔 2. 运行结果(或截图): 请输入第一个整数:1 请输入第二个整数:2 1+2=3 3. (1) 程序中用到的变量(类型) 单精度浮点数 (2) 算法(用伪代码描述或自然语言) c = 2 * pi * r; s = pi * r * r; v = 4 * (pi * r * r * r)/3; (3) 源程序清单 #in
14、clude
15、07,v = 14.13 五、思考题: scanf(“%d,%d”,&a,&b)与scanf(“%d%d”,&a,&b)输入数据的方式有什么不同?从两种输入方式的对比中你得到什么启发? 答:第一种输入方式用户必须以“,”分隔,而第二者可用空格、回车分隔,用户在不知情的情况下,很难知道用“,”分隔输入的数据。所以编程人员可以在scanf()语句前用printf()语句进行注释,让用户知道用什么来分隔输入的数据。 成绩 指导教师签名 实
16、验四 实验项目名称:选择结构程序设计 所使用的工具软件及环境:Visual C++ 6.0 一、实验目的: 1. 正确使用关系运算符和关系表达式; 2. 正确使用逻辑运算符和逻辑表达式; 3. 熟练使用if语句实现选择结构程序; 2. 熟练使用switch语句实现多分支选择结构程序。 二、预习内容: 教材《C语言程序设计教程》第4章。 三、实验内容: 1. 下面程序的功能是:输入学生成绩,若成绩在90分以上,输出“Excellent!”;若成绩在60—89分之间,输出“Pass!”;若成绩在60分以下,输出“Fail!”。请将程序补充完整,并上机运行程序。 #i
17、nclude
18、"); else printf("Fail!\n"); } 运行该程序4次,分别输入4个不同的数据,对应4种不同的情况,记录运行结果: 输入数据 20 61 99 111 运行结果 Fail! Pass! Excellent! Input Error! 2. 有如下分段函数: 请输入x的值,求解对应的y值。 3. 给出一个百分制成绩,要求输出成绩等级’A’、 ’B’、 ’C’、 ’D’、 ’E’。90-100为’A’,80-89为’B’,70-79为’C’,60-69为’D’,60分以下为’E’。用switc
19、h语句写。 四、程序中所用的变量及其类型: 2. 变量:x、y; 数据类型:都为单精度浮点数 3. 变量:score 数据类型:整型 五、算法(用伪代码或自然语言描述): 2. if ( x>=10 ) printf(" y = %f\n", 3*x-11); else if ( x>=1 ) printf(" y = %f\n", 2*x-1); else printf(" y = %f\n", x); 3. switch (score/10) { case 10: printf("A\n")
20、
break;
case 9:
printf("A\n");
break;
case 8:
printf("B\n");
break;
case 7:
printf("C\n");
break;
case 6:
printf("D\n");
break;
default:
printf("E\n");
}
六、源程序清单:
2.
# include
21、"请输入一个x:");
scanf("%f", &x);
if ( x>=10 )
printf(" y = %f\n", 3*x-11);
else if ( x>=1 )
printf(" y = %f\n", 2*x-1);
else
printf(" y = %f\n", x);
return 0;
}
3.
# include
22、ore/10) { case 10: printf("A\n"); break; case 9: printf("A\n"); break; case 8: printf("B\n"); break; case 7: printf("C\n"); break; case 6: printf("D\n"); break; default: printf("E\n"); } return 0; }
23、 七、实验结果: 2. 运行结果(执行程序3次,分别输入不同的3个数,对应3种不同的情况): 输入数据 2 11 -5 运行结果 3.000000 22.000000 -5.000000 3. 运行结果(执行程序5次,分别输入5组不同的数据,对应5种不同的情况): 输入数据 99 80 70 62 59 运行结果 A B C D E 成绩 指导教师签名 实验五 实验项目名
24、称:简单循环程序设计 所使用的工具软件及环境:Visual C++ 6.0 一、实验目的: 1. 掌握循环程序的基本结构; 2. 熟练掌握while、do—while及for语句,并会用来编写循环结构程序。 二、预习内容: 教材《C语言程序设计教程》第4章。 三、实验内容: 1.编写一个程序,计算并输出数列:1,3,5,…,2n-1,…的前几项之和,其中n由键盘输入。要求分别用3种循环语句实现。 方法1:用for语句实现。 main() { long s,n,k,i; scanf(“ %ld “,&n); k=2*n-1; s=0 ; for
25、i=1;i<=k; i+=2 ) s+=i; printf(“1+3+…+%ld=%ld\n”,k,s); } 方法2:用while语句实现。 main() {long s=0 ,n,i=1; scanf(“%ld”,&n); while( i<=(2*n-1) ) {s+=i; i+=2 ;} printf(“1+3+…+%ld=%ld\n”,2*n-1,s); } 方法3:用do-while语句实现。 main() {long s=0,n,i=1; scanf(“%ld”,&n); do {s+=i;
26、 i=i+2;} while( i<=(2*n)-1 ); printf(“1+3+…+%ld=%ld\n”,2*n-1,s); } 填上所缺的空,运行程序,写出结果。 2.输入两个正整数,求其中最大公约数和最小公倍数。 四、程序中所用的变量(类型及其初值): 2. 变量i, k, j, m, least, greatest均为整型变量,没有对其赋予初值。 五、算法(用伪代码描述): 2. for (j=i; j<=i||j>=1; j--)//此处for循环为求最大公约数 { if( i%j == 0) g
27、reatest = j;
else
;
if( k % greatest == 0)
{
printf("%d和%d的最大公约数为%d!\n", i, k, greatest);
break;
}
else
;
}
least = i * k / greatest;
printf("%d和%d最小公倍数为%d!\n", i, k, least);
六、源程序清单:
2.
# include
28、st, greatest;// i, k存储的是两个正整数, least为最小公倍数,greatest为最大公约数 printf("请输入两个正整数(中间以空格分隔):"); scanf("%d %d", &i, &k); for (j=i; j<=i||j>=1; j--)//此处for循环为求最大公约数 { if( i%j == 0) greatest = j; else ; if( k % greatest == 0) { printf("%d和%d的最大公约数为%d!\n", i, k, greatest);
29、 break; } else ; } least = i * k / greatest; printf("%d和%d最小公倍数为%d!\n", i, k, least); return 0; } 七、实验结果: 1. 在下表中写出输入的数据及其运行结果: 方法1 方法2 方法3 输入数据 12 12 12 运行结果 1+3+…+23=144 1+3+…+23=144 1+3+…+23=144 2. 运行结果(或截图): 请输入两个正整数(中间以空格分隔):36 12 36和12
30、的最大公约数为12! 36和12最小公倍数为36! 成绩 指导教师签名 实验六 实验项目名称:多层循环程序设计及break、continue语句在循环程序中的应用 所使用的工具软件及环境:Visual C++ 6.0 一、实验目的: 1. 掌握多层循环程序的执行过程及设计方法; 2. 掌握break及continue语句在循环程序中的使用方法。 二、预习内容: 教材《C语言程序设计教程》第4章。 三、实验内容: 1. 百马百担问题。有1
31、00匹马,驮100担。大马驮3担,中马驮2担,两个小马驮1担。问大、中、小马各多少?(考虑适当减少循环次数) 2. 编程输出100以内的所有素数。 3. 编程输出所有水仙花数(所谓“水仙花数”,是指一个3位数,其各位数字的立方和等于该数本身,例如,153=13+53+33,所以153是一个水仙花数)。 四、程序中所用的变量(类型及其初值): 1. 变量x, y, z均为整型变量,均未赋予初值 2. 整型变量x,y,均未赋予初值 3.整型变量i,m,n, n初值为0,m、n未赋予初值 五、算法(用伪代码或自然语言描述): 1. for ( x=0; x<=
32、20; x++) { for ( y=0; y<=33; y++) { z = 100 - x - y; if( z%2==0 && 3*x + 2*y + z/2 ==100) printf("大马有%d匹,中马有%d匹,小马有%d匹!\n", x, y, z); } } 2. for ( i = 1; i <= 100; i += 1) { for ( j = 2; j <= i; ++j) { if ( i%j == 0 ) { if ( i == j) printf ("
33、5d",i); else break; } } } 3. for(i=100;i<=999;++i) { int m, n = 0; m = i % 10; n += m * m * m; m = (i/10) % 10; n += m * m * m; m = (i/100) % 10; n += m * m * m; if ( n == i) printf("%d\n", i); else ; } 六、源程序清单: 1. #
34、include
35、nt i, j;
for ( i = 1; i <= 100; i += 1)
{
for ( j = 2; j <= i; ++j)
{
if ( i%j == 0 )
{
if ( i == j)
printf ("%-5d",i);
else
break;
}
}
}
return 0;
}
3.
# include
36、m, n = 0; m = i % 10; n += m * m * m; m = (i/10) % 10; n += m * m * m; m = (i/100) % 10; n += m * m * m; if ( n == i) printf("%d\n", i); else ; } return 0; } 七、实验结果: 1. 运行结果(或截图): 大马有2匹,中马有30匹,小马有68匹! 大马有5匹,中马有25匹,小马有70匹! 大马有8匹,中马有20匹,小马有72匹!
37、 大马有11匹,中马有15匹,小马有74匹! 大马有14匹,中马有10匹,小马有76匹! 大马有17匹,中马有5匹,小马有78匹! 大马有20匹,中马有0匹,小马有80匹! 2. 运行结果(或截图): 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 3. 运行结果(或截图): 153 370 371 407 成绩
38、 指导教师签名 实验七 实验项目名称:一维、二维和字符数组程序设计 所使用的工具软件及环境:Visual C++ 6.0 一、实验目的: 1. 掌握一维数组和二维数组的定义、赋值和输入输出的方法; 2. 掌握字符数组的使用。 二、预习内容: 教材《C语言程序设计教程》第5章。 三、实验内容: 1. 从键盘输入一个整数n(n<=10)和n个整数,存入数组a中,先依次输入各个数组元素的值,然后对数组a的所有元素值从小到大的顺序重新排列后,再依次输出。 main() {int a[10],n,i,j,min,
39、ax;
printf(“input n=”);
scanf(“%d”,&n);
printf(“input array[0]a[1]…a[%d]:\n”,n-1);
for(i=0;i 40、f(a[j] 41、
四、程序中所用的变量(类型及其初值):
2.
整型变量i,j,未对其进行赋予初值
3.
五、算法(用伪代码描述):
2.
for (i=0;i<10;i++)
{
for (j=0;j<=i;j++)
{
if(j==0)
{
a[i][j]=1;
printf("%-5d",a[i][j]);
}
else
printf("%-5d",a[i][j]=a[i-1][j-1]+a[i-1][j]);
}
printf("\n");
}
3.
ch 42、ar s1[80],s2[40];
int i=0,j=0;
printf("请输入数组s1:");
gets(s1);
printf("请输入数组s2:");
gets(s2);
while(s1[i]!='\0')
i++;
while(s2[j]!='\0')
s1[i++]=s2[j++];
s1[i]='\0';
printf("%s\n",s1);
六、源程序清单:
2.
# include 43、 for (i=0;i<10;i++)
{
for (j=0;j<=i;j++)
{
if(j==0)
{
a[i][j]=1;
printf("%-5d",a[i][j]);
}
else
printf("%-5d",a[i][j]=a[i-1][j-1]+a[i-1][j]);
}
printf("\n");
}
}
3.
# include 44、请输入数组s1:");
gets(s1);
printf("请输入数组s2:");
gets(s2);
while(s1[i]!='\0')
i++;
while(s2[j]!='\0')
s1[i++]=s2[j++];
s1[i]='\0';
printf("%s\n",s1);
}
七、实验结果:
1. 运行结果(执行程序3次,分别输入不同的n,对应3种不同的情况):
输入整数n
输入n个元素
排序后结果
5
4 9 5 3 1
1 3 4 5 9
4
9 5 1 6
1 5 6 9
7
45、4 9 5 6 1 3 2
1 2 3 4 5 6 9
2. 运行结果(或截图):
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 46、 1
3. 运行结果(或截图):
成绩 指导教师签名
实验八
实验项目名称:函数调用和参数传递
所使用的工具软件及环境:Visual C++ 6.0
一、实验目的:
1. 掌握定义函数的方法;
2. 掌握函数实参与形参的对应关系。
二、预习内容:
教材《C语言程序设计教程》第6章6.1~6.4节。
三、实验内容:
1. 求2~100间的素数。
int prime(int);/* prime函数声明*/
main( )
{ int m,f 47、lag;
for(m=2;m<=100;m+=1)
{ flag=prime(m);
if( m==flag )
printf(“%4d”,m);
}
}
int prime( int a )
{
int i,flag;
for(i=2;i 48、0、等于0和小于0时的根,并输出结果。从主函数输入a,b,c的值。
四、程序中所用的变量(数据类型):
2.
五、算法(用伪代码或自然语言描述):
2.
六、源程序清单:
2.
七、实验结果:
1. 运行结果:
2. 运行结果(执行程序3次,分别输入不同的a,b,c,对应3种不同的情况):
输入a
输入b
输入c
方程的根
1
4
4
2.5
5
1.5
5
2
1.5
成绩 49、 指导教师签名
实验九
实验项目名称:函数与预处理
所使用的工具软件及环境:Visual C++ 6.0
一、实验目的:
1. 掌握数组名作为函数参数;
2. 掌握全局变量与局部变量;
3.掌握宏,文件包含的用法。
二、预习内容:
教材《C语言程序设计教程》第6章6.5~6.9节。
三、实验内容:
1. 从键盘输入10个数存入数组a中,调用fmax求数组中的最大值并输出。
#include 50、d”,&a[i]);
jmax=fmax( ,10);
printf(“%d”,jmax);
}
fmax(int b[],int t)
{
int i,imax;
imax=b[0];
for(i=1;i






