Untitled Document

一：选择题
1． 下面函数的功能是：（ ）
int fun(char *x)
{
char *y=x;
while(*y++){};
return y-x-1;
}
a. 求字符串的长度
b. 求字符串存放位置
c. 比较两个字符串的大小
d. 将字符串x连接到字符串y后面
2． 若有以下说明和语句，且0<i<10,则（ ）是对数组元素的错误引用。
int a[ ]={1,2,3,4,5,6,7,8,9,0},*p,i;
p=a;
a. *(a+i)
b. a[p-a]
c. p+i
d. *(&a[i])
3． 下面程序的输出是：（ ）
#include <stdio.h>
void main( )
{
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
printf("%d", *(p+2));
}
a. 3
b. 4
c. 1
d. 2
4． 若有以下定义和语句，且0<i<10,则对数组元素地址的正确表示是：（ ）
int a[ ]={1,2,3,4,5,6,7,8,9,0},*p,i;
p=a;
a. &(a+1)
b. a++
c. *p
d. &p[i]
5．已知：int a,x=1;则下面正确的赋值语句是：（ ）
a． a=(a[1]+a[2])/2;
b． a=(a[1]+a[2])/2;
c． a=x+2;
d． a="good";
6．已知：int a[]={1,2,3,4,5,6}，*p=a；下面表达式中其值为5的是：（ ）
a.p+=3;*(p++);
b.p+=5;*p++ ;
c.p+=4;*++p;
d.p+=4;++*p;
7． 若有以下语句，且0<=k<6，则正确表示数组元素地址的语句是（ ）
int x[]={1,9,10,7,32,4},*ptr=x,k=1;
a.x++
b.&ptr
c.&ptr[k]
d.&(x+1)
8．若有说明：int i,j=7,*p;p=&i；则与i=j等价的语句是（ ）
a.i=*p;
b.*p=*&j;
c.i=&j
d.i=**p;
9． 设p1和p2是指向同一个int型一维数组的指针变量，k为int型变量，则不能正确执行的语句是（ ）
a.k=*p1+*p2;
b.p2=k;
c.p1=p2;
d.k=*p1*(*p2);
10． 设有以下函数定义，则该函数返回的值是（ ）
int * fun(int a)
{
int *t,n;
n=a;t=&n;
return t;
}
a.一个不可用的存储单元地址值
b.一个可用的存储单元地址值
c.n中的值
d.形参a中的值
二：填空题
1、 给出以下程序的输出结果是
#include<stdio.h>
void main()
{
int *v,b;
v=&b; b=100; *v+=b;
printf("%d\n",b);
}
2、 说明语句"int (* p)();"的含义是
3、 已知函数说明语句：void *fun();则它的含义是
4、 已知：int i;char *s="a\045+045\'b"；执行语句"fot(i=0;*s++;i++);"之后，变量i的结果是
5、下面的程序是求两个整数之和，并通过形参传回结果。
int add(intx,int y, z)
{ =x+y;}
6、给出以下程序的输出结果是
void fun(int *x)
{ printf("%d\n",++*x)'; }
main()
{
int a=25;
fun(&a);
}
7、给出以下程序运行的结果
#include <stdio.h>
void main( )
{
int a[ ]={1,2,3,4,5};
int x, y, *p;
p=&a[0];
x=*(p+2);
y=*(p+4);
printf("*p=%d,x=%d,y=%d\n",*p,x,y);
return;
}
8、给出以下程序运行的结果
#include<iostream.h>
void callbyval(int a,int b,int c)
{
a=3;b=2;c=1;
}
void callbypointer(int* a,int* b,int* c)
{
*a=3;*b=2;*c=1;
}
void callbyreference(int& a,int& b,int& c)
{
a=1;b=2;c=3;
}
void main()
{
int a=1,b=2,c=3;
int& a1=a;
int& b1=a;
int& c1=a;
callbyval(a,b,c);
cout<<a<<b<<c<<endl;
callbypointer(&a,&b,&c);
cout<<a<<b<<c<<endl;
callbyreference(a1,b1,c1);
cout<<a<<b<<c<<endl;
}
9、给出以下程序运行的结果
#include<iostream.h>
void ast(int x,int y,int *cp,int *dp)
{
*cp=x*y;
*dp=x%y;
}
void main()
{
int a,b,c,d;
a=2; b=3;
ast(a,b,&c,&d);
cout<<c<<d<<endl;
}
10、给出以下程序运行的结果
#include <stdio.h>
void main( )
{
int a=10,b=0,*pa, *pb;
pa=&a; pb=&b;
printf("%d,%d\n",a,b);
printf("%d,%d\n",*pa,*pb);
a=20; b=30;
*pa=a++; *pb=b++;
printf("%d,%d\n",a,b);
printf("%d,%d\n",*pa,*pb);
(*pa)++;
(*pb)++;
printf("%d,%d\n",a,b);
printf("%d,%d\n",*pa,*pb);
}
三：简答和编程题
1． 判断执行下面的语句后，ab的值变为多少
int *var, ab;
ab=100;
var=&ab;
ab=*var+10;
2．已知指针p的指向下图所示，则表达式*--p的值是多少？（这里，a[0],a[1],a[2]……仅作为连续存储单元的代号，a[0]在低地址，a[1]在高地址）。
3． 有定义：double var;那么，
a) 使指针p可以指向double型变量的定义语句是什么？
b) 使指针p指向变量var的赋值语句是什么？
c) 通过指针p给变量var读入数据的scanf函数调用语句是什么？
4．写一个函数，求一个字符串的长度，在main函数中输入字符串，并输出其长度。
5．编程实现：从键盘输入一任意字符串，然后，输入所要查找字符。存在则返回它第一次在字符串中出现的位置；否则，输出"在字符串中查找不到！" 。并实现对同一字符串，能连续输入所要查找的字符。
6．编程实现：从字符串中删除子字符串。从键盘输入一字符串，然后，输入要删除的子字符串。最后输出删除子串后的新字符串。