数组习
一、选择题
1.(1) int a[4]={5,3,8,9};其中a[3]的值为( )。
A. 5
B. 3
C. 8
D. 9
2.以下4 个数组定义中,( )是错误的。
A. int a[7];
B. #define N 5 long b[N];
C. char c[5];
D. int
n,d[n];
3.对字符数组进行初始化,( )形式是错误。
A. char c1[ ]={'1', '2', '3'};
B. char c2[ ]=123;
C. char c3[ ]={ '1', '2', '3',
'\0'}; D. char c4[ ]="123";
4.在数组中,数组名
示( )。
A. 数组第1 个元素的首地址
B.数组第2 个元素的首地址
C. 数组所有元素的首地址
D.数组最后1 个元素的首地址
5.若有以下说明,则数值为4 的表达式是( )。
int a[12] ={1,2,3,4,5,6,7,8,9,10,11,12}; cha r c=?a?, d, g ;
A. a[g-c]
B. a[4]
C. a['d'-'c']
D. a['d'-c]
6.合法的数组定义是( )。
A. char a[ ]= "string " ;
B. int a[5] ={0,1,2,3,4,5};
C. char a= "string " ;
D. char a[ ]={0,1,2,3,4,5}
7.数组定义为int a[3][2]={1,2,3,4,5,6},值为6的数组元素是( )。
A. a[3][2]
B. a[2][1]
C. a[1][2]
D. a[2][3]
8.下面的程序中哪一行有错误( )。
#include
main()
{
float array[5]={0.0}; //第A行
int i;
for(i=0;i<5;i++)
scanf("%f",&array[i]);
for(i=1;i<5;i++)
array[0]=array[0]+array[i];//第B行
printf("%f\n",array[0]); //第C行
}
A. 第A行
B. 第B行
C. 第C行
D. 没有
9.根据以下说明,写出正确的说明语句:men是一个有10个整型元素的数组。
step是一个有4个实型元素的数组,元素值分别为1.9, -2.33, 0, 20.6。grid是一个二维数组,共有4行,10列整型元素。
10.写出以下初始化数组的长度:①int chn[3];数组chn的长度为___。
②float isa[]={1.0,2.0,3.0,4.0,5.0};数组isa的长度为___。
③int doom[8];数组doom的长度为___。
④float pci[4][2];数组pci的长度为___。
⑤int ast[3][3];数组ast的长度为___。
⑥int att[3][4];数组att的长度为___。
⑦float dell[][3]={{1,4,7},{2,5},{3,6,9}};数组dell的长度为___。
(提示:在VC++中int占多少字节?float占多少字节?)
二阅读程序,分析程序的功能
(1)
#include
void main( )
{
char s[80];
int i ;
for(i=0; i<80; i++)
{
s[i]=getchar( );
if(s[i]= ='\n') break;
}
s[i]='\0'; i=0;
while(s[i]) putchar(s[i++]);
putchar(…\n?);
}
(2) 阅读程序,写出运行结果
#include
void main( )
{
int a[6]={12,4,17,25,27,16},b[6]={27,13,4,25,23,16},i,j;
for(i=0;i<6;i++)
{
for(j=0;j<6;j++) if(a[i]= =b[j])break;
if(j<6) printf("%d ",a[i]);
}
printf("\n");
}
(3)读懂下面的程序并填空。
void main()
{
char str[80];
int i=0;
gets(str);
while(str[i]!=0)
{
if(str[i]>='a'&&str<='z')
str[i]-=32;
i++;
}
puts(str);
}
程序运行时如果输入upcase, 屏幕显示
程序运行时如果输入Aa1Bb2Cc3, 屏幕显示
三、程序填空题
(1)以下程序以每行10个数据的形式输出a 数组,请填空。void main( )
{
int a[50],i;
printf("输入50个整数:");
for(i=0; i<50; i++) scanf( "%d", 【1】);
for(i=1; i<=50; i++)
{ if( 【2】)
printf( "%3d\n" , 【3】) ;
printf( "%3d",a[i-1]);
}
}
(2)下面程序的功能是输出数组s 中最大元素的下标,请填空。
void main( )
{
int k, p;
int s[ ]={1,-9,7,2,-10,3};
for(p=0,k=p; p<6; p++)
if(s[p]>s[k]) ;
printf("%d\n" ,k);
}
(3)这个程序输入了20个数存放在一个数组中,并且输出其中最大者与最小者、20个数的和及它们的平均值。请填空。
void main()
{
int array 【1】;
int max,min,average,sum=0;
int i;
for(i=0;i< 【2】;i++)
{
printf("请输入第%d个数:",i+1);
scanf("%d", 【3】);
}
max=array[0];
min=array[0];
for(i=0;i<= 【4】;i++)
{
if(maxarray[i])
【6】
sum= 【7】;
}
average = 【8】;
printf("20个数中最大值是%d,",max);
printf("最小值是%d,",min);
printf("和是%d,",sum);
printf("平均值是%d.\n",average);
}
数复习(适合7.1节~7.7节)
一.选择题
1.以下正确的函数定义形式是:()
a) double fun(int x,int y)
b) double fun(int x;int y)
c) double fun(int x,int y);
d) double fun(int x,y);
2.以下正确的函数形式是:()
a) double fun(int x,int y)
{ z=x+y; return z; }
b) fun(int x,y)
{ int z; return z; }
c) fun(x,y)
{ int x,y; double z; z=x+y; return z; }
d) double fun(int x,int y)
{ double z; z=x+y; return z; }
3.以下正确的说法是:()
a) 实参和与其对应的形参各占用独立的存储单元
b) 实参和与其对应的形参共占用一个存储单元
c) 只有当实参和与其对应的形参同名时才共占用存储单元
d) 形参是虚拟的,不占用存储单元
4.以下程序有语法性错误,有关错误原因的正确说法是:()
main()
{ int G=5,k;
void prt_char();
……
k=prt_char(G);
……
}
a) 语句void prt_char();有错,它是函数调用语句,不能用void说明
b) 变量名不能使用大写字母
c) 函数说明和函数调用语句之间有矛盾
d) 函数名不能使用下划线
5.若使用一维数组名作函数实参,则以下正确的说法是:()
a) 必须在主调函数中说明此数组的大小
b) 实参数组类型与形参数组类型可以不匹配
c) 在被调函数中,不需要考虑形参数组的大小
d) 实参数组名与形参数组名必须一致
6.C语言规定,函数返回值的类型是:()
a) return语句中的表达式类型所决定
b) 调用该函数时的主调函数类型所决定
c) 调用该函数时系统临时决定
d) 在定义该函数时所指定的函数类型所决定
7.折半查找法的思路是:先确定待查元素的范围,将其分成两半,然后测试位于中间点元素的值。如果该待查元素的值大于中间点元素,就缩小待查范围,只测试中点之后的元素;反之,测试中点之前的元素,测试方法同前。函数binary 的作用是应用折半查找法从存有10个整数的a数组中对关键字m进行查找,若找到,返回其下标值;若没有找到,返回-1。请选择填空。
int binary(int a[10],int m)
{ int low=0,high=9,mid;
while(low<=high)
{ mid=(low+high)/2;
if(ma[mid]) 【2】;
else return(mid);
}
return(-1);
}
1 2 3 4 5 6 7 8 9 10 3
Low=0,high=9 mid=4
5<8 low=mid+1
5>3 high=mid-1
【1】是:()
a) high=mid-1 b) low=mid+1
c) high=mid+1 d) low=mid-1
【2】是:()
a) high=mid-1 b)low=mid+1
c) high=mid+1 d) low=mid-1
二、填空题
1.以下程序的输出结果是
main()
{ int i=2,x=5,j=7;
fun(j,6);
printf(“i=%d;j=%d;x=%d\n”,i,j,x);
}
fun(int i,int j)
{ int x=7;
printf(“i=%d;j=%d;x=%d\n”,i,j,x);
}
2.以下程序的输出结果是_______。
main()
{ increment();
increment();
increment();
}
increment()
{ int x=0;
x+=1;
printf(“%d”,x);
}
3.若输入一个整数10,以下程序的输出结果是___ ____。
main()
{ int a,e[10],c,i=0;
prin tf(“输入一整数\n”);
scanf(“%d”,&a);
while(a!=0)
{ c=sub(a);
a=a/2;
e[i]=c;
i++;
}
for(;i>0;i--) printf(“%d”,e[i-1]);
}
sub(int a)
{ int c;
c=a%2;
return c;
}
4.下面程序的功能是【1】,运行结果是【2】。
long fib(int g)
{ switch(g)
{ case 0: return 0;
case 1:
case 2: return 1;
}
return(fib(g-1)+fib(g-2));
}
main()
{ long k;
k=fib(7);
printf(“k=%d\n”,k);
}
5.以下程序的运行结果是__ _。
#include
f(int a[])
{ int i=0;
while(a[i]<=10)
{ printf(“%d”,a[i]);
i++;
}
}
main()
{ int a[]={1,5,10,9,11,7};
f(a+1);
}
6.以下程序的运行结果是__ _。
main()
{ int a[3][3]={1,3,5,7,9,11,13,15,17}; int sum;
sum=func(a);
printf(“\nsum=%d\n”,sum);
}
func(int a[][3])
{ int i,j,sum=0;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{ a[i][j]=i+j;
if(i==j) sum=sum+a[i][j];
}
return(sum);
}
函数复习(7.8~7.10)
1.在一个C源程序文件中,若要定义一个只允许本源文件中所
有函数使用的全局变量,则该变量需要使用的存储类别是:(D )
a) extern b) register c) auto d) static
2.以下不正确的说法是:(D)
a) 在不同函数中可以使用相同名字的变量
b) 形式参数是局部变量
c) 在函数内定义的变量只在本函数范围内有效
d) 在函数内的复合语句中定义的变量在本函数范围内有效
3.若有以下程序:
#include
void num()
{ extern int x,y;
int a=15,b=10;
x=a-b; 5
y=a+b; 25
}
int x,y;
main()
{ int a=7,b=5;
x=a+b; 12
y=a-b; 2
num();
printf(“%d,%d\n”,x,y);
}
程序的正确运行结果是:()
a) 12,2 b) 不确定
c) 5,25 d) 1,12
4.若有以下程序:
main()
{ int a=2,i;
for(i=0;i<3;i++) printf(“%4d”,f(a));
}
f(int a)
{ int b=0;
static int c=3;
b++; c++; B=1,C=6
return(a+b+c);
}
程序的正确运行结果是:()
a) 7 7 7 b) 7 10 13
c) 7 9 11 d) 7 8 9
5.若有以下程序:
#include
main()
{ int k=4,m=1,p;
p=func(k,m); printf(“%d”,p);
p=func(k,m); printf(“%d\n”,p);
}
func(int a,int b)
{ static int m=0,i=2;
i+=m+1; i=2+1=3 i=3+8+1=12
m=i+a+b; m=3+4+1=8 m=12+4+1=17
return(m);
}
程序的正确运行结果是:()
a)8,17 b) 8,16
c) 8,20 d) 8,8
6.以下程序的运行结果是_ 10,20, 40,40
_。
int x1=30,x2=40;
main()
{ int x3=10,x4=20;
sub(x3,x4);
sub(x2,x1); 40,10
printf(“%d,%d,%d,%d\n”,x3,x4,x1,x2);
}
sub(int x,int y)
{ x1=x; x1=40
x=y; x=20
y=x1; y=10
}