《C綜合練習(xí)- 3 附參考答案》由會員分享,可在線閱讀,更多相關(guān)《C綜合練習(xí)- 3 附參考答案(7頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、《C綜合練習(xí) 3 --- 函數(shù)與指針》附參考答案
《C綜合練習(xí) 3 --- 函數(shù)與指針》
一、 選擇題
1. 程序中調(diào)用了庫函數(shù)strcmp,必須包含頭文件( )。若是調(diào)用庫函數(shù) gets呢?
A、math.h B、string.h C、ctype.h D、stdio.h
2.?dāng)?shù)組聲明為“int y[4][3];”,表達(dá)式“*(y+2)+2-*y”的值為()。
A. 10 B. 20 C. 16 D. 8
3.指針變量p1、p2類型相同,要使p1、p2指向同一變量,哪一個語句是正確的( )
2、。
A、p2=*&p1; B、p2=**p1; C、p2=&p1; D、p2=*p1;
4.?dāng)?shù)組定義為“int a[4][5];”,下列哪一個引用是錯誤的( )。
A、*a B、*(*(a+2)+3) C、&a[2][3] D、++a
5.表達(dá)式“c=*p++”的執(zhí)行過程是( )。
A、復(fù)制*p的值給c后再執(zhí)行p++ B、復(fù)制*p的值給c后再執(zhí)行*p++
C、復(fù)制 p的值給c后再執(zhí)行p++ D、執(zhí)行p++后將*p的值復(fù)制給c
6.函數(shù)strcmp("Int","in
3、t"))的返回值為 。
A、 0 B、 -32 C、 "intInt" D、 "Intint"
7.函數(shù)f定義如下,執(zhí)行語句“sum=f(5)+f(3);”后,sum的值應(yīng)為 。
int f(int m)
{ static int i=0; int s=0;
for(; i<=m; i++) s+=i;
return s;
}
A、 21 B、 16 C、 15 D、 8
8.下列語句定義x為指向int類型變量a的指針,其中哪一個是正確的 。
4、 A、int a,*x=a; B、int a,*x=&a; C、int *x=&a,a; D、int a,x=a;
9.聲明語句為“int a[3][4];”,下列表達(dá)式中與數(shù)組元素a[2][1]等價的是 。
A、*(a[2]+1) B、a[9] C、*(a[1]+2) D、*(*(a+2))+1
10.對于以下遞歸函數(shù)f,調(diào)用 f (2) 的返回值是 。
int f(int x)
{ return ((x<=0)? x: f(x-1)+f(x-2));}
A、-1
5、 B、0 C、1 D、3
11.下列程序的輸出結(jié)果是 。
# include
int f(int n)
{ static int k, s;
n--;
for(k=n; k>0; k--)
s += k;
return s;
}
void main( )
{ int k;
k=f(3);
printf("(%d, %d)", k, f(k));
}
A
6、、(3, 3) B、(6, 6) C、(3, 6) D、(6, 12)
12.下列程序段的輸出結(jié)果是 。
int *p, *q, k = 5, j=10;
p=&j; q = &k ;p = q ; (*p)++;
printf("%d",*q);
A、5 B、6 C、10 D、11
13.不正確的賦值或賦初值的方式是 。
A、char str[6]={'s', 't', 'r', 'i', 'n', 'g'}; B、char str[10]= "string";
C、
7、char *str="string"; D、char str[10]; str="string";
14.下列程序段的輸出結(jié)果是 。
int c[ ]={1, 7, 12};
int *k=c+1;
printf("%d",*k++);
A、2 B、7 C、8 D、12
15.下列程序段的輸出結(jié)果是 。
char *st[ ]={"abcd","efgh","ijkl","mnop"}, **p=st;
p++;
printf(*p+1);
A、
8、cd B、fgh C、ijkl D、出錯
16.下列程序的輸出結(jié)果是 。
#include
void p(int *x, int *y)
{ ++ x;
--*y;
}
void main()
{ int x=0, y=3;
p(&x, &y);
printf("(%d, %d)", x, y);
}
A、(0, 2) B、(0, 3) C、(1, 3) D、(1, 2)
17.對于以下遞歸函數(shù)f,調(diào)用
9、f(3)的返回值是 。
int f(int n)
{if(n)return f(n-1)+n;
else return n;
}
A、10 B、6 C、3 D、0
18.下列程序的輸出結(jié)果是 。
#include
int x;
int p(int *y)
{ ++ *y; return x-1; }
void main()
{ int y; y=p
10、(&x);
printf(”(%d,%d)”,x,y);
}
A、(-1,0) B、(1,-1) C、(1,0) D、出錯
19.下列程序段的輸出結(jié)果是 (33) 。
int i
int f ( int x )
{ static int k = 1 ;
x+=k++;
return x ;
}
i+=f (f ( 1 ) );
printf( “ %d\n”, i );
A、2 B、1 C、4 D、3
20.下列
11、程序段的輸出結(jié)果是 。
int c[ ]={1, 7, 12};
int *k=c ;
printf("%d",*++k );
A、2 B、7 C、1 D、以上均不對
二、 判斷題
1.函數(shù)中不可以沒有return語句。
2.傳值調(diào)用的形參只有在被調(diào)用時才被創(chuàng)建(分配存儲單元)。
3.傳值調(diào)用時,實參可以是變量名,也可以是表達(dá)式。
4.函數(shù)f可以用f(f(x))形式調(diào)用,因此,f是遞歸函數(shù)。
5.在C 語言程序中,在main函數(shù)中定義的變量稱為全局變量。
6.在C程序中,函數(shù)既可以嵌套定義,也可以嵌套調(diào)用。
三、 閱讀程序,
12、寫運(yùn)行結(jié)果
1.對下列函數(shù)f,計算寫出f(f(4))的值。
int f(int x)
{ static int k=0;
x+=k++;
return x;
}
2.寫出下列程序的輸出結(jié)果
#include
void main()
{ int x[4][4]={{1,2,3,4},{3,4,5,6},{5,6,7,8},{7,8,9,10}};
int i,j;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
*(*(x+i)+j)/=
13、*(*(x+i)+i);
for(i=0;i<4;i++)
{ for(j=0;j<4;j++) printf("%3d",*(*(x+i)+j));
putchar('\n');
}
}
3. 寫出下列程序的輸出結(jié)果
#include
void prn(int a,int b,int c,int max,int min)
{ max=(max=a>b?a:b)>c?max:c;
min=(min=a
14、=%d\n",max,min);
}
void main()
{ int x,y;
x=y=0;
prn(19,23,-4,x,y);
printf("max=%d min=%d\n",x,y); }
4. 寫出下列程序的輸出結(jié)果
f ( int x )
{ if ( x == 0 ) return 0 ;
else return (x%10+f( x/10 ) ) ; }
main ()
{ printf("%d,%d , ", f( 0 ),
15、f(267)) ; }
5.寫出下列程序的輸出結(jié)果
#include
#include
void main()
{ char c,*a="Office"; int i;
for(i=0;i
16、程序的輸出結(jié)果
void sort( int *a, int n )
{ int i, k, m, t;
for(i = 0; i < n-1; i++){
k=i;
for(m=i+1; m
17、 printf("%d ,", a[k]);
}
7.輸入 elephant? 后, 寫出下面程序的輸出結(jié)果。
void main( )
{ int i=0 , k , ch ;
static int num [ 5 ];
char alpha [ ] = { ‘a(chǎn)’ , ‘e’ , ‘i’ , ‘o’ , ‘u’ } , in [ 80 ];
while( ( in[ i++ ] = getchar( ) ) !=’?’ ) ;
in[ i ]=’\0’;
i=0;
while( ( in[ i ] )
{ for( k=0;k<5;k++)
18、
if ( in[ i ]= = alpha [ k ] )
{ num [ k ] ++ ; break ;}
i++ ;
}
for( k=0;k<5;k++)
if ( num [ k ] )
printf("%c%d , ", alpha [ k ] , num [ k ] ) ;
printf("\n " ) ;
}
四、 程序填空
1.下列程序求二維數(shù)組a中的最大值與b中的最大值之差,填空將下列程序補(bǔ)充完整。
#include
#include
19、 float find_max( (1) )
{ int i,j; float max=*x;
for(i=0;imax) max= (2)
return max;
}
void main()
{ float (3) ;
int i,j;
for(i=0;
20、i<5;i++) for(j=0;j<5;j++) scanf("%f",&a[i][j]);
for(i=0;i<6;i++) for(j=0;j<4;j++) scanf("%f",&b[i][j]);
printf("%f\n",find_max( (4) )-find_max(b[0],6,4));
}
2.輸入100個整數(shù),將其中的前20個數(shù)從小到大排序,然后輸出這100個數(shù)。
# include "stdio.h"
void sort( (1) )
{ int i, k, m, t;
21、
for(i = 0; i < n-1; i++){
k=i;
for(m=i+1; m
22、1)A、int a, int n B、int *a, int n C、int *a, int *n D、int a[ ]
(2) A、a[m-1]>a[m] B、a[m-1]a[m]
(3)A、a[k] = a[i]; a[i] = a[k]; B、a[k] = t ; a[k] = a[i]; a[i] = t;
C、t = a[k]; a[k] = a[i]; a[i] = t; D、a[i] = a[k]; a[k] = a[i];
23、(4)A、sort(a, 20) B、sort(a[ ], 20) C、sort(a[20]) D、sort(a[ ])
3.下面程序用于計算 f ( k , n ) = 1 k+2 k+ … +n k , 其中函數(shù)power ( m , n ) 計算 m n , 函數(shù)sum (k,n) 計算f ( k, n ) 。
long sum ( int k,int n)
main( )
{ int k, n;
scanf("%d%d", &n ,&k);
printf (“ f ( %d ,%d )=%d \n”, k ,n ,
24、 sum ( k ,n ) );
}
long power ( int m ,int n)
{ int i;
(1) ;
for ( i=1;i<=n;i++)
(2) ;
return p;
}
long sum (int k ,int n )
{ int i;
(3) ;
for ( i=1;i<=n;i++)
(4) ;
return s;
}
(1)A、long p=1 B、int power =1 C、l
25、ong p=0 D、int p=0
(2)A、p=p*n B、p=p*m C、p=p*i D、p=p+m
(3)A、int s=1 B、int s=0 C、long s = 0 D、long s=1
(4)A、s+=power (k, i) B、s+=power (i, k) C、s*=power (i, k) D、s*=power (k, i)
五、 編程
1.編制遞歸函數(shù) double mypower(int n, float x ),計算并返
26、回 x n。
2.編制函數(shù),在主調(diào)函數(shù)的一維數(shù)組中查找最大值及該元素下標(biāo)、最小值及該元素下標(biāo)。請適當(dāng)選擇參數(shù),使所求結(jié)果能傳遞到主調(diào)函數(shù)。
3.輸入一個正整數(shù)n,求1+1/2!+1/3!+……1/n!的值,要求定義并調(diào)用函數(shù)fact(n)計算n的階乘,函數(shù)返回值的類型是單精度浮點型。
5. 兩個正整數(shù) m和 n(n>=m),求從 m到 n之間(包括 m和 n)所有素數(shù)的和。要求定義并調(diào)用函數(shù)isprimek來判斷x是否為素數(shù)(素數(shù)是除1以外只能被1或自身整除的自然數(shù))。
共 7 頁 06級校試點班 第 7 頁