13本科C语言程序设计实验任务书

更新时间:2023-11-08 02:36:01 阅读量: 教育文库 文档下载

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

高级语言程序设计实验任务书

实验一 顺序结构程序设计

一、实验目的

1. 掌握C语言中使用最多的一种语句——赋值语句的使用方法。

2. 掌握各种类型数据的输入输出的方法,能正确使用各种格式转换符。 二、实验的内容和步骤

1.以下程序多处有错。要按下面指定的形式输入数据和输出数据时,请对该程序做相应的修改。

#include void main ( ) { double a,b,c,s,v; printf(input a,b,c:\\n); scanf(\s=a*b; v=a*b*c;

printf(\ %d %d\printf(\}

当程序执行时,屏幕的显示和要求输入形式如下:

input a,b,c:1.0 2.0 3.0 ?此处的1.0 2.0 3.0是用户输入的数据 a=1.000000 b=2.000000,c=3.000000 ?此处是要求的输出格式 s=2.000000,v=6.000000

相关知识:① 检查程序错误时应注意几点:

a)有时程序中一个错误会引发一系列错误信息,工作中不应被这种情况所迷惑,改正了一些错误后应及时对源程序重新进行编译;

b)如果修改错误时增删了行,或是一个行里有多个错误,更正前面错误时增删了字符,就可能导致系统对错误定位不准,此时应该重新编译;

c)系统给出的警告信息一般都说明程序中有问题,因为系统发现了可疑情况。对于警告信息同样要逐个仔细分析。除非明确认定不是问题,否则绝不能简单地认为不是错误而不予理睬。实际上,很多警告都是因为程序中确实有严重的隐含错误。

d) 在连接中发现新错误也需要仔细检查和修改程序。连接时发现的错误一般是由于函数名或外部变量名字写错,或者一些函数、外部变量没有定义引起的。系统不能对连接错误给以自动定位,只能提供有关的名字信息等。对于这类问题,可以借助编辑器的字符串查找命令进行定位。

② 正确调用scanf函数和printf函数构成输入和输出语句。

2.有以下程序 #include void main() { char c1,c2; int n1,n2; c1=getchar(); c2=getchar();

n1=c1-'0';n2= n1*10+(c2-'0'); printf(\}

程序运行时输入:12<回车>,执行后输出结果是什么?

相关知识:①getchar()函数用来输入两个字符分别赋给变量c1和c2;

第1页

高级语言程序设计实验任务书

②n1=c1-'0'相当于n1='1' -'0',字符1的ASCII码值比0大一,所以n1中的值为1,c2-'0'相当于'2' -'0'; ③把字符串转换为多位数的算法。 3.若有以下程序 #include void main() { int i,j; int x,y;

scanf(\ scanf(\ printf(\ printf(\}

要求给i赋值为10,j赋值为20,x赋值为10,y赋值为20,则应该怎样从键盘输入数字?

相关知识:①在调用scanf()函数时在格式串中若包含有格式描述符之外的字符时,则要求在输入数据时在对应的位置上输入完全匹配的字符;

②scanf()函数只包含格式描述符时可用跳格键Tab、空格和回车分隔数据;

③在调用printf ()函数时在格式串中若包含有格式描述符之外的字符时,则在输出数据时在对应的位置上输出完全匹配的字符,%d之类的格式符位置输出对应输出项的值;故输出时要注意插入适当的非格式符以便区分各个输出结果。 4. 计算定期存款本利之和

设银行定期存款的年利率rate为2.25%,并已知存款期为n年,存款本金为capital元,试编程计算n年后的本利之和deposit。要求定期存款的年利率rate、存款期n和存款本金capital均由键盘输入。 5. 键盘输入与屏幕输出练习

问题1 要使下面程序的输出语句在屏幕上显示1, 2, 34,则从键盘输入的数据格式应为以下备选答案中的 。

#include main() {

char a,b; int c;

scanf(\ printf(\}

A)1 2 34 C)’1’,’2’,34

B)1, 2, 34 D)12 34

