C语言实验报告(答案)

更新时间:2024-05-31 23:10:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《C程序设计》

实验报告

学 期: 2011-2012 教师姓名: 教研室:

实验1 熟悉C语言程序的运行环境,掌握数据描述

班 级 专 业 所用软件 学 号 姓 名 计算机号 实 验 室 成绩评定 教师签名 1.1 实验目的

1.了解在开发环境中如何编辑、编译、连接和运行一个C语言程序。 2.通过运行简单的C语言程序,初步了解C语言程序的结构特点。

3.掌握C语言数据类型的概念,学会使用C语言的相关运算符构成表达式。

1.2 实验预习

1.熟悉Visual C++的启动和退出及Visual C++中的编辑、编译、连接和运行命令。 2.了解下列命令及函数:include、main、printf、scanf。 3.熟悉Visual C++环境下每个菜单项的功能及相关命令对应的操作。 4.各种数据类型变量的定义形式及取值范围;熟悉下列标识符的含义。

int、short (int)、long (int)、unsigned (int)、float、double、char、void 5.各类运算符的优先级和结合规则。 6.常量与变量的区别和联系。

运行环境:

1.双击桌面Visual C++快捷方式进入Visual C++,或通过执行“开始——>程序——>

Microsoft Visual Studio 6.0——> Microsoft Visual C++6.0”或执行文件\Files\\Microsoft Visual Studio\\COMMON\\MSDev98\\Bin\\MSDEV.EXE\。

2.单击“文件”菜单的“新建”命令。

3.在打开的“新建”对话框中选择“文件”标签。

4.选择C++ Source File,在目录输入栏选择文件保存位置,然后在文件输入栏中输入文件名,扩展名为.c (例如first.c) ,单击确定按钮。如图所示:

2

5.在源窗口中输入源程序,如图所示。

6.编译程序:按“Ctrl+F7”或通过“编译”菜单中的“编译”命令,或使用工具栏中的相

应工具进行编译 编译 连接 运行

若程序有错则找到出错行修改程序。

7.连接:若程序没有语法错误,则可按功能键F7或执行“编译”菜单中的“构件”命令或

通过工具栏中的相关工具(编译工具右边工具),进行连接生成可执行文件。 8.运行程序:按组合键“Ctrl+F5”,或通过“编译”菜单中的执行命令,或通过工具栏中的

“!”工具运行程序。

1.3 实验任务

1.输入下面的程序,注意区分大小写。

#include

main()

{

printf(“I am a student!”); }

2. 预测结果并上机验证

3

人工分析结果 实验运行结果

#include main() { printf(“************\\n”); printf(“I am a student!\\n”); printf(“************\\n”); } ************ I am a student! ************ 3.预测结果并上机验证 #include #include main() { int a,b,sum; scanf(“%d,%d”,&a,&b); sum=a+abs(b); printf(“a add b is %d”,sum); } 4.预测结果并上机验证 (1) main()

{

int a,b; a=b=3;

printf(“a=%d,b=%d”,a,b); }

(2)若将以上程序进行改写,编辑如下: main() {

int a,b; a=3; b=3.1;

printf(“a=%d,b=%d”,a,b); } 题号 (1)

4

人工分析结果 实验运行结果 若输入为2,8 则输出 为: a and b is 10 人工分析结果 实验运行结果 a=3,b=3

(2) a=3,b=3 由此知,若赋值号左右数据类型不一致时,c语言将按赋值号左边变量类型为准。 5.现有程序如下,分析填空: 1 main() 2 { 3 int a=1,b=2; 4 printf(“%d”,(a=a+b,b=b+a)); 5 } 若将以上程序第4行进行改写,编辑如下: printf(“%d”,a=a+b,b=b+a);

人工分析结果 对比以上两程序,结果不同的原因在于输出列表原程序为逗号表达式,所以输出6.若有以下程序段,分析c2的值: int c1=2,c2;

c2=1.0/c1*c1;

人工分析结果 若将程序段改为:

c2=1/c1*c1;

人工分析结果 分析c2所得结果,其中的关键在于除号两端如果都是整型数据,则所得结果截断

实验运行结果 0 实验运行结果 1 实验运行结果 4 5 人工分析结果 实验运行结果 b=b+a的值,而修改后的仅有一个格式控制符,只能对应输出第一个表达式a=a+b。

