C语言基础题第六章:指针
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{ *p=*p+2 ; p++ ; } 10、执行以下程序后的输出结果是 3 5 4 。 main( ) { char *s="13579"; s++ ; printf ( "%c,%c, %c \n" , *s , *(s+1) , *s+1 ) ; } 11、以下程序运行后的输出结果是 #BC#EF#H 。 main() { char a[ ]="ABCDEFGH ", *p = a ; int i=0 ; while (*p != '\0') { if ( i % 3 ==0 ) *p = '#' ; p++ ; i ++ ; } puts(a) ; } 12、下面程序的运行结果是 -1 (只需填写 1、零或-1) #include <stdio.h> #include <string.h> main() { char *s1="aBcDeF"; char *s2="AbCdEf"; s1=s1+3; s2=s2+3; printf("%d\n",strcmp(s2,s1)); } 三、判断题 1、若有定义:long a ; float * p ; ,则因为 long 型与 float 型都占 4 个字节,所以指针 p 可以指向 a。 F 2、若有初始化 char a[ 9 ]= " abc " , *p= "ABCD" ; 则语句 puts ( strcat (a,p+2) ) ; 的执行结果是 abcCD。 T 3、若有定义 char *p ;,则执行语句 p="abcde" ;后,p 中存放了字符串"abcde"。 F 4、若有定义 int a[10] , b[4][5] , *p; ,则国灰一维数组名和二维数组名都代表数组的首地址,所以“p=a;”和 “p=b;”都是正确的赋值语句。 F 四、改错题 1、下面程序的功能是交换变量 a 和 b 中的值。程序中有错误,请修改。 main( ) { int a ,b, *p,*q, *t ; p=&a; q=&b; 所有的*t 全改为 t, scanf("%d%d",p,q); pritnf(" 请输入变量 a 和 b 的值: "); scanf ("%d%d",&p,&q ); *t=*p; *p=*q ; *q=*t; printf( "交换后的 a 和 b 的值:%d %d\n ",a, b); }
12、-1
Leabharlann Baidu
2、下面程序的功能是将字符串 ch 逆置。程序中有错误,请修改 #include <string.h> main( ) { char ch[ ]="abcdef" , *p , *q , t ; p = ch ; printf(" 原有字符串:%s \n", *p ); printf(" 原有字符串:%s \n", p ); q= ch + strlen (ch ); q= ch + strlen (ch )-1; while (p<q) { t=p; p= q; q=t; p++; q-- ; } { t=*p; *p= *q; *q=t; p++; q-- ; } printf( "逆置后的字符串:%s \n " , ch ); }
参考答案: 单选题 1、A 2、D 3、B 4、D 12、C 13、C 14、D 15、C 填空题 1、14 13 2、*( p+3 ) 6、3 7、3.14 8、 18
5、B 16、C
6、B
7、C
8、A
9、C
10、A
11、A
3、abcABC g 9、cdefgh
4、m k 10、3 5 4
5、变量的地址 11、#BC#EF#H
1.若有初始化 char *str="student"; ,则 *(str+6) 的值是 。 A A、t B、空格 C、\0 D、不确定值 2.若有初始化 int a=2, *p ; ,则要使 p 指向 a 应使用的语句是 。 D A. *p=a; B. *p=&a; C. p=a; D. p=&a 3. 若有初始化 char a[ ]= " well " , *p = "well " ; ,则以下正确的叙述是 。 B A. 数组 a 的首地址和 p 中的值相同 B. a[1]和 p[1]的值相同 C. p 只能指向含有 4 个有效字符的字符串 D. a 中只能存放 4 个字符 4. 若有定义:int *p , *q, a=2, b ; ,则以下正确的赋值语句组是 。 D A. p=&a; *q=*p; B. *p=a; *q=b; C. p=&a;q=&b; *p=*q; D. p=&a;q=&b; *q=*p; 5. 若有定义: int a[5]={1,2,3,4,5,} , *p= a; 则以下表达式中值为 3 的是 。 B A. p+2 B. *(p+2) C. *(p+3) D. *p+3 6. 数组名代表数组的首地址,以下选项中可以对数组名进行的运算符是 。 B A. ++ B. + C.-D. = 7. 若有定义 int a [ 5 ]= { 1,2,3,4,5 } , *p=a+4 ; 则以下表达式中值为 3 的是 。 C A. a[3] B. &(p-2) C. *p-2 D. *(a+3) 8. 若有定义 int a [ ] = { 1,2,3,4,5,6,7,8,9,10 } , *p=a ; ,则对 a 数组元素的正确引用是 。 A A. *(p+3) B. *(P+10) C. p+1 D. ++*p 9. 若有定义 int a [5 ] = { 1,2,3,4,5 } , *p= a; ,则对数组元素地址的正确引用是 。 C A. *p+2 B. p[3] C. p+4 D. &a[5] 10. 若有定义 int *p1 , *p2 , a=3 ; ,则能够正确执行的语句是 。 A A. p1=&a; B. p2=a; C. *p1=a; D. *p2=*p1; 11、若有语句:char s1[ ]="language" , s2 [ 7 ], * s3, *s4="program"; ,则对库函数 strcpy 调用正确的是 A、strcpy(s1,s4); B、strcpy(s2,s4); C、strcpy(s3,s1); D、strcpy(s4,s1); 12、取地址运算符&,只能作用于 。 C A、常量 B、表达式 C、变量 D、整形变量 13、有以下程序 C #include <stdio.h> main ( ) { int a[10]={1,2,3,4,5,6,7,8,9,10}, *p,*q=NULL; p=a+6; q=p+4; printf("%d %d\n", *p,*q); } 程序运行后的输出结果是 。 A、6 不确定的数 B、6 10 C、7 不确定的数 D、7 10 14、若已对指针变量 p 正确定义和赋值,则语句:*p=*p+1;的正确含义是 。 D A、使这向后移动 1 个存储单位 B、使 p 所指存储单元中的值加 1 C、使 p 向后移动 2 个字节 D、使 p 的值加 1 15、有以下程序 C #include <stdio.h> main( ) { char a[ ]="language" , *p ; p=a; while (*p !='g') { printf (" %c" , *p-32 ) ;
。A
p++ ; } } 程序运行后的输出结果是 。 A、LANguage B、LANGUAge C、LAN D、LANGUA 16、有以下程序 C main( ) { char *p = " 1357 " ; p++ ; printf ("%c %s \n ", *p, p ); } 程序运行后的输出结果是 。 A、2 357 B、 2 1357 C、3 357 D、3 1357 二、填空题 1、下面程序段的运行结果是 14 , 13 。 int a[10]={2,4,6,8,10,12,14,16,18},*p; p=a+5; printf("%d , %d\n",*(p+1),*p+1); 2、若有以下定义和语句,在不移动指针 p 的情况下,可通过指针 p 引用值为 e 的数组元素的表达式是 * (p+3) 。 char c[7]={ 'a','b','c','d','e','f','g'}, *p ; p=c+1; 3、下面程序段的运行结果是 abABC , g 。 char s[20]="abcdefg", *p="ABC" ; strcpy( s+2, p ); printf ( " %s, %c \n" , s , s[6] ); 4、下面程序段的运行结果是 m , k 。 char a[10] = " acegikmoq ", *p ; p=a+3; p++; printf ("%c , %c \n ", *(p+2) , *p+2 ); 5、在 C 程序中,指针变量只能接受 变量的地址 值。 6、若有定义 int w[3]={1,2,3 }; ,则*(w+w[1] )的值是 3 。 7、若有定义 float a=3.14 , b , *p ; ,则执行语句“p=&b ; *p = a ; ”后 b 中的值是 3.14 。 8、以下程序运行后的输出结果是 18 。 #include <stdio.h> main( ) { int a[10]={1,2,3,4,5,6,7,8,9,10}; int i , *p, s=0; p=&a[0] ; for ( i=0 ; i<10 ; i++ ) if( ( *(p+i))%3==0 ) s=s+*(p+i) ; printf( "%d \n ",s ); } 9、执行下面的程序段后,a 数组中存放的内容是 cdefgh 。 char a[ ]="abcdef", *p; p=a; while ( *p !='\0' )