好文档 - 专业文书写作范文服务资料分享网站

C语言程序与设计-第5章-实验及习题答案

天下 分享 时间: 加入收藏 我要投稿 点赞

第5章 实验及习题答案

5.6 实 验

实验任务1 一维数组程序设计

二、实验内容

1.验证性实验

(1)验证【例5-2】程序(输入10个整数,存入数组中,分别按原序、逆序输出),回答题后问题。

① 运行程序时如何输入数据?请举例: 1 2 3 4 5 6 7 8 9 10↙(也可用回车符间

隔数据) 。

② 输入的10个数据分别存放在 a[0]~ a[9] 中。 ③ 若要计算10个整数的和,请写出此程序段并验证。 (2)验证【例5-4】程序(选择法排序),回答题后问题。

① 语句“if ( w != i ) { t = a[i] ; a[i] = max ; a[w] = t ; }”

实现的操作是 在第i趟排序中,如果找出的最大数a[w]不在最前面,则与

a[i]交换,否则不交换 。

② 请将随机产生的数据改为从键盘输入。 ③ 请修改程序实现从小到大排序。 2.设计性实验

(1)把一组数{ 3,4,6,7,1,8,9,13,2,5,11,14 }中的所有奇数找出,放在另一个数组中并输出,数据由初始化方式提供。

参考程序:

# include main( )

