10-11-2c实验报告(答案)

《C程序设计》

实验报告

学 期:2010--2011学年第二学期 教师姓名: 教研室:

实验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”或执行文件"C:\Program Files\Microsoft Visual Studio\COMMON\MSDev98\Bin\MSDEV.EXE"。 2.单击“文件”菜单的“新建”命令。

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

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

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

1

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

译 编译 连接 运行

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

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

的相关工具(编译工具右边工具),进行连接生成可执行文件。

8.运行程序:按组合键“Ctrl+F5”,或通过“编译”菜单中的执行命令,或通过工具栏中的“!”工具运

行程序。 1.3 实验任务

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

#include main() {

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

2. 预测结果并上机验证

2

3.预测结果并上机验证

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); }

由此知,若赋值号左右数据类型不一致时,c语言将按赋值号左边变量类型为准。

5.现有程序如下,分析填空: 3

若将以上程序第4行进行改写,编辑如下: printf(“%d”,a=a+b,b=b+a);

对比以上两程序,结果不同的原因在于输出列表原程序为逗号表达式,所以输出b=b+a的值,而修改后

的仅有一个格式控制符,只能对应输出第一个表达式a=a+b。 6.若有以下程序段,分析c2的值:

int c1=2,c2; c2=1.0/c1*c1;

若将程序段改为:

c2=1/c1*c1;

分析c2所得结果,其中的关键在于除号两端如果都是整型数据,则所得结果截断取整 7.现有程序如下: main()

{ int a=7, b=10; a=a+b; b=a-b; a=a-b; printf(“%d,%d\n”, a, b ); }

程序运行的功能是:交换a、b两数的值 注:可修改a、b两数的值仔细观察。 8. 现有程序如下,分析填空:

9.

现有程序如下,分析填空:

4

10.现有程序如下,分析填空:

11.现有程序如下,分析填空:

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

1.4 实验心得

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

5

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("i=%d,j=%d",&i,&j); printf("i=%d,j=%d\n ",i,j); }

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

59

(f32)。要求输出结果保留到小数点后两位。已

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

6

3. 已知程序功能是通过用户输入三角形三边,求取三角形面积。填空,将程序补充完整。求取公式为;S=(a+b+c)/2 area=sqrt(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(“%3d”,&n); x1=n/100; x2=n/10%10;

7

x3=n%10;

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

程序的功能是: 将输入的3位整数逆序排列 5. 9

getchar()只能接收单个字符,数字也当字符处理 6. 120,170

7. 826 628 n1 n2 n3 8. a=123,123,|_____| +123 ||| 123,123|||| ,|

b=-45,-45,|_____||_|-45 ||| -45,-45|||| ,|

x=2.547290 ,|_| 2.547290 ,|__||_||__2.55 |||||x=2.547|_||_|,2 .55,3

9. 编辑程序,输入学生语、数、英三门课程成绩(考虑数据类型,整型和实型),并输出其总分和平均分。 整型: main()

{ int c,m,e,sum;

float ave;

scanf("%d,%d,%d",&c,&m,&e); sum=c+m+e; ave=sum/3.0;

printf(“sum=%d\n ave=%f”,sum,ave);

} 实型: main()

{float c,m,e,sum,ave; scanf("%f,%f,%f",&c,&m,&e); sum=c+m+e; ave=sum/3;

printf(“sum=%f\n ave=%f”,sum,ave);

}

8

2.4 实验心得

实验3 选择结构程序设计与调试

3.1 实验目的

1.理解C语言表示逻辑量的方法(以0代表“假”,以非0代表“真”)。 2.学会正确使用逻辑运算符和逻辑表达式、关系运算符和关系表达式。 3.学会运用逻辑表达式或关系表达式等表达条件。 4.熟练掌握if语句和switch语句。

5.学习跟踪调试程序,针对具体程序组织输入测试数据,观察程序运行能否得到预期

的输出结果。

6.熟悉选择结构程序段中语句的执行过程。 3.2 实验预习

1.熟悉逻辑运算符和逻辑表达式、关系运算符和关系表达式。 2.熟悉下列语句:if、if-else、switch、break。

3.3 实验任务

1.阅读程序,上机调试并记录程序结果。

以上两题告诉了你什么:1) c中的赋值号与等于运算符应区分。

9

2) 若判断表达式值为0,表示假,执行else分支

2.阅读程序,上机调试并记录程序结果。

3. 阅读程序,上机调试并记录程序结果。

