C語言指標題集
1. 若有說明:int a=2, *p=&a, *q=p;,則以下非法的賦值語句是()。
A. p=q; B. *p=*q; C. a=*q; D. q=a;
2. 若定義:int a=511, *b=&a;,則printf("%d\n", *b);的輸出結果為:
A. 無確定值 B. a的地址 C. 512 D. 511
3. 已有定義 int a=2, *p1=&a, *p2=&a; 下面不能正確執行的賦值語句是()。
A. a=*p1+*p2; B
4.變數的指標,其含義是指該變數的()。
A. 值 B.地址 C.名 D.一個標誌
5. 若有說明語句:int a, b, c, *d=&c;,則能正確從鍵盤讀入三個整數分別賦給變數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);
6.若已定義int a=5; 下面對(1)、(2)兩個語句的正確解釋是()。
(1) int *p=&a; (2) *p=a;
A. 語句(1)和(2)中的*p含義相同,都表示給指標變數p賦值。
B. (1)和(2)語句的執行結果,都是把變數a的地址值賦給指標變數p。
C. (1)在對p進行說明的同時進行初始化,使p指向a;
(2)變數a的值賦給指標變數p。
D. (1)在對p進行說明的同時進行初始化,使p指向a;
(2)將變數a的值賦予
7.若有語句int *p, a=10; p=&a; 下面均代表地址的一組選項是()。
A. a, p, *&a B. &*a, &a, *p
C. *&p, *p,&a D.&a, &*p, p
8. 若需要建立如圖所示的儲存結構,且已有說明double *p, x=0.2345; 則正確的賦值語句是()。
A. p=x; B. p=&x;
C. *p=x; D. *p=&x;
9.若有說明:int *p, a=1, b; 以下正確的程式段是()。
A.p=&b; B. scanf("%d",&b);
scanf("%d", &p); *p=b;
C. p=&b; D. p=&b;
scanf("%d", *p); *p=a;
10.有如下語句:int m=6, n=9, *p, *q; p=&m; q=&n; 如圖1所示,若要實現下圖所示的儲存結構,可選用的賦值語句是()。
A. *p=*q; B. p=*q;
C. p=q; D. *p=q;
11.以下程式中呼叫scanf函式給變數a輸入數值的方法是錯誤的,其錯誤原因是()。
#include <stdio.h>
main()
{
int *p, *q, a, b;
p=&a;
printf("input a:");
scanf("%d", *p);
…
}
A. *p表示的是指標變數p的地址
B. *p表示的是變數a的值,而不是變數a的地址
C. *p表示的是指標變數p的值
D. *p只能用來說明p是一個指標變數
12.下面程式的功能是從輸入的十個字串中找出最長的那個串。請在________處填空。
#include "stdio.h"
#include "string.h"
#define N 10
main()
{
char s[N][81], * t;
int j;
for (j=0; j<N; j++)
gets (s[j]);
t= *s;
for (j=1; j<N; j++)
if(strlen(t)<strlen(s[j])) ________;
printf("the max length of ten strings is: %d, %s\n", strlen(t), t);
}
A. t=s[j] B. t=&s[j] C. t= s++ D. t=s[j][0]
13.下面判斷正確的是()。
A. char *s="girl"; 等價於 char *s; *s="girl";
B. char s[10]={"girl"}; 等價於 char s[10]; s[10]={"girl"};
C. char *s="girl"; 等價於 char *s; s="girl";
D. char s[4]= "boy", t[4]= "boy"; 等價於 char s[4]=t[4]= "boy"
14.設char *s="\ta\017bc";則指標變數s指向的字串所佔的位元組數是()。
A. 9 B. 5 C. 6 D. 7
15.下面程式段中,for迴圈的執行次數是()。
char *s="\ta\018bc";
for (;*s!='\0';s++) printf("*");
A. 9 B. 5 C. 6 D.7
16.以下不能正確進行字串賦初值的語句是()。
A. char str[5]= "good!";
B. char *str="good!";
C. char str[]="good!";
D. char str[5]={'g', 'o','o', 'd'};
17.若指標p已正確定義,要使p指向兩個連續的整型動態儲存單元,不正確的語句是()。
A. p=2*(int *)malloc(sizeof(int));
B. p=(int *)malloc(2*sizeof(int));
C. p=(int *)malloc(2*2);
D. p=(int*)calloc(2, sizeof(int));
18.下面程式段的執行結果是()。
char *s="abcde";
s+=2;
printf("%d", s);
A. cde B.字元'c' C.字元'c'的地址 D.無確定的輸出結果
19.設有如下的程式段:char s[]="girl", *t; t=s;則下列敘述正確的是()。
A. s和t完全相同
B. 陣列s中的內容和指標變數t中的內容相等
C. s陣列長度和t所指向的字串長度相等
D. *t與s[0]相等
20.以下正確的程式段是()。
A. char s[20]; B. char *s;
scanf("%s", &s); scanf("%s", s);
C. char s[20]; D. char s[20], *t=s;
scanf("%s",&s[2]); scanf("%s", t[2]);
21.下面程式段的執行結果是()。
#include "stdio.h"
main()
{
int m=10, n=20;
char *format="%s, m=%d, n=%d\n";
m*=n;
printf(format, "m*=n", m,n);
}
A. format, "m*=n", m, n B. format, "m*=n"
C. m*=n, m=200, n=20 D. 以上結果都不對
22.以下與庫函式strcpy(char *p, char *q)功能不相等的程式段是()。
A. strcpy1(char *p, char *q)
{ while ((*p++=*q++)!='\0');
}
B. strcpy2( char *p, char *q)
{ while((*p=*q)!='\0')
{p++; q++;}
}
C. strcpy3(char*p, char *q)
{ while (*p++=*q++);
}
D. strcpy4(char *p, char *q)
{ while(*p)
*p++=*q++;
}
23.下面程式段的執行結果是()。
#include "stdio.h"
main()
{
char s[]="example!", *t;
t=s;
while( *t!='p')
{ printf("%c",*t-32);
t++;}
}
A.EXAMPLE! B. example! C. EXAM D. example!
24.以下正確的程式段是()。
A. char s[]="12345", t[]="6543d21"; strcpy( s,t);
B. char s[20],*t="12345"; strcat(s,t);
C. char s[20]=" ", *t="12345";strcat(s, t);
D. char *s="12345", *t="54321"; strcat (s,t);
25.以下與庫函式strcmp(char *s, chat *t)的功能相等的程式段是()。
A. strcmp1(char *s, chat *t)
{ for ( ;*s++==*t++ ;)
if (*s=='\0') return 0;
return (*s-*t);
}
B. strcmp2(char *s, char *t)
{ for( ;*s++==*t++ ;)
if (!*s) return0;
return (*s-*t);
C. strcmp3(char *s, char *t)
{ for ( ;*t==*s ;)
{ if (!*t) return 0;
t++;
s++;}
return (*s-*t);
}
D. strcmp4(char *s, char *t)
{ for( ;*s==*t;s++,t++)
if (!*s) return 0;
return (*t-*s);
}
26.若有以下定義和語句:
int s[4][5], (*ps)[5];
ps=s;
則對s陣列元素的正確引用形式是()。
A. ps+1 B. *(ps+3) C. ps[0][2] D. *(ps+1)+3
27.不合法的main函式命令列引數表示形式是:()。
A. main( int a,char *c[]) B. main(int argc, char *argv)
C. main( intarc, char **arv) D. main( int argv, char*argc[])
28.若有說明語句:char s[]="it is a example.", *t="it is aexample.";則以下不正確的敘述()。
A. s表示的是第一個字元i的地址,s+1表示的是第二個字元t的地址
B. t指向另外的字串時,字串的長度不受限制
C. t變數中存放的地址值可以改變
D. s中只能存放16個字元
29.若已定義char s[10];則在下面表示式中不表示s[1]地址的是()。
A. s+1 B. s++ C. &s[0]+1 D. &s[1]
30.下面程式段的執行結果是()。(注:└┘代表空格)
#include "stdio.h"
main()
{ char s[6];
s="abcd";
printf("\"%s\"\n", s);
}
A. "abcd" B. "abcd└┘" C. \"abcd\" D.編譯出錯
31.執行以下程式後,a的值為【1】, b的值為【2】。
#include <stdio.h>
main()
{
int a, b, k=4, m=6, *p=&k, *q=&m;
a=p==&m;
b=(-*p)/(*q)+7;
printf("a=%d\n", a);
printf("b=%d\n", b);
}
【1】 A. -1 B. 1 C. 0 D. 4
【2】 A. 5 B. 6 C. 7 D. 10
32.下面程式的功能是將字串s的所有字元傳送到字串t中,要求每傳遞三個字元後再存放一個空格,例如字串s為"abcdefg",則字串t為"abc def g",請選擇填空。
#include "stdio.h"
#include "string.h"
main()