内容正文:
《编程语言基础——C语言》高等教育出版社(第五版)
第八章 指针 章节过关卷
考试时间:90分钟 满分:100分
姓名 班级 学号
1、 单项选择题(本题共25小题,每题2分,共50分)
1.以下程序段执行后,a的值为( )
int *p,a=10,b=1;p=&a;a=*p+b;
A.12 B.11 C.10 D.13
答案:B
2.执行如下一段程序后,ab的值( )
int *var,ab;ab=100;var=&ab;ab=*var+10;
A.120 B.110 C.100 D.90
答案:B
3.以下定义语句中正确的是( )
A.char a='A' b='B'; B.float a=b=10.0;
C.int a=10,*b=&a; D.float *a,b=&a;
答案:C
4.有以下程序段,b中的值是( )
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b;b=p[5];
A.5 B.6 C.8 D.9
答案:D
5.以下程序段的输出结果是( )
int a[]={1,2,3,4,5,6,7,8,9,0},*p;p=a;
printf("%d
",*p+9);
A.0 B.1 C.10 D.9
答案:C
6.以下程序段的输出结果是( )
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
答案:A
7.程序int a[10]={9,8,7,6,5,4,3,2,1,0},*p=a+5;printf("%d",*--p);的输出结果是( )
A.非法 B.a[4]的地址 C.5 D.3
答案:C
8.若已定义:int a[9],*p=a;并在以后的语句中未改变p的值,不能表示a[1]地址的表达式是( )
A.p+1 B.a+1 C.a++ D.++p
答案:C
9.设有说明int s[2]={0,1},*p=s;则下列错误的C语句是( )
A. s+=1; B.p+=1; C.*p++; D.(*p)++;
答案:A
10.char s[10],*p=s;则以下不正确的表达式是( )
A.p=s+1; B.p=s++; C.*(s+1)=*p; D.*p++=s[2];
答案:B
11.设有以下语句int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;则_____不是对a数组元素的正确引用,其中(0<=i<10)
A.a[p-a] B.*(&a[i]) C.p[i] D.*(*(a+i))
答案:D
12.若有如下定义:int a[]={0,1,2,3,4,5,6,7,8,9},*p=a,i;其中0<=i<=9,则为数组元素a[i]不正确的引用是( )
A.*(p+i) B.*(a+i) C.p[i] D.*a[i]
答案:D
13.以下程序段的输出结果是( )
int i,x[3][3]={9,8,7,6,5,4,3,2,1},*p=&x[1][1];
for(i=0;i<4;i+=2)
printf("%d",p[i]);
A.5 2 B.5 1 C.5 3 D.9 7
答案:C
14.以下执行程序段后,m的值为( )
int a[2][3]={{1,2,3},{4,5,6}};int m,*p;
p=&a[0][0];
m=(*p)*(*(p+2))*(*(p+4));
A.15 B.14 C.13 D.12
答案:A
15.以下程序片段的输出成果是( )
char str[]="ABCD",*p=str;printf("%d
",*(p+4));
A.68 B.0 C.不确定的值 D.字符‘D’的地址
答案:B
16.若有说明语句:int a,b,c,*d=&c;怎能正确从键盘输入三个整数分别赋给变量a、b、c的语句是( )
A.scanf("%d%d%d",&a,&b,d);
B.scanf("%d%d%d",&a,&b,&d);
C.scanf("%d%d%d",a,b,d);
D.scanf("%d%d%d",a,b,*d);
答案:A
17.设有定义:int a,*pa=&a;以下scanf语句中能正确为变量读入数据的是( )
A.scanf(“%d”,pa); B.scanf(“%d”,a);
C.scanf(“%d”,&pa); D.scanf(“%d”,*pa);
答案:A
18.若有说明:int a=2,*p=&a,*q=p;,则以下非法的赋值语句的是( )
A.p=q; B.*p=*q; C.a=*q; D.q=a;
答案: D
19.变量的指针,其含义是指该变量的( )
A.值 B.地址 C.名 D.一个标志
答案:B
20.若有语句int *p,a=10;p=&a;下面均代表地址的一组选项的是( )
A.a,p,*&a B.&*a,&a,*p C.*&p,*p,&a D.&a,&*p,p
答案:D
21. 若有定义int *p1,*p2,m=4,n;,以下均为正确赋值语句的选项是( )
A.p1=&m;p2=&p1; B.p1=&m;p2=&n;*p1=*p2;
C.p1=&m;*p1=*p2; D.p1=&m;*p2=*p1;
答案:B
22.假设整型变量a的值为2,a的地址为2000,若欲使p为指向a的指针变量,则以下赋值正确的是( )
A.&a=3; B.*p=2; C.*p=2000; D.p=&a;
答案: D
23.有定义语句int *p[4],以下选项中与此语句等价的是( )
A.int p[4]; B.int **p; C.int *(p[4]) D.int (*p)[4];
答案:C
24.下面程序的输出结果是( )
int a[]={2,4,6,8};
main(){
int i;
int *p=a;
for(i=0;i<4;i++) a[i]=*p++;
printf("%d
",a[2]);
}
A.6 B.8 C.4 D.2
答案:A
25.下面程序的输出结果是( )
main(){
int a[]={1,2,3,4,5,6,7,8,9,0},*p;
p=a;
printf("%d
",*p+9);
}
A.0 B.1 C.10 D.9
答案:C
二、简答题(本题共5小题,每题6分,共30分)
26. 以下程序的输出结果是【 】。
int a=3,b,*p;
p=&a;
b=*p+2;
printf("%d,%d
",a,b);
答案:3,5
27. 以下程序的运行结果是【 】。
int a=3,b=5,c;
int *p,*q;
p=&a;q=&b;
c=(*p)*(*q);
printf("%d
",c);
答案:15
28. 以下程序的运行结果是【 】。
#include <stdio.h>
main() {
char a[] = "ABCDEFGH";
char b[] = "aBCdefGh";
char *p1, *p2;
int k;
p1 = a;
p2 = b;
for (k = 0; k <= 7; k++)
if (*(p1 + k) == *(p2 + k))
printf("%c", *(p1 + k));
printf("
");
}
答案:BCG
29. 以下程序的运行结果是【 】。
#include <stdio.h>
main() {
char a[] = "programming", b[] = "language";
char *p1, *p2;
int i;
p1 = a;
p2 = b;
for (i = 0; i < 7; i++)
if (*(p1 + i) == *(p2 + i))
printf("%c", *(p1 + i));}
答案:ga
30. 以下程序的运行结果是【 】。
int a=7,b=8,*p,*q,*r;
p=&a;
q=&b;
r=p;p=q;q=r;
printf("%d,%d,%d
",*p,*q,a,b);
答案:8,7,7,8
三、案例分析题(本题共2小题,共20分)
31.给定程序的功能是判断字符ch是否与串str中的某个字符相同:若相同,什么也不做;若不同,则插在串的最后。
【参考程序】#include <stdio.h>
#include <string.h>
void fun(char str[], char ch) {
int len = strlen(str);
int i;
for (i = 0; i < len; i++) {
if (str[i] == ch) {
return;
}
}
str[len] = ch;
str[len + 1] = '\0';
}
main() {
char str[100] = "hello";
char ch = 'x';
fun(str, ch);
printf("%s
", str);
}
32.输入一行由英语单词和若干空格组成的字符串,输出单词的个数(约定第一个单词之前和最后一个单词之后没有空格)。
【参考程序】#include<stdio.h>
main(){
char a[100],*p=a,n=0;
getsA;
while(*p){
if(*p!=''&&*(p+1)=='')
n++;
p++;
}
printf("%d个单词",n+1);
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$
《编程语言基础——C语言》高等教育出版社(第五版)
第八章 指针 章节过关卷
考试时间:90分钟 满分:100分
姓名 班级 学号
1、 单项选择题(本题共25小题,每题2分,共50分)
1.以下程序段执行后,a的值为( )
int *p,a=10,b=1;p=&a;a=*p+b;
A.12 B.11 C.10 D.13
2.执行如下一段程序后,ab的值( )
int *var,ab;ab=100;var=&ab;ab=*var+10;
A.120 B.110 C.100 D.90
3.以下定义语句中正确的是( )
A.char a='A' b='B'; B.float a=b=10.0;
C.int a=10,*b=&a; D.float *a,b=&a;
4.有以下程序段,b中的值是( )
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b;b=p[5];
A.5 B.6 C.8 D.9
5.以下程序段的输出结果是( )
int a[]={1,2,3,4,5,6,7,8,9,0},*p;p=a;
printf("%d
",*p+9);
A.0 B.1 C.10 D.9
6.以下程序段的输出结果是( )
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
7.程序int a[10]={9,8,7,6,5,4,3,2,1,0},*p=a+5;printf("%d",*--p);的输出结果是( )
A.非法 B.a[4]的地址 C.5 D.3
8.若已定义:int a[9],*p=a;并在以后的语句中未改变p的值,不能表示a[1]地址的表达式是( )
A.p+1 B.a+1 C.a++ D.++p
9.设有说明int s[2]={0,1},*p=s;则下列错误的C语句是( )
A. s+=1; B.p+=1; C.*p++; D.(*p)++;
10.char s[10],*p=s;则以下不正确的表达式是( )
A.p=s+1; B.p=s++; C.*(s+1)=*p; D.*p++=s[2];
11.设有以下语句int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;则_____不是对a数组元素的正确引用,其中(0<=i<10)
A.a[p-a] B.*(&a[i]) C.p[i] D.*(*(a+i))
12.若有如下定义:int a[]={0,1,2,3,4,5,6,7,8,9},*p=a,i;其中0<=i<=9,则为数组元素a[i]不正确的引用是( )
A.*(p+i) B.*(a+i) C.p[i] D.*a[i]
13.以下程序段的输出结果是( )
int i,x[3][3]={9,8,7,6,5,4,3,2,1},*p=&x[1][1];
for(i=0;i<4;i+=2)
printf("%d",p[i]);
A.5 2 B.5 1 C.5 3 D.9 7
14.以下执行程序段后,m的值为( )
int a[2][3]={{1,2,3},{4,5,6}};int m,*p;
p=&a[0][0];
m=(*p)*(*(p+2))*(*(p+4));
A.15 B.14 C.13 D.12
15.以下程序片段的输出成果是( )
char str[]="ABCD",*p=str;printf("%d
",*(p+4));
A.68 B.0 C.不确定的值 D.字符‘D’的地址
16.若有说明语句:int a,b,c,*d=&c;怎能正确从键盘输入三个整数分别赋给变量a、b、c的语句是( )
A.scanf("%d%d%d",&a,&b,d);
B.scanf("%d%d%d",&a,&b,&d);
C.scanf("%d%d%d",a,b,d);
D.scanf("%d%d%d",a,b,*d);
17.设有定义:int a,*pa=&a;以下scanf语句中能正确为变量读入数据的是( )
A.scanf(“%d”,pa); B.scanf(“%d”,a);
C.scanf(“%d”,&pa); D.scanf(“%d”,*pa);
18.若有说明:int a=2,*p=&a,*q=p;,则以下非法的赋值语句的是( )
A.p=q; B.*p=*q; C.a=*q; D.q=a;
19.变量的指针,其含义是指该变量的( )
A.值 B.地址 C.名 D.一个标志
20.若有语句int *p,a=10;p=&a;下面均代表地址的一组选项的是( )
A.a,p,*&a B.&*a,&a,*p C.*&p,*p,&a D.&a,&*p,p
21. 若有定义int *p1,*p2,m=4,n;,以下均为正确赋值语句的选项是( )
A.p1=&m;p2=&p1; B.p1=&m;p2=&n;*p1=*p2;
C.p1=&m;*p1=*p2; D.p1=&m;*p2=*p1;
22.假设整型变量a的值为2,a的地址为2000,若欲使p为指向a的指针变量,则以下赋值正确的是( )
A.&a=3; B.*p=2; C.*p=2000; D.p=&a;
23.有定义语句int *p[4],以下选项中与此语句等价的是( )
A.int p[4]; B.int **p; C.int *(p[4]) D.int (*p)[4];
24.下面程序的输出结果是( )
int a[]={2,4,6,8};
main(){
int i;
int *p=a;
for(i=0;i<4;i++) a[i]=*p++;
printf("%d
",a[2]);
}
A.6 B.8 C.4 D.2
25.下面程序的输出结果是( )
main(){
int a[]={1,2,3,4,5,6,7,8,9,0},*p;
p=a;
printf("%d
",*p+9);
}
A.0 B.1 C.10 D.9
二、简答题(本题共5小题,每题6分,共30分)
26. 以下程序的输出结果是【 】。
int a=3,b,*p;
p=&a;
b=*p+2;
printf("%d,%d
",a,b);
27. 以下程序的运行结果是【 】。
int a=3,b=5,c;
int *p,*q;
p=&a;q=&b;
c=(*p)*(*q);
printf("%d
",c);
28. 以下程序的运行结果是【 】。
#include <stdio.h>
main() {
char a[] = "ABCDEFGH";
char b[] = "aBCdefGh";
char *p1, *p2;
int k;
p1 = a;
p2 = b;
for (k = 0; k <= 7; k++)
if (*(p1 + k) == *(p2 + k))
printf("%c", *(p1 + k));
printf("
");
}
29. 以下程序的运行结果是【 】。
#include <stdio.h>
main() {
char a[] = "programming", b[] = "language";
char *p1, *p2;
int i;
p1 = a;
p2 = b;
for (i = 0; i < 7; i++)
if (*(p1 + i) == *(p2 + i))
printf("%c", *(p1 + i));}
30. 以下程序的运行结果是【 】。
int a=7,b=8,*p,*q,*r;
p=&a;
q=&b;
r=p;p=q;q=r;
printf("%d,%d,%d
",*p,*q,a,b);
三、案例分析题(本题共2小题,共20分)
31.给定程序的功能是判断字符ch是否与串str中的某个字符相同:若相同,什么也不做;若不同,则插在串的最后。
32.输入一行由英语单词和若干空格组成的字符串,输出单词的个数(约定第一个单词之前和最后一个单词之后没有空格)。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$