全国计算机等级考试二级C语言之一维数组与指针1
一、选择题
(1)有以下程序
main()
{ int a[10]={1,2,3,4,5,6,7,8,9,10}, *p=&a[3], *q=p+2;
printf("%d\n", *p + *q);
}
程序运行后的输出结果是
A)16
B)10
C)8
D)6
(2)有以下程序
main()
{ int a[]={2,4,6,8,10}, y=0, x, *p;
p=&a[1];
for(x= 1; x<3; x++) y += p[x];
printf("%d\n",y);
}
程序运行后的输出结果是
A)10
B)11
C)14
D)15
(3)有以下程序
void sort(int a[], int n)
{ int i, j ,t;
for (i=0; i<n-1; i++)
for (j=i+1; j<n; j++)
if (a[i]<a[j]){ t=a[i]; a[i]=a[j]; a[j]=t; }
}
main()
{ int aa[10]={1,2,3,4,5,6,7,8,9,10}, i;
sort(aa+2, 5);
for (i=0; i<10; i++) printf("%d,",aa[i]);
printf("\n");
}
程序运行后的输出结果是
A)1,2,3,4,5,6,7,8,9,10, B)1,2,7,6,3,4,5,8,9,10,
C)1,2,7,6,5,4,3,8,9,10, D)1,2,9,8,7,6,5,4,3,10,
(4)有以下程序
void sum(int a[])
{ a[0] = a[-1]+a[1]; }
main()
{ int a[10]={1,2,3,4,5,6,7,8,9,10};
sum(&a[2]);
printf("%d\n", a[2]);
}
程序运行后的输出结果是
A)6
B)7
C)5
D)8
(5)有以下程序
void swap1(int c0[], int c1[])
{ int t ;
t=c0[0]; c0[0]=c1[0]; c1[0]=t;
}
void swap2(int *c0, int *c1)
{ int t;
t=*c0; *c0=*c1; *c1=t;
}
main()
{ int a[2]={3,5}, b[2]={3,5};
swap1(a, a+1); swap2(&b[0], &b[1]);
printf("%d %d %d %d\n",a[0],a[1],b[0],b[1]);
}
程序运行后的输出结果是
A)3 5 5 3
B)5 3 3 5
C)3 5 3 5
D)5 3 5 3
(6)有以下程序
main()
{
int p[8]={11,12,13,14,15,16,17,18},i=0,j=0;
while(i++<7) if(p[i]%2) j+=p[i];
printf("%d\n",j);
}
程序运行后的输出结果是
A)42
B)45
C)56
D)60
(7)有以下程序
void f(int *x,int *y)
{ int t;
t=*x;*x=*y;*y=t;
}
main()
{ int a[8]={1,2,3,4,5,6,7,8},i,*p,*q;
p=a;q=&a[7];
while(p<q)
{
f(p,q);
p++;
q--;
}
for(i=0;i<8;i++)
printf("%d,",a[i]);
}
程序运行后的输出结果是
A)8,2,3,4,5,6,7,1,
B)5,6,7,8,1,2,3,4,
C)1,2,3,4,5,6,7,8,
D)8,7,6,5,4,3,2,1,
(8)以下叙述中错误的是
A)对于double类型数组,不可以直接用数组名对数组进行整体输入或输出
B)数组名代表的是数组所占存储区的首地址,其值不可改变
C)当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息
D)可以通过赋初值的方式确定数组元素的个数
(9)有以下程序
#define N 20
fun(int a[],int n,int m)
{ int i,j;
for(i=m;i>=n;i--)
a[i+1]=a[i];
}
main()
{
int i,a[N]={1,2,3,4,5,6,7,8,9,10};
fun(a,2,9);
for(i=0;i<5;i++)
printf("%d",a[i]);
}
程序运行后的输出结果是
A)10234
B)12344
C)12334
D)12234
(10)有以下程序
prt(int *m,int n)
{
int i;
for(i=0;i<n;i++)
m[i]++;
}
main()
{
int a[]={1,2,3,4,5},i;
prt(a,5);
for(i=0;i<5;i++)
printf("%d,",a[i]);
}
程序运行后的输出结果是:
A)1,2,3,4,5,
B)2,3,4,5,6,
C)3,4,5,6,7,
D)2,3,4,5,1,
(11)有以下程序
main()
{ int a[]={1,2,3,4,5,6,7,8,9,0},*p;
for(p=a;p<a+10;p++)
printf("%d,",*p);
}
程序运行后的输出结果是
A)1,2,3,4,5,6,7,8,9,0,
B)2,3,4,5,6,7,8,9,10,1,
C)0,1,2,3,4,5,6,7,8,9,
D)1,1,1,1,1,1,1,1,1,,1,
(12) 有以下程序
int f(int a)
{ return a%2; }
main()
{ int s[8]={1,3,5,2,4,6},i,d=0;
for (i=0;f(s[i]);i++) d+=s[i];
printf("%d\n",d);
}
程序运行后的输出结果是
A) 9
B) 11
C) 19
D) 21
(13) 设有定义语句
int x[6]={2,4,6,8,5,7},*p=x,i;
要求依次输出x数组6个元素中的值,不能完成此操作的语句是
A) for(i=0;i<6;i++) printf("%2d",*(p++));
B) for(i=0;i<6;i++) printf("%2d",*(p+i));
C) for(i=0;i<6;i++) printf("%2d",*p++);
D) for(i=0;i<6;i++) printf("%2d",(*p)++);
(14) 有以下程序
#include <stdio.h>
main()
{int a[]={1,2,3,4,5,6,7,8,9,10,11,12,},*p=a+5,*q=NULL;
*q=*(p+5);
printf("%d %d\n",*p,*q);
}
程序运行后的输出结果是
A) 运行后报错
B) 6 6
C) 6 11
D) 5 10
(15) 已有定义:int i,a[10],*p;,则合法的赋值语句是
A) p=100;
B) p=a[5];
C) p=a[2]+2;
D) p=a+2;
(16) 有以下程序
main()
{ int x[]={1,3,5,7,2,4,6,0},i,j,k;
for(i=0;i<3;i++)
for (j=2;j>=i;j--)
if(x[j+1]>x[j]){ k=x[j];x[j]=x[j+1];x[j+1]=k;}
for(i=0;i<3;i++)
for(j=4;j<7-i;j++)
if(x[j+1]>x[j]){ k=x[j];x[j]=x[j+1];x[j+1]=k;}
for (i=0;i<3;i++)
for(j=4;j<7-i;j++)
if(x[j]>x[j+1]){ k=x[j];x[j]=x[j+1];x[j+1]=k;}
for (i=0;i<8;i++) printf("%d",x[i]);
printf("\n");
}
程序运行后的输出结果是:
A) 75310246
B) 01234567
C) 76310462
D) 13570246
(17) 有以下程序段
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b;
b=p[5];
b中的值是
A) 5
B) 6
C) 8
D) 9
(18) 有以下程序
void swap1(int c[])
{ int t;
t=c[0];c[0]=c[1];c[1]=t;
}
void swap2(int c0,int c1)
{ int t;
t=c0;c0=c1;c1=t;
}
main( )
{ int a[2]={3,5},b[2]={3,5};
swap1(A) ; swap2(b[0],b[1]);
printf(“%d %d %d %d\n”,a[0],a[1],b[0],b[1]);
}
其输出结果是
A) 5 3 5 3
B) 5 3 3 5
C) 3 5 3 5
D) 3 5 5 3
(19) 有以下程序
void sum(int *A)
{ a[0]=a[1];}
main( )
{ int aa[10]={1,2,3,4,5,6,7,8,9,10},i;
for(i=2;i>=0;i--) &nb
sp; sum(&aa[i]);
printf(“%d\n”,aa[0]);
}
执行后的输出结果是
A) 4
B) 3
C) 2
D) 1
(20) 有以下程序
void sort(int a[],int n)
{ int i,j,t;
for(i=0;i<n-1;i+=2)
for(j=i+2;j<n;j+=2)
if(a[i]<a[j]) { t=a[i];a[i]=a[j];a[j]=t;}
}
main()
{ int aa[10]={1,2,3,4,5,6,7,8,9,10},i;
sort(aa,10);
for(i=0;i<10;i++) printf(“%d”,aa[i]);
printf(“\n”);
}
其输出结果是
A) 1,2,3,4,5,6,7,8,9,10,
B) 10,9,8,7,6,5,4,3,2,1,
C) 9,2,7,4,5,6,3,8,1,10,
D) 1,10,3,8,5,6,7,4,9,2,
(21) 以下能正确定义一维数组的选项是
A) int num []; B) #define N 100
Int num [N];
C) int num[0..100]; D) int N=100;
int num[N];
(22) 有以下程序
main()
{ int p[7]={11,13,14,15,16,17,18},i=0,k=0;
while(i<7&&p[i]%2){k=k+p[i];i++;}
printf("%d\n",k);
}
执行后输出结果是
A) 58
B) 56
C) 45
D) 24
(23) 有以下程序
main()
{ int x[8]={8,7,6,5,0,0},*s;
s=x+3
printf("%d\n",s[2]);
}
执行后输出结果是
A) 随机值
B) 0
C) 5
D) 6
(24) 以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。
#define N 10
void arrin(int x[N])
{ int i=0;
while(i<N)
scanf("%d", );
}
在下划线处应填入的是
A) x+i
B)&x[i+1]
C)x+(i++)
D)&x[++i]
(25) 以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排序
void sort(int a[],int n)
{ int i,j,t;
for(i=0;i<n-1;i++
for(j=i+1,j<n;j++)
if(a[i]<a[j]) {t=a[i];a[i]=a[j];a[j]=t;}
}
main()
{ int aa[10]={1,2,3,4,5,6,7,8,9,10},i;
sort(&aa[3],5);
for(i=o;i<10;i++) print(“%d,”,aa[i]);
printf(‘\n”);
}
程序运行后的输出结果是
A)1,2,3,4,5,6,7,8,9,10
B) 10,9,8,7,6,5,4,3,2,1,
C) 1,2,3,8,7.6.5.4.9,10
D) 1,2,10,9,8,7,6,5,4,3
(26) 以下程序中函数reverse的功能是将a所指数组中的内容进行逆置。
void reverse(int a[ ],int n)
{ int i,t;
for(i=0;i<n/2;i++)
{ t=a[i]; a[i]=a[n-1-i];a[n-1-i]=t;}
}
main()
{ int b[10]={1,2,3,4,5,6,7,8,9,10}; int i,s=0;
reverse(b,8);
for(i=6;i<10;i++) s+=b[i];
printf(“%d\n”,s);
}
程序运行后的输出结果是
A) 22
B) 10
C) 34
D) 30
(27) 以下程序调用findmax函数返回数组中的最大值
findmax(int *a,int n)
{ int *p,*s;
for(p=a,s=a; p-a<n; p++)
if ( ) s=p;
return(*s);
}
main()
{ int x[5]={12,21,13,6,18};
printf("%d\n",findmax(x,5));
}
在下划线处应填入的是
A) p>s
B) *p>*s
C) a[p]>a[s]
D) p-a>p-s
(28) 若有定义:int aa[ 8];。则以下表达式中不能代表数组元aa[1]的地址的是
A) &aa[0]+1
B) &aa[1]
C) &aa[0]++
D) aa+1
(29) 以下程序的输出结果是
f(int b[],int m,int n)
{ int i,s=0;
for(i=m;i<n;i=i+2) s=s+b[i];
return s;
}
main()
{int x,a[]={1,2,3,4,5,6,7,8,9};
x=f(a,3,7);
printf("%d\n",x);
}
A) 10
B) 18
C) 8
D) 15
(30) 假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是
A) 3
B) 6
C) 10
D) 20
(31) 以下程序的输出结果是
main()
{ int i, a[10];
for(i=9;i>=0;i--) a[i]=10-i;
printf(“%d%d%d”,a[2],a[5],a[8]);
}
A) 258
B) 741
C) 852
D) 369
(32) 下列程序的输出结果是
A) 非法
B)a[4]的地址
C)5
D)3
main()
{ char a[10]={9,8,7,6,5,4,3,2,1,0},*p=a+5;
printf(“%d”,*--p);
}
(33) 下面程序的输出结果是
A) 0
B) 1
C) 10
D) 9
main()
{ int a[ ]={1,2,3,4,5,6,7,8,9,0,},*p;
p=a;
printf(“%d\n”,*p+9);
}
(34) 当调用函数时,实参是一个数组名,则向函数传送的是
A) 数组的长度
B) 数组的首地址
C) 数组每一个元素的地址
D) 数组每个元素中的值
(35) 以下程序的输出结果是
A) 20
B) 21
C) 22
D)23
main()
{ int i, 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+1)];
for (i=0;i<3;i++) k+=p[i] *2;
printf(“%d\n”,k);
}
(36) 以下函数返回a所指数组中最小的值所在的下标值
fun(int *a, int n)
{ int i,j=0,p;
p=j;
for(i=j;i<n;i++)
if(a[i]<a[p])__________;
return(p);
}
在下划线处应填入的是
A) i=p
B) a[p]=a[i]
C) p=j
D) p=i
(37) 有如下说明
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
则数值为9的表达式是
A) *P+9
B) *(P+8)
C) *P+=9
D) P+8
(38) 有如下程序
main0
{ int n[5]={0,0,0},i,k=2;
for(i=0;i<k;i++) n[i]=n[i]+1;
printf(“%d\n”,n[k]);
}
该程序的输出结果是
A) 不确定的值
B) 2
C) 1
D) 0
(39) 执行下面的程序段后,变量k中的值为
A) 不定值
B) 33
C) 30
D) 10
int k=3, s[2];
s[0]=k; k=s[1]*10;
(40) 若已定义:
int a[ ]={0,1,2,3,4,5,6,7,8,9], *p=a,i;
其中 0≤i≤9, 则对a数组元素不正确的引用上
A) a[p-a]
B) *(&a[i])
C) p[i]
D) a[10]
(41) 下列程序执行后的输出结果是
A) 6
B) 7
C) 8
D) 9
void func(int *a,int b[])
{ b[0]=*a+6; }
main()
{ int a,b[5];
a=0; b[0]=3;
func(&a,b); printf("%d \n,b[0]);
}
(42) 若有以下调用语句,则不正确的fun函数的首部是
A) void fun(int m, int x[]) B) void fun(int s, int h[41])
C) void fun(int p, int *s) D) void fun(int n, int a)
main()
{ …
int a[50],n;
…
fun(n, &a[9]);
…
}
(43) 以下程序的输出结果是
A)6
B) 6789
C) ’6’
D) 789
main( )
{ char a[10]={’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,0},*p;
int i;
i=8;
p=a+I;
printf("%s\n",p-3);
}
(44) 以下程序的运行结果是
A) 运行后报错
B) 6 6
C) 6 12
D) 5 5
#include "stdio.h"
main( )
{
int a[ ]={1,2,3,4,5,6,7,8,9,10,11,12,};
int *p=a+5, *q=NULL;
* q=*(p+5);
printf("%d %d \n",*p,*q);
}
(45) 下面程序把数组元素中的最大值放入a[0]中。则在if 语句中的条件表达式应该是
A) p>a
B) *p>a[0]
C) *p>*a[0]
D) *p[0]> *a[0]
main( )
{ int a[10]={6,7,2,9,1,10,5,8,4,3},*p=a,I;
for(i=o;i<10;i++,p++)
if(________) *a=*p;
printf("%d",*a);
}
(46) 以下程序运行后,输出结果是
A) 10000
B) 10010
C) 00110
D) 10100
main()
{ int y=18,i=0,j,a[8];
do
{ a[i]=y%2; i++
y=y/2;
} while(y>=1)
for(j=i-1;j>=0;j--) printf("%d",a[j];
printf("\n");
}
(47) 设有如下定义:
int arr[]={6,7,8,9,10};
int * ptr;
则下列程序段的输出结果为
ptr=arr;
* (ptr+2)+=2;
printf ("%d,%d\n",*ptr,*(ptr+2));
A) 8,10
B) 6,8
C) 7,9
D) 6,10
(48) 以下程序的输出结果是
main()
{ int i,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+1)];
for (i=0;i<3;i++) k+=p[i]*2;
printf("%d\n",k);
}
A) 20
B) 21
C) 22
D)23
(49) 若有以下定义和语句:
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
则不能表示a数组元素的表达式是
A) *p
B) a[10]
C) *a
D) a[p-a]
(50) 若有以下的定义:
int a[]={1,2,3,4,5,6,7,88,9,10}, *p=a;
则值为3的表式是
A) p+=2, *(p++)
B) p+=2,*++p
C) p+=3, *kp++
D) p+=2,++*p
(51) 若有以下说明:
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
则数值为6的表达式是
A) *p+6
B) *(p+6)
C) *p+=5
D) p+5
(52) 下面程序输出数组中的最大值,由s指针指向该元素.
main()
{ int a[10]={6,7,2,9,1,10,5,8,4,3,},*p,*s;
flr(p=a, s=a; p-a<10; p++)
if(---?---)s=p;
printf("The max:%d",*s):
}
则在if语句中的判断表达式应该是
A) p>s
B) *p>*s
C) a[p]>a[s]
D) p-a>p-s
(53) 要求函数的功能是在一维数组中查找值;若找到则返回所在的下标值,否则返回0;数列放在到中。不能正确执行的函数是
A)funa(int *a,int n,int x ) B)funb(int *a,int n,int x)
{ *a=x; {int k;
while(a[n]!=x)n--; for(k=1;k<=n;k++)
return n; if(a[k]==x)return k;
} return 0; }
C)func(int a[],int n,int x ) D) fund(int a[],int n,int x )
{ int *k; { int k=0;
a[0]=x;k=a+n; do
while(*k!=x) k--; k++;
return k-n; while((k<n+1)&&(a[k]!=x));
} if(a[k]==x)return k; else return 0; }
(54) 下列程序的输出结果是
main( )
{ int a[5]={2,4,6,8,10},*P,* *k;
p=a; k=&p;
printf("%d",*(p++)); printf("%d\n",* *k); }
A) 4 4
B) 2 2
C) 2 4
D) 4 6
(55) 阅读下列程序:
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[1]); }
下述程序运行后输出结果是
A) 2
B) 1
C) 0
D) 3
(56) 执行以下程序后,y的值是
main ( )
{ int a[]={2,4,6,8,10};
int y=1,x,*p;
p=&a[1];
for(x=0;x<3;x++) y + = * (p + x);
printf("%d\n",y); }
A) 17
B) 18
C) 19
D) 20
(57) 下面程序的输出是
A) 3
B) 4
C) 1
D) 2
main()
{ int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
printf("%d\n",*(p+2));}
(58) 请读程序:
#include<stdio.h>
f(in b[], int n)
{ int i, r;
r=1;
for(i=0; i<=n; i++) r=r*b[i];
return r;
}
main()
{ int x, a[]={ 2,3,4,5,6,7,8,9};
x=f(a, 3);
printf("%d\n",x);
}
上面程序的输出结果是
A) 720
B) 120
C) 24
D) 6
(59) 请选出以下程序的输出结果
#include<stdio.h>
fun(s, n1, n2)
int *s, n1, n2;
{ int i, j, t;
i=n1; j=n2;
while(i<j)
{ t= *(s+i); *(s+i)= *(s+j); *(s+j)=t;
i++; j--;
}
}
main()
{ int a[10]={1,2,3,4,5,6,7,8,9,0},i, *p=a;
fun(p,0,3); fun(p,4,9); fun(p,0,9);
for(i=0; i<10; i++) printf("%d", *(a+i));
printf("\n");
}
A) 0 9 8 7 6 5 4 3 2 1
B) 4 3 2 1 0 9 8 7 6 5
C) 5 6 7 8 9 0 1 2 3 4
D) 0 9 8 7 6 5 1 2 3 4
(60) 以下程序调用findmax函数求数组中值最大的元素在数组中的下标,请选择填空。
# include <stdio.h>
findmax ( s , t , k )
int *s , t , *k;
{ int p; for(p=0,*k=p;p<t;p + + )
if ( s[p] > s[*k] )_________; }
main()
{ int a[10] , i , k ;
for ( i=0 ; i<10 ; i + + ) scanf("%d",&a[i]);
findmax ( a,10,&k );
printf ( "%d,%d\n" , k , a[k] ); }
A) k=p
B) *k=p-s
C) k=p-s
D) *k=p
二、填空题:
(1) 以下程序运行后的输出结果是 【1】 。
main()
{ int p[7]={11,13,14,15,16,17,18};
int i=0,j=0;
while(i<7 && p[i]%2==1) j+=p[i++];
printf("%d\n",j);
}
(2) 以下程序从终端读入数据到数组中,统计其中正数的个数,并计算它们之和。请填空。
main()
{ int i,a[20],sum,count;
sum=count=0;
for(i=0;i<20;i++) scanf("%d", 【2】 );
fro(i=0;i<20;i++)
{ if(a>0)
{ count++;
sum+= 【3】 ;
}
}
printf("sum=%d,count=%d\n",sum,count);
(3) 以下程序运行后的输出结果是 【4】
main()
{ int i, n[]={0,0,0,0,0};
for(i=1;i<=4;i++)
{ n[i]=n[i-1]*2+1;
printf(“%d”,n[i]);
}
}
(4) 若已定义:int a[10], i;,以下fun函数的功能是:在第一个循环中给前10个数组元素依次赋1、2、3、4、5、6、7、8、9、10;在第二个循环中使a数组前10个元素中的值对称折叠,变成1、2、3、4、5、5、4、3、2、1。请填空。
fun( int a[ ])
{ int i;
for(i=1; i<=10; i++) 【5】=i;
for(i=0; i<5; i++) 【6】=a[i];
}
(5) 以下程序的输出结果是 【7】 。
main()
{ int arr[ ]={30,25,20,15,10,5}, *p=arr;
p++;
printf(“%d\n”,*(p+3));
}
(6) 若有以下定义,则不移动指针p,且通过指针p引用值为98的数组元素的表达式是 [8] 。
int w[10]={23,54,10,33,47,98,72,80,61}, *p=w;
(7) 以下程序的功能是:从键盘上输入若干个学生的成绩,统计计算出平均成绩,并输出低于平均分的学生成绩,用输入负数结束输入。请填空。
main( )
{ float x[1000], sum=0.0, ave, a;
int n=0, i;
printf("Enter mark:\n");scanf("%f",&a);
while(a>=0.0&& n<1000)
{ sum+ 【9】 ; x[n]= 【10】 ;
n++; scanf("%f",&a);
}
ave= 【11】 ;
printf("Output:\n");
printf("ave=%f\n",ave);
for (I=0;I<n;I++)
if 【12】 printf (“%f\n”,x[I]);
}
(8) 下面程序输出的结果是 【13】
#define MAX 3
int a [MAX];
main()
{ fun1( ); fun2( a ); printf("\n");}
fun1( )
{ int k, t=0;
for (k=0; k<MAX; K++,t++) a[k]=t+t;
}
fun2(int b[])
{ int k;
for(k=0; k<NAX; k++) printf("%d", *(b+K));
}
(9) 以下程序输出的是 【14】
main( )
{ int a[10]={19,23,44,17,37,28,49,36}, *p;
p=a;
printf("%d\n",(p+=3)[3]);
}
(10) 以下fun函数的功能是:累加数组元数中的值.n为数组中元素的个数, 累加的和值放入x所指的存储单元中,请填空.
fun(int b[ ],int n, int *x)
{ int k, r=0;
for(k=0;k<n;k++) r= 【15】
【16】 =r;
(11) 若有以下定义和语句,则使指针p指向值为36的数组元素的表达式是【17】 。
int a[10]={19,23,44,17,37,28,49,36},*p;
p=a;
(12) 下面fun函数的功能是将形参x的值转换成二进制数,所得二进制数的每一位数放在一维数组中返回,二进制数的最低位放在下标为0的元素中,其它依此类推。请填空。
fun(int x,int b[])
{ int k=0,r;
do
{ r=x% 【18】;
b[k++]=r;
x/=【19】; } while(x); }
(13) 下面程序通过函数average计算数组中各元素的平均值,请填空.
float average(int * pa,int n)
{ int i;
float avg=0.0;
for(i=0;i<n;i++) avg=avg+【20】;
avg=【21】;
return avg; }
main()
{ int i,a[5]={2,4,6,8,10};
float mean;
mean=average(a,5); printf("mean=%f\n",mean);}
(14) 下面程序的输出是 【22】 。
main()
{ int a[]={ 2,4,6}, *prt=&a[0], x=8,y,z;
for(y=0; y<3; y++)
z=(*(prt+y)<x)? *(ptr+y):x;
printf("%d\n", z);}
(15) 下面程序的输出是 【23】 。
main()
{ int arr[10],i,k=0;
for( i=0; i<10; i++)
arr[i]=i;
for( i=1; i<4; i++)
k+=arr[i]=i;
printf( ’%d\n", k);}
(16) 下面的findmax函数返回数组s中最大元素的下标,数组中元素的个数由t传入,请填空。
findmax( int s[], int t)
{ int k, p;
for( p=0, k=p; p<t; p++)
if( s[p]>s[k]) 【24】 。
return k;
}
(17) 以下程序统计从终端输入的字符中每个大写字母的个数。用#号作为输入结束标志,请填空。
#include <stdio.h>
#include <ctype.h>
main( )
{ int num[26],i; char c;
for(i=0; i<26; i++) num[i]=0;
while( 【25】 !=’#’) /*统计从终端输入的大写字母个数*/
if( isupper(c)) num[c-65]+=1;
for(i=0; i<26; i++) /*输出大写字母和该字母的个数*/
if(num[i]) printf("%c:%d\n,i 【26】 , num[i]);
}
(18) 以下程序求a数组中的所有素数的和,函数isprime用来判断自变量是否为素数。素数是只能被1和本身整除且大于1的自然数。
#include <stdio.h>
main()
{ int i,a[10],*p=a,sum=0;
printf("Enter 10 num:\n");
for(i=0;i<10;i + + ) scanf("%d",&a[i]);
for(i=0;i<10;i + + )
if(isprime(*(p+ 【27】 )) = = 1){ printf("%d",*(a+i)); sum+=*(a+i); }
printf("\nThe sum=%d\n",sum); }
isprime(x)
int x;
{ int i; for(i=2;i<=x/2;i + + )
if(x%i = = 0) return (0); 【28】 ; }
答案:
一、选择题
01) B 02) C 03) C 04) A 05) D
06) B 07) D 08) C 09) C 10) B
11) A 12) A 13) D 14) A 15) D
16) A 17) D 18) B 19) A 20) C
21) B 22) D 23) B 24) C 25) C
26) A 27) B 28) C 29) A 30) D
31) C 32) C 33) C 34) B 35) B
36) D 37) B 38) D 39) A 40) D
41) A 42) C 43) B 44) A 45) B
46) B 47) D 48) B 49) B 50) A
51) C 52) B 53) C 54) C 55) D
56) C 57) A 58) B 59) C 60) D
二、填空题
(1) 24
(2) &a[i]
(3) a[i]
(4) 1 3 7 15
(5) a[i-1]
(6) a[9-i]
(7) 10
(8) p[5]
(9) =a
(10) a
(11) sum/n
(12) x[i]<ave
(13) 024
(14) 49
(15) r+b[k]或b[k]或*(b+k)+r
(16) *x
(17) p=p+7
(18) 2
(19) 2
(20) *(pa+i) 或 pa[i]
(21) avg/n 或avg/(float)n 或 avg/(double)n
(22) 6
(23) 12
(24) k=p
(25) (c=getchar())
(26) +65 或 +’A’
(27) I
(28) return 1