版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第5章 实验及习题答案5.6 实 验实验任务1 一维数组程序设计二、实验内容1验证性实验 (1)验证【例5-2】程序(输入10个整数,存入数组中,分别按原序、逆序输出),回答题后问题。 运行程序时如何输入数据?请举例: 1 2 3 4 5 6 7 8 9 10(也可用回车符间隔数据) 。 输入的10个数据分别存放在 a0 a9 中。 若要计算10个整数的和,请写出此程序段并验证。(2)验证【例5-4】程序(选择法排序),回答题后问题。 语句“if ( w != i ) t = ai ; ai = max ; aw = t ; ”实现的操作是 在第i趟排序中,如果找出的最大数aw不在最前面,则与
2、ai交换,否则不交换 。 请将随机产生的数据改为从键盘输入。 请修改程序实现从小到大排序。2设计性实验(1)把一组数 3,4,6,7,1,8,9,13,2,5,11,14 中的所有奇数找出,放在另一个数组中并输出,数据由初始化方式提供。参考程序:# include <stdio.h>main( ) int a12 = 3 , 4 , 6 , 7 , 1 , 8 , 9 , 13 , 2 , 5 , 11 , 14 , b12 , i , j , m ; for( i = 0 ; i < 12 ; i+ ) /* 输出原始数据 */ printf( " %4d &qu
3、ot; , ai ) ; printf( " n " ) ;m = 0 ; for( i = 0 ; i < 12 ; i+ ) /* 找奇数 */ if( ai%2=1 ) bm = ai ; m+ ; for( j = 0 ; j < m ; j+ ) /* 输出奇数 */ printf( " %4d " , bj ) ;(2)利用随机数函数产生20个三位数,将这20个数从小到大排列并输出。参照【例5-4】P127页选择法排序程序,只需做下列修改:² 将N 的值改为20² 将语句:ai = rand ( ) % 100
4、 ; 改为:ai = rand ( ) % 900+100 ;也可参照【例5-4】和【例5-5】写出用冒泡法排序的程序。(3)已知一个有序数列 3,5,6,8,11,14,19,23,25,35,41 ,要求从键盘输入一个任意数,将其插入到合适位置仍使数列有序,输出插入前、后的数列。参照【例5-7】,参考程序如下:# include <stdio.h> # define N 11main( ) int i , bN+1 = 3 , 5 , 6 , 8 , 11 , 14 , 19 , 23 , 25 , 35 , 41 , x ; printf(" the source
5、order is : n" ) ; for( i = 0 ; i < N ; i+ ) /* 输出插入前的数列 */ printf( " %4d " , bi ) ; printf("n" ) ; printf(" Please input insert data : " ) ; /* 提示信息 */ scanf("%d" , &x ) ; /* 输入插入的数据 */ for( i = N-1 ; i >=0 ; i- ) /* 后移数据 */ if ( x < bi ) bi+
6、1 = bi ; else break; bi+1 = x ; /* 插入数据 */printf( " the result is : n ") ; for( i = 0 ; i < N+1 ; i+ ) /* 输出插入后的数列 */ printf( " %5d " , b i ) ; (4)输入一个十进制数,将其转换成八进制数后输出结果。参照【例5-8】只需将程序中的2 改为8即可,也可用别的方法实现。实验任务2 二维数组程序设计二、实验内容1验证性实验 (1)验证【例5-10】程序(二维数组求最小值及所在的位置),回答题后问题。 “printf
7、( "n" ) ; ”语句的作用是 按行输出或输出换行 。 不给min赋初值或给min 赋初值为0,程序的运行结果会是什么?(有时会出现错误结果) 输出时为什么要用row +1 , col +1?(因为在数组中,行、列是从0数起的)(2)验证【例5-13】程序(杨辉三角形),回答题后问题。 语句“ym0 = 1 ; ymm = 1 ; ”实现的操作是 给第1列和对角线上的元素赋值为1 。 语句“if ( n = 0 | n = m ) ymn = 1 ; ”实现的操作是 作用同 。 语句“ymn = ym-1n-1 + ym-1n ; ”实现的操作是 给第1列和对角线上之外
8、的元素赋值 。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 ,请按行(第25行)、按列(第25列)求和及总和,然后以二维表形式输出数据及求和结果,数据由初始化方式提供。参照【例5-11】,参考程序如下:# include <stdio.h>main( ) int a5+15+1 = 1 , 11, 19 , 9 , 12 , 2 , 5 , 20 , 1 , 18 , 3 ,
9、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 += aij; ai5 = sum; for( j = 1 ; j <= 5 ; j+ ) /* 按列求和及总和 */ sum = 0 ; for( i = 1 ; i <= 4 ; i+ ) sum += aij; a5j = sum; /* 输出结果 */ fo
10、r( i = 0 ; i <= 5 ; i+ ) printf( " n " ) ; for( j = 0 ; j <= 5 ; j+ ) printf( " %4d " , aij ) ; (2)对一个m×n的矩阵,分别求两个对角线上的所有元素之和,然后输出这个矩阵及计算结果。矩阵的数据由键盘输入。参考程序:# include <stdio.h># define M 5# define N 5main( ) int aMN , i , j , sum1=0 , sum2=0 ; printf(" 请输入M行N
11、列的矩阵: n " ) ; for( i = 0 ; i < M ; i+ ) for( j = 0 ; j < N ; j + ) scanf( "%d" , &aij ) ; for( i = 0 ; i < M ; i+ ) sum1 += aii ; sum2 += aiM-1-i ; for( i = 0 ; i < M ; i+ ) for( j = 0 ; j < N ; j+ ) printf( " %4d " , aij ) ; printf( " n" ) ; pri
12、ntf( " sum1 = %d , sum2 = %d " , sum1 , sum2 ) ; (3)对一个m×n的矩阵,交换指定的两列元素。交换的两列列号由用户从键盘指定。输出交换前后的矩阵。矩阵的数据由初始化方式提供。参考程序:# include <stdio.h># define M 3# define N 5main( ) int aMN = 1 , 11, 19 , 15 , 2 , 2 , 5 , 20 , 14 , 7 , 3 , 4 , 16, 4 , 5 , i , j , m1 , m2 , t ; printf("输出
13、M行N列的矩阵: n " ) ; for( i = 0 ; i < M ; i+ ) for( j = 0 ; j < N ; j + ) printf( "%4d" , aij ) ; printf( " n" ) ; printf("请输入要交换的两列列号: " ) ;scanf( "%d,%d" , &m1 , &m2 ) ; for( i = 0 ; i < M ; i+ ) t = aim1-1 ; aim1-1 = aim2-1 ; aim2-1 = t ;
14、printf( " 输出交换列后的矩阵n" ) ; for( i = 0 ; i < M ; i+ ) for( j = 0 ; j < N ; j + ) printf( "%4d" , aij ) ; printf( " n" ) ; 实验任务3 字符串及数组综合程序设计二、实验内容1验证性实验 (1)验证【例5-17】程序(输出一个字符串),回答题后问题。 输入字符串使用语句: scanf( "%s" , s3 ) ; 。 输出字符串使用语句: printf( " %s " ,
15、 s3 ) ; 。 数组名s3代表 数组s3的首地址 。(2)验证【例5-21】程序(输入/输出多个字符串),回答题后问题。 输入字符串使用语句: gets( cityi ) ; 。 输出字符串使用语句: prints( " %s t " , cityi ) ; 。 cityi代表 二维数组city每行的首地址 。2设计性实验(1)从键盘输入自己的QQ号和密码,进行保存,并将密码加密(加密规则自定),然后将QQ号和加密后的密码输出。设加密规则为:按密码字母顺序依次加1,2,3参考程序:# include <stdio.h> # include <strin
16、g.h> # define M 10 /* M代表字符串的最大长度 */main( ) char userM , pass1M , pass2M ; int i ; printf( "请输入用户名:" ) ; gets( user ) ; printf( "请输入用户名密码:" ) ; gets( pass1) ; for( i = 0 ; i <strlen(pass1 ) ; i + ) pass2i = pass1i + i+1 ; pass2i= '0' ; puts( user ) ; puts( pass1 ) ;
17、 puts( pass2 ) ;(2)删除一个字符串中的所有空格字符,使非空格字符连续存放。(算法提示1:借助一个数组存放非空格字符。算法提示2:借助两个变量,在本字符串中进行删除、移动)算法1参考程序:# include <stdio.h> # include <string.h> # define M 40 /* M代表字符串的最大长度 */main( ) char s1M , s2M ; int i , n = 0 ; printf( "请输入带空格的字符串:" ) ; gets( s1 ) ; for( i = 0 ; i <strle
18、n(s1 ) ; i+ ) if ( s1i != ' ' ) s2n = s1i ; n+ ; s2n= '0' ; puts( s1 ) ; puts( s2 ) ; (3)期末班级成绩处理。设有学生5人,每人5科成绩,统计每个学生的总分、不及格课程门数,并按总分排名次,按下面格式输出排名后的成绩单。数据由初始化方式提供。学号 姓名科目1科目2科目3科目4科目5 总分 名次 不及格门数实现的程序可参考(P164165)习 题 5一、选择题1以下关于数组描述正确的是( C )。A数组的大小是固定的,但可以有不同类型的数组元素。B数组的大小是可变的,但所有数组元
19、素的类型必须相同。C数组的大小是固定的,所有数组元素的类型必须相同。D数组的大小是可变的,可以有不同类型的数组元素。2以下不能正确定义一维数组的选项是( D )。Aint a5 = 1 , 2 , 3 , 4 , 5 ; Bint a = 1 , 2 , 3 , 4 , 5 ;Cint a5 ; Dint n = 5 , an ;3设有“int i , a10 ; 且0< i < 10”,不能正确引用a数组元素的是( A )。Aa10 Bai Ca2 Da10-i4设有语句“int a10 = 1 , 2 , 3 , 4 , i = 0 ; ”,则ai + 1的值为( B )。A1
20、 B2 C3 D45若有“int a 8 = 1 , 3 , 5 , 7 , 9 , 11 ; ”,则a数组中的元素个数是( D )。 A不确定 B6 C7 D86若有“int a10 = 0 , 1 , 2 , 3 , 4 , 5 ; ”,则对 a数组元素的引用范围是( D )。Aa10 Ba1 a10 C0 5 Da0 a9 7设有语句“int a10 = 1 , 3 , 5 , 7 , 9 , 11 ; ”,则a1的值为( C )。A1 B2 C3 D48 设有“int a6 = 1 , 2 , 3 , 4 , i ; ”,不能正确输出a中所有元素值的语句是( A )。ABfo
21、r ( i = 0 ; i < 6 ; i+)printf(" %3d " , ai ) ;for ( i = 1; i < 6 ; i+)printf(" %d " , ai ) ; CDfor ( i = 1; i < 6 ; i+)printf(" %d " , ai-1 ) ; for ( i = 0 ; i <= 5 ; )printf(" %3d " , ai+ ) ; 9设有“int a 2 = 1 , 2 , 3 , 4 , 5 , 6 , 7 ; ”,则值为3的数组元素是(
22、 C )。Aa13 Ba21 Ca10 Da3110以下数组定义有错误的语句是( B )。Aint x 3 = 0 ; Bint x23 = l , 2 , 3 , 4 , 5 , 6 ; Cint x 3 = l , 2 , 3 , 4 , 5 , 6 ; Dint x23 = l , 2 , 3 , 4 , 5 , 6 ; 11若有“int x 2 = 1 , 3 , 5 , 7 , 9 , 11 , 13 ; ”,则x数组的行数为( C )。 A2 B3 C4 D无确定值12设有“int x34 = 1 , 2 , 3 ; ”,那么元素x11的取值是( A )。A0 B1 C2 D不确定
23、13执行下面程序后的输出结果是( D )。main( ) int i , b 3 = 9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 ;for ( i = 0 ; i < 3 ; i+ ) printf( " %d " , bii ) ; A9 8 7 B3 5 7 C9 6 3 D9 5 114以下不能正确初始化字符数组的选项是( D )。Achar str10 = "abcdef" ; Bchar str = " abcdef " ; Cchar str10 = "abc0def "
24、; Dchar str = abcdef ; 15设有“char str = "ABCDE" ; ”,则能够正确输出str中字符串的语句是( C )。Aprintf( " %c " , str0 ) ; Bprintf( " %s " , str0 ) ; Cprintf( " %s " , str ) ; Dprintf( " %s " , &str ) ; 16有两个字符数组x、y,则能够正确对x、y进行输入的语句是( B )。 Agets( x , y ) Bscanf( &quo
25、t; %s %s " , x , y ) ; Cscanf( " %s %s " , &x , &y ) ; Dgets( " x " ) ; gets( " y " ) ; 17下面程序运行后的输出结果是( C )。(注:请此题中p、q改为s1、s2)main( ) char s1 = 'a' , 'b' , 'c' , s2 = "abc" ; printf( " %d %d n " , sizeof ( s1 ) ,
26、 sizeof ( s2 ) ) ; A4 4 B3 3 C3 4 D4 318判断字符串a和b是否相等,应当使用( D )。Aif ( a = b ) Bif ( a = b ) Cif ( strcpy ( a , b ) ) Dif ( strcmp ( a , b ) )19以下程序的输出结果是( A )。main( ) char str20 = "hello0OK" ; printf( " %d , %s " , strlen ( str ) , str ) ; A5 , hello B9 , hello C5 , helloOK D7 , h
27、elloOK 1020设有“char s120= "abc", s220 = "123" ; ”,能将s2连接到s1后面的语句是( D )。 Astrcmp ( s1 , s2 ) ; Bstrcpy ( s1 , s2 ) ; Cs1 = s1 + s2 ; Dstrcat ( s1 , s2 ) ;二、阅读下面程序,写出运行结果,并回答题后问题1下面程序的输出结果为 s = 25 。程序实现的功能是:求x数组中第1,3,5,7,9个整数的和。main( ) int x10 = 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ,10
28、 , s = 0 , i ; for ( i = 0 ; i < 10 ; i+ , i+ ) s += xi ; printf(" s = %d n " , s ) ; 2下面程序的输出结果为 4 , 3 , 2 , 1 , 。程序实现的功能是:逆序输出x数组中的内容main( ) int x4 = 1 , 2 , 3 , 4 , i ; for ( i = 3 ; i >= 0 ; i- ) printf( " %d , " , x i ) ; 3下面程序的输出结果为 4 2 4 。程序实现的功能是:统计a数组中各种元素值的个数,即统计1
29、的个数,2的个数,3的个数.main( ) int a10 = 1 , 2 , 3 , 2 , 3 , 1 , 3 , 1 , 3 , 1 , n4 = 0 , i ; for ( i = 0 ; i < 10 ; i+ ) nai+; for ( i = 1 ; i <= 3 ; i+ ) printf(" %d " , ni ) ; 4下面程序的输出结果为 4 8 2 。程序实现的功能是:输出二维数组中每行第4列的元素。(注:此题初始化时多了数字,请去掉最后的3,4)main( ) int a34 = 1 , 2 , 3 , 4 , 5 , 6 , 7 ,
30、8 , 9 , 10 , 1 , 2 , i ; for ( i = 0 ; i < 3 ; i+ ) printf( " %d " , ai3 ) ;5下面程序的输出结果为 21 。程序实现的功能是: 求a数组第1列和第1行的累加和。main( ) int a33 = 1 , 2 , 9 , 3 , 4 , 8 , 5 , 6 , 7 , i , s = 0 ; for ( i = 0 ; i < 3 ; i+ ) s += ai0 + a0i ; printf( " %d n " , s ) ;6下面程序的输出结果为 cdefg c ab
31、cdefg 。main( ) char str10 = "abcdefg" ; printf( " %s t" , &str2 ) ; printf( " %c t" , str2 ) ; printf( " %s " , str ) ; 输出整个字符串使用语句 printf( " %s " , str ) ; 。 输出字符串中的一个字符,使用语句: printf( "%c" , str2 ) ; 。7下面程序的输出结果为 12+34 , abcdef abcdef
32、, 12+34 。main( ) char sa = "12+34" , sb = "abcdef " , sc10; printf(" %s , %s n" , sa , sb ) ; strcpy( sc , sa ) ; strcpy( sa , sb ) ; strcpy( sb , sc ) ; printf(" %s , %s n" , sa , sb ) ; 初始化时数组sa中存放的是 字符串12+340 ,sb中存
33、放的是 字符串abcdef0 。 程序实现的功能是 交换两个字符串,即 sa 和sb 中的内容 。三、程序设计题1随机产生并输出20个100以内不重复的整数。参考程序:# include "stdio.h"# include "stdlib.h" /* 函数rand( )的头文件 */# include "time.h" /* 函数time( )的头文件 */# define N 20main( ) int aN , i , j , x ; srand( ( unsigned )time ( NULL ) ) ; /* 随机
34、数种子数 */for( i = 0 ; i <20 ; i + ) do x = rand ( ) % 100 ; for ( j = 0 ; j < i ; j + ) if ( x = aj ) break ; if ( j>=i ) ai = x ; break ; while(1) ; for( i = 0 ; i <= N-1 ; i+ ) /* 输出*/ printf( " %5d" , ai ) ; printf( " n" ) ; 2把一个一维组数中 3 ,4 , 6 , 7 , 1 , 8 , 9 , 13 ,
35、2 , 5 , 11 , 14 的所有偶数剔除,保留奇数并连续存放在本数组中,输出剔除前、后组数内容,数据由初始化方式提供。参考程序:# include "stdio.h"main( ) int a12 = 3 ,4 , 6 , 7 , 1 , 8 , 9 , 13 , 2 , 5 , 11 , 14 , i , k ; for( i = 0 ; i < 12 ; i+ ) /* 输出剔除前的数组 */ printf( " %5d" , ai ) ; printf( " n" ) ; k =0 ; for( i = 0 ; i
36、< 12 ; i+ ) /* 剔除偶数 */ if ( ai%2=1 ) ak=ai ; k+ ; for( i = 0 ; i < k ; i+ ) /* 输出剔除后的数组 */ printf( " %5d" , ai ) ; 3随机产生20个100以内的整数,从键盘输入一个要查找的数据,若找到,输出整个数列,并输出查找到的位置(可能有多个);若没有找到,也输出整个数列,并给出一个未找到的信息。参考程序:# include "stdio.h"# include "stdlib.h" /* 函数rand( )的头文件 */
37、# include "time.h" /* 函数time( )的头文件 */main( ) int a20 , i , x , F = 0 ; srand( ( unsigned )time ( NULL ) ) ; for( i = 0 ; i <20 ; i + ) /*产生20个数 */ ai = rand ( ) % 100 ; printf( "请输入一个要找的数:" ) ; scanf("%d" , &x ) ; for( i = 0 ; i <20 ; i + ) printf( " %5d
38、" , ai ) ; printf( " n找到的位置是:" ) ; for( i = 0 ; i <20 ; i + ) /*找数据 */ if ( ai =x ) printf("%d , " , i+1 ) ; F = 1 ; if ( F = 0 ) printf(" n查无此数!n") ;4随机产生100个整数,找出其中的素数,统计出素数的个数,每行输出10个素数。参考程序:# include "stdio.h"# include "stdlib.h" /* 函数ran
39、d( )的头文件 */# include "time.h" /* 函数time( )的头文件 */# include "math.h" /* 函数time( )的头文件 */# define N 100main( ) int aN , bN= 0 , i , j , m= 0 , F ; srand( ( unsigned )time ( NULL ) ) ; for( i = 0 ; i <N ; i + ) /*产生20个数 */ ai = rand ( ) % 200 ; for( i = 0 ; i <N ; i + ) if ( (
40、 i )%20=0 ) printf( " n" ) ; printf( "%5d" , ai ) ; printf( " n" ) ;for( i = 0 ; i <N ; i + ) F = 1 ; for( j = 2 ; j <= sqrt(ai ) ; j + ) if ( ai%j=0 ) F = 0 ; break ; if ( F = 1 ) bm = ai ; m+ ; printf( "素数的个数是:%d , 素数是: n" , m ) ;for( i = 0 ; i <m ;
41、 i + ) printf( "%5d" , bi ) ; if ( (i+1)%10 = 0 ) printf( " n" ) ; 5在一个4×5的方阵中,找出每列中的最小元素及其所在位置。参考程序:# include <stdio.h>main( ) int a45 = 2 , -2 , 30 , 0 , 6 , 10 , 5 , -8 , -64 , 3 , 1 , 2 , 5 , 3, 7 , 9 , 2 , 5 , 8, 1 ; int i , j , row , col , min ; for( i = 0 ; i &l
42、t; 4 ; i+ ) /* 输出数组 */ for( j = 0 ; j < 5 ; j+ ) printf( "%4d " , aij ) ; printf( "n" ) ; for( j = 0 ; j < 5 ; j+ ) min = a0j ; row = 0 ; col = j ; for( i = 1 ; i < 4 ; i+ ) if ( min > aij ) min = aij ; row = i ; col =j ; printf( "第%d列的最小数是:%d , 位于第%d行n" , col +1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024股权抵押借款合同范本格式
- 2024商品买卖合同范本
- 2024年度甲方聘请乙方进行市场推广服务的合同
- 工厂用工合同协议书(2024年)
- 2024年建筑劳务分包主体结构合同
- 个人质押担保借款合同模板
- 2024年度金融服务与投资咨询合同
- 标准版工程居间合同格式
- 合法劳务施工协议书样式
- 精美施工合同模板
- 2024-2025学年初中九年级数学上册期中测试卷及答案(人教版)
- 电梯日管控、周排查、月调度内容表格
- 1+X数字营销技术应用题库
- 学校安全隐患排查整治表
- 房屋施工安全协议书
- 《福建省建筑安装工程费用定额》(2017版)正式版20176XXXX615
- 苏教版二年级(上)数学全册集体备课
- 《领导对下级工作表现的评价范文 》
- 城市绿地系统规划案例分析三亚
- 水肥一体化施工组织设计
- 浙江大学top期刊850种
评论
0/150
提交评论