1有以下程序:
#include <stdio.h>
void fun( int *a, int i, int j)
{ int t;
if(i<j) { t=a[i]; a[i]=a[j]; a[j]=t;
fun(a,++i,--j); } }
main()
{ int a[]={1,2,3,4,5,6},i;
fun(a,0,5);
for(i=0; i<6; i++)
printf("%d ",a[i]); return; }
执行后输出结果是______。A
A.6 5 4 3 2 1 B.4 3 2 1 5 6 C.4 5 6 1 2 3 D.1 2 3 4 5 6
2以下语句的输出结果是______。B
char s[]="\t\ \chinese\ \girl\n";
printf("%d",strlen(s));
A. 12 B.15 C. 13 D. 14
3有以下程序:
#include <stdio.h>
void main()
{ char *s[]={"one","two","three"},*p;
p=s[1];
printf("%c,%s\n",*(p+1), s[0]); }
执行后输出结果是______。C
A. n, two B. t, one C. w, one D. o, two
4若已知说明语句:int a, s[3][3]; 则不能将s[2][1]的值赋给变量a的语句是______。D
A. a=s[2][1]; B.a=*(*(s+2)+1); C. a=*(s[2]+1); D. a=*(*(s+2));
5以下程序的执行结果是______。C
#include <stdio.h>
void main()
{ int i,*p;
p=&i;
*p=8;
printf("i=%d ",i);
}
A. i为不定值 B. i=0
C. i=8 D.程序有错误
6以下程序:
#include <stdio.h>
char fun(char *p)
{ if(*p>='A'&&*p<='Z')
*p-='A'-'a';
return *p;}
main()
{ char s[80],*p=s;
gets(s);
while(*p)
{*p=fun(p);
putchar(*p);
p++;}
return;}
当输入BIG BIG WORLD回车,则输出结果是______。C
A. big big WORLD B. BIG BIG world
C. big big world D. BIG BIG WORLD
7以下程序的运行结果是______。C
#include <stdio.h>
void abc(char *p)
{ int i, j;
for(i=j=0; *(p+i)!='\0'; i++)
if(*(p+i)<'n')
{ *(p+j)=*(p+i);
j++; }
*(p+j)='\0'; }
main()
{ char str[]="morning";
abc(str);
puts(str); return; }
A. morig B. morning C. mig D. or
8设int x []={4,2,3,1},q,*p=&x[1];则执行语句q=(*--p)++后,变量q的值为 ______。A
A.4 B.3 C.2 D.1
9有以下程序:
#include <stdio.h>
#include <string.h>
void main()
{ char str[][20]={"Hello","Beijing"},*p=str;
printf("%d\n",strlen(p+20)); }
程序运行后的输出结果是______。C
A.0 B.5 C.7 D.20
10定义compare(char *s1, char *s2)函数,以实现比较两个字符串大小的功能,在下划线处应填入的是______。B
#include <stdio.h>
compare(char *s1, char *s2)
{ while(*s1&&*s2&& _______ )
{ s1++;
s2++; }
return *s1-*s2; }
main()
{ printf("%d\n", compare("abCd", "abc"); return; }
A. *s1!=*s2 B. *s1==*s2 C. *s1=*s2 D. s1!=s2
11如下程序的执行结果是_______。A
#include <stdio.h>
void main()
{ int a[]={2,4,6,8},*p=a,i;
for (i=0;i<4;i++)
a[i]=*p++;
printf("%d\n",a[2]); }
A.6 B. 8 C. 4 D. 2
12以下程序的输出结果是______。D
#include <stdio.h>
void main()
{ int a[12]={1,2,3,4,5,6,7,8,9,10,11,12}, *p[4],i;
for(i=0;i<4;i++)
p[i]=&a[i*3];
printf("%d\n",p[3][2]); }
A. 输出项不合法 B. 6
C. 8 D. 12
13若已有定义int (*p)(); 则指针p______。B
A. 代表函数的返回值 B. 指向函数的入口地址
C. 表示函数的类型 D. 表示函数返回值的类型
14以下程序段的输出结果是______。D
int **pp,*p,a=10,b=20;
pp=&p;p=&a;p=&b;
printf("%d,%d\n",*p,**pp);
A.10,20 B.10,10 C.20,10 D. 20,20
15阅读以下函数:
fun(char *s1,char *s2)
{ int i=0;
while(s1[i]==s2[i] && s2[i]!='\0') i++;
return (s1[i]=='\0' && s2[i]=='\0'); }
此函数的功能是______。C
A.将s2所指字符串赋给s1。
B.比较s1和s2所指字符串的大小,若s1比s2的大,函数值为1,否则函数值为0。
C.比较s1和s2所指字符串是否相等,若相等,函数值为1,否则函数值为0。
D.比较s1和s2所指字符串的长度,若s1比s2的长,函数值为1,否则函数值为0。
16以下程序的运行结果是______。D
#include <stdio.h>
void fun(char *s);
main()
{ static char str[]="123";
fun(str); return;}
void fun(char *s)
{ if(*s)
{ fun(++s);
printf("%s\n", --s); } }
A. 3 B. 123 C. 1 D. 3
32 12 12 23
321 1 123 123
17以下程序的输出结果是______。D
#include <stdio.h>
void main()
{ int a[]={1,2,3,4,5,6},*p;
p=a;
*(p+3)+=2;
printf("%d,%d\n",*p,*(p+3)); }
A. 0,5 B. 1,5 C. 0,6 D. 1,6
18执行以下程序段后,a的值是______。B
static int s[]={6,8,2,5,4,9,1,3};
int a=0,i;
for(i=1;i<8;i+=2)
a+=*(s+i);
A. 13 B.25 C. 15 D. 不确定
19 有以下程序:
#include <stdio.h>
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); return; }
程序运行后的输出结果是______。A
A.Ab B.aa C.Aa D.Bb
20在说明语句:int *f();中,标识符f代表的是______。D
A. 一个用于指向整型数据的指针变量。
B. 一个用于指向一维数组的行指针。
C. 一个用于指向函数的指针变量。
D. 一个返回值为指针型的函数名。
21有如下语句说明:
- char(*ptr)[5]; 2. int *fip(); 3. int (*pfi)(); 4. int **pfpi;
正确的说法是______。B
A.第1个不合法 B.都合法 C.第3个不合法 D.第4个不合法
22以下程序的输出结果为______。D
static char s[]="language";
char *p;
p=s;
while(*p)
printf("%c",*p-32);
p++;
A. LANGUAGE B. LANG C. language D. 陷入死循环
23有以下程序段:
#include <stdio.h>
void main()
{ int a=5,*b,**c;
c=&b; b=&a;
...... }
程序在执行了c=&b;b=&a;语句后,表达式:**c的值是______。C
- 变量a的地址 B.变量b中的值 C.变量a中的值 D.变量b的地址
24若有定义char *language[]={"FORTRAN", "BASIC", "PASCAL", "JAVA", "C"}; 则language[2]的值是______。B
A. 一个字符 B. 一个地址 C. 一个字符串 D. 不定值
25以下程序的运行结果是______。D
#include <stdio.h>
void sub(int *x, int y, int z)
{ *x=y-z; }
main()
{ int a, b, c;
sub(&a, 10, 5);
sub(&b, a, 7);
sub(&c, a, b);
printf("%d,%d,%d\n", a, b, c); return; }
A. 10,-2,5 B. 10,5,7 C. 10,-2,7 D. 5,-2,7
判断
1 《缺失》
2内存单元间接访问是直接根据变量名存取变量的值。N
3int *p[3];定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素。N
4以下程序:
#include <stdio.h>
void main()
{ int a[5]={2,1,3,4,5};
int *p1,*p2,num;
p1=&a[0]; p2=&a[3]; num=p2-p1;
printf("num=%d\n",num); }
输出结果为num=2。N
5当指针p指向数组a的首址后,由于p[i]和a[i]都能引用数组元素,所以这里p和a是等价的。N
6数组名代表数组的起始地址。Y
7当两个指针指向同一数组时,两个指针相减的差即为两个指针相隔的元素个数。Y
8各个变量定义为:int i;char c,*s;float f,g;
则表达式 *(s+i)+(int)f和 *s+(int)c均为整型。Y
9以下程序:
#include <stdio.h>
void swap(int *,int *);
main()
{ int a=3, b=8;
swap(&a, &b);
printf("a=%d, b=%d\n",a,b); return; }
void swap(int * x , int * y)
{ int temp=*x; *x=*y; *y=temp; }
输出结果为:a=3,b=8。N
10指针变量本身也是一种变量,它存放各种类型数据的地址。Y
填空
1以下程序的运行结果是___________。1 3 5 7 9
#include <stdio.h>
main ( )
{ static int a[10],i;
for (i=0;i<10;i++) a[i]=i+1;
for (i=0;i<10;i=i+2) printf("%d ",*(a+i)); return;}
2以下函数的功能是删除字符串s中的所有数字字符,请填空。s[i]<'0'|| s[i]>'9' 或 !(s[i]>='0'&&s[i]<='9')
void dele(char *s)
{ int n=0,i;
for(i=0; s[i]; i++)
if (___________ )
s[n++]=s[i];
s[n]= '\0' ; }
3定义int a[]={1,2,3,4,5},*p=a; 表达式*++p的值是___________。2
4下面程序是判断输入的字符是否中心对称,(如"xyzzyx"和"xyzyx"都中心对称),请填空。p2--
#include <stdio.h>
#include <string.h>
main()
{ char s[100],*p1,*p2; int n;
gets(s);
n=strlen(s);
p1=s;
p2= s+n-1 ;
while(p1<p2)
if (*p1!=*p2) break;
else {p1++; ___________ ;}
if (p1<p2) printf("NO\n");
else printf("YES\n"); return;}
5以下程序的执行结果是___________。3,4,5,
#include <stdio.h>
void main()
{ int a[5]={3,4,5,6,7}; int i,*p;
for (p=a;p<(a+3);p++) printf("%d,",*p); }
6若有以下程序:
#include <stdio.h>
int f(int x, int y)
{ return (y-x)*x; }
main()
{ int a=3,b=4,c=5,d;
d = f(f(3,4),f(3,5));
printf("%d\n",d); return; }
执行后输出结果是___________。9
7以下程序的fun函数用于统计字符串s中元音字母(a,A,e,E,i,I,o,O,u,U)的个数,请填空。==*s
#include <stdio.h>
fun(char *s)
{ char a[]="aAeEiIoOuU", *p;
int n=0;
while( *s!='\0' )
{ for(p=a; *p; p++)
if(*p ___________ )
{ n++;
break; }
s++; }
return n; }
main()
{ char str[255];
gets(str);
printf("元音字母的个数为: %d\n", fun(str)); return; }
8以下程序的执行结果是___________。5,2
#include <stdio.h>
void main()
{ int a[2],*p=a;
*p=2;
p++;*p=5;
printf("%d,",*p);
p--;
printf("%d\n",*p); }
9若有定义:int a[3][2]={2,4,6,8,10,12};则*(a[1]+1)的值是___________。8
10以下程序的执行结果是___________。i=10,j=2
#include <stdio.h>
void main()
{ int i,j,*p,*q;
i=2;j=10;
p=&i;q=&j;
*p=10;*q=2;
printf("i=%d,j=%d\n",i,j); }
11以下程序段的输出结果是___________。4
float a[8]= {1,2,3,4,5,6,7,8};
float *p1,*p2;
int b;
p1=&a[3];
p2=&a[7];
b=p2-p1;
printf("%d\n",b);
12执行以下程序段后,指针变量p所指对象的值为____________。3
static int a[8]={1,2,3,4,5,6,7,8};
int *p;
p=a;
p++;
p+=6;
p--;
p-=3;
13若有以下定义和语句:
int a[4]={0,1,2,3},*p;
p=&a[2];
则*--p的值是___________。1
14以下程序的执行结果是___________。1,2,3,4,5,
#include <stdio.h>
void main()
{ int a[5]={1,2,3,4,5};
int i;
for (i=0;i<5;i++) printf("%d,",*(a+i)); }
15当程序输入0 -5 3时,程序依次输出哪三个数? 、、___。-5 0 3
#include <stdio.h>
#define SIZE 3
void swap(int *a,int *b);
main()
{ int data[SIZE];
int i,j;
for(i=0;i<SIZE;i++) scanf("%d",&data[i]);
for(i=0;i<SIZE-1;i++)
for(j=i+1;j<SIZE;j++)
if(data[i]>data[j]) swap(&data[i],&data[j]);
for(i=0;i<SIZE;i++) printf("%d ",data[i]); return; }
void swap(int *a,int *b)
{ int temp;
temp=*a;*a=*b;*b=temp; }