C/C++測試題
函 數
一、選擇題
1、 以下函數調用語句中的實參個數為( D )。
excc((vl,v2),(v3,v4,v5),v6);
(A)3 (B)4 (C)5 (D)6
2、 在C/C++程序中,( A )。 (A)函數的定義可以嵌套,但函數的調用不可以嵌套
(B)函數的定義不可以嵌套,但函數的調用可以嵌套
(C)函數的定義和函數的調用均不可以嵌套
(D)函數的定義和函數的調用均可以嵌套
3、 若已定義的函數有返回值,則以下關于該函數調用的敘述中錯誤的是( D )。
(A)函數調用可以作為獨立的語句存在 (B)函數調用可以作為一個函數的實參
(C)函數調用可以出現在表達式中 (D)函數調用可以作為一個函數的形參
4、 若有以下調用語句,則不正確的fun0函數的首部是( B )。 void main( )
{ …
int a[50],n;
…
fun(n,&a[9]);
…
}
(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)
5、 以下函數的功能是( C )。
fun(char *p2, char *pl)
{
while((*p2=*pl)!=’\0’)
{p1++;p2++;}
}
(A)將pl所指字符串復制到p2所指內存空間
(B)將pl所指字符串的地址賦給指針p2
(C)對pl和p2兩個指針所指字符串進行比較
(D)檢查pl和p2兩個指針所指字符串中是否有'\0'
二、讀程序分析程序的運行結果
6、 以下程序的輸出結果是( B )。
float fun(int x,int y)
{ return (x+y); }
int main()
{
int a=2,b=5,c=8;
printf("%3.0f\n" ,fun((int)fun(a+c,b),a-c));
}
(A)編譯出錯 (B)9 (C) 21 (D)9.0
7、 以下程序中函數sort的功能是對a數組中的數據進行由大到小的排序,程序運行后的輸出結果是( C )。
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;}
}
int main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10},i;
sort(&a[3],5);
for(i=0;i<10;i++)
printf("%d,",a[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)8,7,6,5,4,3,2,1,9,10
四、讀程序回答問題
8、 以下程序段的輸出結果是( 4321 )。
int si(int *s1,int y)
{
static int i1=3;
y=s1[i1];
i1--;
return(y);
}
int main()
{
int s[ ]={1,2,3,4},i,x=0;
for(i=0;i<4;i++)
{
x=si(s,x);
printf("%d",x);
}
printf("\n");
}
9、 下列程序的執行結果是( 5 10 17 32 15 38 )。
void fun(int *s, int n1, int n2)
{
int i=n1,j=n2;
while(i<j)
{
*(s+i)+=*(s+j); *(s+j)+=*(s+i);
i++;j--;
}
}
int main()
{
int a[6]={1,2,3,4,5,6},i,*p=a;
fun(p,0,3);
fun(p,1,4);
fun(p,3,5);
for(i=0;i<6;i++)
printf("%d ",*(a+i));
printf("\n");
}
10、 已知函數isaplha(ch)的功能是判斷自變量ch是否是字母;若是,該函數返回數值1,否則返回0。下面程序的輸出是( Itis )。
#include <ctype.h>
void fun4(char str[])
{
int i,j;
for(i=0,j=0;str[i];i++)
if(isalpha(str[i]))str[j++]=str[i];
str[j]='\0';
}
int main()
{
char ss[80]="lt is!";
fun4(ss);
printf("%s\n",ss);
}
11、 下面程序的輸出結果是( 12 )。
unsigned fun6(unsigned num)
{
unsigned k=1;
do {
k*=num%10;
num/=10;
}while(num);
return(k);
}
int main()
{
unsigned n=26;
printf("%d\n",fun6(n));
}
12、下面程序的輸出結果是( 9 )。
long fun5(int n)
{
long s;
if((n==1)||(n==2))
s=2;
else
s=n+fun5(n-1);
return(s);
}
int main()
{
long x;
x=fun5(4);
printf("%ld\n",x);
}
13、下面的程序完成的功能是( 將一維數組按升序排列 )。
#define SIZE 5
void func (int data [SIZE]);
int main()
{
int i,buf[SIZE];
printf("please input %d numbers: ", SIZE);
for(i=0;i<SIZE;i++)
scanf("%d",&buf[i]);
func(buf);
for(i=0;i<SIZE;i++)
printf("%5d",buf[i]);
}
void func (int data [SIZE])
{
int i,j,d;
for(i=0;i<SIZE-1;i++)
for(j=0;j<SIZE-i-1;j++)
if(data[j]>data[j+1])
{
d=data[j];
data[j]=data[j+1];
data[j+1]=d;
}
}
14、 以下程序的輸出結果是( i=5 )。
int s(char *s)
{
char *p=s;
while(*p) p++;
return(p-s);
}
int main()
{
char *a="abded";
int i;
i=s(a);
printf("i=%d",i);
}
15、 下列程序的輸出結果是( 7 1 )。
void ast(int x,int y,int *cp, int *dp)
{
*cp=x+y;
*dp=x-y;
}
int main()
{
int a,b,c,d;
a=4;b=3;
ast(a,b,&c,&d);
printf("%d %d\n",c,d);
}
16、 下面程序的輸出結果是( 7 )。
int fun(int x)
{
int p;
if(x==0||x==1) return(3);
p=x-fun(x-2);
return p;
}
int main()
{
printf("%d\n",fun(9));
}
五、程序填空題
17、 下列程序統計有不及格(小于60分)成績的人數,并輸出有不及格成績的學生的各門成績。學生人數SIZE,每人記錄4門考試成績。指針型函數search()的形參為指向含有4個元素的一維數組的指針。函數檢查某學生成績,若有不及格,返回指向該生第一門成績的指針,否則指向下一學生第一門成績的指針。請填空,完善程序。
#define SIZE 40
int * search(int (*pr)[4])
{
int i, *pc;
pc= *(pr+1) ;
for(i=0;i<4;i++)
if( *(*pr+1) <60)
{ pc=*pr;break; }
return(pc);
}
int main()
{
int i,j,m=0,*p,score[SIZE][4];
for(i=0;i<SIZE;i++)
{
printf("\ni=%d:",i);
for (j=0;j<4;j++)
scanf("%d",&score[i][j]);
}
for (i=0;i<SIZE;i++)
{
p=search(score+i);
if( p==*(score+i) )
{
m++;
printf("No.%d score:", i);
for (j=0;j<4;j++)
printf("%4d", *(p+j) );
printf("\n");
}
}
printf("m=%d",m);
}
18、 下面程序能將Hello!反向打印出來,請填空。
void print_hello (char *string)
{
char *str= string ;
if (*str== NULL ) return;
while(*str) str++;
--str ;
printf("%C",*str);
*str= NULL;
print_hello ( string );
}
int main()
{
char str[]="Hello!";
print_hello(str);
}
19、 下面程序的功能是比較兩個字符串是否相等,若相等則返回1,否則返回0,請填空。
int comp(char s[],char t[])
{
int i=0;
while( *(s+i)==*(t+i) && *(s+i)!=’\0’ )
i++;
return((*(s+i)==’\0’&&*(s+i)==’\0’)?1:0 );
}
int main()
{
char sl[20],s2[20];
int i;
printf("\n Please input stringl string2:");
scanf("%s%s", sl,s2);
i=comp(sl,s2);
printf("%d",i);
}
20、 下面程序通過函數average0計算數組中各元素的平均值,請填空。
float average (int *pa, int n)
{
int i;
float avg=0.0;
for(i=0;i<n;i++)
avg=avg+ *(pa+i) ;
avg= avg/n ;
return avg;
}
int main()
{
int a[5]={2,4,6,8,10};
float mean;
mean=average (a,5);
printf("mean=%f\n",mean);
}
21、 以下程序實現將3個數中的大數輸出在前,小數輸出在后。
void swap(int *p1, int *p2)
{
int *t;
t=(int*)malloc(sizeof(int)) ;
*t=*p1;*p1=*p2;*p2=*t;
}
void chang (int *ql, int *q2, int *q3)
{
if (*ql>*q2)swap(ql,q2);
if (*ql>*q3)swap(ql,q3);
if (*q2>*q3)swap(q2,q3);
}
int main()
{
int a=6, b=4, c=2;
chang ( &a,&b,&c );
printf("%d,%d,%d\n",a,b,c);
}