问题2 在与上面程序的键盘输入相同的情况下,要使上面程序的输出语句在屏幕上显示1 2 34,则应修改程序中的哪条语句?怎样修改?

问题3 要使上面程序的键盘输入数据格式为1,2,34,输出语句在屏幕上显示的结果也为1,2,34,则应修改程序中的哪条语句?怎样修改?

问题4 要使上面程序的键盘输入数据格式为1,2,34,而输出语句在屏幕上显示的结果为'1', '2',34,则应修改程序中的哪条语句?怎样修改?

[提示:利用转义字符输出字符单引号字符。]

问题5 要使上面程序的键盘输入无论用下面哪种格式输入数据,程序在屏幕上的输出结果都为'1', '2',34,则程序应修改程序中的哪条语句?怎样修改?

第1种输入方式:1,2,34↙(以逗号作为分隔符) 第2种输入方式:1 2 34↙(以空格作为分隔符) 第3种输入方式:1 2 34↙(以Tab键作为分隔符)

第2页

高级语言程序设计实验任务书

第4种输入方式:1↙

2↙

34↙(以回车符作为分隔符)

实验二 逻辑结构程序设计

一、实验目的

1. 了解C语言表示逻辑量的方法。 2. 学会正确使用逻辑运算符和逻辑表达式 3. 熟练掌握if 语句和 switch语句。 4. 结合程序掌握一些简单的算法。 5. 学习调试程序。

二、实验内容

1. 若输入10,20,30则程序的执行结果是 20,30,10 请填充下列程序。 # include “stdio.h” void main( )

