第六章 利用数组处理批量数据

课程名称:C语言程序设计 总分:102 答题时长:100分钟 出卷人:王赛楠

、单项选择题:(共15题,15分)
1 在C语言中,引用数组元素时,其数组下标的数据类型不允许是_______。
整型常量
整型表达式
整型常量或整型表达式
任何类型的表达式
2 以下对一维整型数组a的定义,正确的是_______。
int a(10) ;
int n = 10 , a[n] ;
int n ;                      

scanf( "%d" , &n ) ;

int a[n] ; 

int a[10] ;
3 若有定义:int a[10] ;,则对a数组元素的正确引用是_______。
a[10]
a[3.5]
a(5)
a[10-10]
4 对定义 int a[10] = {6 , 7 , 8 , 9 , 10} ; 的正确理解是_______。  
将5个初值依次赋给a[1]--a[5] 
将5个初值依次赋给a[0]--a[4]
将5个初值依次赋给a[6]--a[10] 
因为数组长度与初值个数不相同,所以此语句不正确
5 以下对二维数组a的正确说明是_______。  
int a[3][ ];  
float a(3)(4);
double a[ ][4] ; 
float a(3,4);
6 若有定义: int a[3][4]; , 则对a数组元素的正确引用是_______。
a[3][4]
a[1,3]
a[1+1][0]
a(2)(1)
7 以下对二维数组a初始化正确的语句是_______。
int a[2][ ]={{0 , 1 , 2}, {3 , 4 , 5}};
int a[ ][3]={{0, 1, 2}, {3, 4, 5}};
int a[2][4]={{0, 1 , 2}, {3 , 4}, {5}}; 
int a[ ][3]={{0, 1, 2}, { }, {3, 4}};
8 对二维数组a进行如下初始化

int a[ ][3]={0 , 1 , 2 , 3 , 4 , 5};

则a[1][1]的值是_______。

0
3
4
1
9 下面程序段的运行结果是_______。

#include<stdio.h>

int main( )  

{

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

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

printf( "%2d" , x[i][2-i] ) ;

    return 0 ;

}

1 5 9 
1 4 7
3 5 7
3 6 9
10 以下对数组s的初始化,错误的是_______。
char s[5] = { "abc" } ; 
char s[5] = { 'a' , 'b' , 'c' } ;
char s[5] = "" ; 
char s[5] = "abcde" ;
11 对两个数组a和b进行如下初始化,

char a[ ] = "ABCDEF" ;

char b[ ] = { 'A' , 'B' , 'C' , 'D' , 'E' , 'F' } ;

则以下叙述正确的是_______。

a和b数组完全相同
a与b长度相同
a的长度比b短
a的长度比b长
12 有两个字符数组a,b,则以下正确的输入语句是_______。
gets( a , b ) ; 
scanf( "%s,%s" , a , b ) ;
scanf( "%s%s" , &a , &b ) ;
gets( "a" ) , gets( "b" ) ;
13 下面程序段的运行结果是_______。  

 

char a[7] = "abcdef" ;

char b[4] = "ABC" ;

strcpy( a , b ) ;

printf( "%c\n" , a[5] ) ;

□(□表示一个空格) 
\0
e
f
14 判断字符串s1是否大于字符串s2,应当使用_______。
if( s1>s2 )
if( strcmp( s1 , s2 ) )
if( strcpy( s1 , s2 ) )
if( strcmp( s1 , s2 )>0 )
15 若有定义:char s[100] = "hello" ;,下列函数调用语句中,不正确的是_______。
strlen( strcpy( s , "well" ) ) ; 
strcat( s , "!" ) ;
puts( puts( "hello" ) ) ; 
!strcmp( "" , s ) ;
编程题:(共4题,32分)
1 编写一个程序,将输入的数据插入到一个已按升序排好的数组中,要求插入后的数组仍然按升序排列。
2 编写一个程序,计算5×5的矩阵的主对角线之和。

例如:

其主对角线之和为60。

3 编写一个程序,将两个字符串连接起来。不能使用strcat函数。
4 编写一个程序,计算字符串的实际长度。不能使用strlen函数。
程序阅读题:(共7题,35分)
1 下面程序的运行结果是_______。

#include<stdio.h>

int main( )

{

       inti , k , a[10] , p[3] ;

       k = 5 ;

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

              a[i] = i ;

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

              p[i] = a[i*i] ;

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

              k = p[i] * 2 ;

       printf( "%d\n" , k ) ;

return 0 ;

}

