《高级语言》实验指导书 联系客服

发布时间 : 星期一 文章《高级语言》实验指导书更新完毕开始阅读ea21dfb577232f60dccca128

《高级语言程序设计》实验指导书

3. 预习下面程序,若输入12345,分析输出结果是多少?上机验证。

#include void main( )

{ long data;

scanf(\ while(data)

{ printf(\ data=data/10; } }

4. 下面程序实现求Fibonacci数列的前n个数。(验证、调试)

1?Fn???Fn?1?Fn?2n?1或n?2n?3

运行程序,写出运行结果;采用单步跟踪技术运行该程序,观察一下变量的变化。

#include void main( )

{ long int f1, f2; int i,n;

printf(\ n:\ /* 第5行 */ scanf(\ /* 第6行 */ f1=f2=1;

for(i=1;i

{ printf(\ /* 第9行 */ f1=f1+f2; f2=f2+f1; } } 思考:(1)f1、f2这两个变量为什么定义为long int 型?

(2)第5行和第6行的相互作用,你会用这种方式来实现输入吗?

(3)注意第9行的输出“%ld”中的“1”是字母“L”的小写形式,不是数

字1。

5. 预习下面程序,写出预习结果并上机验证。(验证)

#include void main( ) { int i,j,x;

for(i=0,x=0;i<2;i++) { x++;

for(j=0;j<3;j++)

{ if(j%2) continue;

x++; } x++; }

8

《高级语言程序设计》实验指导书

printf(\

}

思考:用一句话概括if(j%2)语句的作用。

相关知识:嵌套for循环的执行过程及continue语句的作用。

6.下面程序输入一批考试分数,用?1作为结束标志,若输入大于100分,则提示重新输入,然后计算最高分、最低分与平均分。请调试、检查程序中的错误,并改正之。

#include void main( )

{ int mark;

int n=0 ; sum=0 ; int max=100 ; min=0 ; for ( ; ; ) ;

{ scanf(\ if ( mark > 100 )

{ printf(\ reinput \\n \ break; }

if ( mark=-1) break; n ++ ;

sum=sum + mark ; if( mark > max ) max = mark ; if( mark < min )

min = mark ; }

sum=sum/ n ;

printf(\ }

提示:该程序有很多错误,下面给出某些错误的说明。当求一批数中的最大值时,若已知一批数的最小值,则将这个最小值作为最大值的初始值;当求最小值时,情况相反,即若已知这批数的最大值,则将这个最大值作为最小值的初始值。本例中求一批分数的最高分,则最高分的初始值应该设为0,然后在程序循环中逐渐地升高,直至求出最高分;本例中还要求这批分数的最低分,则最低分的初始值设为100,然后在程序循环中逐渐地降低,直至求出最小值。实现“若输入大于100分,则提示重新输入”功能的语句有错;实现“用?1作为结束标志”功能的语句有错。

思考:(1)“一批数据”是几个数据?输入的数据如何结束?程序中哪一行是实现结束这个要求的,写出该语句。

(2)程序中哪个语句是实现”若输入大于100分,则提示重新输入”这个要求的,写出该语句。

(3)写出您的测试数据及运行结果,注意输入的数据序列中最后一个应是-1。

7.编程:输入20个1~90的整数,分类统计1~30、31~60、61~90的数各有多少个? 编程点拨:

(1) count1计1~30的个数,count2计31~60的个数,count3计61~90的个数。

9

《高级语言程序设计》实验指导书

(2) 用for循环20次实现该程序的功能:输入一个整数x,判断该数所在的范围,若x

是1~30,则count1加1;若x是31~60,则count2加1;若x是61~90,则count3加1。

(3) 最后,输出统计的结果。 #include void main( )

{ int count1=0,count2=0,count3=0; int i,x;

printf(“Please input 20 numbers:”); for(i=0;i<20;i++) { scanf(“%d”,&x);

??? /*补充完成程序*/ }

/* 输出统计结果 */ ????? }

补充完成该程序。

8.编程:素数是除了1和其本身以外,不能被其他自然数整除的自然数。从键盘输入一个数,判断该数是不是素数?

编程点拨:

a) 输入这个数x。

b) 用for循环2~x-1,用2~x-1的每一个数去除x,若有一个数整除x,则说明

x不是素数;否则,x就是素数。 c) 最后,将判断结果输出。 #include void main( ) { int i, x;

printf(\ one natural integer: \scanf(\

for(i=2;i

思考:其实,只需要判断2~x之间的整数能否整除x就可以判断x是否为素数,此时,如何修改程序?

9.编程:显示所有的水仙花数。谓水仙花数,是指一个3位数,其各位数字立方和等于该数字本身。例,153是水仙花数,因为153=13+53+33 。有两种解题思路,选择其中之一编程实现:

(1) 利用三重循环,将这三个数通过一定的运算符连接成一个3位数,然后判断是

否是水仙花数。

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

for(k=0;k<=9;k++)

注意,因水仙花是一个三位数,百位i是从1开始,不能从0开始,十位j

10

《高级语言程序设计》实验指导书

和个数位k可以从0开始。

(2) 利用一个循环,对100~999范围内的每个3位数逐位分离后进行判断。

for(i=100;i<999;i++) { a=i/100;

b=(i-a*100)/10; c=i;

??? }

10.编程:输出下列图形。 *

*** ***** *******

*********

分析:这是由星号构成的5行5列的三角形图形。每一行的星号数量为:1、3、5、7、9。考虑两点,一是每一行上星号的生成规则,二是每一行第一个星号字符的输出位置。每一行的星号与行号有关,即2*i+1,其中i是行号;每一行的输出位置比上一行少一个空格,可以这样实现:for(j=1;j<=40-i;j++) printf(“%c”, ? ?),其中i是行号。 三、实验重点、难点

1. 循环语句 2. 循环的嵌套

3. break和continue语句 四、操作要点

Run菜单中Go to cursor::调试程序时使用, 选择该项可使程序运行到光标所在行。光标所在行必须为一条可执行语句, 否则提示错误。其热键为F4。Trace into:在执行一条调用其它用户定义的子函数时, 若用Trace into项, 则执行长条将跟踪到该子函数内部去执行, 其热键为F7。 五、注意事项

1. 对应该有花括号的复合语句,忘记加花括号 2. 在不该加分号的地方加了分号 3. 引用数组元素时误用圆括号 4. 引用数组元素超界

5. 对二维或多维数组定义和引用的方式不对 6. 误以为数组名代表整个数组

7. 混淆字符数组与字符指针的区别

实验四 数组

一、实验目的及要求

1. 掌握一维数组和二维数组的定义、赋值和输入输出的方法; 2. 掌握字符数组和字符串函数的使用;

3. 掌握与数组有关的算法(特别是排序算法)。 二、实验任务

1.调试下列程序,使之具有如下功能:输入10个整数,按每行3个数输出这些整数,最后输出10个整数的平均值。写出调试过程。

11