一、单项选择题
1.以下程序的输出结果是( B)。
main( )
{char a[10]={'1','2','3','4','5','6','7','8','9',0},*p;
int i;
i=8;
p=a+i;
printf("%s\n",p-3);
}
A) 6
B) 6789
C) ‘6’
D) 789
2.以下程序的运行结果是( A )。
#include "stdio.h"
main( )
{int a[ ]={1,2,3,4,5,6,7,8,9,10,11,12};
int *p=a+5,*q=NULL;
*q=*(p+5);
printf("%d %d\n", *p, *q);
}
A) 运行后报错
B) 6 6
C) 6 11
D) 5 5
3.若有以下的说明和语句,则在执行for语句后,*(*(pt+l)+2)表示的数组元素是( C )。
int t[3][3],*pt[3],k;
for(k=0; k<3; k++) pt[k]=&t[k][0];
A) t[2][0]
B) t[2][2]
C) t[l][2]
D) t[2][l]
4.下面程序把数组元素中的最大值放入a[0]中,则在if语句中的条件表达式应该是( B )。
main( )
{int a[10]={6,7,2,9,1,10,5,8,4,3}, *p=a, i;
for(i=0; i<10; i++, p++)
if(________) *a=*p;
printf("%d",*a);
}
A) p>a
B) *p>a[0]
C) *p>*a[0]
D) *p[0]> *a[0]
5.以下程序的输出结果是( A )。
#include
#include
main( )
{char *a="abcdefghi";
int k;
fun (a); puts(a);
}
fun(char *s)
{int x, y;
char c;
for(x=0, y=strlen(s)-1; x {c=s[y]; s[y]=s[x]; s[x]=c;} } A) ihgfedcba B) abcdefghi C) abcdedeba D) ihgfefghi 6.以下程序的输出结果是( B )。 main( ) {char *s="12134211";int v[4]={0,0,0,0},k,i; for(k=0;s[k];k++) {switch(s[k]) {case '1':i=0; case '2':i=1; case '3':i=2; case '4':i=3; } v[i]++; } for(k=0;k<4;k++) printf("%d ",v[k]); } A) 4 2 1 1 B) 0 0 0 8 C) 4 6 7 8 D) 8 8 8 8 7.以下程序的输出结果是( D )。 #include main( ) {char *p1,*p2,str[50]="ABCDEFG"; p1="abcd";p2="efgh"; strcpy(str+1,p2+1);strcpy(str+3,p1+3); printf("%s",str);str+1表示数组第二个数据B,p2+1指向f,即把fgh复制到BCD的位置,同时复制‘\0’ } A) AfghdEFG B) Abfhd C) Afghd D) Afgd 8.若有以下定义和语句: double r=99,*p=&r; *p=r; 则以下正确的叙述是( D )。 A) 以上两处的*p含义相同,都说明给指针变量p赋值 B) 在"double r=99,*p=&r; "中,把r的地址赋给了p所指的存储单元 C) 语句"*p=r; "把变量r的值赋给指针变量p D) 语句"*p=r; "取变量r的值放回r中 9.若已定义: int a[ ]={0,1,2,3,4,5,6,7,8,9}, *p=a, i; 其中0≤ i ≤9, 则对a数组元素不正确的引用是( D )。 A) a[p-a] B) *(&a[i]) C) p[i] D) *(*(a+i))=*a[i] 10.下列程序执行后的输出结果是( A )。 void func(int *a, int b[ ]) {b[0]=*a+6;} main() {int a, b[5]; a=0; b[0]=3; func(&a, B); printf("%d\n", b[0]); } A) 6 B) 3 C) 8 D) 9 11.下列程序执行后的输出结果是( B )。 main() {int a[3][3], *p, i; p=&a[0][0]; for(i=0; i<9; i++) p[i]=i+1; printf("%d\n", a[1][2]); } A) 3 B) 6 C) 9 D) 随机数 12.请选出正确的程序段( C )。 A) int *p; B) int *s, k; C) int *s, k; D) int *s, k; scanf("%d", p); *s=100; char *p, c; char *p, c; s=&k; s=&k; p=&c; p=&c; *p='a'; s=p; *s=1; 13.已知指针p的指向如下图所示,则执行语句 *- -p; 后*p的值是( B )。 a[0] a[1] a[2] a[3] a[4] 1020304050 A) 30 B) 20 C) 19 D) 29 14.设已有定义: char *st="how are you";下列程序段中正确的是( A )。 A) char a[11], *p; strcpy(p=a+1, &st[4]); B) char a[11]; strcpy(++a, st); C) char a[11]; strcpy(a, st); D) char a[ ], *p; strcpy(p=&a[1], st+2); 15.以下程序的输出结果是( C )。 main( ) {int i, x[3][3]={9, 8, 7, 6, 5, 4, 3, 2, 1}, *p=&x[1][1]; for(i=0; i<4; i+=2) printf("%d ", p[i]); } A) 5 2 B) 5 1 C) 5 3 D) 9 7 16.若有说明:int i, j=2,*p=&i;,则能完成i=j赋值功能的语句是( B )。 A) i=*p; B) *p=*&j; C) i=&j; D) i=**p; 17.以下定义语句中,错误的是(D )。 A) int a[ ]={1,2}; B) char *a[3]; C) char s[10]="test"; D) int n=5,a[n]; 18.下列程序段的输出结果是(A )。 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); } A) 2 1 4 3 B) 1 2 1 2 C) 1 2 3 4 D) 2 1 1 2
北京 | 天津 | 上海 | 江苏 | 山东 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
广东 | 河北 | 湖南 | 广西 | 河南 |
海南 | 湖北 | 四川 | 重庆 | 云南 |
贵州 | 西藏 | 新疆 | 陕西 | 山西 |
宁夏 | 甘肃 | 青海 | 辽宁 | 吉林 |
黑龙江 | 内蒙古 |