c语言指针包括线指针,C语言指针练习包括答案和详解.pdf

第七章第七章指针指针 7.1 选择题 1. 若有说明:int a=2, *p=,则以下非法的赋值语句是(D) 。 A. p=q;B. *p=*q;C. a=*q;D. q=a; a 是整型数, int *p,*q 定义了指针, p,q 是指向整型的指针。 p 取得 a 的地址,而 q 取得 p 的地址 p,q 是指针(也就是一个地址) ,而*p 和*q 是这个指针指向的整型数值(存 放在这个地址的值) 。 A)把 q 的地址赋给 p,则 p 和 q 完全一样了,都指向一个数 2 B)把 q 中数据个 p C)把 q 中数据给 a D)a 中数据是 2,不能够给一个地址。除非*q=a 2. 若定义:int a=511, *b=的输出结果为:D A. 无确定值B. a 的地址C. 512D. 511 int a=511,*b= a 是整形变量 b 是整形指针变量,指向 a printf(“%d\n“,*b);就是输出指针变量 b, 所指变量的值输出结果 511 3.已有定义int a=2, *p1= 下面不能正确执行的赋值语句是 (B) 。 A.a=*p1+*p2;B.p1=a;C.p1=p2;D.a=*p1*(*p2); 47、已知在程序中定义了如下的语句: int *P1,*P2; int k; p1=p2= 则下列语句中不能正确执行是( B) A、k=*P1+*P2;B、p2=k;C、P1=P2;D、K=*P1 * (*P2); P1 P2 是指针,K 是整型变量,变量怎么可以赋值给指针呢? A 其实是执行了 K=K+K(P1 和 P2 都指向 K,所以*P1*P2 其实都是指 K) C 是赋值语句 D 其实执行了 K=K*K 4. 变量的指针,其含义是指该变量的(B) 。 A. 值B. 地址C. 名D. 一个标志 5. 若有说明语句:int a, b, c, *d= B. scanf(“%d%d%d“, a, b, d); C. scanf(“%d%d%d“, D. scanf(“%d%d%d“, a, b,*d); 对于 int c,*d=,c 是一整型数据,d 是一指针,它指向变量 c(即 d= 也可以用 scanf(“%d“,d); 6. 若已定义 int a=5; 下面对(1) 、 (2)两个语句的正确解释是(D) 。 (1) int *p=(2) *p=a; A. 语句(1)和(2)中的*p 含义相同,都表示给指针变量 p 赋值。 B. (1)和(2)语句的执行结果,都是把变量 a 的地址值赋给指针变量 p。 C. (1)在对 p 进行说明的同时进行初始化,使 p 指向 a; (2)变量 a 的值赋给指针变量 p。 D. (1)在对 p 进行说明的同时进行初始化,使 p 指向 a; (2)将变量 a 的值赋予*p。 A:(1):*p,定义 p 为 int 类型指针(2) :*p,表示 p 所指向的变量 B(1)把变量 a 的地址赋给指针变量 p(2)把变量 a 的值,赋值给 P 所 指向的变量 C 前半句正确,后半句错误, (2)是把变量 a 的值赋值给 P 所指的变量。 7. 若有语句 int *p, a=10; p= 下面均代表地址的一组选项是(D) 。 A. a, p, * 则正 确的赋值语句是() 。 B A. p=x;B. p= C. *p=x;D. *p= 9. 若有说明:int *p, a=1, b; 以下正确的程序段是(B) 。 A. p=B. scanf(“%d“, scanf(“%d“, *p=b; C. p=D. p= scanf(“%d“, *p);*p=a; A,B 中 p 是 b 的地址 那么如果要输入 b 应该是 scanf(“%d“, p); C 中 p 还没定义 给*p 赋值就是给一个没有开辟的地址赋值了 D 是正确的 意思是 p 为 b 的地址,将 p 地址上的数变成 a, 等价于 b=a 10.有如下语句:int m=6, n=9, *p, *q; p= q= 如图 1 所示,若要实现 下图所示的存储结构,可选用的赋值语句是(C) 。 A. *p=*q;B. p=*q; C. p=q;D. *p=q; 11. 以下程序中调用 scanf 函数给变量 a 输入数值的方法是错误的,其错误原因 是(B) 。 0.2345 px m p n qp m q n #include main() { int *p, *q, a, b; p= printf(“input a:“); scanf(“%d“, *p); … } A. *p 表示的是指针变量 p 的地址 B. *p 表示的是变量 a 的值,而不是变量 a 的地址 C. *p 表示的是指针变量 p 的值 D. *p 只能用来说明 p 是一个指针变量 scanf 后面的参数是地址,是接收的值放到这个地址 12. 下面程序的功能是从输入的十个字符串中找出最长的那个串。请在________ 处填空。 #include “stdio.h“ #include “string.h“ #define N 10 main() { char s[N][81], * t; int j; for (j=0; j main() { int a, b, k=4, m=6, *p= a=p== b=(-*p)/(*q)+7; printf(“a=%d\n“, a); printf(“b=%d\n“, b); } 【1】 A. -1B. 1C. 0D. 4 【2】 A. 5B. 6C. 7D. 10 32. 下面程序的功能是将字符串 s 的所有字符传送到字符串 t 中,要求每传递三 个字符后再存放一个空格, 例如字符串s为“abcdefg“, 则字符串t为“abc def g“,请选择填空。CA #include “stdio.h“ #include “string.h“ main() { int j, k=0; char s[60], t[100], *p; p=s; gets(p); while(*p) {for (j=1; jsB.t=sC.*ts[0] D. *t=s[0] 【2 】 A .t++B .s--C.t-- D. w-- 35.以下程序的功能是删除字符串 s 中的所有空格(包括 TAB 符、回车符) ,请 填空。AC #include “stdio.h“ #include “string.h“ #include “ctype.h“ main() { chars[80]; gets(s); delspace(s); puts(s); } delspace(char *t) { int m, n; char c[80]; for(m=0, n=0; 【1】; m++) if (!isspace(【2】)) /*C 语言提供的库函数,用以判断字符是否为 空格*/ { c[n]=t[m]; n++; } c[n]='\0'; strcpy(t, c); } 【1】A.t[m]B.!t[m]C.t[m]='\0' D. t[m]=='\0' 【 2 】 A .t+mB .*c[m]C .*(t+m) D. *(c+m) 36.下面程序的功能是统计字串 sub 在母串 s 中出现的次数。请选择填空。BC #include “stdio.h“ #include “string.h“ main() { char s[80], sub[80]; int n; gets(s); gets(sub); printf(“%d\n“, count(s,sub)); } int count( char *p, char *q) { int m, n, k, num=0; for (m=0; p[m]; m++) for (【1】, k=0; q[k]==p[n]; k++, n++) if(q[【2】]=='\0') { num++;break;} return (num); } 【1】 A.n=m+1B.n=mC.n=0D.n=1 【2】 A.kB.k++C.k+1D.++k 37.下列程序的输出结果是(C) 。 #include “stdio.h“ main() { int a[]={1,2,3,4,5,6,7,8,9,0}, *p; p=a; printf(“%d\n“, *p+9); } A .0B.1C .10 D.9 38.以下程序的输出结果是(C) 。 #include “stdio.h“ char cchar(char ch) { if (ch='A' printf(“%d\n“, strlen(b2)); } A. 8B. 3C. 1D. 7 40.有以下程序 #include “string.h“ #include “stdio.h“ main() { char *p=“abcde\0fghjik\0“; printf(“%d\n“, strlen(p)); } 程序运行后的输出结果是(D) 。 A. 12B. 15C. 6D. 5 41.有以下程序 void ss( char*s, chart) { while (*s) {if (*s==t) *s=t-'a'+'A'; s++; } } main() { charstr[100]=“abcddfefdbd“, c='d'; ss(str, c); printf(“%s\n“, str1); } 程序运行后的输出结果是(B) 。 A . ABCDDEFEDBDB .abcDDfefDbDC .abcAAfefAbA D. Abcddfefdbd 42. 以下程序调用 findmax 函数返回数组中的最大值。在下面划线处应填入的是 (B) 。 #include “stdio.h“ findmax( int *a, int n) { int *p, *s; for (p=a, s=a; p-asB.*p*sC.a[p]a[s]D.p-ap-s 43.有以下程序 A #include “stdio.h“ #include “malloc.h“ main() { char *q, *p; p=(char*) malloc (sizeof(char) *20);/*为指针 p 分配一个地址*/ q=p; scanf(“%s%s“, p, q); printf(“%s %s\n“, p, q); } 若从键盘输入:abcdef↙,则输出结果是: A. defdefB. abcdefC. abcdD. dd 44.下面程序的运行结果是(D) 。 #include “stdio.h“ #include “string.h“ fun( char *s) { char t[10]; s=t; strcpy(t, “example“); } main() { char *s; fun(s); puts(s); } A.example└┘└┘└┘B.example└┘└┘C.exampleD.不确定 的值 45.下列程序段的输出结果是(A) 。 #include “stdio.h“ void fun( int *x, int *y) { printf(“%d%d“, *x, *y); *x=3; *y=4; } main() { int x=1, y=2; fun( printf(“%d %d“, x, y); } A. 2 1 4 3B. 1 2 1 2C. 1 2 3 4D.2 1 1 2 46.下列程序的输出结果是(C) 。 #include “stdio.h“ main() { char a[10]={9,8,7,6,5,4,3,2,1,0}, *p=a+5; printf(“%d“, *--p); } A. 非法B. a[4]的地址C. 5D. 3 47.有以下程序 #include “stdio.h“ #include “string.h“ main(int argc, char *argv[]) { int m, length=0; for (m=1;m1) printf(“%s%c“, *argv, (argc1)? '\n':' '); } B. main( int a, char * b[]) { while (a1) printf(“%s\n“, *++b); } C. main( int argc, char *argv[]) { while (++argc0) printf(“%s%c“, *++argv, (argc1) ? ' ' :'\n'); } D. main(int argc, char *argv[]) { while (argc1) printf(“%s“, *++argv); }

展开阅读全文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值