内容正文:
《编程语言基础——C语言》高等教育出版社(第五版)
第八章 指针 章节过关卷
考试时间:90分钟 满分:100分
姓名 班级 学号
1、 单项选择题(本题共20小题,每题2分,共40分)
1. 设有定义:int n1=0,n2,*p=&n2,*q=&n1;,以下赋值语句中与n2=n1;语句等价的是( )
A.p=q; B.*p=&n1; C.p=*q; D.*p=*q;
2. 以下程序中调用 scanf 函数给变量 a输入数值的方法是错误的,其错误原因是( )
#incldue<stdio.h>
int main( )
{ int *p,*q,a,b;p=&a;
printf("input a:");
scanf("%d", * p);
…… }
A. *p表示的是指针变量p的地址
B. *p表示的是变量a的值,而不是变量a的地址
C. *p表示的是指针变量p的值
D. *p只能用来说明p是一个指针变量
3. 下列程序的运行结果是( )
#include<stdio.h>
#include<conio.h>
void print_value(int * x)
{ printf("%d
",- -*x);}
int main( )
{ int a=34;print_value(&a);getch();}
A.33 B.34 C.35 D.36
4. 设char *s=“\ta\017bc”;则指针变量s指向的字符串所占的字节数是( )
A.6 B.10 C.4 D.5
5. 以下程序的输出结果是( )
#include<stdio.h>
#include<conio.h>
int main( )
{ int c=0;
char * s="\ta\018bc";
for ( ;* s!='\0';s++)
c++;printf ("%d",c);getch();}
A.6 B.5 C.7 D.8
6. 下面能正确进行字符串赋值操作的是( )
A. char a[5]={"ABCDE"};
B. char a[5]={ 'A','B',‘D',E'};
C. char * s;s="ABCDE";
D. char * s;scanf("%s",s);
7. 以下程序的运行结果是( )
#include<stdio.h>
#include<conio.h>
int main( )
{ char * s="abcde";
s+=2;
printf("%s",s);getch();}
A.abcde B.abc C.bcde D. cde
8. 以下程序的运行结果是( )
#include<stdio.h>
#include<conio.h>
int main( )
{ char * format="%s,a=%d,b=%d
";
int a=1,b=10;
a+=b;
printf(format,"a+=b",a,b);getch();}
A. a+=b,a=11,b=10 B.for,”a+b”,ab
C.format,”a+=b” D.format,"a+=b",a,b
9. 下列程序的输出结果是( )
#include<stdio.h>
#include<conio.h>
int main( )
{ char str[ ]="abcdefg", * p=str;
printf( "%d
", * (p+2) );getch();}
A.97 B.99 C.c D.a
10. 下面程序的输出结果是( )
#include<stdio.h>
#include<conio.h>
#include<string.h>
int main( )
{ char pl[ ]="abcdefgh", *p=pl;
p+=5;printf("%d
",strlen(strcpy(p,"AB")));
getch();}
A.8 B.5 C.2 D.10
11. 下列程序的输出结果是( )
#include<stdio.h>
#include<conio.h>
#include<string.h>
int main( )
{ char a[ ]="LANGUAGE",* p;
p=a;
while ( *p!='U')
{ printf("%c", *p+32);p++;}
getch();}
A. langUAGE B. language C. LANGUAGE D. lang
12. 若有语句:char sl[100 ]="string",s2[8]="", * s3, * s4="string2";则对库函数strcpy 的错误调用是( )
A. strcpy(sl,"string2"); B. strcpy(s4J'stringl");
C. strcpy(s3,"stringl"); D. strcpy(sl,s2);
13. 若有说明语句,则以下不正确的叙述是( )
char a[ ]="lt is mine";
char * p="lt is mine";
A. a+1表示的是字符t所在存储单元的地址
B. p指向另外的字符串时,字符串的长度不受限制
C. p变量中存放的地址值可以改变
D. a中只能存放10个字符
14. 下列程序的输出结果是( )
int main( )
{ char s[6];s="abcd", printf("\"%s\"
",s);
getch();}
A. "abed" B. "abed " C. \"abcd \" D. 编译出错
15. 变量的指针,其含义是指该变量的( )
A.值 B.地址 C.名 D.一个标志
16. 若有定义:int a=1,*p;p=&a;,则下面均表示地址的一项是( )
A.&a &*p p B.a p *&a C.&*a &a *p D. &a &*p *p
17. 若已有定义:float a=2025;,则以下定义指针变量p且赋初值的语句中,正确的一项是( )
A.float *p=2025;
B.float *p=&a;
C.int *p=(float)a;
D.float p=&a;
18. 已有定义:int *p,x;,则语句:p=&x;中的&是( )
A.按位与 B.取地址 C.逻辑与 D.非法,有语法错误
19. 若有定义:int abc[10];,则下面不能表示abc[1]的地址的是( )
A.&abc[0]+1 B.&abc[1] C.&abc[0]++ D.abc+1
20. 假设每个int型数据占2字节,若有定义:int aa[10]={1,2,3,4};,则aa数组占内存字节数是( )
A.20 B.4 C.8 D.40
二、程序运行结果题(本题共7小题,每题3分,共21分)
21. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
void su( int x,int y,int * z)
{ *z=y-x;}
int main( )
{ int a,b,c;
su(20,15,&a);
su(2,a,&b);
su(a,b,&c);
printf("%4d,%4d,%4d
",a,b,c);getch();}
22. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
int main( )
{ int a,b,k=3,m=5,* pl=&k,* p2=&m;
a=pl==&m;
b=(-* pl)*( * p2)+9;
printf("a= %d,",a);
printf("b= %d
",b);getch();}
23. 当运行以下程序时,从键盘输入“Happy new year!2025<回车>”,则程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
int stre(char str[ ])
{int num=0;
while( * (str+num)!='\0') num++;
return (num);}
int main( )
{ char str[10], * p=str;
gets(p);
printf("%d
",stre(p) ) ;
getch();}
24. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
#include<string.h>
int main( )
{ static char a[ ]="Language", b[ ]="programe";
char * pl, * p2;int k;
pl=a;p2=b;
for(k=0;k<=5;k++)
if( * (pl+k)== *(p2+k)) printf("%c", * (pl+k));
getch(); }
25. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
#include<string.h>
int main( )
{ int a=34,b;
char s[10],* p;p=s;
do { b=a%16;
if(b<10) *p=b+48;
else *p=b+55;
p++; a=a/5;
} while(a>0);
* p='\0';puts(s);
getch(); }
26. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
#include<string.h>
void delch(char * s)
{int i,j;
char * a;a=s;
for(i=0,j=0;a[i]!='\0';i++)
if(a[i]>='0'&&a[i]<='9') { s[j]=a[i]; j++; }
s[j]='\0';}
int main( )
{ char item[]="a34b5ac";
delch(item);printf("%s",item);
getch(); }
27. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
#include<string.h>
main(){
char *sl="AbDeG";
char * s2="AbdEg";
sl+=3;s2+=3;
printf("%d
",strcmp(sl,s2));
getch();}
三、程序填空。按照题目要求,将正确的内容填入相应位置,使得程序完整(每空3分,共27分)
28. 下面程序的功能是将一个整数字符串转换为一个整数,如将字符串〃-1234"转换为数值-1234。请选择填空。
#include<stdio.h>
#include<conio.h>
#include<string.h>
int chnum(char * p);
int main( )
{char s[6];int n;
gets(s);
if(*s=='-') n=-chnum(【1】);
else n=chnum(s);
printf("%d
",n);
getch();}
int chnum(char * p)
{ int num=0, k, len, j;
len=strlen(p);
for(;【2】;p++)
{k=【3】;j=(--len);
while(【4】) { k=k * 10;}
num=num+k; }
return(num);}
29. 下面程序的功能是从输人的10个字符串中找出最长的一串。请填空。
#include<stdio.h>
#include<conio.h>
#include<string.h>
#define N 10
int main( )
{ char str[N][81], *sp;
int i;
for(i=0;i<N;i++) gets(str[i]);
sp=【1】;
for(i=1;i<N;i++)
if(【2】)
sp=str[i];
printf("sp= %d,%s
",strlen(sp),sp);getch();}
30. 下面程序的功能是将八进制正整数字符串转换为十进制整数。请填空。
#include<stdio.h>
#include<conio.h>
#include<string.h>
int main( )
{ char * p, s[6];int n;
p=s;
gets(p);
n=【1】;
while(【2】!='\0') n=【3】;
printf("%d
",n);getch();}
四、阅读程序,修改程序中的错误,不得增行或删行,也不得更改程序结构。请指出错误代码所在的行号,并给出该行修改后的程序代码。(每处3分,共12分)
31. 下面程序的功能是在字符串str中找出最大的字符并放在第一个位置上,并将该字符前的原字符往后顺序移动,如chyab变成ychab。程序中有两处错误,请改正。
L1 #include<stdio.h>
L2 #include<conio.h>
L3 main(){
L4 char str[80], * p,max, * q;
L5 p=str;
L6 gets(p);
L7 max= * (p++);
L8 while( * p!='\0')
L9 { if(max> * p)
L10 { max= * p;
L11 q=p;}
L12 p++; }
L13 p=q;
L14 while(p>str)
L15 { * p= * (p-1);
L16 p++;}
L17 * p=max;
L18 puts(p);
L19 getch(); }
32. 下面程序的功能是将字符串s中的内容按逆序输出,但不改变串中的内容。程序中有两处错误,请改正。
L1 #include<stdio.h>
L2 #include<conio.h>
L3 int inverp (char * a)
L4 { if (!*a) return 0;
L5 inverp (a-1);
L6 printf("%c",a);}
L7 int main ( )
L8 { char s[20]="Happy new year!";
L9 inverp(s);
L10 getch();}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$$
《编程语言基础——C语言》高等教育出版社(第五版)
第八章 指针 章节过关卷
考试时间:90分钟 满分:100分
姓名 班级 学号
1、 单项选择题(本题共20小题,每题2分,共40分)
1. 设有定义:int n1=0,n2,*p=&n2,*q=&n1;,以下赋值语句中与n2=n1;语句等价的是( )
A.p=q; B.*p=&n1; C.p=*q; D.*p=*q;
答案:D
2. 以下程序中调用 scanf 函数给变量 a输入数值的方法是错误的,其错误原因是( )
#incldue<stdio.h>
int main( )
{ int *p,*q,a,b;p=&a;
printf("input a:");
scanf("%d", * p);
…… }
A. *p表示的是指针变量p的地址
B. *p表示的是变量a的值,而不是变量a的地址
C. *p表示的是指针变量p的值
D. *p只能用来说明p是一个指针变量
答案:B
3. 下列程序的运行结果是( )
#include<stdio.h>
#include<conio.h>
void print_value(int * x)
{ printf("%d
",- -*x);}
int main( )
{ int a=34;print_value(&a);getch();}
A.33 B.34 C.35 D.36
答案:A
4. 设char *s=“\ta\017bc”;则指针变量s指向的字符串所占的字节数是( )
A.6 B.10 C.4 D.5
答案:A
5. 以下程序的输出结果是( )
#include<stdio.h>
#include<conio.h>
int main( )
{ int c=0;
char * s="\ta\018bc";
for ( ;* s!='\0';s++)
c++;printf ("%d",c);getch();}
A.6 B.5 C.7 D.8
答案:A
6. 下面能正确进行字符串赋值操作的是( )
A. char a[5]={"ABCDE"};
B. char a[5]={ 'A','B',‘D',E'};
C. char * s;s="ABCDE";
D. char * s;scanf("%s",s);
答案:C
7. 以下程序的运行结果是( )
#include<stdio.h>
#include<conio.h>
int main( )
{ char * s="abcde";
s+=2;
printf("%s",s);getch();}
A.abcde B.abc C.bcde D. cde
答案:D
8. 以下程序的运行结果是( )
#include<stdio.h>
#include<conio.h>
int main( )
{ char * format="%s,a=%d,b=%d
";
int a=1,b=10;
a+=b;
printf(format,"a+=b",a,b);getch();}
A. a+=b,a=11,b=10 B.for,”a+b”,ab
C.format,”a+=b” D.format,"a+=b",a,b
答案:A
9. 下列程序的输出结果是( )
#include<stdio.h>
#include<conio.h>
int main( )
{ char str[ ]="abcdefg", * p=str;
printf( "%d
", * (p+2) );getch();}
A.97 B.99 C.c D.a
答案:B
10. 下面程序的输出结果是( )
#include<stdio.h>
#include<conio.h>
#include<string.h>
int main( )
{ char pl[ ]="abcdefgh", *p=pl;
p+=5;printf("%d
",strlen(strcpy(p,"AB")));
getch();}
A.8 B.5 C.2 D.10
答案:C
11. 下列程序的输出结果是( )
#include<stdio.h>
#include<conio.h>
#include<string.h>
int main( )
{ char a[ ]="LANGUAGE",* p;
p=a;
while ( *p!='U')
{ printf("%c", *p+32);p++;}
getch();}
A. langUAGE B. language C. LANGUAGE D. lang
答案:D
12. 若有语句:char sl[100 ]="string",s2[8]="", * s3, * s4="string2";则对库函数strcpy 的错误调用是( )
A. strcpy(sl,"string2"); B. strcpy(s4J'stringl");
C. strcpy(s3,"stringl"); D. strcpy(sl,s2);
答案:C
13. 若有说明语句,则以下不正确的叙述是( )
char a[ ]="lt is mine";
char * p="lt is mine";
A. a+1表示的是字符t所在存储单元的地址
B. p指向另外的字符串时,字符串的长度不受限制
C. p变量中存放的地址值可以改变
D. a中只能存放10个字符
答案:D
14. 下列程序的输出结果是( )
int main( )
{ char s[6];s="abcd", printf("\"%s\"
",s);
getch();}
A. "abed" B. "abed " C. \"abcd \" D. 编译出错
答案:D
15. 变量的指针,其含义是指该变量的( )
A.值 B.地址 C.名 D.一个标志
答案:B
16. 若有定义:int a=1,*p;p=&a;,则下面均表示地址的一项是( )
A.&a &*p p B.a p *&a C.&*a &a *p D. &a &*p *p
答案:A
17. 若已有定义:float a=2025;,则以下定义指针变量p且赋初值的语句中,正确的一项是( )
A.float *p=2025;
B.float *p=&a;
C.int *p=(float)a;
D.float p=&a;
答案:B
18. 已有定义:int *p,x;,则语句:p=&x;中的&是( )
A.按位与 B.取地址 C.逻辑与 D.非法,有语法错误
答案:B
19. 若有定义:int abc[10];,则下面不能表示abc[1]的地址的是( )
A.&abc[0]+1 B.&abc[1] C.&abc[0]++ D.abc+1
答案:C
20. 假设每个int型数据占2字节,若有定义:int aa[10]={1,2,3,4};,则aa数组占内存字节数是( )
A.20 B.4 C.8 D.40
答案:A
二、程序运行结果题(本题共7小题,每题3分,共21分)
21. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
void su( int x,int y,int * z)
{ *z=y-x;}
int main( )
{ int a,b,c;
su(20,15,&a);
su(2,a,&b);
su(a,b,&c);
printf("%4d,%4d,%4d
",a,b,c);getch();}
答案: -5, -7, -2
22. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
int main( )
{ int a,b,k=3,m=5,* pl=&k,* p2=&m;
a=pl==&m;
b=(-* pl)*( * p2)+9;
printf("a= %d,",a);
printf("b= %d
",b);getch();}
答案:a= 0,b= -6
23. 当运行以下程序时,从键盘输入“Happy new year!2025<回车>”,则程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
int stre(char str[ ])
{int num=0;
while( * (str+num)!='\0') num++;
return (num);}
int main( )
{ char str[10], * p=str;
gets(p);
printf("%d
",stre(p) ) ;
getch();}
答案:19
24. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
#include<string.h>
int main( )
{ static char a[ ]="Language", b[ ]="programe";
char * pl, * p2;int k;
pl=a;p2=b;
for(k=0;k<=5;k++)
if( * (pl+k)== *(p2+k)) printf("%c", * (pl+k));
getch(); }
答案:ga
25. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
#include<string.h>
int main( )
{ int a=34,b;
char s[10],* p;p=s;
do { b=a%16;
if(b<10) *p=b+48;
else *p=b+55;
p++; a=a/5;
} while(a>0);
* p='\0';puts(s);
getch(); }
答案:261
26. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
#include<string.h>
void delch(char * s)
{int i,j;
char * a;a=s;
for(i=0,j=0;a[i]!='\0';i++)
if(a[i]>='0'&&a[i]<='9') { s[j]=a[i]; j++; }
s[j]='\0';}
int main( )
{ char item[]="a34b5ac";
delch(item);printf("%s",item);
getch(); }
答案:345
27. 以下程序的运行结果是【 】。
#include<stdio.h>
#include<conio.h>
#include<string.h>
main(){
char *sl="AbDeG";
char * s2="AbdEg";
sl+=3;s2+=3;
printf("%d
",strcmp(sl,s2));
getch();}
答案:1
三、程序填空。按照题目要求,将正确的内容填入相应位置,使得程序完整(每空3分,共27分)
28. 下面程序的功能是将一个整数字符串转换为一个整数,如将字符串〃-1234"转换为数值-1234。请选择填空。
#include<stdio.h>
#include<conio.h>
#include<string.h>
int chnum(char * p);
int main( )
{char s[6];int n;
gets(s);
if(*s=='-') n=-chnum(【1】);
else n=chnum(s);
printf("%d
",n);
getch();}
int chnum(char * p)
{ int num=0, k, len, j;
len=strlen(p);
for(;【2】;p++)
{k=【3】;j=(--len);
while(【4】) { k=k * 10;}
num=num+k; }
return(num);}
答案:
【1】s+1
【2】*p!='\0'
【3】*p-'0'
【4】j-->0
29. 下面程序的功能是从输人的10个字符串中找出最长的一串。请填空。
#include<stdio.h>
#include<conio.h>
#include<string.h>
#define N 10
int main( )
{ char str[N][81], *sp;
int i;
for(i=0;i<N;i++) gets(str[i]);
sp=【1】;
for(i=1;i<N;i++)
if(【2】)
sp=str[i];
printf("sp= %d,%s
",strlen(sp),sp);getch();}
答案:
【1】str[0]或&str[0][0]
【2】strlen(sp)<strlen(str[i])
30. 下面程序的功能是将八进制正整数字符串转换为十进制整数。请填空。
#include<stdio.h>
#include<conio.h>
#include<string.h>
int main( )
{ char * p, s[6];int n;
p=s;
gets(p);
n=【1】;
while(【2】!='\0') n=【3】;
printf("%d
",n);getch();}
答案:
【1】*p-'0'
【2】*(++p)
【3】n* 8+ * p-'0'
四、阅读程序,修改程序中的错误,不得增行或删行,也不得更改程序结构。请指出错误代码所在的行号,并给出该行修改后的程序代码。(每处3分,共12分)
31. 下面程序的功能是在字符串str中找出最大的字符并放在第一个位置上,并将该字符前的原字符往后顺序移动,如chyab变成ychab。程序中有两处错误,请改正。
L1 #include<stdio.h>
L2 #include<conio.h>
L3 main(){
L4 char str[80], * p,max, * q;
L5 p=str;
L6 gets(p);
L7 max= * (p++);
L8 while( * p!='\0')
L9 { if(max> * p)
L10 { max= * p;
L11 q=p;}
L12 p++; }
L13 p=q;
L14 while(p>str)
L15 { * p= * (p-1);
L16 p++;}
L17 * p=max;
L18 puts(p);
L19 getch(); }
答案:
【1】L9 { if(max< * p)
【2】L16 p- -;}
32. 下面程序的功能是将字符串s中的内容按逆序输出,但不改变串中的内容。程序中有两处错误,请改正。
L1 #include<stdio.h>
L2 #include<conio.h>
L3 int inverp (char * a)
L4 { if (!*a) return 0;
L5 inverp (a-1);
L6 printf("%c",a);}
L7 int main ( )
L8 { char s[20]="Happy new year!";
L9 inverp(s);
L10 getch();}
答案:
【1】L5 inverp (a+1);
【2】L6 printf("%c",*a);}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$$