C语言程序设计指针答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言程序设计上机指针
注:本次上机无需上交上机报告。
一、选择题
1. 变量的指针,其含义是指该变量的()。
A. 值
B. 地址
C. 名
D. 一个标志
2. 已有定义int k=2,*ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是()。
A. k=*ptr1+*ptr2
B. ptr2=k
C. ptr1=ptr2
D. k=*ptr1*(*ptr2)
3. 若有说明:int *p,m=5,n; 以下程序段正确的是()。
A. p=&n; scanf(“%d”,&p);
B. p = &n ; scanf(“%d”,*p);
C. scanf(“%d”,&n); *p=n ;
D. p = &n ; *p = m ;
4. 若有说明:int *p1, *p2,m=5,n;以下均是正确赋值语句的选项是()。
A. p1=&m; p2=&p1 ;
B. p1=&m; p2=&n; *p1=*p2 ;
C. p1=&m; p2=p1 ;
D. p1=&m; *p1=*p2 ;
5. 若有语句:int *p,a=4;和p=&a;下面均代表地址的一组选项是()。
A. a, p, *&a
B. &*a,&a,*p
C. *&p,*p,&a
D. &a,&*p,p
6. 下面程序段中,for循环的执行次数是()。
A. 9
B. 7
C. 6
D. 5
char *s=”\ta\018bc” ;
for ( ; *s!=’\0’ ; s++) printf(“*”) ;
7. 下面不能正确进行字符串赋值操作的是()。
A. char s[5]={“ABCDE”};
B. char s[5]={‘A’,’B’,’C’,’D’,’E’};
C. char *s ; s=”ABCDE” ;
D. char *s; scanf(“%s”,s) ;s无初值。
8. 下面程序段的运行结果是()。
char *s=”abcde” ; s+=2 ; printf(“%s”,s);
A. cde
B. 字符’c’
C. 字符’c’的地址
D. 不确定
9. p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是()。
A. c=*p1+*p2
B. p2=c
C. p1=p2
D. c=*p1*(*p2)
10. 以下说明不正确的是()。
A. char a[10]=”china” ;
B. char a[10],*p=a; p=”china”;
C. char *a; a=”china” ;
D. char a[10],*p; p=a=”china”;
11. 若有定义:int a[5];则a数组中首元素的地址可以表示为()。
A. &a
B. a+1
C. a
D. &a[1]
12. 已有函数max(a,b),为了让函数指针变量p指向max,正确的方法是()。
A. p=max;
B. p=max(a,b);
C. *p=max;
D.
*p=max(a,b);
13. 对于类型相同的指针变量,不能进行哪种运算?
A. +
B. -
C. %
D. ==
14. 若有以下说明和语句,则p1-p2的值为多少?
int a[10], *p1, *p2; p1=a; p2=&a[5];
A. -5
B. 6
C. -10
D. 非法
15. main()函数可以带两个形参,一般分为argc和argv,其中argv可以定义为()。
A. int argv;
B. char * argv[];
C. char argv[];
D. char ** argv[];
16. 若有定义:int (*p)[4];则标识符p()。
A. 是一个指向整型变量的指针
B. 是一个指针数组名
C. 是一个指针,它指向一个含有四个整型元素的一维数组
D. 定义不合法
17. 以下与int *q[5];等价的定义语句是()。
A. int q[5]
B. int *q
C. int *(q[5])
D. int (*q)[5]
18. 已有定义int (*p)( );指针p可以()。
A. 代表函数的返回值
B. 指向函数的入口地址
C. 表示函数的类型
D. 表示函数返回值的类型
二. 填空题
1. 设int a[10]={1,2,3}; 则*(a+3)的值是_______0_________。
2. 设TC2.0中,int a[3][4] = {{2},{3}}; 若数组a的起始地址为2000,则a+1的地址值是_____2008________________。
3. 设int a[2][4],(*p)[4]=a; 用指针变量p表示数组元素a[1][2]为_____________。
4. 对于数据定义及说明:“ int *p, *q[10], (*r)(), *s(); ”,其中p,q,r,s的含义分别:
p指针变量,
q数组名,此数组中的所有元素都是指针变量,
r指向函数的指针,
s函数名,函数的返回值是指针。
5. 若有定义:int a[2][3]={2,4,6, 8,10,12};则*(&a[0][0]+2*2+1)的值是12 ,*(a[1]+2)的值是12 。
三. 程序分析题,写出以下程序的执行结果,先分析,再上机验证。
1. void del (char *s,char c )
{ int i,j;
for (i=j=0; s[i]!='\0'; i++)
if ( s[i] == c) s[j++]=s[i];
s[j]='\0';
}
main()
{ char s[]="the c language";
del(s,'g'); puts(s);
}
2. #include
#include
void fun(char *p,int n)
{ char *i,*j,t;