一、單項選擇題
1.以下說法中正確的是( D )。
A) #define和printf都是C語句
B) #define是C語句,而printf不是
C) printf是C語句,但#define不是
D) #define和printf都不是C語句
2.以下程式的輸出結果是( C )。
#define f(x) x*x
main( )
{int a=6, b=2, c;
c=f(a)/f(
B);
printf("%dn", c);
}
A) 9
B) 6
C) 36
D) 18
3.下列程式執行後的輸出結果是( B )。
#define MA(x) x*(x-1)
main( )
{int a=1, b=2; printf("%dn", MA(1+a+
B));}
A) 6
B) 8
C) 10
D) 12
4.以下程式的輸出結果是( D )。
#define M(x, y, z) x*y+z
main( )
{int a=1, b=2, c=3;
printf("%dn", M(a+b, b+c, c+a));
}
A) 19
B) 17
C) 15
D) 12
5.以下程式的輸出結果是( B )。
#define SQR(X) X*X
main( )
{int a=16, k=2, m=1;
a/=SQR(k+m)/SQR(k+m);
printf("%dn", a);
}
A) 16
B) 2
C) 9
D) 1
6.有如下程式:
#define N 2
#define M N+1
#define NUM 2*M+1
main( )
{int i;
for(i=1; i<=NUM; i++) printf(“%dn”, i);
}《 M=3,NUM=6》
該程式中的for迴圈執行的次數是( B )。
A) 5
B) 6
C) 7
D) 8
7.以下程式的輸出結果是( C )。
#include
#define MIN(x, y) (x)< (y)?(x):(y)
main( )
{int a, b, c;
a=20;b=10;
c=5*MIN(a, B);
printf(“%dn”, c);
}
A) 20
B) 200
C) 10
D) 50
8.在下列敘述中,正確的是( C )。
A) 下面的程式有一個整型輸出值:
main( )
{int a;
a=pp( );
printf(“%d”,a);
}
void pp( )
{ … }
B) 以下程式的執行結果為1,3,5,7
main( )
{static int a[4]={1,3,5,7};
printf(“%d,%d,%d,%dn”,a);
}
C) 以下兩個語句是等價的
for(;(c=getchar( ))!=‘n’;printf(“%cn”, c));
for(;(c=getchar( ))!=‘n’;) printf(“%cn”, c);
D) 以下程式中的PRINT()是一個函式
#define PRINT(V) printf(“V=%dt”, V)
main( )
{int a,b;
a=1;
b=2;
PRINT(a);
PRINT(B);
}
9.在下列#include命令中,正確的一條是( D )。
A) #include[string.h]
B) #include{math.h}
C) #include(stdio.h)
D) #include
10.巨集定義#define PI 3.1415926的作用是:指定用識別符號PI來代替一個( B )。
A) 單精度數
B) 字串
C) 雙精度數
D) 整數
11.如果在使用者的程式中要使用C庫函式中的數學函式時,應在該原始檔中使用的include命令是( B )。
A) #include
B) #include
C) #include
D) #include
12.若輸入60和13,以下程式的輸出結果是( D )。
#define SURPLUS(a,B) ((a)%(B))
main( )
{int a,b;
scanf(“%d,%d”,&a,&B);
printf(“%dn”,SURPLUS(a,B));
}
A) 60
B) 13
C) 73
D) 8
13.如果檔案1包含檔案2,檔案2中要用到檔案3的內容,而檔案3中要用到檔案4的內容,則可在檔案1中用三個#include命令分別包含檔案2、檔案3和檔案4。在下列關於這幾個檔案包含順序的敘述中,正確的一條是( A )。
A) 檔案4應出現在檔案3之前,檔案3應出現在檔案2之前
B) 檔案2應出現在檔案3之前,檔案3應出現在檔案4之前
C) 檔案3應出現在檔案2之前,檔案2應出現在檔案4之前
D) 出現的先後順序可以任意
14.在下面四個程式中,輸出結果與其它三個不同的是( C )。
A) #define MAX(a,B) ((a)>(B)?(a):(B))
main( )
{int a,b,c;
scanf(“%d,%d,%d”,&a,&b,&c);
printf(“%dn”,MAX(MAX(a,B),c));
}
B) main( )
{int a,b,c;
scanf(“%d,%d,%d”,&a,&b,&c);
printf(“%dn”,max(a,b,c));
}
max(int x,int y,int z)
{int t;
t=(x>y?x:y);
return(t>z?t:z);
}
C) main( )
{int a,b,c,max;
scanf(“%d,%d,%d”,&a,&b,&c);
if(a>b>c) max=a;
if(b>c>a) max=b;
if(c>a>B) max=c;
printf(“%dn”,max);
}
D) main( )
{int a,b,c,max;
scanf(“%d,%d,%d”,&a,&b,&c);
max=a>b?a:b;
if(c>max) max=c;
printf(“%dn”,max);
}
15.以下for語句構成的迴圈執行了( C )次。
#define N 2
#define M N+1
#define NUM (M+1)*M/2
main( )
{int i, n=0;
for(i=1; i<=NUM; i++)
{n++;
printf(“%d”, n);
}
printf(“n”);
}
A) 4
B) 6
C) 8
D) 9
16.以下程式的輸出結果是( B )。
#include
#define FUDGE(y) 2.84+y
#define PR(a) printf(“%d”, (int)(a))
#define PRINT1(a) PR(a); putchar(‘n’)
main( )
{int x=2;
PRINT1(FUDGE(5)*x);
}
A) 11
B) 12
C) 13
D) 15
17.以下程式的輸出結果是( A )。
#define SUB(x, y) (x)*y
main( )
{int a=3, b=4;
printf(“%dn”, SUB(a++, b++));
}
A) 12
B) 15
C) 16
D) 20
18.設有以下巨集定義:
#define N 3
#define Y(n) ((N+1)*n)
則執行語句:z=2*(N+Y(5+1));後,z的值為( C )。
A) 出錯
B) 42
C) 48
D) 54
19.下列程式的輸出結果是( C )。
main()
{char a[10]={9,8,7,6,5,4,3,2,1,0},*p=a+5;
printf("%d",*--p);
}
A) 非法
B) a[4]的地址
C) 5
D) 3
20.下列程式的執行結果是( B )。
void fun(int *a, int *B)
{int *k;
k=a; a=b; b=k;
}
main()
{int a=3, b=6, *x=&a, *y=&b;
fun(x, y);
printf("%d %d", a, B);
}
A) 6 3
B) 3 6
C) 編譯出錯
D) 0 0
21.下面程式的輸出結果是( C )。
main()
{int a[ ]={1,2,3,4,5,6,7,8,9,0},*p;
p=a;
printf("%dn",*p+9);
}
A) 0
B) 1
C) 10
D) 9
22.假定以下程式經編譯和連線後生成可執行檔案PROG . EXE,如果在此可執行檔案所在目錄的DOS提示符下鍵入:PROG ABCD EFGH IJKL<回車>,則輸出結果為( D )。
main( int argc, char *argv[ ])
{while(--argc>0) printf("%s", argv[argc]);
printf("n");
}
A) ABCDEFGH
B) IJHL
C) ABCDEFGHIJKL
D) IJKLEFGHABCD
23.對於基型別相同的兩個指標變數之間,不能進行的運算是( C )。
A) <
B) =
C) +
D) -
24.有以下函式:
char * fun (char *p)
{return p;}
該函式的返回值是( B )。
A) 無確切的值 B) 形參p中存放的地址值
C) 一個臨時儲存單元的地址
D) 形參p自身的地址值
25.若有以下說明和定義
fun(int *C){…}
main()
{int (*a)()=fun,*b(),w[10],c;
┆
}
在必要的賦值之後,對fun函式的正確呼叫語句是( B )。
A) a=a(w);
B) (*a)(&C);
C) b=*b(w);
D) fun (B);
26.有如下說明
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
則數值為9的表示式是( B )。
A) *p+9
B) *(p+8)
C) *p+=9
D) p+8
27.有如下程式:
main()
{char ch[2][5]={“6937”,“8254”},*p[2];
int i,j,s=0;
for(i=0;i<2;i++) p[i]=ch[i];
for(i=0;i<2;i++)
for(j=0;p[i][j]>‘