{ int a, b, c ; ______________;

_________________;

_________; a=b ; b=c ; __________; printf ( \}

2.下列源程序中包含有一些错误,调试下列程序,使之具有如下功能:输入a、b、c三个整数,求最小值。

# include “stdio.h” void main( ) { int a,b,c;

scanf(\; if((a>b)&&(a>c)) if(b

printf(\; else

printf(\; if((a

printf(\; }

再次运行程序,输入为“2,1,3”,程序输出却是“min=2”。用单步执行的方法,马上发现变量a、b、c的值是不对的,原因是程序要求输入数据的分隔符是空格(还允许使用回车或键)。改正输入数据的分隔方式后,程序没有输出,还是用单步执行的方法,监视程序的执行过程,发现程序中条件设计有误,经过改正的程序如下:

# include “stdio.h”

void main() { int a,b,c;

scanf(\; if((a

printf(\ else if((b

第3页

高级语言程序设计实验任务书

else if((c

printf(\; }

上述程序是按在三个数中仅有一个最小值时才称其为最小值进行设计的。另外,注意程序的书写格式,一定要采用缩进格式,即不同层次(分支)的语句左起的空格不同,这样可以有效地提高程序的可读性。

相关知识:①类似a

①多定义一个变量,并一开始令变量max=a;

②if(max

4.输入4个整数,要求按由小到大顺序输出。得到正确结果后,修改程序使之按由大到小顺序输出。

相关知识:①输入函数scanf()的使用;②简单的排序算法;③通过中间变量t交换a和b值的方法:t=a; a=b; b=t;。 5.根据以下函数关系,对输入的每个x值,计算出相应的y值。

?ex?1?y??|x|?2?sin(x2)? 0?x?13?x?4

当x取其他值时

#include #include void main() { float x,y; scanf(\

if ( ) y= ; else if( )

y= ;

else printf(\}

相关知识点:if语句的嵌套;数学函数的调用方式。 6.模仿第5题,写程序实现以下函数:

?x(x?1)?y??2x?1(1?x?10)

?3x?11(x?10)?用scanf函数输入x的值,求y值。运行程序,输入x的值(分别为x<1、1≤x<10、x>10三种情况),检查输出的y值是否正确。

相关知识:①用if的嵌套实现分段函数;②比较运算符的正确使用;③算术运算符*的正确使用。 7.阅读分析以下程序的功能。 #include void main( ) {

int choice;

第4页

高级语言程序设计实验任务书

int value;

printf(\ /* 显示菜单 */ printf(\printf(\printf(\ printf(\printf(\scanf(\

switch (choice)

printf(\scanf(\

printf(\break;

printf(\scanf(\

printf(\break;

printf(\scanf(\

printf(\break;

printf(\scanf(\

printf(\break;

{ case 1: /* 选中1时处理 */

case 2: /* 选中2时处理 */

case 3: /* 选中3时处理 */

case 4: /* 选中4时处理 */

}

}

相关知识:①用switch语句实现菜单的方法;②数制转换的方法。

8.编写程序,要求对输入的数字1~7转换成文字星期几,对其它数字不转换。例如,输入5时,程序应该输出Friday。 ① 编辑、调试和运行该程序,然后输入4。其输出结果是什么?为什么是这样的结果? ② 该程序有哪些错误?如何修改?

相关知识:①switch语句的正确使用;②break在switch语句中的作用。

实验三 循环控制

一、实验目的

1. 熟练掌握用while语句、do while语句和for语句实现循环的方法。

2. 掌握在程序设计中用循的方法实现一些常用算法。并进一步学习调试程序的方法。 3. 掌握一维数组和二维数组的定义、赋值和输入输出的方法。 4. 掌握字符数组和字符串函数的使用。 5. 掌握与数组有关的算法。

第5页

高级语言程序设计实验任务书

二、实验内容

1. 程序 求1+?+100,填空,实现该功能。 #include void main() {

int s,i;

s=0; /* 第5行 */ for( ) s=s+i;

printf(\}

思考:(1)第5行能不能去掉?其作用是什么?

(2)不用for语句,用while语句改写该程序,实现同样的功能。 2. 比较下列两个程序。(验证)

/* c40102_1.c */ #include void main() { int i,n,sum=0; scanf(\n=i; while(i<=10) { sum+=i; i++; }

printf(\}

/* c40102_2.c */ #include void main() { int i,n,sum=0; scanf(\n=i; do { sum+=i; i++; } while(i<=10);

printf(\}

分别运行这两题,若输入7,这两个程序的结果分别是多少?若输入12,这两个程序的结果又分别是多少?比较为什么会有这样的区别?

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

#include void main( )

{ long data;

scanf(\

第6页

高级语言程序设计实验任务书

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

printf(\ }

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

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

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

#include

第7页

高级语言程序设计实验任务书

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的个数。

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

高级语言程序设计实验任务书

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

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

补充完成该程序。

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

编程点拨: a) b) c)

输入这个数x。

用for循环2~x-1,用2~x-1的每一个数去除x,若有一个数整除x,则说明x不是素数;否则,x就是素数。

最后,将判断结果输出。

#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和个数位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是行号。

第9页

高级语言程序设计实验任务书

实验四 数组

一、实验目的

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

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

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

#define N 10 void main( ) { int i,a[N],av;

for(i=0;i

printf(\; }

for(i=0;i!=N;i++) av+=a[i];

printf(\; }

上面给出的程序是完全可以运行的,但是运行结果是完全错误的。调试时请注意数组元素的输入问题、输出格式问题等。请使用前面实验所掌握的调试工具,判断程序中的错误并改正。

相关知识:①数组元素值的输入;②求和求平均值的相关变量初始化问题;③输出格式符的正确使用。④数组元素的格式化输出。

2.下面程序是输入5个数据,然后求它们的和并输出结果。

#include void main( ) {int i, a[5], sum = 0;

scanf(\ for (i = 0; i <= 4; i ++) sum += a[i];

printf(\}

该程序中有哪些错误?如何修改?写出正确运行后的结果。

相关知识:数组元素的输入和输出只能逐个元素操作,而不能以数组名作整体操作。

3.有一个3行4列的距阵,现要求编程求出其中最大的那个元素的值,以及它所在的行号与列号。程序的初始说明和输出语句如下所示,请补充完成该程序。

#include void main( ) {

int i, j, row, colum, max;

第10页

高级语言程序设计实验任务书

}

编程点拨:

static int a[3][4] = {{1,2,3,4}, {9,8,7,6}, {-10,10,-5,2}};

printf(\ max, row, colum);

……

① 初始化row、colum及max。

② 使用for循环的双重循环逐行把元素值与max值进行比较,比较结果如果元素值比max值大,则改变

max值,同时改变row和colum的值。 ③最后输出max,row和colum的值。

相关知识:①二维数组的定义和初始化;②使用二重循环对二维数组元素的访问;③求最值时相关变量初值的设

定。

4. 数组中已存互不相同的10个整数,从键盘输入一个整数,输出与该值相同的数组元素下标。 编程点拨:

① 输入要查找的变量x的值;

② 使用循环将输入的数和数组元素逐个进行比较,若找到,则提前退出循环; ③ 根据循环是正常结束还是提前结束来判断是否找到x。 部分源代码:

#include void main( )

{ int i, x, a[10]={1,2,3,4,5,6,7,8,9,10};

/*输入x变量的值 */ for ( i=0; i<10; i++ ) printf(\ printf(\

/* 循环查找与x相等的元素 */ if ( ) printf(\ /* 输出查找结论 ,输出下标值 */ else printf(\}

5.编写程序,任意输入10个整数的数列,先将整数按照从大到小的顺序进行排序,然后输入一个整数插入到数列中,使数列保持从大到小的顺序。

编程点拨: ① 定义数组时多开辟一个存储单元; ② 找合适的插入位置;

j=3

下标=

a

0

1

2

3

4

5

6

7

8

9

10

20 18 16 14 12 10 8 6 4 2 k 15 找合适的插入位置:j=3 j=0 a[j] ≥k? 即20 ≥15 ? 是 j++ j=1 a[j] ≥k? 即18 ≥15 ? 是 j++ j=2 a[j] ≥k? 即16 ≥15 ? 是 j++

j=3 a[j] ≥k? 即14 ≥15 ? 不是,结束循环

第11页

高级语言程序设计实验任务书

while( a[j]>=k && j<10 ) j++;

找不到比k小的元素时也要退出循环 ③ 向右移动插入点后的元素;先把a[9]移到a[10],a[8]移到a[9],…a[i]移到a[i+1],直到把a[j]移到

a[j+1],即:i=j停止移动元素。

for(i=9;i>=j;i-- ) a[i+1]=a[i];

下标=

a 0 1 2 3 4 5 6 7

8 9 10

20 18 16 14 12 10 8 6 4 2 ④ 插入。 k 15 部分

源代码:

#include #define N 11 void main() { int i,j,a[N];

printf(“Please input 10 numbers:”); for (i=0; i

scanf(“%d”,&a[i]); /*乱序输入10个整数*/ …… }

相关知识:①比较排序法、选择排序法和冒泡排序法;②数据元素的插入。 6.输入十个互不相同的整数并存在数组中,找出最大元素,并删除。 编程点拨: ① 求最大值所在元素下标:不必用max记住最大值,只要用k记住最大值所在的元素下标; ② 删除最大值:从最大值开始将其后面元素依次前移一个位置。

下标=

a

0 1 2 3 4 5 6 7 8 9 10

2 8 16 14 1 10 8 16 4 20 6 部分源代码: k=0;

if ( a[k]

k=1; 执行 if ( a[k]

k=2; 不执行 if ( a[k]

k=3; 执行

k=0;

for ( i=1; i<10; i++ ) if ( a[k]

相关知识:①删除数组元素的概念;②移动数组元素的算法;③求最大值位置的算法。

7. 以下程序的功能是:从键盘上输入若干个学生的成绩,统计计算出平均成绩,并输出低于平均分的学生成绩,用

第12页

高级语言程序设计实验任务书

输入负数结束输入。请填空:

#include void main( )

{ float x[1000], sum=0.0, ave, a; int n=0, i;

printf (\ mark : \\n\ scanf(\

while (a>=0.0 && n<1000)

{ sum+= ; x[n]= ; n++; scanf(\ }

ave= ; printf (\ printf (\ for (i=0; i

if ( ) printf(\}

8. 综合编程题:打印如下杨辉三角形

1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1

编程点拨:

杨辉三角形有如下特点: ① ② ③

只有下半三角形有确定的值; 第一列和对角线上的元素值都是1;

其它元素值均是前一行同一列元素与前一行前一列元素之和。

9.调试下列程序,使之具有如下功能:任意输入两个字符串(如:“abc 123”和“china”),并存放在a,b两个数组中。然后把较短的字符串放在a数组,较长的字符串放在b数组。并输出。 #include #include void main()

{ char a[10],b[10]; int c,d,k,ch; scanf(\ scanf(\ printf(\ c=strlen(a); d=strlen(b); if(c>d)

for(k=0;k

{ ch=a[k];a[k]=b[k];b[k]=ch;} printf(\

第13页

高级语言程序设计实验任务书

printf(\ }

相关知识:程序中的strlen()是库函数,功能是求字符串的长度,它的原型保存在头文件\中。调试时注意

库函数的调用方法,不同的字符串输入方法,通过错误提示发现程序中的错误。

10.阅读下面的程序,然后回答后面的问题: #include #include void main( ) { }

编辑、运行该程序,然后分别输入 Country 和side。请问: ① 程序执行的结果是什么? ② 该程序的功能是什么?

相关知识:① 串结束符?\\0?;② 自编写库函数。

11.填空完成程序,使其功能是对从键盘上输入的两个字符串进行比较,然后输出两个字符串中第一个不相同字符的ASCII码之差。例如:输入的两个字符串分别为abcdefg和abceef,则输出为-1。程序如下:

#include

void main ( )

{ char str1[100],str2[100]; int i,s;

printf(\ printf(“\\n Input string 2:\\n”);gets(str2); i= (1) ;

while((str1[i]==str2[i])&&(str1[i]!= (2) )) i++; s= (3) ; printf(\ }

12.填空完成程序,使其的功能是统计从终端输入字符中每个大写字母的个数。用#号作为输入结束标志。程序如下: #include #include void main ( )

{ int num[26],i; char c; for (i=0;i<26;i++) num[i]=0;

char s1[80], s2[40]; int i = 0, j = 0;

printf(\ scanf(\

printf(\ scanf(\ while (s1[i]!= '\\0' )

i++;

s1[i++]=s2[j ++];

while (s2[j]!= '\\0' )

s1[i]= '\\0';

printf(\

第14页

高级语言程序设计实验任务书

while ( (1) != '#') /* 统计从终端输入的大写字母个数*/ if (isupper(c)) num[c-65] (2) ;

for (i=0;i<26;i++) /* 输出大写字母和该字母的个数*/ if (num[i])printf(\ (3) ,num[i]); }

13.编写程序,输入若干个字符串,求出每个字符串的长度,并打印最长一个字符串的内容。以“stop”作为输入的最后一个字符串。

相关知识:

① 字符数组的输入输出可以有两种方法:

? 逐个字符输入输出。用格式符“%c”输入或输出一个字符,此时输入输出函数中的输入输出项是数组元素

名,而不是字符数组名;

? 将整个字符串一次输入或输出。用“%s”格式符,意思是输出字符串(string),此时输入输出函数中的输入

输出项是字符数组名,而不是数组元素名。写成下面这样是不对的:printf(\,c[0]);

② gets()函数和scanf()函数输入字符串的区别,puts()函数和printf()函数输出字符串的区别; ③ 求每个字符串的长度函数strlen()的使用,字符串比较函数strcmp()的使用; ④ 二维数组处理多个字符串。

14.编写程序,输入字符串s1和s2以及插入位置f,在字符串s1?中的指定位置f处插入字符串s2。

如:输入\、\和位置3,则输出:\。

实验五 函数与编译预处理

一、实验目的

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

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

4. 掌握全局变量和局部变量,动态变量、静态变量的概念和使用方法。

二、实验内容

1. 阅读程序,通过调试该程序,熟悉函数的调用方法及单步跟踪键F11和F10的不同。 #include void main()

{ void fun(int i, int j, int k); int x,y,z; x=y=z=6; fun(x,y,z);

printf(\}

void fun(int i, int j, int k) { int t; t=(i+j+k)*2; printf(\}

2. 阅读程序,注意在调试时F11和F10的区别,还要注意函数调用过程中形参、实参的关系。 #include

第15页

高级语言程序设计实验任务书

printf(\ printf(\

printf(\ printf(\ choice=getchar(); switch(choice) {case '1':

aver_stu(score,N,M); break; case '2':

aver_cour(score,N,M); break; case '3':

orde_aver(score,N,M); break; case '4':

failed(score,N,M); break; case '0': exit(0); default:

printf(\ } } }

实验六 指针

一、实验目的

1. 通过实验进一步掌握指针的概念,会定义和使用指针变量; 2. 能正确使用数组的指针和指向数组的指针变量; 3. 能正确使用字符串的指针和指向字符串的指针变量; 4. 能正确使用指向函数的指针变量;

5. 了解指向指针的指针的概念及其使用方法。

二、实验内容

编程序并上机调试运行程序(都要求用指针处理)。

1.上机验证以下程序的运行结果

#include void main() { int i,j,*pi,*pj; pi=&i; pj=&j; i=5; j=7;

printf(\

printf(\}

第21页

高级语言程序设计实验任务书

相关知识:指针的值与指针指向的变量值的区别。在VC环境下,以上运行结果中的负数是另一个值。

2.上机验证以下程序的运行结果 #include void main()

{ int i,a[]={1,2,3},*p;

p=a;/*将数组a首地址赋给指针p*/ for (i=0;i<3;i++)

printf(\}

相关知识:①指针指向数组的方法;②指针表示数组元素的方法。③数组元素的多种表示方法。 3.编写程序,使之具有如下功能:用指针法输入12个数,然后按每行4个数输出。写出调试过程。 相关知识:①调试时指针变量指向哪个目标变量;②区分指针的值和指针指向变量的值;③通过指针操作数组元素。

4.编写下列程序的sum函数和swap函数,使之具有如下功能:任意输入2个数,调用两个函数分别求: ⑴ 2个数的和, ⑵ 2个数交换值。

#include void main( )

{ int a,b,c,*p=&c;

void sum(int ,int ,int *); void swap(int * ,int * ); scanf(\ sum(a,b,p); swap(&a,&b);

printf(\

printf(\}

void sum(int a,int b,int *c) { }

void swap(int *a,int *b) { }

相关知识:①调试程序时注意参数传递的是数值还是地址。②指针作为参数;③利用指针得到多个返回值。

5.下面的程序是用来从键盘输入是个整数,然后求出其中的最小值。填写空缺部分。 #include int table[10];

void lookup(int *t,int *a,int n) { int k; *a=t[0];

for(k=1;k

第22页

高级语言程序设计实验任务书

if( ) *a=t[k]; }

void main()

{ int k,min,*p=&min; for (k=0;k<10;k++) scanf(\lookup( , ,10); printf(\}

相关知识:①用数组名加地址偏移量表示数组元素地址的方法;②数组名作为函数参数;③指针变量作为函数参数。

6.以下程序建立一个如下所示的二维数组,并按以下格式输出。请从对应的一组选择项中,选择正确的填入。

1 0 0 0 1 0 1 0 1 0 0 0 1 0 0 0 1 0 1 0 1 0 0 0 1 #include void main()

{ int a[5][5]={0},*p[5],i,j; for(i=0;i<5;i++) p[i]= (1) ; for(i=0;i<5;i++)

{ *(p[i]+ (2) )=1; *(p[i]+5- (3) )=1; }

for(i=0;i<5;i++) { for(j=0;j<5;j++)

printf(\ (4) ; } }

(1) A.&a[i][0] B.&a[i][1] C.&p[i] D.&a[0][i] (2) A.0 B.1 C.i D.(i+1) (3) A.0 B.1 C.i D.(i+1)

(4) A.putchar(\ B. putchar('\\n'); C. putchar(\\n); D.printf('\\n'); 相关知识:①二维数组与指针;②数组指针的概念和使用。

7.编程题:已知一个整型数组a[5],其各元素值为4,6,8,10,12。使用指针求该数组元素之积。

8.下面程序是用指针法将一个字符串a复制到字符串b中,

void main() {

char a[]=\int i; p1=a;p2=b;

第23页

高级语言程序设计实验任务书

for( ; *p1!=’\\0’;p1++,p2++)

*p2=*p1; p2=’\\0’;

printf(\printf(\for(i=0;b[i]!=’\\0’;i++) printf(\}

(1)将第一个for循环改为while循环; (2)将第二个for循环改用一条语句完成;

(3)分别用指针变量p1和p2输出字符串联a 和b。

9.写一个函数,实现两个字符串的比较。即自己写一个strcmp函数,函数原型为int strcmp(char *p1,char *p2);设p1指向字符串s1,p2指向字符串s2。要求当s1=s2时,返回值为0;若s1≠s2,返回它们二者第一个不同字符ASCII码差值(如“BOY”与“BAD”,第二个字母不同,“O”与“A”之间的差为79-65=14)。如果s1>s2,则输出正值;如果s1

实验七 结构体和共用体

一、实验目的

1. 掌握结构体类型变量的定义和使用; 2. 掌握结构体类型数组的概念和使用; 3. 掌握链表的概念,初步学会对链表进行操作;

二、实验内容

1.以下是一个编写input()和output()函数输入,输出5个学生的数据记录;请在空白处填上适当的语句,并调试运行程序。

#include #define N 5

struct student { char num[6]; char name[8]; int score[4]; } stu[N];

void input(struct student stu[]) { int i,j;

for(i=0;i

printf(\请输入%d个学生中第%d个的信息:\\n\ printf(\学号:\

scanf(\ printf(\姓名:\

scanf(\ for(j=0;j<3;j++) {

printf(\成绩%d:\

scanf(\ }

printf(\ } }

第24页

高级语言程序设计实验任务书

void print(struct student stu[]) {

int i,j;

printf(\

printf(\学号 姓名 成绩1 成绩2 成绩3\\n\printf(\ for(i=0;i

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

printf(\ printf(\ }

printf(\}

void main() {

input( ); print(stu); }

(1)能否将一个结构体变量作为一个整体进行输入和输出; (2)对结构体变量可以进行哪些运算?对结构体变量的成员呢?

2.使用结构体类型数组编写一个程序用来输入并显示教师的基本情况信息。教师的基本情况信息包括:姓名、性别、出生年月日、住址、电话、月收入。要求使用嵌套的结构体类型表示出生年月日,模拟输如下列两个教师的信息,并按下列格式输出在屏幕上。

姓名 性别 出生日期 住址 电话 月收入 1. 李四 女 1965年5月8日 莲花小区6号 7432156 1200.00 2. 王五 男 1972年8月9日 和平里12号 8654367 950.00

3.输入和运行以下程序:

#include \

union data {

int i[2]; float a; long b; char c[4]; }u; void main( ) {

scanf(\ //scanf(\

printf(\ u.i[0],u.i[1],u.a,u.b,u.c[0],u.c[1],u.c[2],u.c[3]); }

第25页

高级语言程序设计实验任务书

4. 假如一个学生的信息表中包括学号、姓名、性别和一门课的成绩。而成绩通常又可采用两种表示方法:一种是五分制,采用的是整数形式;一种是百分制,采用的是浮点数形式。现要求编一程序,输入一个学生的信息并显示出来。

第26页

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

Top