C语言习题3第六章 指针
- 格式:doc
- 大小:49.50 KB
- 文档页数:4
第六章指针一.单项选择题1.若有定义语句“int m,n=2,*p=&m;”,则能完成m=n功能的语句是()A. m=*p;B.*p=*&n;C.m=&n;D. m=&p;2. 设有定义语句“int n=2,*p=&n,*q=p;”,则非法的赋值语句是()A. p=q;B.*p=*q;C. n=*q;D. p=n;3设有定义语句“int a,k=2,m=2,*p1=&k,*p2=&m;”,则p1==&m的值是()A.0 B. 1 C. 2 D.44设有定义语句“int x[8]={5,4,3,2,1},*p=x;”则*p+6的值是()A. 0B.1C.5D.115设有定义语句“int x[8]={5,4,3,2,1},*p=x+1;”,则*--p的值是()A.5 B.4 C.3 D语法错误6设有定义语句“int x[8]={1,2,3,,4,5,6},*p=x;”,则值为5的表达式是()A.*p+5; B.*(p+4) C.*p+=5 D. p+47设有定义语句“int x[4]={1,2,3},*p=x;”,则值不确定的表达式是()A.x[p-x] B. *(&x[x[1]]) c. p[x[2]] D.*(p+4)8设有定义“int a=3,b,*p=&a;”则下列语句中不能使b为3的语句是()A.b=*&a; B. b=*p; C.b=*a; D. b=a;9设有定义语句“int x[8]={1,2,3,,4,5,6},*p=x;”,则值为5的表达式是()A. p+=4,*(p++)B.p+=4,*++pC.p+=4,++*pD.p+=5,*p++10.设有定义“int a[2][3],(*p)[3]=a;”,则a[1][0]的地址描述正确的是()A.*(p+1) B. a+1 C. *(a+1) D.*(p-1)11.下列程序段的输出结果是()mian(){int a[]={2,4,6,8,10},*p=&a[1],y,x;for(x=y=0;x<3;x++) y+=*(p+x);printf(“%d\n”,y);}A. 12B.18C.20D.2813.下列程序段中,有错误的是()A.char s[10];s=”12345”; B. char s[10],*p;p=”12345”;C. char s[10]=”12345”;D. char *s=”12345”;14 设有数据定义语句“char s[20]=”programming”,*p=s;”,则下列表达式中,结果不是字符o 的表达式是()A.p+2 B.*(s+2) C. *(p+2) D. p+=2,*p15.设有数据定义语句“char *s=”123!456!789”;”,则下列程序段语法正确,运算结果不会出错的是()A.char a[11],*p;strcpy(a+1,s+4); B.char a[11];strcpy(++a,s);C. char a[11],strcpy(a‟s);D.char a[],*p;strcpy(&a[1],s+2);16.运行下列程序段,可能发生错误的程序段是()A.char s[6]={“ABCDE”};s[4]=‟\n‟; B.char s[5],*p=s;p[4]=‟\0‟;C. char *s;s=”ABCDEF”;D. char *s;scanf(“%s”,s);17设有定义语句“int a,*p=&a;”则下列表达式中错误的是()A.*&a B. &*a C. *&p D. &*p18.运行下列程序时,输出结果是()char *s1=”12345”,*s2=”1234”;printf(“%d\n”,strlen(strcpy(s1,s2)));A.4B.5C.9 D1019.运行下列程序段时,输出结果是()char *p1=”abcd”,*p2=”ABCD”,s[50]=”xyz”;strcpy(s+2,strcat(p1+1,p2+1)) ;printf(“%s”,s);A.xyabABB. abcABzC.ABabczD. xycdBCD20.设有定义语句“char *s[2]={“abcd”,”ABCD”};”,则正确的说法是()A.s数组的两个元素的值分别是字符串“abcd”和字符串“ABCD”.B s是指针变量,它指向含有两个数组的字符型一维数组。
C s数组的两个元素存放的是字符串“abcd”和字符串“ABCD”的首地址.D.s数组的两个元素中各自存放了字符‟a‟和‟A‟.填空题:1) 若定义了int a[10],*p;,将数组元素a[8]的地址赋给指针变量p的赋值语句是______ 。
2) 设有数据定义语句“int k=4, *p1=&k;”,则表达式“p1= =&k”的值是________ 。
3)设有数据定义语句“int a[]={30,25,20,15,10,5}, *p=a;”,则表达式“*++p+3”的值是______________ 。
4)设有数据定义语句“int x[10]={23,54,10,33,47,98,72,80,61}, *p=x;”,在不改变指针变量p 值的前提下,表示值为80的数组元素的表达式是______________ 。
5)设有数据定义语句“long a[10],*p=a+1, *q=&a[3];”,则表达式“p-q”的值是_____ 。
6)下列程序段的输出结果是__________ 。
int k=3;char *a=”1234”;printf(“%c%c\n”,a[k],*(a+k-1));7)下列程序段的输出结果是________ 。
char b[]=”1234”, *p=b;for(; *p; p+=2) printf(“%s\n”,p+1);8)执行下列程序后,*p等于________ 。
int a[5]={1,3,5,7,9}, *p;p = a; p++;程序分析题:阅读下列程序,将输出结果写到各题右侧的空白处。
1.main(){ int a[]={1,2,3,4,5,6};int *p;int i; p=a;*(p+3)+=2;printf(“%d,%d\n”,*p,*(p+3));}2.main(){ int x=20,y=10,*p;p=&x; printf(“%d ,”, *p);*p=x+10;p=&y; printf(“%d\n”,*p);*p=y+20;printf(“%d,%d\n”,x,y);}3.#include “stdio.h”main(){ char s[]=”ABCDEFG”,*p=s+7;while(- -p>&s[0])putchar(*p);}4.假定运行下列程序时,从键盘上输入如下:1234<回车键>12345<回车键>#include”stdio.h”main(){ char *s1=”ABCDEFGHIJK”,*s2=”ABCDEFGHIJK”;gets(s1); gets(s2);if(!strcmp(s1,s2))printf(“*”);else printf(“#”);printf(“%d\n”,strlen(strcat(s1,s2)));}5.main(){ int x[3][6]={{1,2,3},{4,5,6},{7,8,9}}, (*p) [6]=x,s=0,k;for( k=0;k<6; k++)s=s+*(*(p+1)+k);printf(“%d\n”,s);}程序填充题:阅读下列程序,将横线处缺少的部分补上,使其能正确运行。
1.下列程序功能是输入两个字符串分别存入字符型数组s1和s2中,然后将数组s2中的字符串连接到数组s1的后面,并存放到字符型数组s中,然后输出。
请填充。
main(){char s1[40],s2[40],s[80],*p1,*p2,*p;_____________;scanf(“%s%s”,p1,p2);while(*p1!=‟\0‟)___________;While(*p2!=‟\0‟)*p++=*p2++;*p=‟\0‟;______________;printf(“%s\n”,);}2下列程序的功能是输入9个从小到大排序的整数存入一维数组x,然后再输入一个整数插入到数组x中,使其保持从小到大的顺序,请填充。
main(){int x[10],*px,y,*py=&y;for(px=x;px<x+9;px++)scanf(“%d”,px);scanf(“%d”,py);_________;while(*py>*px)______________=*px--;________________;for(px=x;px<x+10;px++)printf(“%d”,*px);}2.以下程序的功能是将无符号八进制数字构成的字符串转换成十进制数。
例如,输入的八进制数字构成的字符串为“111”,则输出对应十进制数应为73.请填空。
#include “string.h”main(){char s[6],*p__________;int n;gets(p);n=*p-_________;while(_________p!=‟\0‟)n=n*8+*p-…0‟;Printf(“%d\n”,n);}五.程序设计题1输入10个从小到大排序的整数和一个整数x,用对分检索法在10个整数中查找x,找到输入“YES!”,找不到输出“NO!”.要求用指针变量指向左,右和中间位置。
2输入一个长整型正整数,将其转换成对应八进制整数的字符串,然后输出。
要求用指向字符串的指针变量来处理求出的八进制数字字符。
3输入一个字符串,按相反次序输出其中所有字符。
要求用指向数组的指针变量来处理其中的字符。
4.输入一个一维整形数组,输出其中最大值,最小值和平均值。
要求用指向一维数组的指针变量来处理数组元素。