取整

7.现有程序如下: main()

{ int a=7, b=10;

5

a=a+b; b=a-b; a=a-b;

printf(“%d,%d\\n”, a, b ); }

程序运行的功能是:交换a、b两数的值 注:可修改a、b两数的值仔细观察。 8. 现有程序如下,分析填空: main() { int a=0; a+=(a=8); printf(\} 9. 现有程序如下,分析填空: main() { int a=2,b=5; int m=3,n; double c=2.1,d=4.5; n=a/m+b*c-d/m; printf(“%d”,n); } 10.现有程序如下,分析填空:

Main() { int x=1,y=2; printf(“%d %d\\n”,++x,y++); } 11.现有程序如下,分析填空: main() { int x,y,z=0; x=y=1; z+=x+=y; x=z++; y=++x;

6

人工分析结果 实验运行结果 16 人工分析结果 实验运行结果 9 人工分析结果 实验运行结果 2 2 人工分析结果 实验运行结果 x=4,y=3,z=6

z=x+++y; printf(“x=%d,y=%d,z=%d”,x,y,z); }

12.思考题:改错题(以下程序有多处错误,上机调试。将正确的程序记录在下方。要求不能删减已有内容。)

源程序 #include #define STA 30 main() {int a,b=3; A=3*PI*SIN(b); STA=3*STA; printf(“%d\\n”,2a); printf(“%d”,b); } 正确的程序应改为: #include #define STA 30 #define PI 3.14 main() {int a,b=3; a=3*PI*sin(b); b=3*STA; printf(“%d\\n”,2*a); printf(“%d”,b); } 7

实验2 顺序结构程序设计与调试

班 级 专 业 所用软件 学 号 姓 名 计算机号 实 验 室 成绩评定 教师签名 2.1 实验目的

1.熟悉C语言的表达式语句、空语句和复合语句。

2.熟悉函数调用语句,尤其是各输入输出函数的调用语句。 3.熟悉顺序结构程序中语句的执行过程。 4.熟悉程序的跟踪调试和变量值的监视。 5.能设计简单的顺序结构程序。

2.2 实验预习

1.熟悉下列函数:putchar、getchar、printf、scanf 2.了解顺序结构程序的执行过程。

3.了解程序的跟踪调试和变量值的监视并能够熟练操作。

单步跟踪调试(逐条语句跟踪调试):

(1)可按功能键F7进行,要监视某变量的值时,就按Ctrl+F7键,然后输入相应的

变量名,就可以在监视消息窗口中查看到该变量的值。

(2)也可逐段运行程序,即每次运行若干条语句。首先利用Ctrl+F8键在各行光标

处设置若干断点,然后按Ctrl+F9键从程序的第一条语句运行到设置的第一个断 点,再按Ctrl+F9键从设置的第一个断点运行到设置的第二个断点。 4.了解顺序结构程序的一般构成。

2.3 实验任务

1.若有程序 main()

{ int i,j;

scanf(\ printf(\

8

要求给i赋5,给j赋10,则应该从键盘输入 i=5,j=10 2.华氏温度,要求输出摄氏温度,公式为:C=

59(f?32)。要求输出结果保留到小数点

后两位。已知程序段中有三处错误,由注释语句/**********found**********/提示下一条语句有错误,请修改程序中的错误并记录程序运行结果。

#include main() 错误原因是 Scanf语句中是地址scanf(\ 正确语句是 列表 { float f,c; clrscr(); /**********found(1)**********/ scanf(\/**********found(2)**********/ c=5/9(f-32); /**********found(3)**********/ printf(\} 缺少运算符 c=5/9*(f-32); 输出表列用英文逗printf(\号分隔 f); 3. 已知程序功能是通过用户输入三角形三边,求取三角形面积。填空,将程序补充完整。求取公式为;S=(a+b+c)/2 area=sqrt(s*(s-a)*(s-b) *(s-c))

#include (1)/*需要添加头文件*/ main() { float a,b,c,s,area; clrscr(); scanf(\ (2); area=sqrt(3); /*库函数sqrt的含义是开平方*/ printf(\

9

人工填空 上机填空 #include S=(a+b+c)/2 (s*(s-a)*(s-b) *(s-c))

4.单步跟踪下面程序的执行,每执行一条语句就查看各变量的值。运行时输入一个三位的整数。单步跟踪程序时填写下表,同时分析程序的功能。

#include”stdio.h” void main() {int n,x1,x2,x3,y;

printf(“please input number n”); scanf(“=”,&n); x1=n/100; x2=n/10; x3=n;

y=x3*100+x2*10+x1; printf(“y==”,y);}

n X1 X2 X3 y 程序的功能是: 将输入的3位整数逆序排列 5. # include void main( )

{ char ch; ch=getchar(); putchar(ch);

}

运行时如果从键盘输入数据98,你预测的输出结果是 实际的输出结果为 9

原因在于getchar()只能接收单个字符,数字也当字符处理 6. # include void main( )

{ int a,b,c;

scanf(“%d,%o”,&a,&b); c=a*b;

10

scanf(\ if(a>b) max=a; else max=b;

printf(\} 问题:

a、此程序的功能是 输出两数中的最大数 b、请用条件表达式语句(?:)修改程序使之完成相同的功能,

其语句是 printf(“max=%d\\n”,a>b?a:b);

9. 有一函数

x-1 (x<1) y = 2(x-1) (1<=x<10) 3x-10 (x>=10) 编程求当分别输入x的值为0.3,3.9,11时,y的值。

main()

{ float x,y;

scanf(\ if (x<1) y=x-1;

else if(x<10) y=2*(x-1); else

y=3*x-10;

printf(\}

x=0.3时y=-0.7 ;x=3.9时y=5.8;x=11时y=23 10.编辑程序,输入一个不多于3位的正整数,要求:

a)求出它是几位数;分别打印出每一位数字;

b)按逆序打印出各位数字,例如原数为-321,应输出-123。

main()

{ int x,a,b,c,e=0; scanf(\

a=x/100; /*a、b、c用于求取各个数位*/ b=x0/10; c=x;

e=c*100+b*10+a; /*e存储x数值的逆序排列数*/

16

if (a>0) /*if分支用于判断x的大小,并根*/ printf(\据位数决定逆序的最终值*/ else if(b>0)

{ printf(\ e=e/10;} else

{ printf(\ e=e/100;}

printf(\ printf(\}

11. 随机输入3个整型数据作为学生的课程成绩,编程实现由小到大排序输出(对比第三章编程题,比较他们的优缺点)。

main()

{ int a,b,c,e=0;

scanf(\ if (a>b)

{e=a;a=b;b=e;} if(a>c)

{e=a;a=c;c=e;} if(b>c)

{e=b;b=c;c=e;}

printf(\ 3.4思考

请思考如何通过改变分支条件将多if嵌套变成无套形式,提高计算机的运算效率。请上网搜索答案,体会程序优化的思路方式。无具体答案。

17

实验4 循环结构程序设计

班 级 专 业 所用软件 学 号 姓 名 计算机号 实 验 室 成绩评定 教师签名 4.1 实验目的 1.掌握用while语句、do-while语句和for语句实现循环的方法。

2.理解循环结构程序段中语句的执行过程,进一步练习程序的跟踪调试技术。 3. 掌握在程序设计中用循环的方法实现各种算法(如穷举法、迭代等)。 4. 理解break语句和continue语句的功能和执行过程。

4.2 实验预习

1.熟悉语句:while、do-while、for 、break、continue。 2.熟悉三种循环语句之间的关系和区别。

4.3 实验任务 (一)while循环

1.若输入的值是5,预测结果并上机验证 main() { int i,n; scanf(\ i =1; while(i<=n) i++; printf(\} 人工分析结果 实验运行结果 i=6 2.若输入的值是5,预测结果并上机验证,循环执行次数是__5____,考虑若x定义为整

型,程序结果是否相同___不同_______ ,为什么_因为要考虑到c中除法的规则

main() { int i,n; double x,s=0; scanf(\ i=1;x=1; while(i<=n)

18

人工分析结果 实验运行结果 s=1.45

{i++;x=x+1; s+=1/x; } printf(\} 3. 阅读程序,完成下表,程序实现:1+2+?+100 main()

{int n,s;

n=____1___; s=____2___;

while(___3___) {s+=_____4____; n++;}

printf(“1+2+?+%d=%d\\n”,100,_____5___);}

填空位置 (1) (2) (3) (4) (5) 人工填空语句 实验填空语句 1 0 n<=100 n s 4. 预测结果并上机验证 main() { int k,num,sum; sum=num=0; k=3; while (k<=10) {if(k%2==1) {sum+=k; num++;} k++;} printf(%um,num); } (二)do?while循环 1. 预测结果并上机验证

人工分析结果 实验运行结果 sum=24, num=4 人工分析结果 19 实验运行结果

main() { int x=0,y=5,z=3; do y = y-1; while(z- ->0 && ++x<5); printf(“%d,%d,%d\\n”, x,y,z); } 3,1,-1 2. 输入一串字符串,以字符“#”表示输入结束。统计其中大写字母与小写字母各出现了多少次。

main()

{ char ch;int lower,upper; lower=upper=0;

while((ch=getchar())!=’#’)

{ if(ch>=’a’&&ch<=’z’) lower++; else if(ch>=’A’&&ch<=’Z’) upper++; }

printf(“大写字母个数=%d,小写字母个数=%d”,upper,lower); } (三)for语句

1. 预测结果并上机验证

main() { char a,b; for(a=’0’,b=’4’;a

main() { int i=1,num=0; for(;i<=5;i++) { if (i%2==0) i++; num++;} printf(“num=%d”,num); } (四)break和continue语句

20

人工分析结果 实验运行结果 0,4 1,3 人工分析结果 实验运行结果 num=3

1. 预测结果并上机验证 #include main() { int x=14; while(x>10&&x<50) { x++; if(x/3){x++;break;} else continue;} printf(“%d\\n”,x); } 2. 预测结果并上机验证 #include main() { int i=0,a=0; while(i<20) { for(;;) { if((i)==0) break; else i--; } i+=11; a+=i;} printf(\ } 3. 阅读程序,完成下表,程序实现: 在屏幕上输出1~10之间的所有偶数 main()

{ int x=1;

填空位置 人工填空语句 实验填空语句 for(;;)

{if(x>10) _1_;

(1) break x++;

if(x%2) _2_;

(2) continue printf(“%d”,x);} }

(五)循环嵌套

1. 预测结果并上机验证

人工分析结果 实验运行结果 32 人工分析结果 实验运行结果 17 人工分析结果 实验运行结果 21

main() { int i,j,m=0; for(i=2;i<=10;i+=4) for(j=3;j<=15;j+=4) m++; printf(“%d\\n”,m);} 2. 预测结果并上机验证

main() {int i,j; for(i=1;i<4;i++) {for(j=i;j<4;j++) printf(“%d*%d=%d”,i,j,i*j); printf(“\\n”);} } (六)常见题型

12 人工分析结果 实验运行结果 1*1=1 1*2=2 1*3=3 2*2=4 2*3=6 3*3=9 1.两段程序均完成求和运算: s=1-1/3+1/5-1/7+….+1/99,阅读程序,完成填空

main()

{int flag; float i,s;

for(i=1,s=0,flag=1;i<=99;i+=2) { s=s+_____1______; flag=-flag;} printf(\

main() { float n,s;

for(s=0,n=1;n<=50;n++) {s=s+_______2________;} printf(\}

填空位置 人工填空语句 (1) (2)

22

实验填空语句 1/i pow(n+1)*1/(2*n-1)

2.完成计算。数列表达式s=1+

12+

13+

14+?+

1n,当n=10时,求s的近似值。已知程序

段中有两处错误,由注释语句/**********found**********/提示下一条语句有错误,请修改程序中的错误并记录程序运行结果。

#include main( ) {float s=0; int n;

/**********found**********/ for(n=1,n<=10,n++) /**********found**********/ s=s+1/n; printf(\}

修改程序中的错误并记录程序运行结果。 错误位置 (1) (2) 正确语句形式 实验运行结果 for(n=1;n<=10;n++) s=s+1.0/n 3. 求3~150之间的所有素数。 #include #include main()

{int s=0,i,n,flag; for(i=3;i<=150;i++)

{flag=0; /*语句功能:(1)*/

for(n=2;(2);(3)) /*表达式功能:判断某个数是否是素数,给出判断区间*/ if(i%n==0)

{flag=1; break;} if(flag==0) s=s+i; }

printf(\

23

填空位置 1 2 3 整。

main() {int i,j;

人工填空语句 实验填空语句 实验运行结果 设置标识量,判断被测试数是否为素数 n<=sqrt(i) n++ 4.以下程序的功能是输出100以内能被3整除且个位数为6的所有整数,请填空补充完 for(i=0;_______________;i++) {j=i*10+6;

if(_______________) continue; printf(“%d”,j);} } 填空位置 1 2

5. 编程实现九九乘法表。 main()

{ int i,j;

for(i=1;i<=9;i++) { for(j=1;j<=i;j++)

printf(“%d*%d=%d”,j,i,i*j); printf(“\\n”); } }

24

人工填空语句 实验填空语句 实验运行结果 i<10或i<=9 i%3

实验5 函数定义、调用与编译预处理 班 级 专 业 所用软件 学 号 姓 名 计算机号 实 验 室 成绩评定 教师签名 5.1 实验目的

1.掌握定义函数的方法。

2.掌握函数实参与形参的对应关系,以及“值传递”的方式。 3.了解函数的嵌套调用。

4.掌握全局变量和局部变量,动态变量和静态变量的概念和使用方法。 5.理解宏的概念,掌握宏定义。 6.了解文件包含的概念。

5.2 实验预习

1.函数的概念、定义格式、声明格式、调用规则及调用过程中数据传递方法过程,函

数的嵌套调用和递归调用。

2.宏定义和文件包含等编译预处理指令。

5.3 实验任务

1. 预测结果并上机验证

#include fun(int x, int y, int z) { z=x*x+y*y; } main() { int a=31; fun(5,2,a); printf(“%d”,a); } 2.预测结果并上机验证 #include int a, b; void fun() { a=100; b=200; } main( ) { int a=5, b=7; fun();

25

人工分析结果 实验运行结果 31 人工分析结果 实验运行结果 5 7

printf(“%d %d \\n”, a,b); } 3.预测结果并上机验证

#include int f(int n) { if(n==1) return 1; else return f(n-1)+1; } main() { int i,j=0; for(i=1;i<3;i++) j+=f(i); printf(“%d\\n”,j); } 4.预测结果并上机验证

#include int ff(int n) { static int f=l; f=f*n; return f; } main() { int i; for(i=1;i<=5;i++ ) printf(“%d\\n”,ff(i)); } 5.预测结果并上机验证

#include #define N 10 #define s(x) x*x #define f(x) (x*x) main() { int i1,i2; i1=1000/s(N);i2=1000/f(N); printf(“%d %d\\n”,i1,i2); }

26 人工分析结果 实验运行结果 3 人工分析结果 实验运行结果 1 2 6 24 120 人工分析结果 实验运行结果 1000 10

6.程序填空

定义两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。

#include

int f1(int m,int n) /*填空位置(1),函数功能:____________________。*/ {int z;

for(z=m;z<=m*n;z++)

{ if((z%m==0)&&(z%n==0)) return z; } }

main()

{int m,n,t,s,q;

____________________; /*填空位置(2)*/ scanf(\ if(m

{t=m; m=n; n=t;} s=f1(m,n);

printf(\ q=f2(m,n);

printf(\

}

_____ f2(int m,int n) /*填空位置(3)*/

{int z;

__________; /*填空位置(4),求出m和n的最大公约数并将其作为返回值*/ } 填空位置 1 2 3 4 人工填空语句 实验填空语句 求m,n的最小公倍数 int f1(int m,int n) int return f1(m,n)/m 实验运行结果 7. 编程实现:编辑函数求水仙花数。要求通过main函数控制数值范围(即求出某范围内的水仙花数)。

shui(int n,int m)

27

{ int i,a,b,c ; for(i=n ;i<=m ;i++) { a=i ; b=i/10 ; c=i/100 ;

if(i==a*a*a+b*b*b+c*c*c)

printf(\%d \ ) ; }

}

8. 编程实现:编辑函数求1!+2!+???+n !(由键盘输入范围)。 #include long int f(int i) {long int s,a; for(a=1,s=1;a<=i;a++) s=s*a; return s; } main() {long int a,s,n; scanf(\for(a=1,s=0;a<=n;a++) s=s+f(a); printf(\}

28

实验6 数组定义与使用

班 级 专 业 所用软件 学 号 姓 名 计算机号 实 验 室 成绩评定 教师签名 6.1 实验目的

1.掌握一维数组和二维数组的定义、数组元素的引用形式和数组的输入输出方法。 2.了解与数组有关的非数值计算方法,如排序法。

3.了解与数组有关的数值计算方法,如矩阵运算、线性方程求解等。 4.掌握字符数组和字符串函数的使用。

5.掌握函数调用时,数组元素作为函数参数的传递。

6.2 实验预习

1.熟悉循环语句与数组处理语句结合的方法。

2.复习一维数组、二维数组、字符数组的定义、初始化和数组元素的引用。 3.复习数组的应用:批量处理数据排序和矩阵的处理。 4.复习字符串的含义、存储和字符串函数的功能。

6.3 实验任务

1.预测结果并上机验证

#include main() { char s[]=\ s[3]=‘\\0'; printf(\ } abc 人工分析结果 实验运行结果 2.预测结果并上机验证 人工分析结果 实验运行结果 29

#include main(){int a[4][4]={{1,2,-3,-4},{0,-12,-13,14} ,{-21,23,0,-24},{-31,32,-33,0}}; int i,j,s=0; for(i=0;i<4;i++) { for(j=0;j<4;j++) {if(a[i][j]<0) continue; if(a[i][j]==0) break; s+=a[i][j]; } 58 } printf(\ } 3.预测结果并上机验证 #include main(){ char ch[3][5]={\char s[]=\ printf (\ printf(\ } 4.预测结果并上机验证

#include main() { char a[]={‘a’,‘b’,‘c’,‘d’,‘e’,‘f’,‘g’,‘h’,‘\\0’}; int i,j; i=sizeof(a);j=strlen(a); printf(“%d,%d\\b”i,j); } 5.程序填空

(1)在有序数据序列中插入一个数据,插入后仍然保证数据序列的有序性。

30

人工分析结果 实验运行结果 \\141aabc “BBB” 人工分析结果 实验运行结果 9,8

原始数据序列为:{5,8,12,15,26,78,92,93,102},需要插入的数据值为25。 算法思想:(1)通过比较,确定需要插入的位置。

(2)从插入位置开始,所有数据依次右移(后移)1位,然后将数据插入

到确定的位置上。

#include

#define N 10

int a[N]={5,8,12,15,26,78,92,93,102}; main()

{ int i,j,k,data=25; clrscr();

for(i=0;i

if(data=k;j--)

_______________; /*填空位置(2),插入位置之后所有元素依次右移1位*/

_______________; /*填空位置(3),将指定的数据插入到有序序列中*/ for(i=0;i<=N-1;i++)

printf(\

} 填空位置 1 2 3 实验运行结果

(2) 计算矩阵边界元素的和。

#include #define M 4 #define N 4

int a[M][N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; main()

{int i,j,s=0;

31

人工填空语句 实验填空语句 找到数据位置退出循环 a[j+1]=a[j] a[j]=data 5,8,12,15,25,26,78,92,93,102 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16

for(i=0;i<=M-1;i++)

for((1)__________;(2)__________;j++) if((3)____________________) s=s+a[i][j];

printf(\} 填空位置 1 2 3 实验运行结果 3.编程题:

(1)编辑程序,将用户输入的任意字符串中的数字字符全部删除,形成新的字符串输出。 main()

{ char s[],t[]; int l,i,n=0;

gets(s); l=strlen(s); for(i=0;i<=l;i++)

if(s[i]>=’0’&&s[i]<=’9’) continue; else t[n++]=s[i]; t[n]=’\\0’; printf(“%s”,t); }

(2) 输入n个学生成绩,计算他们的平均值并输出所有高于平均成绩的学生成绩。 main() { int n,i;

float a[100],aver=0; sanf(“%d”,&n); for(i=1;i<=n;i++) { scanf(“%f”,&a[i]); aver+=a[i];

32

人工填空语句(或表达式) 实验填空语句(或表达式) j=0 j<=n-1 i==0||j==0||i==M-1||j==N-1

}

aver=aver/n;

printf(“%f\\n”,aver); for(i=1;i<=n;i++)

if(a[i]>aver) printf(“%f ”,a[i]); } 4.综合题: 程序: 顺序排序:

#include main() {

int i, j, tem, A[10]; printf(“输入10个整数:”); for(i=0; i<=9; i++)

scanf(“%d”,&A[i]); /*输入*/

for(i=0; i<=8; i++) /*确定擂台下标 */ for(j=i+1;j<=9; j++)

if(A[j]>A[i]) /* 与擂台上的数比较 */ { /* 大者交换至擂台上 */

tem=A[i]; A[i]=A[j]; A[j]=tem; }

printf(“\\n降序排序后的结果是:\\n”);

for(i=0; i<=9; i++) printf(“%d\\t”,A[i]); /* 输出 */ }

选择排序:

#include main() {

int i, j, tem, k, A[10]; printf(“输入10个整数:”);

for(i=0; i<=9; i++) scanf(“%d”,&A[i]); /*输入*/ for(i=0; i<=8; i++)

33

{ k=i; /*最大者下标初值 */ for(j=i+1;j<=9; j++)

if(A[j]>A[k]) k=j; /* 调整最大者下标 */ tem=A[i]; A[i]=A[k]; A[k]=tem; /* 交换 */ }

printf(“\\n降序排序后的结果是:\\n”);

for(i=0; i<=9; i++) printf(“%d\\t”,A[i]); /* 输出 */ }

冒泡排序:

#include main()

{ int A[10], i, j, temp; printf(“输入10个整数: ”);

for(i=0; i<=9; i++) scanf(“%d”,&A[i]); /* 输入 */ for(i=0; i<=8; i++) /* 冒泡9轮 */

for(j=0; j<=9-i-1; j++) /* 第i轮冒泡,将最值移至A[9-i] */ if(A[j]>A[j+1])

{temp =A[j]; A[j] =A[j+1]; A[j+1] =temp;} printf(“\\n升序排序结果是:\\n”);

for(i=0; i<=9; i++) printf(“%d\\t”,A[i]); /* 输出 */

流程图:

顺序排序: 选择排序: 冒泡排序:

34

实验7 综合程序设计:综合运用C语言基本知识设计程序

班 级 专 业 所用软件 学 号 姓 名 计算机号 实 验 室 成绩评定 教师签名 7.1 实验目的

通过本次实验,使学生能够灵活运用所学知识,完成程序设计,进一步提高程序设计 的能力。

7.2 实验预习

1.复习函数的相关知识。 2.复习数组的相关知识。

7.3 实验任务

1. 餐饮服务质量调查打分 解法一:

#include #define STUDENTS 40 #define GRADE_SIZE 11 main()

{ int i, j, grade;

int score[STUDENTS], count[GRADE_SIZE] = {0}; printf(\ students:\\n\ for (i=0; i

scanf(\ }

for ( i=0; i

switch (score[i])

{

case 1: count[1]++; break;

35

case 2: count[2]++; break; case 3: count[3]++; break; case 4: count[4]++; break; case 5: count[5]++; break; case 6: count[6]++; break; case 7: count[7]++; break; case 8: count[8]++; break; case 9: count[9]++; break; case 10: count[10]++; break;

default: printf(\}

}

printf(\for (grade=1; grade<=GRADE_SIZE-1; grade++)

{ printf(\ for (j=0; j

{

printf(\ }

printf(\ } } 解法二:

#include #define STUDENTS 40 #define GRADE_SIZE 11 main() {

int i, j, grade;

int score[STUDENTS], count[GRADE_SIZE] = {0}; printf(\ students:\\n\

36

for (i=0; i

scanf(\ }

for ( i=0; i

{

count [ score[ i ] ] ++; }

printf(\for (grade=1; grade<=GRADE_SIZE-1; grade++) {

printf(\ for (j=0; j

{

printf(\}

printf(\ } }

2. 大奖赛现场统分 #include #define M 10 #define N 3 void main() {

int i,j,k;

float pf[N][M],sf[N],max,min,sum,temp; system(\ for(i=0;i

printf(\ performance:\\n\

37

for( j=0;j

scanf(\

}

for(i=0;i

sum=0.0; max=pf[i][0];

min=pf[i][0]; for(j=0;j

if (max

else if(min>pf[i][j]) min=pf[i][j]; sum=sum+pf[i][j]; }

sf[i]=(sum-max-min)/(M-2);

printf(\ is:%.2f\ }

for(i=0;i

k=i;

for(j=i+1;j

if(sf[k]

if(k!=i) {

temp=sf[i];

sf[i]=sf[k]; sf[k]=temp; }

}

printf(\ for(i=0;i

printf(\}

38

本文来源:https://www.bwwdw.com/article/q5s6.html

Top