第09章 指针运算.docx
- 文档编号:8744628
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:82
- 大小:69.16KB
第09章 指针运算.docx
《第09章 指针运算.docx》由会员分享,可在线阅读,更多相关《第09章 指针运算.docx(82页珍藏版)》请在冰豆网上搜索。
第09章指针运算
第9章指针
9.1选择题
9.1以下程序的运行结果是______。
sub(intx,inty,int*z)
{*z=y-x;}
main()
{
inta,b,c;
sub(10,5,&a);
sub(7,a,&b);
sub(a,b,&c);
printf(“%4,%4d,4d\n”,a,b,c);
}
A)5,2,3B)–5,-12,-7C)–5,-12,17D)5,-2,-7
9.2执行以下程序后,a的值为【1】,b的值为【2】。
main()
{
inta,b,k=4,m=6,*p1=&k,*p2=&m;
a=p1==&m;
b=(-*p1)/(*p2)+7;
printf(“a=%d\n”,a);
printf(“b=%d\n”,b);
}
【1】A)–1B)1C)0D)4
【2】A)5B)6C)7D)10
9.3下面程序应能对两个整型变量的值进行交换。
下以正确的说法是______。
main()
{
inta=10,b=20;
printf(“
(1)a=%d,b=%d\n”,a,b);
swap(&a,&b);
printf(“
(2)a=%d,b=%d\n”,a,b);
}
swap(inta,intq)
{
intt;
t=p;p=q;q=t;
}
A)该程序完全正确
B)该程序有错,只要将语句swap(&a,&b);中参数改为a,b即可
C)该程序有错,只要将swap()函数中的形参p和q以及t均定义为指针即可
D)以上说法都不正确
9.4有四组对指针变量进行操作的语句,以下判断正确的选项是______。
1)int*p,*q;p=q;
inta,*p,*q;p=q=&a;
2)inta,*p,*q;q=&a;p=*q;
inta=20,*p;*p=a;
3)inta=b=0,*p;p=&a;b=*p;
inta=20,*p,*q=&a;*p=*q;
4)inta=20,*p,*q=&a;p=q;
intp,*q;q=&p;
A)正确:
(1);不正确:
(2),(3),(4)
B)正确:
(1),(4);不正确:
(2),(3)
C)正确:
(3);不正确:
(1),
(2),(4)
D)以上结论都不正确
9.5以下程序中调用scanf函数变量a输入数值的方法是错误的,其错误原因是______。
main()
{
int*p,*q,a,b;
p=&a;
printf(“inputa:
”);
scanf(“%d”,*p);
}
A)*p表示的是指针变量p的地址
B)*p表示的是变量a的值,而不是变量a的地址
C)*p表示的是指针变量p的值
D)*p只能用来说明p是一个指针变量
9.6以下程序有错,错误原因是______。
main()
{
int*p,i;
char*q,ch;
p=&i;
q=&ch;
*p=40;
*p=*q;
}
A)p和q的类型不一致,不能执行*p=*q;语句
B)*p中存放的是地址值,因此不能执行*p=40;语句
C)q没有指向具体的存储单元,所以*q没有实际意义
D)q虽然指向了具体的存储单元,但该单元中没有确定的值,所以不能执行*p=*q;语句
9.7在如下语句;inta=10,b=20,*p1,*p2;p1=&a;p2=&b;如图1所示:
若要实现图2所示的存储结构,可选用的赋值语句是______。
p1
p2
p1
p2
a
b
a
b
图1
图2
A)*p1=*p2B)p1=p2C)p1=*p2D)*p1=p2
9.8已有定义intk=2;int*ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是______。
A)k=*ptr1+*ptr2;B)ptr2=k;
C)ptr1=ptr2D)k=*ptr1*(*ptr2);
9.9变量的指针,其含义是指该变量的______。
A)值B)地址C)名D)一个标志
9.10若已定义inta=5;下面对
(1),
(2)两个语句的正确解释是______。
(1)int*p=&a;
(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
9.11若有语句int*point,a=4;和point=&a;下面均代表地址的一组选项是______。
A)a,point,*&aB)&*a,&a,*point
C)*&point,*point,&aD)&a,&*point,point
9.12若需要建立如图所示的存储结构,且已有说明float*p,m=3.14;则正确的赋值语句是______。
3.14
p
a
A)p=mB)p=&mC)*p=mD)*p=&m;
9.13若有说明:
int*p,m=5,n;以下正确的程序段是______。
A)p=&m
scanf(”%d”,&p);
B)p=&n;
scanf(“%d”,*p);
C)scanf(”%d”,&n);
*p=n;
D)p=&n
*p=m;
9.14若有说明:
int*p1,*p2,m=5,n;以下均是正确的赋值语句的选项是______。
A)p1=&m;p2=&p1;
B)p1=&m;p2=&n;*p1=*p2;
C)p1=&m;p2=p1;
D)p1=&m;*p2=*p1;
9.15已有变量定义和函数调用语句:
inta=25;print_value(&a);函数的正确输出结果是______。
voidprintf_value(int*x)
{printf(“%d\n”,++*x);}
A)23B)24C)25D)26
9.16下面判断正确的是______。
A)char*a=”china”;等价于char*a;*a=”china”;
B)charstr[10]={“china”};等价于charstr[10];str[]={“china”};
C)char*s=”china”;等价于char*s;s=”china”;
D)charc[4]=”abc”,d[4]=”abc”;等价于charc[4]=d[4]=”abc”;
9.17设char*s=”\ta\017bc”;则指针变量s指向的字符串所占的字节数是______。
A)9B)5C)6D)7
9.18下面程序片段中,for循环的执行次数是______。
char*s=”\ta\018bc”;
for(;*s=’\0’;s++)printf(“*”);
A)9B)5C)6D)7
9.19下面能正确进行字符串赋值操作的是______。
A)chars[5]={“ABCDE”};B)chars[5]={‘A’,‘B’,‘C’,‘D’,‘E’};
C)char*s;s=”ABCDE”;D)char*s;scanf(“%s”,s);
9.20下面程序的运行结果是______。
char*s=”abcde”;
s+=2;printf(“%d”,s);
A)cdeB)字符’c’C)字符’c’的地址D)无确定结果
9.21设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是______。
A)c=*p1+*p2;B)p2=c;C)p1=p2D)c=*p1*(*p2);
9.22设有下面的程序段:
chars[]=”china”;char*p;p=s;则下列叙述正确的是______。
A)s和p完全相同
B)数组s中的内容和指针变量p中的内容相等
C)s数组长度和p所指的字符串长度相等
D)*p与s[0]相等
9.23下面程序段的运行结果是______。
char*format=”%s,a=%d,b=%d\n”;
inta=1,b=10;
a+=b;
printf(format,”a+=b”,a,b);
A)for,”a+=b”,abB)format,”a+=b”
C)a+=b,a=11,b=10D)以上结果都不对
9.24下面程序段的运行结果是______。
char*p=”%d,a=%d,b=%d\n”;inta=111,b=10,c;c=a%b;p+=3;printf(p,c,a,b);
A)1,a=111,b=10B)a=1,b=111
C)a=111,b=10D)以上结果都不对
9.25以下正确的程序段是______。
A)charstr[20];
scanf(“%s”,&str);
B)char*p;
scanf(“%s”,p);
C)charstr[20];
scanf(“%s”,&str[2]);
D)charstr[20],*p=str;
scanf(“%s”,p[2]);
9.26以下正确的程序段是______。
A)charstr1[]=”123456”,str2[]=”abcdef”;
strcpy(str1,str2);
B)charstr[10],*st=”abcde”;strcat(str,st);
C)charstr[10]=”“,*st=”abcde”;strcat(str,st);
D)char*st1=”12345”,*st2=”abcde”;strcat(st1,st2);
9.27下面程序段的运行结果是______。
charstr[]=”ABC”,*p=str;
printf(“%d\n”,*(p+3));
A)67B)0C)字符’C’的地址D)字符’C’
9.28下面程序段的运行结果是______。
char*p=”abcdefgh”;p+=3;printf(“%d\n”,strlen(strcpy(p,“ABCD”)));
A)8B)12C)4D)7
9.29下面程序段的运行结果是______。
chara[]=”language”,*p;p=a;while(*p!
=u){printf(“%c”,*p-32;p++;)
A}LANGUAGEB)langugeC)LANGD)langUAGE
9.30若有语句:
chars1[]=”string”,s2[8],*s3,*s4=”string2”;则对库函数strcpy的错误调用是___。
A)strcpy(s1,“string2”);B)strcpy(s4,”string1”);
C)strcpy(s3,”string1”);D)strcpy(s1,s2);
9.31以下与库函数strcpy(char*1,charp2)功能不相等的程序段是______。
A)strcpy1(char*p1,char*p2)
{while((*p1++=*p2++)!
=’\0’);}
B)strcpy2(char*p1,char*p2)
{while((*p1=*p2)!
=’\0’){p1++;p2++;}}
C)strcpy1(char*p1,char*p2)
{while(*p1++=*p2++);}
D)strcpy1(char*p1,char*p2)
{while(*p2)*p1++=*p2++;;}
9.32以下与库函数strcmp(char*s,char*t)的功能的程序段是______。
A)strcmp1(char*s,char*t)
{
for(;*s++==*t++;)
if(*s==’\0’)return0;
return(*s-*t);
}
B)strcmp2(char*s,char*t)
{
for(;*s++==*t++;)
if(!
*s)return0;
return(*s-*t);
}
C)strcmp3(char*s,char*t)
{
for(;*s==*t;)
if(!
*t)return0;
{return(*s-*t);return0;t++;s++;}
return(*s-*t);
}
D)strcmp4(char*s,char*t)
{
for(;*s==*t;s++,t++)
if(!
*s)return0;
return(*s-*t);
}
9.33下面说明不正确的是______。
A)chara[10]=”china”;B)chara[10],*p=a,p=”china”;
C)char*a;a=”china”;D)chara[10],*p;p=a=”china”;
9.34若有说明语句
chara[]=”Itismine”;char*p=”Itismine”;则以下不正确的叙述是______。
A)a+1表示的字符t的地址
B)p指向另外的字符串时,字符串的长度不受限制
C)p变量中存放的地址值可以改变
D)a中只能存放10个字符
9.35若已定义chars[10];则在下面表达式中不表示s[1]的地址的是______。
A)s+1B)s++C)&s[0]+1D)&s[1]
9.36下面程序的运行结果是______。
chars[6];s=”abcd”,printf(“%s\”\n”,s);
A)“abcd”B)“abcd”C)\”abcd\”D)编译出错
9.37下面程序的功能是从输入的十个字符串中找出最长的那个串。
请选择填空。
#include
#include
#defineN10
main()
{
charstr[N][81],*sp;
inti;
for(i=0;i sp=【1】; for(i=0;i printf(“sp=%d,%s\n”,strlen(sp),sp); } 【1】A)str[i]B)&str[i][0]C)strD)str[N] 【2】A)str[i]B)&str[i][0]C)strD)str[N] 9.38下面程序的功能是将一个整数字符串转换为一个整数,如”-1234”转换为-1234,请选择填空。 #include #include main() { chars[6]; intn; gets(s); if(*s==’-’)n=-chnum(s+1); elsen=chnum(s);printf(“%d\n”,n); } chnum(char*p) { intnum=0,k,len,j; len=strlen(p); for(;【1】;p++) { k=【2】; j=(--len); while(【3】){k=k*10;} num=num+k; } return(num); } 9.39下面程序的功能是将八进制整数字符串转换为十进制整数。 请选择填空。 #include main() { char*p,s[6];intn; p=s; gets(p); n=【1】; while(【2】! =’\0’)n=n*8-‘0’; printf(“%d\n”,n); } 【1】A)0B)*pC)*p-‘0’D)*p+’0’ 【2】A)*pB)*p++C)*(++p)D)p 9.40下面程序的功能是统计子串substr在母串中出现的次数。 请选择填空。 #include main() { charstr[80],substr[80]; intn; gets(str); gets(substr); printf(“%d\n”,count(str,substr)); } count(char*str,char*substr) { inti,j,k,num=0; for(i=0;【1】;i++) for(【2】,k=0;substr[k]==str[j];k++,j++) if(substr[【3】]==’\0’){num++;break;}return(num); } 【1】A)str[i]==substr[i]B)str[i]! =’\0’C)str[i]==’\0’D)str[i]>substr[i] 【2】A)j=i+1;B)j=iC)j=0D)j=1 【3】A)kB)k++C)k+1D)++k 9.41下面程序的功能是在字符串str中找出最大的字符并放在第一个位置上,并将该字符前的原字符往后顺序移动,如chyab变成ychab。 请选择填空。 #include main() { charstr[80],*p,max,*q; p=str;gets(p);max=*(p++); while(*p! =’\0’) { if(max<*p){max=*p;【1】;} p++; } p=q; while(【2】){*p=*(p-1);【3】;} *p=max; puts(p); } 【1】A)p++B)p=qC)q=p;D)q++ 【2】A)p>strB)p>=strC)*p>str[0]D)*p>=str[0] 【3】A)p++B)str--C)p--D)i— 9.42以下程序的是删除字符串s中所有空格(包括TAB符,回车符,换行符),请选择填空。 #include #include #include main() { charc,s[80];inti=0; c=getchar(); while(c! =EOF){s[i]=c;i++;c=getchar();} s[i]=’\0’; delspace(s); puts(s); } delspace(char*p) { inti,t;charc[80]; for(i=0,t=0;【1】;i++) if(! isspace(【2】))c[t++]=p[i]; c[t]=’\0’; strcpy(p,c); } A)p[i]B)! p[i]C)p[i]=’\0’D)p[i]==’\0’ A)p+iB)*c[i]C)*(p+i)D)*(c+i) 9.43下面程序以功能是将字符串s中的内容按逆顺输出,但不改变串中的内容,请选择填空。 #include main() { chars[10]=”hello! ”; inverp(s); } inverp(char*s) { if(【1】)return0; inverp(a+1); printf(“%c”,【2】)_; } 【1】A)*a! =’\0’B)*a! =NULLC)! *aD)! a*==0 【2】A)*(a-1)B)*aC)*(a+1)D)*(a--) 9.44下面程序的功能是用递归法将一个整数存放到一个字符数组中。 存放时按逆顺存放。 如483存放成384,请填空。 #include voidconvert(char*a,intn) { inti; if((i=n/10)! =0)convert(【1】,i); *a=【2】; } main() { intnumber;charstr[]=””;scanf(“%d”,&number);convert(str,number);puts(str); } 【1】A)a++B)a+1C)a--D)a-1 【2】A)n/10B)n%10C)n/10+10D)n%10+’0’ 9.45下面程序的功能是用递归法将一个整数转换成字符形式输出。 例如输入483,应输出相应字符串483。 请填空。 #include voidconvert(intn) { inti; if((【1】)! =0)convert(i); putchar(【2】+’0’); } main() { intnumber;scanf(“%d,&number);if(number<0){puchar(‘-’);number=-number;}convert(number); } 【1】A)i=n/10B)i=n%10C)i=n--D)i=--a 【2】A)nB)n/10C)n%10D)i%10 9.46下面程序的是按字典顺序比较两个字符串s,t的大小,如果s大于t则返回正值,等于则返回0,小于则返回负值。 请选择填空。 #include“stdio.h” s(char*s,char*t)] { for(;*s==*t;【1】)if(*s==’\0’)return(0);retrun(*s-*t); } main() { chara[20],b[20],*p,*q; inti; p=&a;q=&b; scanf(“%s%s”,a,b); i=s(【2】); p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第09章 指针运算 09 指针 运算