1下列语句的输出结果是______。C
int **pp,*p,a=5,b=8;
pp=&p;p=&a;p=&b;printf("%d,%d",*p,**pp);
A. 5,8 B.8,5 C. 8,8 D. 5,5
2如下程序的输出结果是______。B
#include <stdio.h>
#include <ctype.h>
#include <string.h>
void fun(char *p)
{ int i,k;
char s[30];
for(i=0,k=0;p[i]!='\0';i+=2)
if(!isspace(*p+i)&&(*(p+i)!='a'))
s[k++]=p[i];
s[k]='\0';
strcpy(p,s);}
main()
{ char s[30]="p r o g ra m e";
fun(s);
puts(s);
return;}
A.programe B.progr C. ame D. emargorp
3以下语句的输出结果是______。B
char s[]="one",*p=s;
printf("%d\n",*(p+3));
A. 字符e的地址 B. 0 C. 12 D. 20
4以下函数的功能是比较两个字符串s和t的大小,函数中应填入______。D
comp(char *s, char *t)
{ for (;*s==*t;______)
if (*s=='\0')
return(0);
return(*s-*t); }
A. s++ B. t++ C. s++;t++ D. s++,t++
5以下程序段的结果为______。B
static char s[]="language";
char *p;
for(p=s;p<s+8;p+=2)
putchar(*p);
A. language B. lnug C. agae D. 语法错误
6以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是______。B
#include <stdio.h>
void main()
{ int *p,a; p=&a;
printf("input a:");
scanf("%d",*p);
… }
A. *p表示的是指针变量p的地址。
B. *p表示的是变量a 的值,而不是变量a的地址。
C. *p表示的是指针变量p的值。
D. *p只能用来说明p是一个指针变量。
7在int (*p)[3]; 定义中,标识符p______。C
A.定义非法。
B.是一个指针数组,每个元素是一个指向整型变量的指针。
C.是一个指针,指向一个具有三个元素的一维数组。
D.是一个指向整型变量的指针。
8如下程序的执行结果是______。A
#include <stdio.h>
void main()
{ int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
int (*p)[4]=a,i,j,k=0;
for (i=0;i<3;i++)
for (j=0;j<2;j++)
k+=*(*(p+i)+j);
printf("%d\n",k); }
A. 60 B. 68 C. 99 D. 108
9能正确执行x和y交换且返回结果的函数是______。A
A. fun(int *x,int *y) B. fun(int x,int y)
{ int p; { int t;
p=*x;*x=*y;*y=p; } t=x;x=y;y=t; }
C. fun(int *x,int *y) D. fun(int *x,int *y)
{ *x=*y;*y=*x; } { *x=*x-*y; }
10若已知:int x; int y; 则下面表达式合法的是______。A
A. &x B. &(x+y) C.&5 D.&(y+1)
11下列程序段运行后输出______。D
char s1[5],s2[]="enjoy";
s1=s2;
printf("%s",s1);
A.enjoy B.joy C. en D. 编译出错
12以下程序调用findmax函数返回数组中的最大值,在下划线处应填入的是______。B
#include <stdio.h>
findmax(int *a,int n)
{ int *p,*s;
for(p=a,s=a; n>0;n--,p++)
if (_______) s=p;
return(*s); }
main()
{ int x[5]={12,21,13,6,18};
printf("%d\n",findmax(x,5)); return;}
A. p>s B. *p>*s C. a[p]>a[s] D. p-a>p-s
13以下程序的执行结果是______。C
#include <stdio.h>
void main()
{ int a=100,b=10,*p1,*p2;
p1=&b;p2=&a;
printf("%d,%d\n",*p1,*p2); return;}
A.分别是a和b的地址 B. 不确定的值
C. 10,100 D. 100,10
14如下程序的执行结果是______。C
#include <stdio.h>
void main()
{ char a[]="you are a boy",b[20];
int i;
for (i=0;*(a+i)!='\0';i++) *(b+i)=*(a+i);
*(b+i)='\0';
for (i=0;b[i]!='\0';i++) printf("%c",b[i]); }
A.不确定的值 B.字符串a的地址
C. you are a boy D.数组b的地址
15若有以下说明和语句, 则p2-p1的值为多少______。A
int a[10], *p1, *p2;
p1=a;
p2=&a[5];
A. 5 B. 6
C. 10 D. 没有指针与指针的减法
16已定义以下函数:fun(int *p) { return *p; }该函数的返回值是______。C
A.不确定的值 B.形参p中存放的值
C.形参p所指存储单元中的值 D.形参p的地址值
17以下程序的运行结果是______。C
#include <stdio.h>
void main()
{ int a[4][3]={ 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12};
int *p[4], j;
for(j=0; j<4; j++)
p[j]=a[j];
printf("%2d,%2d,%2d,%2d\n", *p[1], (*p)[1], p[3][2], *(p[3]+1));
}
A. 4, 4, 9, 8 B. 程序出错 C. 4, 2,12,11 D. 1, 1, 7, 5
18以下程序的输出结果是______。B
#include <stdio.h>
char cchar(char ch)
{ if(ch>='A'&&ch<='Z') ch=ch-'A'+'a';
return ch; }
main()
{ char s[]="ABC+abc=defDEF",*p=s;
while(*p)
{ *p=cchar(*p);
p++; }
printf("%s\n",s); return; }
A. abc+ABC=DEFdef B. abc+abc=defdef
C. abcaABCDEFdef D. abcabcdefdef
19已定义以下函数
fun(char *p2, char *p1)
{ while((*p2=*p1)!='\0'){ p1++;p2++; } }
函数的功能是:______。A
A.将p1所指字符串复制到p2所指内存空间。
B.将p1所指字符串的地址赋给指针p2。
C.对p1和p2两个指针所指字符串进行比较。
D.检查p1和p2两个指针所指字符串中是否有'\0'。
20执行以下语句后,a的值为______。C
int a,b,c,x=3,y=7,z=6;
int *p1=&x,*p2=&y,*p3;
a=p1==&x;
b=2*(-*p2)/(*p1)+5;
c=*(p3=&z)=*p1*(*p2);
A. -1 B. 0 C. 1 D.
21有以下程序:
#include <stdio.h>
void main()
{ char str[]="xyz",*ps=str;
while(*ps) ps++;
for(ps--; ps-str>=0;ps--) puts(ps); }
执行后输出结果是______。C
A. yz B. z C. z D. x
xyz yz yz xy
xyz xyz
22有以下程序:
#include <stdio.h>
void main( )
{ int a[][3]={{1,2,3},{4,5,0}},(*pa)[3],i;
pa=a;
for(i=0; i<3; i++)
if(i<2) pa[1][i] = pa[1][i]-1;
else pa[1][i]=1;
printf("%d\n",a[0][1]+a[1][1]+a[1][2]); }
执行后输出结果是______。A
A.7 B.6 C.8 D.无确定值
23下列语句执行后输出的结果是______。A
char *s1="world",*s2="word";
printf("%d\n",strlen(strcpy(s1,s2)));
A.4 B.5 C. 6 D. 7
24如下程序的执行结果是______。A
#include <stdio.h>
void main()
{ static char a[3][3]={{'A','B','C'},{'D','E','F'},{'G','H','I'}};
int i;
for (i=0;i<3;i++) printf("%c",*(*(a+i)+i)); }
A. AEI B. 不确定的值
C. ABC D. 分别为a[i][j]的地址
25执行以下程序后,b的值为______。A
#include <stdio.h>
void main()
{ static int a[]={6,2,8,4,3};
int i,b=1,*p;
p=&a[1];
for(i=0;i<4;i++)
b*=*(p+i);
printf("%d\n",b);
}
A.192 B.384 C. 64 D. 1152
判断
1一个数组的名字实际上是一个指针表达式。Y
2指针变量可以进行加减乘除运算。N
3 int *p表示定义了一个指向int类型数据的指针变量p。Y
4指针变量是把另一个变量的值作为其值的变量。N
5指针须先赋值后使用。Y
6以下程序:
#include <stdio.h>
void test(int x[],int n)
{ for(int i=0 ; i<n; i++) printf("%d",*x++ ); }
main()
{ int a[10]={1,2,3,4,5,6,7,8,9,10};
test(a,10); return; }
能正确输出a数组的值。N
7以下定义中int (*p)[4]与int *p[4]是等价的。N
8若有语句:int a=14, *p=&a;,则a,p,&*a均代表地址。N
9若有定义:int a[]={2,4,6,8,10,12}, *p=a;则*(p+5)的值是12。Y
10以下程序:
#include <stdio.h>
void main()
{ int x=2, y ; int *px=&x;
*(px+1)=5; y=*++px;
printf("y=%d\n", y); }
输出结果为y=5。Y
填空
1在C程序中,可以通过指针变量加一个整型常量 、指针变量减一个整型常量、___________三种运算移动指针。指针赋地址值
2以下程序的运行结果为___________。 1711717
#include <stdio.h>
#include <string.h>
void fun(char *p,int n)
{ char k,*p1,*p2;
p1=p;
p2=p+n-1;
while(p1<p2)
{k=*p1++;
*p1=*p2--;
*p2=k;} }
main()
{ static char s[]="1234567";
fun(s,strlen(s));
puts(s); return; }
3若有数组a[10],类型为int型,元素及值如下所示:
数组元素: a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]
元素中的值:9 4 8 3 2 6 7 0 1 5
则*(a+a[9])的值为___________。6
4以下程序完成查找某个数字在数组a中的位置的功能,请填空。a++
#include <stdio.h>
int *find(int a[],int n, int x)
{ int i=0;
while(i<n && *a!=x)
___________,i++;
if (i<n) return a;
else return NULL; }
main()
{ int a[10]={1,2,3,4,5,6,7,8,9,10};
int *p, x ;
printf("find what number?\n");
scanf("%d",&x);
p=find(a,10,x);
if (p!=NULL) printf("%d at a[%d]",x, p-a); return; }
5以下程序的输出结果是___________。Sapporo
#include <stdio.h>
void main()
{ char *a[4]={ "Tokyo","Osaka","Sapporo","Nagoya"};
printf("%s",*(a+2)); }
6以下程序用来输出字符串,请填空。*p
#include <stdio.h>
void main()
{ char *a[]={"for", "switch", "if", "while"};
char **p;
for(p=a; p<a+4; p++)
printf("%s\n",___________ ); }
7二维数组元素a[i][j]可用指针形式表示成*(___________)。a[i]+j
8执行以下程序段后, s的值是___________。16
int a[]={5,3,7,2,1,5,3,10},s=0,k;
for(k=0;k<8;k+=2) s+=*(a+k);
9以下程序运行后输入:3,abcde<回车>,则输出结果是___________。 cdeab
#include <stdio.h>
#include <string.h>
void move(char *str, int n)
{ char temp; int i;
temp=str[n-1];
for(i=n-1;i>0;i--) str[i]=str[i-1];
str[0]=temp; }
main()
{ char s[50]; int n, i, z;
scanf("%d,%s",&n,s);
z=strlen(s);
for(i=1; i<=n; i++) move(s, z);
printf("%s\n",s); return; }
10以下程序的执行结果是___________。0,6
#include <stdio.h>
void main()
{ int a[]={0,1,2,3,4,5,6},*p,i;
p=a;
*(p+4)+=2;
printf("%d,%d\n",*p,*(p+4)); }
11以下程序完成查找某个字符串是否在数组name中的功能,请填空。i<5
#include <stdio.h>
#include<string.h>
main()
{char *name[5]={"Li Hua","He Xiao Ming","Zhang Li","Sun Fei","Chen Bao"};
char in_name[20]; int i, flag=0;
printf("Enter your name:");
gets(in_name);
for(i=0; ___________; i++)
if (strcmp(name[i],in_name)==0) { flag=1; break; }
if (flag==1) printf("%s is in our class.\n", in_name);
else printf("%s is not in our class.\n", in_name); return; }
12以下程序的执行结果是___________。1357
#include <stdio.h>
void main()
{ char ch[2][5]={"1234","5678"},*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]>'\0' && p[i][j]<='9';j+=2)
s=10*s+p[i][j]-'0';
printf("%d\n",s); }
13以下程序的输出结果是___________。efgh
#include <stdio.h>
void main()
{ char *p="abcdefgh",*r;
long *q;
q=(long*)p;
q++;
r=(char*)q;
printf("%s\n",r); }
14在C程序中,可以通过地址运算符& 、malloc函数、___________三种方式为指针变量赋地址。赋值语句
15以下程序的执行结果是___________。6
#include <stdio.h>
void main()
{ int a[]={2,4,6},*p=&a[0],x=8,y,z;
for (y=0;y<3;y++) z=(*(p+y)<x)?*(p+y):x;
printf("%d\n",z); }