4.若从键盘输入58,判断以下程序输出的结果。

5. 阅读程序,上机调试并记录程序结果。

6. 阅读程序,上机调试并记录程序结果。

7. 阅读程序,上机调试并记录程序结果。

8. 阅读程序,并回答问题

main( )

{ int a,b,max,min; scanf("%d%d",&a,&b); if(a>b) max=a; else max=b;

printf("max=%d\n",max); } 问题:

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

其语句是 printf(“max=%d\n”,a>b?a:b); 9. 有一函数

y = 2(x-1) (1=10)

编程求当分别输入x的值为0.3,3.9,11时,y的值。 main() { float x,y; scanf("%f",&x); if (x

printf("x=%f,y=%f\n",x,y); }

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("%d",&x);

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

e=c*100+b*10+a; /*e存储x数值的逆序排列数*/ if (a>0) /*if分支用于判断x的大小,并根*/ printf("x>100"); /*据位数决定逆序的最终值*/ else if(b>0)

{ printf("10

{ printf("x

printf("%d,%d,%d",a,b,c); printf("%d",e); }

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

main()

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

scanf("%d,%d,%d",&a,&b,&c); 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("%d,%d,%d",a,b,c);} 3.4思考

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

实验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,预测结果并上机验证

2.若输入的值是5,预测结果并上机验证,循环执行次数是__5____,考虑若x定义为整型,程序结果是否相同___不同_______ ,为什么_因为要考虑到c中除法的规则

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___);}

4. 预测结果并上机验证

(二)do„while循环 1. 预测结果并上机验证

2. 输入一串字符串,以字符“#”表示输入结束。统计其中大写字母与小写字母各出现

了多少次。

main()

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

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

{ if(ch>=’a’&&ch=’A’&&ch

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

(三)for语句

1. 预测结果并上机验证

2. 预测结果并上机验证

(四)break和

continue语句 1. 预测结果并上机验证

2. 预测结果并上机验证

3. 阅读程序,完成下表,程序实现: 在屏幕上输出1~10之间的所有偶数 main() { int x=1; for(;;)

{if(x>10) _1_; x++; if(x%2) _2_;

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

(五)循环嵌套

1. 预测结果并上机验证

2. 预测结果并上机验证

(六)常见题型

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

{ s=s+_____1______; flag=-flag;}

printf("%f",s);}

main() { float n,s;

for(s=0,n=1;n

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

12

+

13

+

14

+„+

1n

,当n=10时,求s的近似值。已知程序段中有两处错误,

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

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

/**********found**********/ for(n=1,n

修改程序中的错误并记录程序运行结果。

3. 求3~150之间的所有素数。

#include #include main()

{int s=0,i,n,flag; for(i=3;i

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

(1)*/

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

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

printf("s=%d\n",s);}

4.以下程序的功能是输出100以内能被3整除且个位数为6的所有整数,请填空补充完整。

main() {int i,j;

for(i=0;_______________;i++) {j=i*10+6;

if(_______________) continue; printf(“%d”,j);} }

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

{ int i,j;

for(i=1;i

printf(“%d*%d=%d”,j,i,i*j); printf(“\n”); } } 4.4 实验心得

实验5 函数定义、调用与编译预处理 20

5.1 实验目的

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

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

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

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

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

2.宏定义和文件包含等编译预处理指令。 5.3 实验任务

1. 预测结果并上机验证

2.预测结果并上机验证

3.预测结果并上机验证

21

4.预测结果并上机验证

5.预测结果并上机验证

6.程序填空

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

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

for(z=m;z

22

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

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

____________________; /*填空位置(2)*/ scanf("m=%d,n=%d",&m,&n); if(m

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

printf("min=%d\n",s); q=f2(m,n);

printf("max=%d\n",q); }

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

__________; /*填空位置(4),求出m和n的最大公约数并将其作为返回值*/ }

7. 编程实现:编辑函数求水仙花数。要求通过main函数控制数值范围(即求出某范围内的水仙花数)。 shui(int n,int m) { int i,a,b,c ; for(i=n ;i

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

printf("%d ",i ) ; }

}

8. 编程实现:编辑函数求1!+2!+„„„+n !(由键盘输入范围)。

23

#include long int f(int i) {long int s,a; for(a=1,s=1;a

24

实验6 数组定义与使用

6.1 实验目的

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

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

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

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

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

4.复习字符串的含义、存储和字符串函数的功能。 6.3 实验任务

1.预测结果并上机验证

2.预测结果并上机验证

25

3.预测结果并上机验证

4.预测结果并上机验证

5.程序填空

(1)在有序数据序列中插入一个数据,插入后仍然保证数据序列的有序性。 原始数据序列为:{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()

26

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

for(i=0;i

{k=i; break;} /*填空位置(1),语句功能是:_______________*/ for(j=N-2;j>=k;j--)

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

_______________; /*填空位置(3),将指定的数据插入到有序序列中*/

for(i=0;i

}

(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;

for(i=0;i

for((1)__________;

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

printf("sum=%d\n",s); }

27

3.编程题:

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

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

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

if(s[i]>=’0’&&s[i]

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

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

aver=aver/n;

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

if(a[i]>aver) printf(“%f ”,a[i]); }

4.综合题: 程序: 顺序排序:

#include

28

main() {

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

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

for(i=0; i

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

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

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

for(i=0; i

选择排序:

#include main() {

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

for(i=0; i

{ k=i; /*最大者下标初值 */ for(j=i+1;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

冒泡排序:

#include main()

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

29

for(i=0; i

for(j=0; jA[j+1])

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

for(i=0; i

流程图:

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

6.4 实验心得

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

30

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("Please enter the response score of forty students:\n"); for (i=0; i

scanf("%d", &score[i]); }

for ( i=0; i

switch (score[i])

{

case 1: count[1]++; break; 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;

31

case 8: count[8]++; break; case 9: count[9]++; break; case 10: count[10]++; break;

default: printf("input error!\n"); break; }

}

printf("Grade\tCount\tHistogram\n"); for (grade=1; grade

printf("%5d\t%5d\t", grade, count[grade]); for (j=0; j

{

printf("%c", '*' ); }

printf("\n"); } } 解法二:

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

int i, j, grade;

int score[STUDENTS], count[GRADE_SIZE] = {0}; printf("Please enter the response score of forty students:\n"); for (i=0; i

scanf("%d", &score[i]); }

for ( i=0; i

{

count [ score[ i ] ] ++; }

printf("Grade\tCount\tHistogram\n"); for (grade=1; grade

32

{

printf("%5d\t%5d\t", grade, count[grade]); for (j=0; j

{

printf("%c", '*' ); }

printf("\n"); } }

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("cls"); for(i=0;i

printf("\n Please enter the %d player's performance:\n",i+1); for( j=0;j

scanf("%f",&pf[i][j]);

}

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);

33

printf("\n The %d players's final score is:%.2f", i+1,sf[i]); }

for(i=0;i

for(j=i+1;j

if(sf[k]

if(k!=i) {

temp=sf[i];

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

}

printf("\n The players's final sorted score is:\n"); for(i=0;i

printf("\n %.2f",sf[i]); }

7.4 实验心得

34

《C程序设计》

实验报告

学 期:2010--2011学年第二学期 教师姓名: 教研室:

实验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”或执行文件"C:\Program Files\Microsoft Visual Studio\COMMON\MSDev98\Bin\MSDEV.EXE"。 2.单击“文件”菜单的“新建”命令。

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

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

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

1

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

译 编译 连接 运行

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

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

的相关工具(编译工具右边工具),进行连接生成可执行文件。

8.运行程序:按组合键“Ctrl+F5”,或通过“编译”菜单中的执行命令,或通过工具栏中的“!”工具运

行程序。 1.3 实验任务

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

#include main() {

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

2. 预测结果并上机验证

2

3.预测结果并上机验证

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); }

由此知,若赋值号左右数据类型不一致时,c语言将按赋值号左边变量类型为准。

5.现有程序如下,分析填空: 3

若将以上程序第4行进行改写,编辑如下: printf(“%d”,a=a+b,b=b+a);

对比以上两程序,结果不同的原因在于输出列表原程序为逗号表达式,所以输出b=b+a的值,而修改后

的仅有一个格式控制符,只能对应输出第一个表达式a=a+b。 6.若有以下程序段,分析c2的值:

int c1=2,c2; c2=1.0/c1*c1;

若将程序段改为:

c2=1/c1*c1;

分析c2所得结果,其中的关键在于除号两端如果都是整型数据,则所得结果截断取整 7.现有程序如下: main()

{ int a=7, b=10; a=a+b; b=a-b; a=a-b; printf(“%d,%d\n”, a, b ); }

程序运行的功能是:交换a、b两数的值 注:可修改a、b两数的值仔细观察。 8. 现有程序如下,分析填空:

9.

现有程序如下,分析填空:

4

10.现有程序如下,分析填空:

11.现有程序如下,分析填空:

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

1.4 实验心得

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

5

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("i=%d,j=%d",&i,&j); printf("i=%d,j=%d\n ",i,j); }

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

59

(f32)。要求输出结果保留到小数点后两位。已

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

6

3. 已知程序功能是通过用户输入三角形三边,求取三角形面积。填空,将程序补充完整。求取公式为;S=(a+b+c)/2 area=sqrt(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(“%3d”,&n); x1=n/100; x2=n/10%10;

7

x3=n%10;

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

程序的功能是: 将输入的3位整数逆序排列 5. 9

getchar()只能接收单个字符,数字也当字符处理 6. 120,170

7. 826 628 n1 n2 n3 8. a=123,123,|_____| +123 ||| 123,123|||| ,|

b=-45,-45,|_____||_|-45 ||| -45,-45|||| ,|

x=2.547290 ,|_| 2.547290 ,|__||_||__2.55 |||||x=2.547|_||_|,2 .55,3

9. 编辑程序,输入学生语、数、英三门课程成绩(考虑数据类型,整型和实型),并输出其总分和平均分。 整型: main()

{ int c,m,e,sum;

float ave;

scanf("%d,%d,%d",&c,&m,&e); sum=c+m+e; ave=sum/3.0;

printf(“sum=%d\n ave=%f”,sum,ave);

} 实型: main()

{float c,m,e,sum,ave; scanf("%f,%f,%f",&c,&m,&e); sum=c+m+e; ave=sum/3;

printf(“sum=%f\n ave=%f”,sum,ave);

}

8

2.4 实验心得

实验3 选择结构程序设计与调试

3.1 实验目的

1.理解C语言表示逻辑量的方法(以0代表“假”,以非0代表“真”)。 2.学会正确使用逻辑运算符和逻辑表达式、关系运算符和关系表达式。 3.学会运用逻辑表达式或关系表达式等表达条件。 4.熟练掌握if语句和switch语句。

5.学习跟踪调试程序,针对具体程序组织输入测试数据,观察程序运行能否得到预期

的输出结果。

6.熟悉选择结构程序段中语句的执行过程。 3.2 实验预习

1.熟悉逻辑运算符和逻辑表达式、关系运算符和关系表达式。 2.熟悉下列语句:if、if-else、switch、break。

3.3 实验任务

1.阅读程序,上机调试并记录程序结果。

以上两题告诉了你什么:1) c中的赋值号与等于运算符应区分。

9

2) 若判断表达式值为0,表示假,执行else分支

2.阅读程序,上机调试并记录程序结果。

3. 阅读程序,上机调试并记录程序结果。

4.若从键盘输入58,判断以下程序输出的结果。

5. 阅读程序,上机调试并记录程序结果。

6. 阅读程序,上机调试并记录程序结果。

7. 阅读程序,上机调试并记录程序结果。

8. 阅读程序,并回答问题

main( )

{ int a,b,max,min; scanf("%d%d",&a,&b); if(a>b) max=a; else max=b;

printf("max=%d\n",max); } 问题:

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

其语句是 printf(“max=%d\n”,a>b?a:b); 9. 有一函数

y = 2(x-1) (1=10)

编程求当分别输入x的值为0.3,3.9,11时,y的值。 main() { float x,y; scanf("%f",&x); if (x

printf("x=%f,y=%f\n",x,y); }

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("%d",&x);

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

e=c*100+b*10+a; /*e存储x数值的逆序排列数*/ if (a>0) /*if分支用于判断x的大小,并根*/ printf("x>100"); /*据位数决定逆序的最终值*/ else if(b>0)

{ printf("10

{ printf("x

printf("%d,%d,%d",a,b,c); printf("%d",e); }

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

main()

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

scanf("%d,%d,%d",&a,&b,&c); 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("%d,%d,%d",a,b,c);} 3.4思考

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

实验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,预测结果并上机验证

2.若输入的值是5,预测结果并上机验证,循环执行次数是__5____,考虑若x定义为整型,程序结果是否相同___不同_______ ,为什么_因为要考虑到c中除法的规则

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___);}

4. 预测结果并上机验证

(二)do„while循环 1. 预测结果并上机验证

2. 输入一串字符串,以字符“#”表示输入结束。统计其中大写字母与小写字母各出现

了多少次。

main()

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

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

{ if(ch>=’a’&&ch=’A’&&ch

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

(三)for语句

1. 预测结果并上机验证

2. 预测结果并上机验证

(四)break和

continue语句 1. 预测结果并上机验证

2. 预测结果并上机验证

3. 阅读程序,完成下表,程序实现: 在屏幕上输出1~10之间的所有偶数 main() { int x=1; for(;;)

{if(x>10) _1_; x++; if(x%2) _2_;

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

(五)循环嵌套

1. 预测结果并上机验证

2. 预测结果并上机验证

(六)常见题型

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

{ s=s+_____1______; flag=-flag;}

printf("%f",s);}

main() { float n,s;

for(s=0,n=1;n

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

12

+

13

+

14

+„+

1n

,当n=10时,求s的近似值。已知程序段中有两处错误,

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

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

/**********found**********/ for(n=1,n

修改程序中的错误并记录程序运行结果。

3. 求3~150之间的所有素数。

#include #include main()

{int s=0,i,n,flag; for(i=3;i

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

(1)*/

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

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

printf("s=%d\n",s);}

4.以下程序的功能是输出100以内能被3整除且个位数为6的所有整数,请填空补充完整。

main() {int i,j;

for(i=0;_______________;i++) {j=i*10+6;

if(_______________) continue; printf(“%d”,j);} }

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

{ int i,j;

for(i=1;i

printf(“%d*%d=%d”,j,i,i*j); printf(“\n”); } } 4.4 实验心得

实验5 函数定义、调用与编译预处理 20

5.1 实验目的

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

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

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

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

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

2.宏定义和文件包含等编译预处理指令。 5.3 实验任务

1. 预测结果并上机验证

2.预测结果并上机验证

3.预测结果并上机验证

21

4.预测结果并上机验证

5.预测结果并上机验证

6.程序填空

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

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

for(z=m;z

22

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

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

____________________; /*填空位置(2)*/ scanf("m=%d,n=%d",&m,&n); if(m

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

printf("min=%d\n",s); q=f2(m,n);

printf("max=%d\n",q); }

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

__________; /*填空位置(4),求出m和n的最大公约数并将其作为返回值*/ }

7. 编程实现:编辑函数求水仙花数。要求通过main函数控制数值范围(即求出某范围内的水仙花数)。 shui(int n,int m) { int i,a,b,c ; for(i=n ;i

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

printf("%d ",i ) ; }

}

8. 编程实现:编辑函数求1!+2!+„„„+n !(由键盘输入范围)。

23

#include long int f(int i) {long int s,a; for(a=1,s=1;a

24

实验6 数组定义与使用

6.1 实验目的

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

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

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

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

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

4.复习字符串的含义、存储和字符串函数的功能。 6.3 实验任务

1.预测结果并上机验证

2.预测结果并上机验证

25

3.预测结果并上机验证

4.预测结果并上机验证

5.程序填空

(1)在有序数据序列中插入一个数据,插入后仍然保证数据序列的有序性。 原始数据序列为:{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()

26

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

for(i=0;i

{k=i; break;} /*填空位置(1),语句功能是:_______________*/ for(j=N-2;j>=k;j--)

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

_______________; /*填空位置(3),将指定的数据插入到有序序列中*/

for(i=0;i

}

(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;

for(i=0;i

for((1)__________;

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

printf("sum=%d\n",s); }

27

3.编程题:

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

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

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

if(s[i]>=’0’&&s[i]

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

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

aver=aver/n;

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

if(a[i]>aver) printf(“%f ”,a[i]); }

4.综合题: 程序: 顺序排序:

#include

28

main() {

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

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

for(i=0; i

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

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

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

for(i=0; i

选择排序:

#include main() {

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

for(i=0; i

{ k=i; /*最大者下标初值 */ for(j=i+1;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

冒泡排序:

#include main()

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

29

for(i=0; i

for(j=0; jA[j+1])

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

for(i=0; i

流程图:

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

6.4 实验心得

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

30

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("Please enter the response score of forty students:\n"); for (i=0; i

scanf("%d", &score[i]); }

for ( i=0; i

switch (score[i])

{

case 1: count[1]++; break; 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;

31

case 8: count[8]++; break; case 9: count[9]++; break; case 10: count[10]++; break;

default: printf("input error!\n"); break; }

}

printf("Grade\tCount\tHistogram\n"); for (grade=1; grade

printf("%5d\t%5d\t", grade, count[grade]); for (j=0; j

{

printf("%c", '*' ); }

printf("\n"); } } 解法二:

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

int i, j, grade;

int score[STUDENTS], count[GRADE_SIZE] = {0}; printf("Please enter the response score of forty students:\n"); for (i=0; i

scanf("%d", &score[i]); }

for ( i=0; i

{

count [ score[ i ] ] ++; }

printf("Grade\tCount\tHistogram\n"); for (grade=1; grade

32

{

printf("%5d\t%5d\t", grade, count[grade]); for (j=0; j

{

printf("%c", '*' ); }

printf("\n"); } }

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("cls"); for(i=0;i

printf("\n Please enter the %d player's performance:\n",i+1); for( j=0;j

scanf("%f",&pf[i][j]);

}

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);

33

printf("\n The %d players's final score is:%.2f", i+1,sf[i]); }

for(i=0;i

for(j=i+1;j

if(sf[k]

if(k!=i) {

temp=sf[i];

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

}

printf("\n The players's final sorted score is:\n"); for(i=0;i

printf("\n %.2f",sf[i]); }

7.4 实验心得

34


相关内容

  • 11.临床检验方法评价
  • 十一.临床检验方法评价 一.A1题:每一道考试题下面有A.B.C.D.E五个备选答案.请从中选择一个最佳答案,并在答题卡上将相应题号的相应字母所属的方框涂黑. 第 1 题 美国的国家临床实验室标准委员会(NCCLS)用于对患者标本进行方法学比较和偏倚估计的文件是 稍候再做-------------- ...

  • 习题答案[实验6 方向观测法测水平角]
  • <土木工程测量>课程实验报告 <土木工程测量>课程实验报告 实验编号: 6 实验内容: 方向法观测水平角 年级专业:____________________________ 组 别:No._________________________ 组长:___________ 学号: ...

  • [解析]重庆市外国语中学2017届高三10月月考化学试卷 (含解析).doc
  • 重庆市外国语中学2017届高三10月月考化学 一.单选题:共12题 1.已知某气体的摩尔质量为M ,一定条件下的摩尔体积为V m ,下列说法正确的是 A. 一个该气体分子的质量为M /N A B. 一个该气体分子的体积为V m /N A C. 气体摩尔体积的大小取决于气体分子本身的大小 D. 上述说 ...

  • 白醋含量实验报告
  • 白醋中总酸含量测定的实验报告 贵溪市第一中学 实验组员:程宇航 叶子函 指导教师:夏如意 实验目的: 测定白醋中的总酸含量 在强酸滴定强碱的基础上掌握用naoh溶液滴定醋酸(弱酸)的反应原理, 了解强碱滴弱 酸时指示剂的选择, 学习自主设计实验方案并优化方案的方法, 巩固一定物质的量浓度溶液的配制的 ...

  • 2016实训心得体会范文网络运营与网络营销实训心得体会
  • <网络运营与网络营销>实训计划 一.实训内容 网店的运营和管理.网络营销和推广(网络信息收集.网络市场调查.C2C(B2B.B2C)电子商务网站建设实训.知识问答营销推广.E-mail营销推广实训.搜索引擎营销推广实训.博客与微博营销推广实训.网络营销策划实训) 二.实训目的和要求 (一 ...

  • 科技论文写作A---带答案版
  • 姓名:朱工 学号: 000000 科目:科技论文写作A 专业:土木工程(工程管理) 2015-2016学年第2学期 离 线 作 业 科 目:__________科技论文写作A_____________ 姓 名:_______ 朱工 _______ 学 号:_______ 000000 ______ ...

  • 考研有机化学真题及答案
  • 考研有机化学真题及答案 2010年3月3日最后更新 目录 广告....................................................................................................................... ...

  • 分析实验的思考题答案
  • 二.滴定分析基本操作练习 (一)基本操作:溶液的配制.滴定操作 (二) 实验注意问题: 1 用HCl 标准溶液标定NaOH 溶液时,应选用哪种指示剂?为什么?滴定操作时哪种溶液置于锥形瓶中?HCl 标准溶液应如何移取? 2 用NaOH 标准溶液标定HCl 溶液时,应选用哪种指示剂?为什么? (三) ...

  • 高一第一章测试题
  • 测试题 -11.将浓度为0.1mol·LCH 3COOH 溶液加水不断稀释,下列各量始终保持增大的是 ++A .c (H ) B.c (H )/c(CH 3COOH ) -+C .c (CH 3COO )/c(H ) D.K a (CH 3COOH ) 2.下列应用不涉及到盐类水解的是 A .用热的 ...