{ int a[12] = { 3 , 4 , 6 , 7 , 1 , 8 , 9 , 13 , 2 , 5 , 11 , 14 } , b[12] , i , j , m ;

for( i = 0 ; i < 12 ; i++ ) /* 输出原始数据 */ printf( \ printf( \

m = 0 ;

for( i = 0 ; i < 12 ; i++ ) /* 找奇数 */ if( a[i]%2==1 ) { b[m] = a[i] ; m++ ; }

for( j = 0 ; j < m ; j++ ) /* 输出奇数 */ printf( \}

(2)利用随机数函数产生20个三位数,将这20个数从小到大排列并输出。 参照【例5-4】P127页选择法排序程序,只需做下列修改:

? 将N 的值改为20

?

将语句:a[i] = rand ( ) % 100 ; 改为:a[i] = rand ( ) % 900+100 ;

也可参照【例5-4】和【例5-5】写出用冒泡法排序的程序。

(3)已知一个有序数列{ 3,5,6,8,11,14,19,23,25,35,41 },要求从键盘输入一个任意数,将其插入到合适位置仍使数列有序,输出插入前、后的数列。

参照【例5-7】,参考程序如下:

# include # define N 11 main( )

{ int i , b[N+1] = { 3 , 5 , 6 , 8 , 11 , 14 , 19 , 23 , 25 , 35 , 41 } , x ; printf(\ source order is : \\n\

for( i = 0 ; i < N ; i++ ) /* 输出插入前的数列 */ printf( \ printf(\

printf(\ input insert data : \ /* 提示信息 */ scanf(\ /* 输入插入的数据 */ for( i = N-1 ; i >=0 ; i-- ) /* 后移数据 */ if ( x < b[i] ) b[i+1 ]= b[i] ; else break;

b[i+1] = x ; /* 插入数据 */

printf( \ result is : \\n \

for( i = 0 ; i < N+1 ; i++ ) /* 输出插入后的数列 */ printf( \ }

(4)输入一个十进制数,将其转换成八进制数后输出结果。

参照【例5-8】只需将程序中的2 改为8即可,也可用别的方法实现。

实验任务2 二维数组程序设计

二、实验内容

1.验证性实验

(1)验证【例5-10】程序(二维数组求最小值及所在的位置),回答题后问题。

① “printf( \”语句的作用是 按行输出或输出换行 。

② 不给min赋初值或给min 赋初值为0,程序的运行结果会是什么?(有时会

出现错误结果)

③ 输出时为什么要用row +1 , col +1?(因为在数组中,行、列是从0数起的) (2)验证【例5-13】程序(杨辉三角形),回答题后问题。

① 语句“y[m][0] = 1 ; y[m][m] = 1 ; ”实现的操作是 给第1列和对角线上的

元素赋值为1 。

② 语句“if ( n == 0 || n == m ) y[m][n] = 1 ; ”实现的操作是 作用同① 。

③ 语句“y[m][n] = y[m-1][n-1] + y[m-1][n] ; ”实现的操作是 给第1列和对角

线上之外的元素赋值 。

2.设计性实验

(1)设有二维数组如下:{ { 1 , 11, 19 , 9 , 12 } , { 2 , 5 , 20 , 1 , 18 } , { 3 , 4 , 16 , 6 , 10 } , { 4 , 15 , 2 , 17 , 3 } , { 5 , 14 , 7 , 13 , 8 } ,请按行(第2~5行)、按列(第2~5列)求和及总和,然后以二维表形式输出数据及求和结果,数据由初始化方式提供。

参照【例5-11】,参考程序如下:

# include main( )

{ int a[5+1][5+1] = { { 1 , 11, 19 , 9 , 12 } , { 2 , 5 , 20 , 1 , 18 } , { 3 , 4 , 16 , 6 , 10 } ,

{ 4 , 15 , 2 , 17 , 3 } , { 5 , 14 , 7 , 13 , 8 }} , i , j , sum ;

for( i = 1 ; i <= 4 ; i++ ) /* 按行求和 */ { sum = 0 ;

for( j = 1 ; j <= 4 ; j++ )

sum += a[i][j]; a[i][5] = sum; }

for( j = 1 ; j <= 5 ; j++ ) /* 按列求和及总和 */ { sum = 0 ;

for( i = 1 ; i <= 4 ; i++ )

sum += a[i][j]; a[5][j] = sum; }

/*—————————————— 输出结果 —————————————*/ for( i = 0 ; i <= 5 ; i++ ) { printf( \

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

printf( \ } }

(2)对一个m×n的矩阵,分别求两个对角线上的所有元素之和,然后输出这个矩阵及计算结果。矩阵的数据由键盘输入。

参考程序:

# include # define M 5 # define N 5 main( )

{ int a[M][N] , i , j , sum1=0 , sum2=0 ; printf(\请输入M行N列的矩阵: \\n \ for( i = 0 ; i < M ; i++ )

{ for( j = 0 ; j < N ; j ++ )

scanf( \ }

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

{ sum1 += a[i][i] ; sum2 += a[i][M-1-i] ; }

for( i = 0 ; i < M ; i++ ) { for( j = 0 ; j < N ; j++ )

printf( \ printf( \ }

printf( \ , sum2 = %d \ }

(3)对一个m×n的矩阵,交换指定的两列元素。交换的两列列号由用户从键盘指定。

输出交换前后的矩阵。矩阵的数据由初始化方式提供。

参考程序:

# include # define M 3 # define N 5 main( )

{ int a[M][N] ={ { 1 , 11, 19 , 15 , 2} , { 2 , 5 , 20 , 14 , 7} , { 3 , 4 , 16, 4 , 5 } },

i , j , m1 , m2 , t ;

printf(\输出M行N列的矩阵: \\n \ for( i = 0 ; i < M ; i++ )

{ for( j = 0 ; j < N ; j ++ )

printf( \ printf( \

}

printf(\请输入要交换的两列列号: \

scanf( \ for( i = 0 ; i < M ; i++ )

{ t = a[i][m1-1] ; a[i][m1-1] = a[i][m2-1] ; a[i][m2-1] = t ; }

printf( \输出交换列后的矩阵\\n\

for( i = 0 ; i < M ; i++ ) { for( j = 0 ; j < N ; j ++ )

printf( \ printf( \

} }

实验任务3 字符串及数组综合程序设计

二、实验内容

1.验证性实验

(1)验证【例5-17】程序(输出一个字符串),回答题后问题。

① 输入字符串使用语句: scanf( \ 。 ② 输出字符串使用语句: printf( \ 。 ③ 数组名s3代表 数组s3的首地址 。 (2)验证【例5-21】程序(输入/输出多个字符串),回答题后问题。

① 输入字符串使用语句: gets( city[i] ) ; 。 ② 输出字符串使用语句: prints( \ 。 ③ city[i]代表 二维数组city每行的首地址 。 2.设计性实验

(1)从键盘输入自己的QQ号和密码,进行保存,并将密码加密(加密规则自定),然后将QQ号和加密后的密码输出。

设加密规则为:按密码字母顺序依次加1,2,3…… 参考程序:

# include # include

# define M 10 /* M代表字符串的最大长度 */ main( )

{ char user[M] , pass1[M] , pass2[M] ; int i ;

printf( \请输入用户名:\ gets( user ) ;

printf( \请输入用户名密码:\ gets( pass1) ;

for( i = 0 ; i

puts( pass1 ) ; puts( pass2 ) ; }

(2)删除一个字符串中的所有空格字符,使非空格字符连续存放。(算法提示1:借助一个数组存放非空格字符。算法提示2:借助两个变量,在本字符串中进行删除、移动)

算法1参考程序:

# include # include

# define M 40 /* M代表字符串的最大长度 */ main( )

{ char s1[M] , s2[M] ; int i , n = 0 ;

printf( \请输入带空格的字符串:\ gets( s1 ) ;

for( i = 0 ; i

if ( s1[i] != ' ' ) { s2[n] = s1[i] ; n++ ; } s2[n]= '\\0' ; puts( s1 ) ; puts( s2 ) ; }

(3)期末班级成绩处理。设有学生5人,每人5科成绩,统计每个学生的总分、不及格课程门数,并按总分排名次,按下面格式输出排名后的成绩单。数据由初始化方式提供。

学号 姓名 科目1 科目2 科目3 科目4 科目5 总分 名次 不及格门数 实现的程序可参考(P164~165)

习 题 5

一、选择题

1.以下关于数组描述正确的是( C )。

A.数组的大小是固定的,但可以有不同类型的数组元素。 B.数组的大小是可变的,但所有数组元素的类型必须相同。 C.数组的大小是固定的,所有数组元素的类型必须相同。 D.数组的大小是可变的,可以有不同类型的数组元素。 2.以下不能正确定义一维数组的选项是( D )。

A.int a[5] = { 1 , 2 , 3 , 4 , 5 } ; B.int a[ ] = { 1 , 2 , 3 , 4 , 5 } ; C.int a[5] ; D.int n = 5 , a[n ] ; 3.设有“int i , a[10] ; 且0< i < 10”,不能正确引用a数组元素的是( A )。 A.a[10] B.a[i] C.a[2] D.a[10-i] 4.设有语句“int a[10] = { 1 , 2 , 3 , 4 } , i = 0 ; ”,则a[i + 1]的值为( B )。

C语言程序与设计-第5章-实验及习题答案

第5章实验及习题答案5.6实验实验任务1一维数组程序设计二、实验内容1.验证性实验(1)验证【例5-2】程序(输入10个整数,存入数组中,分别按原序、逆序输出),回答题后问题。①运行程序时如何输入数据?请举例:12345678910↙(也可
推荐度:
点击下载文档文档为doc格式
0kn1i4g8di17c19373fh7l7tx29ybm00g4y
领取福利

微信扫码领取福利

微信扫码分享