C程序设计 第八章 指针Word下载.docx
- 文档编号:17648759
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:24
- 大小:26.69KB
C程序设计 第八章 指针Word下载.docx
《C程序设计 第八章 指针Word下载.docx》由会员分享,可在线阅读,更多相关《C程序设计 第八章 指针Word下载.docx(24页珍藏版)》请在冰豆网上搜索。
charc[3],*pc=c;
则对c数组元素地址的正确引用是()。
A.&
c[3]B.pc+2C.c++D.&
c
4.已知:
floatf[]={1.0,2.3,4.5},*pf=f;
则以下哪项不能正确引用数组元素()。
A.*pf--B.*(--pf)C.*(pf++)D.*(++pf)
5.声明语句为“inta[3][4];
”,下列表达式中与数组元素a[2][1]等价的是()。
A.*(a[2]+1)B.a[9]C.*(a[1]+2)D.*(*(a+2))+1
6.设变量定义为:
intn,*p;
charch,*q,*g;
则不正确的语句是()。
A.p=&
n;
g=q=&
ch;
B.p=&
q=&
C.p=&
g=&
chD.p=&
g=p;
7.设有定义:
inta,*pa=&
以下scanf语句中能正确为变量a读入数据的是()。
A.scanf("
%d"
pa);
B.scanf("
a);
C.scanf("
&
pa);
D.scanf("
*pa);
8.不正确的赋值或赋初值的方式是()。
A.charstr[6]={'
s'
'
t'
r'
i'
n'
g'
};
B.charstr[10]="
string"
;
C.char*str="
D.charstr[10];
str="
;
9.以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是()。
A.chars[10]="
abcdefg"
B.chart[]="
*s=t;
C.chars[10];
s="
D.chars[10];
strcpy(s,"
);
10.设char*s;
以下正确地语句是()。
A.s=”computer”;
B.*s=”computer”;
C.*s=””;
D.*s=’c’;
11.设有程序段:
“chars[]="
chararray"
char*p;
p=s;
”则下面叙述正确的是()。
A.*p与s[0]相等B.s和p完全相同
C.s数组长度和p所指向的字符串长度相等
D.数组s中的内容和指针变量p中的内容相等
12.以下程序执行的结果()。
main()
{inta,b,k=4,m=6,*p1=&
k,*p2=&
m;
a=p1==&
b=(*p1)/(*p2)+7;
printf("
a=%d,b=%d\n"
a,b);
}
A.a=4,b=7B.a=0,b=7C.a=4,b=0D.a=0,b=0
13.下列程序段的输出结果是()。
int*p,*q,k=5,j=10;
j;
q=&
k;
p=q;
(*p)++;
printf("
*q);
A.5B.6C.10D.11
14.下列程序段的输出结果是()。
intc[]={1,7,12};
int*k=c+1;
*k++);
A.2B.7C.8D.12
15.以下程序执行的结果()。
{inta[5]={1,2,3,4,5};
int*p=&
a[1];
p[2]);
A.2;
B.3;
C.4;
D.5;
16.以下程序执行的结果()。
#include<
stdio.h>
{inta[]={1,2,3,4,5,6};
int*p;
p=a;
*(p+3)+=2;
printf(“%d,%d\n”,*p,*(p+3));
A.1,3B.1,6C.3,6D.1,4
17.下列程序的输出结果是()。
#include<
voidp(int*x,int*y)
{++*x;
--*y;
voidmain()
{intx=0,y=3;
p(&
x,&
y);
(%d,%d)"
x,y);
A.(0,2)B.(0,3)C.(1,3)D.(1,2)
18.设变量定义为inta[3]={1,4,7},*p=&
a[2]-2,则*p的值是()。
a[2]-2B.5C.2D.1
19.若变量己正确定义,下列不能使指针p成为空指针的是()。
A.p='
\0'
B.p=0C.p=NULLD.p=EOF
20.有以下定义
chara[10],*b=a;
不能给数组a输入字符串的语句是()。
A.gets(a)B.gets(a[0])C.gets(&
a[0]);
D.gets(b);
21.以下程序执行的结果()。
{chara[]="
IloveChina!
"
char*p=a;
p=p+2;
%s"
p);
A.IloveChina!
B.loveChina!
C.China!
D.l
22.阅读以下函数
intfun(char*sl,char*s2)
{inti=0;
while(sl[i]==s2[i]&
&
s2[i]!
='
)i++;
return(sl[i]=='
s2[i]=='
此函数的功能是()。
A.将s2所指字符串赋给s1
B.比较s1和s2所指字符串的大小,若s1比s2的大,函数值为1,否则函数值为0
C.比较s1和s2所指字符串是否相等,若相等,函数值为1,否则函数值为0
D.比较s1和s2所指字符串的长度,若s1比s2的长,函数值为1,否则函数值为0
23.以下程序执行的结果()。
{charstr[]="
xyz"
*ps=str;
while(*ps)ps++;
for(ps--;
ps-str>
=0;
ps--)puts(ps);
A.yzB.zC.yD.x
xyzyzyzxy
xyzxyzxyz
24.以下程序执行的结果()。
main()
{inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int(*pa)[4]=a;
pa++;
*(*(pa+1)+2));
}
A.3B.7C.10D.l1
25.对于变量定义char*pp[100],pp是一个()。
A.函数B.数组元素C.指针变量D.数组
26.以下程序执行的结果()。
{char*s[]={"
one"
"
two"
three"
},*p;
p=s[1];
%c,%s\n"
*(p+1),s[0]);
}
A.n,twoB.t,oneC.w,oneD.o,two
27.有以下程序
main()
{char*p[10]={"
abc"
aabdfg"
dcdbe"
abbd"
cd"
%d\n"
strlen(p[4]));
执行后输出结果是()
A)2B)3C)4D)5
28.下列程序段的输出结果是()。
char*st[]={"
abcd"
efgh"
ijkl"
mnop"
},**p=st;
p++;
*p+1);
A.cdB.fghC.ijklD.出错
29.设变量定义为:
int*p[3],a[3];
以下赋值正确的是()。
a[0]B.*p=**aC.p[0]=aD.**p=a
30.设有定义:
intn=0,*p=&
n,**q=&
p;
则以下选项中,正确的赋值语句是()
A)p=1;
B)*q=2;
C)q=p;
D)*p=5;
31.以下程序段中,能够通过调用函数fun,使main函数中的指针变量p指向一个合法的整型单元的是()。
A.main()B.main()C.main()D.main()
{int*p;
{int*p;
{int*p;
{int*p;
fun(p);
fun(&
p);
fun(p);
}}}}
intfun(int*p)intfun(int**p)intfun(int**p)intfun(int*p)
{ints;
p=&
s;
}{ints;
*p=&
}{*p=(int*)malloc
(2);
}{p=(int*)malloc(sizeof(int));
32.有以下程序
main(intarge,char*argv[])
{intn,i=0;
while(argv[1][i]!
{n=fun();
i++;
printf(%d\n"
n*argc);
intfun()
{staticints=0;
s+=1;
returns;
假设程序经编译、连接后生成可执行文件exam.exe,若键入以下命令行exam123<
回车>
,则运行结果为()。
A.6B.8C.3D.4
33.有以下程序
string.h>
main(intargc,char*argv[])
{inti,len=0;
for(i=1;
i<
argc;
i+=2)len+=strlen(argv[i]);
5d\n"
len);
经编译链接后生成的可执行文件是ex.exe,若运行时输入以下带参数的命令行
exabcdefgh3k44
A).4B.12C.8D.6
四、程序填空题
1.以下程序是完成将字符串b复制给字符串a的功能,请填空。
voidcopy_string(charfrom[],charto[])
while(【1】*(from+i)!
=’\0’)
{【2】*(from+i)=*(to+i);
}
to[i]=【3】’\0’;
main()
{char*a="
Iamateacher."
char*b="
youareastudent."
string_a=%s\nstring_b=%s\n"
a,b【4】);
copy_string(a,b)
【5】;
a,b);
2.以下sstrcpy()函数实现字符串复制,即将t所指字符串复制到s所指向内存空间中,形成一个新的字符串s。
请填空。
voidsstrcpy(char*s,char*t)
{while(*s++=*t++【1】);
{charstr1[100],str2[]="
abcdefgh"
【2】sstrcpy(str1,str2);
%s\n"
str1);
3.以下程序是计算一个字符串的长度,请填空。
{charc[20];
inti=0,s=0;
scanf("
c);
while(【1】c[i++]!
=’\0’)
{【2】s++;
}
s);
4.以下函数的功能是删除字符串s中的所有数字字符。
voiddele(char*s)
{intn=0,i;
for(i=0,s[i];
i++)
if(【1】s[i]>
=’0’&
s[i]<
=’9’)
s[n++]=s[i];
s[n]=【2】’\0’;
5.对输入的两个整数按大小输出。
swap(int*p1,int*p2)
{inttemp;
temp=【1】*p1;
*p1=*p2;
*p2=【2】temp;
{inta,b;
int*pointer_1,*pointer_2;
%d,%d"
【3】&
a,&
b);
pointer_1=【4】&
a;
pointer_2=&
if(a<
b)swap(pointer_1,【5】pointer_2);
\na=%d,b=%d\n"
6.用选择法对10个数排序(降序)。
{int*p,i,a[10];
for(i=0;
10;
【1】p++);
sort(p,【2】10);
for(p=a,i=0;
i<
i++){
%d"
【3】*p);
p++;
sort(intx[],intn)
{inti,j,k,t;
n-1;
i++){
k=i;
for(j=i+1;
j<
j++)
【4】if(*(x+j)>
*(x+k))k=j;
if(k!
=i){
t=x[i];
【5】x[i]=x[k];
x[k]=t;
7.输入一个字符串(少于80个字符),滤去所有的非八进制字符后,组成一个新字符串(八进制形式),然后将其转换为十进制整数后输出。
函数stoi(str)将八进制形式的字符串str转换为十进制整数,例如,stoi(“12”)的值为10(八进制12对应十进制10)。
voidmain()
{inti,k;
chars[10];
intstoi(char*str);
gets(s);
for(i=k=0;
s[i]!
=’\0’;
if(s[i]<
=’7’&
s[i]>
=’0’)
【1】s[k++]=s[i];
【2】s[k]=’\0’;
printf(“digit=%d\n”,【3】stoi(s));
intstoi(char*str)
{inti,n=0;
for(i=0;
str[i]!
【4】n=n*8+(str[i]-’0’);
returnn;
s
8.以下程序中函数huiwen的功能是检查一个字符串是否是回文,当字符串是回文时,函数返回字符串:
yes!
,否则函数返回字符串:
no!
,并在主函数中输出,所谓回文即正向与反向的拼写都一样,例如:
adgda。
char*huiwen(char*str)
{char*p1,*p2;
inti,t=0;
p1=str;
p2=【1】str[strlen(str)];
=strlen(str)/2;
if(*p1++!
=*p2--){t=1;
break;
if(【2】t==1)return("
elsereturn("
{charstr[50];
Input:
str);
【3】huiwen(str));
9.以下程序中,fun函数的功能是求3行4列二维数组每行元素中的最大值。
voidfun(int,int,int(*)[4],int*);
{inta[3][4]={{12,41,36,28},{19,33,15,27},{3,27,19,1}};
intb[3],i;
【1】fun(3,4,a,b);
3;
i++)printf("
%4d"
b[i]);
\n"
voidfun(intm,intn,intar[][4],int*br)
{inti,j,x;
{x=【2】*(*(ar+i));
for(j=0;
j++)
if(x<
ar[i][j])x=ar[i][j];
【3】*(br+i)=x;
10.设函数findbig已定义为求3个数中的最大值。
以下程序将利用函数指针调用findbig函数。
{intfindbig(int,int,int);
int(*f)(),x,yz,z,big;
f=【1】findbig;
%d%d%d"
x,&
y,&
z);
big=(*f)(x,y,z);
bing=%d\n"
big);
11.以下程序的功能是:
将从键盘输入的无符号八进制数字构成的字符串转换为十进制整数。
例如输入字符串为“556”,则输出十进制整数为366。
{
char*p,s[6];
intn;
Scanf(“%s”,s);
n=*p-‘0’;
while(*(++p)!
=’\0’)n=n*8+*p-‘0’;
printf(“%d\n”,n);
12.以下程序统计从键盘输入的字符中每个大写字母的个数,num[0]中统计字母A的个数,num[1]中统计字母B的个数,其它依次类推。
用#号结束输入,请填空。
#include“stdio.h”
#include“ctype.h”
{inti,num[26]={0};
charc;
while(【8】
(c=getchar())!
=’#’)
if(【9】c>
=’A’&
c<
=’Z’)num[【10】c-’A’]+=1;
for(i=0;
26;
if(num[i])printf(“%c:
%d\n”,i+’A’,num[i]);
13.下面的函数用以删除所给字符串(最多含80个字符)中的所有空白符。
以下程序中,调用C语言提供的isspace函数来判断某字符是不是空白符,如果是空白符该函数返回1,否则返回0。
voidrmv(【5】char*string)
{chartstr[81];
intj,k;
for(j=0,k=0;
string[j]!
=NULL;
if(isspace(string[i])==0)tstr[k++【6】]=string[j];
【7】tstr[k]=’\0’;
strcpy(string,tstr);
14.以下程序调用invert函数按逆序重新放置a数组中元素的值,a数组中的值在main函数中读入。
请填空:
#defineN10
voidinvert(int*s,intk,intj)
{intt;
if(k<
j)
{t=*(s+k);
*(s+k)=*(s+j)【8】;
*(s+j)=t;
invert(s,k+1【9】,j-1);
{inta[N],k;
for(k=0;
k<
N;
k++)scanf(“%d”,*(a+k)【10】);
invert(a,0,N-1);
k++)printf(“%d”,a[k]);
printf(“\n”);
五、程序阅读题
1.以下程序执行的结果()。
{char*p="
Becareful!
”;
%c"
try(p));
chartry(char*s)
for(;
*(s+i)!
++i);
return(*s);
B
2.以下程序执行的结果()。
intx=1;
intp(int*y)
{++*y;
return
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C程序设计 第八章 指针 程序设计 第八