2 下面程序的运行结果是_______。

#include<stdio.h>

int main( )

{

       inti ,x[10] = {2 , 3 , 0 , 3 , 0 , 2 , 3 , 2 , 1 , 3} ,y[4] = {0} ;

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

              y[x[i]]++ ;

       printf( "%d\n" , y[3] ) ;

return 0 ;

}

3 下面程序的运行结果是_______。

#include<stdio.h>

int main( ) 

{

       int i , j , a[3][3] = {0} ;

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

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

                     a[i][j] = i * j ;

       printf( "%d,%d\n" , a[1][2] , a[2][1] ) ;

return 0 ;

}

4 下面程序的运行结果是_______。

#include<stdio.h>

int main( )

{

       int a[3][3] = {0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8} ;

       int i , s = 0 ;

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

              s += a[i][1] ;

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

return 0 ;

}

5 下面程序的运行结果是_______。

#include<stdio.h>

int main( )

{

       int i ;

       char a[ ]= "Time" , b[ ] = "Tom" ;

       for( i = 0 ; a[i] != '\0' && b[i] != '\0' ; i++ )

              if( a[i] == b[i] )

                     if( a[i] >= 'a' && a[i] <= 'z' )

                            printf( "%c" , a[i] - 32 ) ;

                     else printf( "%c" , a[i] + 32 );

              else printf( "*" ) ;

    return 0 ;

}

6 下面程序的运行结果是_______。

#include<stdio.h>

int main()

{

       char a[ ]= "morning" , t ;

       int i , j = 0 ;

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

              if( a[j]<a[i] )

                     j = i ;

       t = a[j] ;

       a[j] = a[7] ;

       a[7] = a[j] ;

       puts(a) ;

return 0 ;

}

7 下面程序的运行结果是_______。

#include<stdio.h>

#include<string.h>

int main( )

{

       char  a[5][10] = {"one" , "two" , "three" , "four" , "five"} , str[10] ;

inti , j ;

char  t ;

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

              for(j = i + 1 ; j < 5 ; j++ )

                     if( a[i][0] > a[j][0] )

                     {    

                            t = a[i][0] ;

                            a[i][0] = a[j][0] ;

                            a[j][0] = t ; 

                     }

       strcpy(str , a[1] ) ;

       puts(str ) ;

       return 0 ;

}

程序完善题:(共4题,20分)
1 下面程序的功能是输入5个整数,找出最大数和最小数所在的位置,并把二者对调,然后输出调整后的5个数。请填空。

#include<stdio.h>

int main( )

{

       int a[5], max, min, i, j = 0 , k = 0 ;

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

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

       min = a[0] ;

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

              if( a[i] < min )

              {

                     min = a[i] ;

                     _______;

              }

       max = a[0] ;

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

              if( a[i] > max )

              {

                     max = a[i] ;

                     _______;

              }

       _______;

       _______;

       printf( "\nThe position of min is:%3d\n" , k ) ;

       printf( "\nThe position of max is:%3d\n" , j ) ;

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

              printf( "%5d" , a[i] ) ;

return 0 ;

}

2 下面程序的功能是:从键盘上输入10个学生的成绩,统计计算出平均成绩,并输出低于平均分的学生成绩。请填空。

#include<stdio.h>

int main( ) 

{

       int score[10], n=0,i ;

       float sum = 0.0 , avg;

       printf( "pleasr enter :\n" ) ;

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

       {

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

              _______;

       }

       avg=sum/10;

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

              if(_______)

                     printf("%3d",score[i]);

return 0 ;

}

3 下面程序的功能是:将数组a[3][4]中的元素以3行4列的格式输出,然后按行求和并且存储到数组s中。请填空。

#include<stdio.h>

int main( )

{

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

       int s[3] = {0} ;

       inti , j ;

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

       {

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

              {

                     printf( "%4d" , a[i][j] ) ;

                     _______;

              }

              _______;

       }

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

              printf( "%d\n" , s[i] ) ;

return 0 ;

}

4 下面程序的功能是:将字符串str的内容倒过来存放。请填空。

#include<stdio.h>

#include<string.h>

int main( )

{

       charstr[ ] = "abcdefg" ;

       inti , j , k ;

       _______;

       for(i= 0 ; i< j ; i++ , j-- )

       {

              k = str[i] ;

              str[i] = str[j] ;

              _______;

       }

       printf( "%s\n" , str ) ;

return 0 ;

}