一、选择题
1.以下为一维整型数组a的正确说明是(    )
A.int a(10);                              B.int n=10,a[n];
C.int n;                                  D.#define SIZE 10;
  scanf("%d",&n);                            int a[SIZE];
  int a[n];
【答案】D
【说明】D选项符合语法格式,数组定义的长度不能为变量。
2.以下对二维数组a的正确说明是(    )
A.int a[3][];            B.float a(3,4);        C.double a[1][4];      D.float a(3)(4);
【答案】C
【说明】C选项符合语法格。
3.若二维数组am列,则计算任一元素a[i][j]在数组中位置的公式为(    )(假设a[0][0]位于数组的第一个位置上)。
A.i*m+j            B.j*m+i              C.i*m+j-1            D.i*m+j+1
【答案】D
【说明】D是公式。
4.若二维数组a有m列,则在a[i][j]前的元素个数为(    )
A.j*m+i              B.i*m+j              C.i*m+j-1            D.i*m+j+1
【答案】B
【说明】根据上题可知。
5.若有以下程序段:
int a[]={4,0,2,3,1},i,j,t;
for(i=1; i<5; i++)
{ t=a[i]; j=i-1;
  while(j>=0&&t>a[j])
  {a[j+1]=a[j]; j--;}
  A[j+1]=t;
}
则该程序段的功能是(    )
A.对数组a进行插入排序(升序)          B.对数组a进行插入排序(降序)
C.对数组a进行选择排序(升序)          D.对数组a进行选择排序(降序)
【答案】B
【说明】插入法排序的基本思路是将一个数插入到前面已排好序的有序表中,从而得到一个新的、个数增1的有序排列。
6.有两个字符数组a、b,则以下正确的输入语句是(    )
A.gets(a,b);                              B.scanf("%s%s",a,b);
C.scanf("%s%s",&a,&b);                  D.gets("a"),gets("b");
【答案】B
【说明】B选项中数组名a、b前不能加地址运算符。gets函数的参数要求是一个字符数组名或一个字符型指针变量。
7.下面程序段的运行结果是(    )
char a[7]="abcdef";
char b[4]="ABC";
strcpy(a,b);
printf("%c",a[5]);
A.空格              B.\0                C.e                D.f
【答案】D
【说明】strcpy函数在复制中只将b数组的字符串"ABC"覆盖a数组中前4个字符,后面的字符不变,因此a[5]元素中的字符还是f。其他选项均不对。
8.判断字符串s1是否大于字符串s2,应当使用(    )
A.if(s1>s2)                                B.if(strcmp(s1,s2))
C.if(strcmp(s2,s1)>0)                        D.if(strcmp(s1,s2)>0)
【答案】D。
【说明】两个字符串的大小比较应使用strcmp函数,且比较是自左至右逐个字符比较的,因此只有选项D正确。其他选项均不对。
9.下面程序的功能是从键盘输入一行字符,统计其中有多少个单词,单词之间用空格分隔,请选择填空(    )。
#include <stdio.h>
main()
{ char s[80],c1,c2=' ';
  int i=0,num=0;
  gets(s);
  while(s[i]!='\0')
  { c1=s[i];
    if(i==0)c2=' ';
    else c2=s[i-1];
    if(        )num++ ;i++;
  }
  printf("There are %d words.\n",num);
}
A.c1==' '&&c2==' '                        B.c1!= ' ' && c2==' '
C.c1==' ' && c2!= ' '                      D.c1!= ' '&&c2!= ' '
【答案】B
【说明】统计单词个数的基本思路是:如果前一个是空格,后一个符号为非空格字符时,说明出现了一个新单词,因此B是正确的。其他选项均不对。
10.下面程序的运行结果是(    )
#include <stdio.h>
main()
{ char str[]="SSSWLIA",c;
  int k;
  for(k=2;(c=str[k])!= '\0';k++)
  { switch(C.
    { case 'I':++k;break;
      case 'L':continue;
      default:putchar(c);continue;
    }
    putchar('*');
  }
}
A.SSW*            B.SW*              C.SW*A            D.SW
【答案】B
【说明】注意continue与break两语句直到的作用,for循环在第四次时被强行退出,只有答案B正确。其他选项均不对。
11.下面程序段执行后,s的值是(    )
static char ch[]="600";
int a,s=0;
for(a=0;ch[a]>='0' && ch[a]<='9';a++)
    s=10*s+ch[a]-'0';
A.600                B.6                C.0                D.出错
【答案】A。
【说明】注意“ch[a]-'0'”将数字符号转换成了数字,因此只有A对。其他选项均不对。
12.有如下程序,其运行结果是(    )
main()
{ int n[3], i,j,k;
  for(i=0;i<3;i++)
    n[i]=0;
    k=2;
  for(i=0;i<k;i++)
  for(j=0;j<k;j++)
    n[j]=n[i]+1;
  printf("%d\n",n[k]);
}
A.2                B.1                C.0                D.3
【答案】C
【说明】因为在程序中j的值始终是小于k的,所以n[k]没有改变,还是0,答案为C。其他选项均不对。
二、填空题
1.若有定义:double x[3][5];则x数组中行下标的下限为        列下标的上限为       
【答案】2  4
【说明】数组元素的下标是从0开始的。
2.数组在内存中占一片连续的存储区,由        代表它的首地址。
【答案】数组名
【说明】数组名代表的是该数组在内存中的起始地址。
3.若有以下程序段:
char str[]="xy\n\012\\\n";printf("%d",strlen(str));
执行后的输出结果是     
【答案】6
【说明】注意转义字符。
4.下面程序以每行4个数据的形式输出a数组,请填空。
#define N  20
main()
{ int a[N],i;
  for(i=0;i<N;i++) scanf("%d",&a[i]);
    for(i=0;i<N;i++)
scanf输入整型数组    { if(        )printf("\n");
      printf("%3d",a[i]);
    }
  printf("\n");
}
【答案】i%4==0
【说明】由题意可知,每输出4个数,程序自动换行。
5.下面程序可求出矩阵a的主对角线上的元素之和,请填空。
main()
{ int a[3][3]={1,3,5,7,9,11,13,15,17},sum=0,i,j;
  for(i=0;i<3;i++)
    for(j=0;j<3;j++)
        if(        )sum=sum+        ;
    printf("sum=%d\n",sum);
}
【答案】i==j  a[i][j]
【说明】显然对于矩阵a,主对角线上的元素必定是行号列标相等,将满足这些条件的元素求和。
6.当从键盘输入18,并按【Enter】键后,下面程序的运行结果是       
main()
{ int x,y,i,a[8],j,u,v;
  scanf("%d",&x);
  y=x;i=0;
  do
  { u=y/2;a[i]=y%2; i++;y=u;
  }while(y>=1);
  for(j=i-1;j>=0;j--)
    printf("%d",a[j]);
}
【答案】10010
【说明】注意运算符“/”的两个运算数如果是整数,那么商取整数;运算符“%”是取余。
7.下面程序用插入法对数组a进行降序排序,请填空。
main()
{ int a[5]={4,7,2,5,1},i,j,m;
  for(i=1;i<5;i++)
  {
    m=a[i];j=        ;
    while(j>=0&&m>a[j])
    {         ; j--;}
            =m;
  }
  for(i=0;i<5;i++)
    printf("%d",a[i]);
    printf("\n");
}
【答案】i-1  a[j+1]=a[j]  a[j+1]
【说明】插入法排序的基本思路是将一个数插入到前面已排好序的有序表中,从而得到一个新的、个数增1的有序排列。
8.下面程序的功能是在3个字符串中出最小的,请填空。
#include <stdio.h>
#include <string.h>
main()
{ char s[20],str[3][20];
  int i;
  for(i=0;i<3;i++)gets(str[i]);
    strcpy(s,        );
  if(strcmp(str[1],s)<0)strcpy(s,str[1]);

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。