二級C語言教程章節(jié)測試8.指針

字號:

一、選擇題
     (1)設有定義:int n1=0,n2,*p=&n2,*q=&n1;,以下賦值語句中與n2=n1;語句等價的是
     A)*p=*q; B)p=q; C)*p=&n1; D)p=*q;
     (2)若有定義:int x=0, *p=&x;,則語句printf("%d\n",*p);的輸出結(jié)果是
     A)隨機值 B)0 C)x的地址 D)p的地址
     (3) 以下定義語句中正確的是
     A) char a='A'b='B'; B) float a=b=10.0;
     C) int a=10,*b=&a; D) float *a,b=&a;
     (4) 有以下程序
     main()
     { int a=7,b=8,*p,*q,*r;
     p=&a;q=&b;
     r=p; p=q;q=r;
     printf("%d,%d,%d,%d\n",*p,*q,a,b);
     }
     程序運行后的輸出結(jié)果是
     A) 8,7,8,7 B) 7,8,7,8 C) 8,7,7,8 D) 7,8,8,7
     (5) 設有定義:int a,*pa=&a;以下scanf語句中能正確為變量a讀入數(shù)據(jù)的是
     A) scanf(“%d”,pA) ; B) scanf(“%d”,A) ;
     C) scanf(“%d”,&pA) ; D) scanf(“%d”,*pA) ;
     (6) 設有定義:int n=0,*p=&n,**q=&p;則以下選項中,正確的賦值語句是
     A) p=1; B) *q=2; C) q=p; D) *p=5;
     (7) 有以下程序
     void fun(char *a, char *b)
     { a=b; (*a)++; }
     main ()
     { char c1="A", c2="a", *p1, *p2;
     p1=&c1; p2=&c2; fun(p1,p2);
     printf(“&c&c\n”,c1,c2);
     }
     程序運行后的輸出結(jié)果是
     A) Ab B) aa C) Aa D) Bb
     (8) 若程序中已包含頭文件stdio.h, 以下選項中,正確運用指針變量的程序段是
     A) t *i=NULL; B) float *f=NULL;
     scanf("&d",f); *f=10.5;
     C) char t="m", *c=&t; D) long *L;
     *c=&t; L=‘\0’;
     (9) 有以下程序
     #inc1ude
     main()
     { printf("%d\n", NULL); }
     程序運行后的輸出結(jié)果是
     A) 0 B) 1 C) -1 D) NULL沒定義,出錯
     (10) 已定義以下函數(shù)
     fun (int *p)
     { return *p: }
     該函數(shù)的返回值是
     A) 不確定的值 B) 形參p中存放的值
     C) 形參p所指存儲單元中的值 D) 形參p的地址值
     (11) 下列函數(shù)定義中,會出現(xiàn)編譯錯誤的是
     A) max(int x, int y,int *z) B) int max(int x,y)
     { *z=x>y ? x:y; } int z ;
     z=x>y ? x:y;
     return z ;
     }
     C) max (int x,int y) D) int max(int x,int y)
     { int z; { return(x>y?x:y) ; }
     z=x>y?x:y; return(z);
     }
     (12) 有以下程序段
     main()
     { int a=5, *b, **c;
     c=&b; b=&a;
     ……
     }
     程序在執(zhí)行了c=&b:b=&a;語句后,表達式:**c的值是
     A) 變量a的地址 B) 變量b中的值 C) 變量a中的值 D) 變量b的地址
     (13) 有以下程序
     main()
     { char a,b,c,*d;
     a=’\’; b=‘\xbc’;
     c=‘\0xab’; d="\017";
     print("%c%c%c\n",a,b,c,*d);
     }
     編譯時出現(xiàn)錯誤,以下敘述中正確的是
     A) 程序中只有a=’\’;語句不正確 B) b=‘\xbc’;語句不正確
     C) d="\0127";語句不正確 D) a=’\’;和c=‘\0xab’;語句都不正確
     (14) 若有以下定義和語句
     #include
     int a=4,b=3,*p,*q,*w;
     p=&a; q=&b; w=q; q=NULL;
     則以下選項中錯誤的語句是
     A) *q=0; B) w=p; C) *p=a; D) *p=*w;
     (15) 有以下程序
     int *f(int *x,int *y)
     { if(*x<*y)
     return x;
     else
     return y;
     }
     main()
     { int a=7,b=8,*p,*q,*r};
     }
     執(zhí)行后輸出結(jié)果是
     A) 7,8,8 B) 7,8,7 C) 8,7,7 D) 8,7,8
     (16) 若有說明:int n=2,*p=&n,*q=p;,則以下非法的賦值語句是
     A) p=q; B) *p=*q; C) n=*q; D) p=n;
     (17) 有以下程序
     void fun(char *c,int d)
     { *c=*c+1;d=d+1;
     printf(“%c,%c,”,*c,d);
     }
     main()
     { char a=’A’,b=’a’;
     fun(&b,a); printf(“%c,%c\n”,a,b);
     }
     程序運行后的輸出結(jié)果是
     A)B,a,B,a B) a,B,a,B C) A,b,A,b D) b,B,A,b
     (18) 若有說明語句:int a,b,c,*d=&c;,則能正確從鍵盤讀入三個整數(shù)分別賦給變量a、b、c的語句是
     A) scanf("%d%d%d",&a,&b,d); B) scanf("%d%d%d",&a,&b,&d);
     C) scanf("%d%d%d",a,b,d); D) scanf("%d%d%d",a,b,*d);
     (19) 若定義:int a=511,*b=&a;, 則printf("%d\n",*b);的輸出結(jié)果為
     A) 無確定值 B) a的地址 C) 512 D) 511
     (20) 若有說明:int i, j=2,*p=&i;,則能完成i=j賦值功能的語句是
     A) i=*p; B) p*=*&j; C) i=&j; D) i=**p;
     (21) 下列程序段的輸出結(jié)果是
     A) 2 1 4 3 B) 1 2 1 2 C) 1 2 3 4 D) 2 1 1 2
     void fun(int *x, int *y)
     { printf(“%d %d”, *x, *y); *x=3; *y=4;}
     main()
     { int x=1,y=2;
     fun(&y,&x);
     printf(“%d %d”,x, y);
     }
     (22) 下列程序的運行結(jié)果是
     A) 6 3 B) 3 6 C) 編譯出錯 D) 0 0
     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);
     }
     (23) 有如下程序段
     int *p,a=10,b=1
     p=&a; a=*p+b;
     執(zhí)行該程序段后,a的值為
     A) 12 B) 11 C) 10 D) 編譯出錯
     (24) 有以下函數(shù)
     char fun(char *p)
     { return p; }
     該函數(shù)的返回值是
     A) 無確切的值 B) 形參p中存放的地址值
     B) 一個臨時存儲單元的地址 D) 形參p自身的地址值
     (25) 請選出正確的程序段
     A) int *p; B) int *s, k;
     scanf("%d",p); *s=100;
     … …
     C) int *s, k; D) int *s, k;
     char *p, c; char *p, e;
     s=&k; s=&k;
     p=&c; p=&c;
     *p='a'; s=p;
     … *s=1;
     …
     (26) 若有以下定義和語句:
     double r=99, *p=&r;
     *p=r;
     則以下正確的敘述是
     A) 以下兩處的*p含義相同,都說明給指針變量p賦值
     B) 在"double r=99, *p=&r;"中,把r的地址賦值給了p所指的存儲單元
     C) 語句"*p=r;"把變量r的值賦給指針變量p
     D) 語句"*p=r;"取變量r的值放回r中
     (27) 以下程序運行后,a的值是
     A) 4 B) 1 C) 0 D) 運行時出錯,a無定值
     main()
     { int a,k=4,m=6,*p1=&k,*p2=&m;
     a=p1==&m;
     printf("%d\n",a);
     }
     (28) 有以下程序
     int fun(int x,int y,int *cp,int *dp)
     { *cp=x+y; *dp=x-y; }
     main()
     { int a, b, c, d;
     a=30; b=50;
     fun(a,b,&c,&d);
     printf("%d,%d\n", c, d);
     }
     輸出結(jié)果是
     A) 50,30 B) 30,J50 C) 80,-20 D) 80,20
     (29) 若有定義和語句:
     int **pp,*p,a=10,b=20;
     pp=&p;p=&a;p=&b;printf("%d\n",*p,**pp);
     則輸出結(jié)果是:
     A)10,20 B)10,10 C)20,10 D)20,20
     (30) 以下程序的輸出結(jié)果是
     #include
     subl(char a,char b) {char c; c=a;a=b;b=c;}
     sub2(char* a,char b) {char c; c=*a;*a=b;b=c;}
     sub3(char* a,char*b) {char c; c=*a;*a=*b;*b=c;} { char a,b;
     a='A';b='B';sub3(&a,&b);putchar(a);putchar(b);
     a='A';b='B';sub2(&a,b);putchar(a);prtchar(b);
     a='A';b='B';sub1(a,b);putchar(a);putchar(b);
     }
     A) BABBAB B) ABBBBA C) BABABA D) BAABBA
     (31) 若有說明:int i,j=7, *p=&i;,則與i=j;等價的語句是
     A) I= *P; B) *P=*&J; C) i=&j; D) i=* *p;
     (32) 要求函數(shù)的功能是交換x和y中的值,且通過正確調(diào)用返回交換結(jié)果。能正確招待此功能的函數(shù)是
     A)funa(int *x,int *y) B) funb(int x,int y)
     {int *p; {int t;
     *p=*x;*x=*y;*y=*p;} t=x;x=y;y=t;}
     C) func(int *x,int *y) D) fund(int x,int y)
     {*x=*y;*y=*x;} {*x=*x+*y; *y=*x-*y; *x=*x-*y; } 二、填空題:
     (1) 有以下程序
     void f( int y,int *x)
     {y=y+*x; *x=*x+y;}
     main( )
     { int x=2,y=4;
     f(y,&x);
     printf(“%d %d\n”,x,y);
     }
     執(zhí)行后輸出的結(jié)果是【1】 。
     (2) 下面程序的運行結(jié)果是: [2] 。
     void swap(int *a,int *b)
     { int *t;
     t=a; a=b; b=t;
     }
     main()
     { int x=3,y=5,*p=&x,*q=&y;
     swap(p,q);
     printf(“%d%d\n”,*p,*q);
     }
     (3) 設有以下程序:
     main()
     { int a, b, k=4, m=6, *p1=&k, *p2=&m;
     a=pl==&m;
     b=(*p1)/(*p2)+7;
     printf(“a=%d\n”,a);
     printf(“b=%d\n”,b);
     }
     執(zhí)行該程序后,a的值為【3】 ,b的值為【4】 。
     (4) 下列程序的輸出結(jié)果是 【5】 。
     void fun(int *n)
     { while( (*n)--);
     printf(“%d”,++(*n));
     }
     main()
     { int a=100;
     fun(&a);
     }
     (5) 以下函數(shù)用來求出兩整數(shù)之和,并通過形參將結(jié)果傳回,請?zhí)羁铡?BR>     void func(int x,int y, [6] z)
     { *z=x+y; }
     (6) 函數(shù) void fun(float *sn, int n)的功能是:根據(jù)以下公式計算S,計算結(jié)果通過形參指針sn傳回;n通過形參傳入,n的值大于等于0。請?zhí)羁铡?BR>     void fun( float *sn, int n)
     { float s=0.0, w, f=-1.0;
     int i=0;
     for(i=0; i<=n; i++)
     { f= [7] * f;
     w=f/(2*i+1);
     s+=w;
     }
     [8] =s;
     }
     (7) 以下函數(shù)的功能是,把兩個整數(shù)指針所指的存儲單元中的內(nèi)容進行交換。請?zhí)羁铡?BR>     exchange(int *x, int *y)
     { int t;
     t=*y; *y= 【9】 ; *x= 【10】 ;
     }
     (8) 下面函數(shù)要求用來求出兩個整數(shù)之和,并通過形參傳回兩數(shù)相加之和值,請?zhí)羁铡?BR>     int add(int x,int y, 【11】 z)
     { 【12】 =x+y;}