C语言习题集合(指针)
更新时间:2023-06-06 23:57:01 阅读量: 实用文档 文档下载
- c语言集合运算推荐度:
- 相关推荐
C语言习题集合(指针)
第七章
7.1选择题
指针
1.若有说明:inta=2,*p=&a,*q=p;,则以下非法的赋值语句是()。
A.p=q;B.*p=*q;C.a=*q;D.q=a;2.若定义:inta=511,*b=&a;,则printf("%d\n",*b);的输出结果为:
A.无确定值B.a的地址C.512D.5113.已有定义inta=2,*p1=&a,*p2=&a;下面不能正确执行的赋值语句是()。
A.a=*p1+*p2;B.p1=a;C.p1=p2;D.a=*p1*(*p2);4.变量的指针,其含义是指该变量的()。
A.值B.地址C.名D.一个标志5.若有说明语句:inta,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);6.若已定义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。
7.若有语句int*p,a=10;p=&a;下面均代表地址的一组选项是()。
A.a,p,*&aB.&*a,&a,*pC.*&p,*p,&aD.&a,&*p,p
8.若需要建立如图所示的存储结构,且已有说明double*p,x=0.2345;则正确的赋值语句
是()。
x
A.p=x;B.p=&x;C.*p=x;D.*p=&x;9.若有说明:int*p,a=1,b;以下正确的程序段是()。
A.p=&b;B.scanf("%d",&b);
scanf("%d",&p);*p=b;C.p=&b;D.p=&b;
scanf("%d",*p);*p=a;
10.有如下语句:intm=6,n=9,*p,*q;p=&m;q=&n;如图1所示,若要实现下图所示的存储
结构,可选用的赋值语句是()
。
p
C语言习题集合(指针)
pqpq
mn
m
n
A.*p=*q;B.p=*q;C.p=q;D.*p=q;
11.以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是()。
#include<stdio.h>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是一个指针变量
12.下面程序的功能是从输入的十个字符串中找出最长的那个串。请在________处填空。
#include"stdio.h"#include"string.h"#defineN10main(){
chars[N][81],*t;intj;
for(j=0;j<N;j++)gets(s[j]);t=*s;
for(j=1;j<N;j++)
if(strlen(t)<strlen(s[j]))________;
printf("themaxlengthoftenstringsis:%d,%s\n",strlen(t),t);}
A.t=s[j]B.t=&s[j]C.t=s++D.t=s[j][0]13.下面判断正确的是()。
A.char*s="girl";等价于char*s;*s="girl";B.chars[10]={"girl"};等价于chars[10];s[10]={"girl"};C.char*s="girl";等价于char*s;s="girl";D.chars[4]="boy",t[4]="boy";等价于chars[4]=t[4]="boy"14.设char*s="\ta\017bc";则指针变量s指向的字符串所占的字节数是()。
A.9B.5C.6D.7
C语言习题集合(指针)
15.下面程序段中,for循环的执行次数是()。
char*s="\ta\018bc";
for(;*s!='\0';s++)printf("*");A.9B.5C.6D.716.以下不能正确进行字符串赋初值的语句是()。
A.charstr[5]="good!";B.char*str="good!";C.charstr[]="good!";
D.charstr[5]={'g','o','o','d'};
17.若指针p已正确定义,要使p指向两个连续的整型动态存储单元,不正确的语句是()。
A.p=2*(int*)malloc(sizeof(int));B.p=(int*)malloc(2*sizeof(int));C.p=(int*)malloc(2*2);
D.p=(int*)calloc(2,sizeof(int));18.下面程序段的运行结果是()。
char*s="abcde";s+=2;
printf("%d",s);A.cdeB.字符'c'C.字符'c'的地址D.无确定的输出结果19.设有如下的程序段:chars[]="girl",*t;t=s;则下列叙述正确的是()。
A.s和t完全相同
B.数组s中的内容和指针变量t中的内容相等C.s数组长度和t所指向的字符串长度相等D.*t与s[0]相等
20.以下正确的程序段是()。
A.chars[20];B.char*s;
scanf("%s",&s);scanf("%s",s);C.chars[20];D.chars[20],*t=s;
scanf("%s",&s[2]);scanf("%s",t[2]);
21.下面程序段的运行结果是()。
#include"stdio.h"main(){
intm=10,n=20;
char*format="%s,m=%d,n=%d\n";m*=n;
printf(format,"m*=n",m,n);}
A.format,"m*=n",m,nB.format,"m*=n"C.m*=n,m=200,n=20D.以上结果都不对22.以下与库函数strcpy(char*p,char*q)功能不相等的程序段是()。
A.strcpy1(char*p,char*q)
{while((*p++=*q++)!='\0');
}
C语言习题集合(指针)
第七章指针B.strcpy2(char*p,char*q)
{while((*p=*q)!='\0')
{p++;q++;}}
C.strcpy3(char*p,char*q)
{while(*p++=*q++);}
D.strcpy4(char*p,char*q)
{while(*p)
*p++=*q++;}
23.下面程序段的运行结果是()。
#include"stdio.h"main(){
chars[]="example!",*t;t=s;
while(*t!='p')
{printf("%c",*t-32);t++;}}
A.EXAMPLE!B.example!C.EXAM24.以下正确的程序段是()。
A.chars[]="12345",t[]="6543d21";strcpy(s,t);B.chars[20],*t="12345";strcat(s,t);C.chars[20]="",*t="12345";strcat(s,t);D.char*s="12345",*t="54321";strcat(s,t);
25.以下与库函数strcmp(char*s,chat*t)的功能相等的程序段是()。
A.strcmp1(char*s,chat*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(;*t==*s;)
{if(!*t)return0;t++;s++;}return(*s-*t);}
·4·
D.example!
C语言习题集合(指针)
D.strcmp4(char*s,char*t)
{for(;*s==*t;s++,t++)
if(!*s)return0;return(*t-*s);}
26.若有以下定义和语句:
ints[4][5],(*ps)[5];ps=s;
则对s数组元素的正确引用形式是()。A.ps+1B.*(ps+3)C.ps[0][2]D.*(ps+1)+327.不合法的main函数命令行参数表示形式是:()。
A.main(inta,char*c[])B.main(intargc,char*argv)C.main(intarc,char**arv)D.main(intargv,char*argc[])
28.若有说明语句:chars[]="itisaexample.",*t="itisaexample.";则以下不正确的叙述
()。
A.s表示的是第一个字符i的地址,s+1表示的是第二个字符t的地址B.t指向另外的字符串时,字符串的长度不受限制C.t变量中存放的地址值可以改变D.s中只能存放16个字符
29.若已定义chars[10];则在下面表达式中不表示s[1]地址的是()。
A.s+1B.s++C.&s[0]+1D.&s[1]30.下面程序段的运行结果是()。(注:└┘代表空格)
#include"stdio.h"main()
{chars[6];
s="abcd";
printf("\"%s\"\n",s);}
A."abcd"B."abcd└┘"C.\"abcd\"31.执行以下程序后,a的值为【1】,b的值为【2】。
#include<stdio.h>main(){
inta,b,k=4,m=6,*p=&k,*q=&m;a=p==&m;b=(-*p)/(*q)+7;
printf("a=%d\n",a);printf("b=%d\n",b);
D.编译出错
}
【1】A.-1B.1C.0D.4【2】A.5B.6C.7D.10
32.下面程序的功能是将字符串s的所有字符传送到字符串t中,要求每传递三个字符后再
存放一个空格,例如字符串s为"abcdefg",则字符串t为"abcdefg",请选择填空。#include"stdio.h"
C语言习题集合(指针)
#include"string.h"main(){
intj,k=0;
chars[60],t[100],*p;p=s;gets(p);while(*p)
{for(j=1;j<=3&&*p;【1】)t[k]=*p;
if(【2】){t[k]='';k++;}}
t[k]='\0';puts(t);}
【1】A.p++B.p++,k++C.p++,k++,j++D.k++,j++【2】A.j==4B.*p=='\0'C.!*pD.j!=433.下面程序的功能是将八进制正整数字符串转换为十进制整数。请选择填空。
#include"stdio.h"#include"string.h"main(){
char*t,s[8];intn;t=s;gets(t);n=【1】;
while(【2】!='\0')n=n*8+*t-'0';printf("%d\n",n);}
【1】A.0B.*tC.*t-'0'D.*t+'0'【2】A.*tB.*t++C.*(++t)D.t
34.下面程序的功能是在字符串s中找出最大的字符并放在第一个位置上,并将该字符前的
原字符往后顺序移动,如:boy&girl变成ybo&girl。请选择填空。#include"stdio.h"#include"string.h"main(){
chars[80],*t,max,*w;t=s;gets(t);
max=*(t++);while(*t!='\0'){
if(max<*t)
C语言习题集合(指针)
{max=*t;t++;}t=w;
while(【1】)
{
*t=*(t-1);【2】;}
*t=max;puts(t);
w=t;}
}
【1】A.t>sB.t>=sC.*t>s[0]D.*t>=s[0]【2】A.t++B.s--C.t--D.w--35.以下程序的功能是删除字符串s中的所有空格(包括TAB符、回车符),请填空。#include"stdio.h"#include"string.h"#include"ctype.h"main(){
chars[80];gets(s);delspace(s);puts(s);}
delspace(char*t){
intm,n;charc[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中出现的次数。请选择填空。
#include"stdio.h"#include"string.h"main(){
C语言习题集合(指针)
chars[80],sub[80];intn;gets(s);gets(sub);
printf("%d\n",count(s,sub));
}
intcount(char*p,char*q){
intm,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=m【2】A.kB.k++37.下列程序的输出结果是()。
#include"stdio.h"main(){
inta[]={1,2,3,4,5,6,7,8,9,0},*p;p=a;
printf("%d\n",*p+9);
C.n=0C.k+1D.n=1D.++k
}
A.0B.1C.1038.以下程序的输出结果是()。
#include"stdio.h"charcchar(charch){
if(ch>='A'&&ch<='Z')ch=ch-'A'+'a';
return
ch;
}
main(){
chars[]="ABC+abc=defDEF",*p=s;while(*p){
*p=cchar(*p);p++;}
printf("%s\n",s);}
A.abc+ABC=DEFdef
D.9
B.abcaABCDEFdef
C语言习题集合(指针)
C.abc+abc=defdef
39.以下程序的输出结果是()。
#include"stdio.h"#include"string.h"main(){
charb1[8]="abcdefg",b2[8],*pb=b1+3;while(--pb>=b1)strcpy(b2,pb);printf("%d\n",strlen(b2));}
A.8B.340.有以下程序
#include"string.h"#include"stdio.h"main(){
char*p="abcde\0fghjik\0";printf("%d\n",strlen(p));}
程序运行后的输出结果是()。A.12B.1541.有以下程序
voidss(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);
D.abcabcdefdef
C.1D.7
C.6D.5
}
程序运行后的输出结果是()。A.ABCDDEFEDBDB.abcDDfefDbDC.abcAAfefAbAD.Abcddfefdbd42.以下程序调用findmax函数返回数组中的最大值。在下面划线处应填入的是()。
#include"stdio.h"findmax(int*a,intn){
int*p,*s;
for(p=a,s=a;p-a<n;p++)
if(__________)s=p;
C语言习题集合(指针)
return(*s);
}
main(){
intx[5]={12,21,13,6,18};printf("%d\n",findmax(x,5));}
A.p>sB.*p>*sC.a[p]>a[s]43.有以下程序
#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.abcd44.下面程序的运行结果是()。
#include"stdio.h"#include"string.h"fun(char*s){
chart[10];s=t;
strcpy(t,"example");}
main(){
char*s;fun(s);puts(s);}
A.example└┘└┘└┘B.example└┘└┘
45.下列程序段的输出结果是()。
#include"stdio.h"voidfun(int*x,int*y){
printf("%d%d",*x,*y);*x=3;*y=4;
D.p-a>p-s
D.dd
C.exampleD.不确定的值
C语言习题集合(指针)
}
main(){
intx=1,y=2;fun(&y,&x);
printf("%d%d",x,y);}
A.2143B.1212C.123446.下列程序的输出结果是()。
#include"stdio.h"main(){
chara[10]={9,8,7,6,5,4,3,2,1,0},*p=a+5;printf("%d",*--p);}
A.非法B.a[4]的地址C.547.有以下程序
#include"stdio.h"#include"string.h"
main(intargc,char*argv[]){
intm,length=0;
for(m=1;m<argc;m++)length+=strlen(argv[m]);printf("%d\n",length);
D.2112
D.3
}
程序编译连接后生成的可执行文件是file.exe,若执行时输入带参数的命令行是:
file123456789↙
则运行结果是()。A.22B.17C.12D.948.有以下函数:
char*fun(char*s){…
returns;}
该函数的返回值是()。A.无确定值B.形参s中存放的地址值C.一个临时存储单元的地址D.形参s自身的地址值
49.假定下列程序的可执行文件名为file.exe,则在该程序所在的子目录下输入命令行:
filegirlboy↙
后,程序的输出结果是()。#include"stdio.h"
main(intargc,char*argv[]){
intm;
C语言习题集合(指针)
if(argc<=0)return;
for(m=1;m<argc;m++)printf("%c",*argv[m]);
}
A.girlboyB.gbC.gir
50.设有一个名为file的C源程序,且已知命令行为:filegirl
以下运行结果的C源程序为()。girlboystudent
A.main(intargc,char*argv[])
{
while(--argc>1)
printf("%s%c",*argv,(argc>1)?'\n':'');
}
B.main(inta,char*b[])
{
while(a-->1)
printf("%s\n",*++b);
}
C.main(intargc,char*argv[])
{
while(++argc>0)
printf("%s%c",*++argv,(argc>1)?'':'\n');
}
D.main(intargc,char*argv[])
{
while(argc>1)
printf("%s",*++argv);
}
D.girlboy
boystudent,则可得到
7.2填空题
1.设有定义:inta,*p=&a;以下语句将利用指针变量p读写变量a中的内容,请将语句补
充完整。
scanf("%d",【1】);printf("%d\n",【2】);2.请填空:
p
c
建立如图所示存储结构所需的说明语句是【1】。建立如图所示给c输入数据的输入语句是【2】。建立如图所示存储结构所需的赋值语句是【3】
。
C语言习题集合(指针)
3.以下程序的运行结果是________。
#include"stdio.h"#include"string.h"int*p;main(){
intx=1,y=2,z=3;p=&y;
fun(x+z,&y);
printf("(1)%d%d%d\n",x,y,*p);}
fun(intx,int*y){
intz=4;*p=*y+z;x=*p-z;
printf("(2)%d%d%d\n",x,*y,*p);
}
4.下面程序段是把从终端读入的一行字符作为字符串放在字符数组中,然后输出。请填空。
#include"stdio.h"#include"string.h"main(){
intm;
chars[80],*t;
for(m=0;m<79;m++){
s[m]=getchar();
if(s[m]=='\n')break;}
s[m]=【1】;t=【2】;
while(*t)putchar(*t++);}
5.下面程序段的运行结果是________。
chars[80],*t="EXAMPLE";t=strcpy(s,t);s[0]='e';puts(t);
6.函数sstrcmp()的功能是对两个字符串进行比较。当s所指字符串相等时,返回值为0;
当s所指字符串大于t所指字符串时,返回值大于0;当s所指字符串小于t所指字符串时,返回值小于0(功能等同于库函数strcmp())。请填空。#include"stdio.h"
intsstrcmp(char*s,char*t)
C语言习题集合(指针)
{
while(*s&&*t&&*s==【1】){
s++;t++;}
return【2】;
}
7.下面程序的运行结果是________。
voidswap(int*a,int*b){
int*t;t=a;a=b;b=t;}
main(){
intx=3,y=5,*p=&x,*q=&y;swap(p,q);
printf("%d%d\n",*p,*q);}
8.以下程序的输出结果是________。
#include"stdio.h"
main(){
char*p="abcdefgh",*r;long*q;q=(long*)p;q++;
r=(char*)q;
printf("%s\n",r);
}
9.下面程序的功能是将字符串中的数字字符删除后输出。请填空。
#include"stdio.h"#include"malloc.h"voiddelnum(char*t){
intm,n;
for(m=0,n=0;t[m]!='\0';m++)if(t[m]<'0'【1】t[m]>'9')
{t[n]=t[m];n++;}
【2】;}
C语言习题集合(指针)
main(){
char*s;
s=(char*)malloc(sizeof(char));/*给s分配一个地址*/printf("\ninputtheoriginalstring:");gets(s);delnum(s);puts(【3】);}
10.下面程序的功能是比较两个字符串是否相等,若相等则返回1,否则返回0。请填空。
#include"stdio.h"#include"string.h"fun(char*s,char*t){
intm=0;
while(*(s+m)==*(t+m)&&【1】)m++;return(【2】);}
11.下面程序用来计算一个英文句子中最长单词的长度(字母个数)max。假设该英文句子
中只含有字母和空格,在空格之间连续的字母串称为单词,句子以'.'为结束。请填空。#include"stdio.h"main(){
staticchars[]={"youmakemehappywhendaysaregrey."},*t;
intmax=0,length=0;t=s;
while(*t!='.'){
while(((*t<='Z')&&(*t>='A'))||((*t<='z')&&(*t>='a'))){
length++;【1】;}
if(max<length)【2】;length=0;t++;}
printf("max=%d",max);
}12.下面程序是判断输入的字符串是否是“回文”,(顺读和倒读都一样的字符串称为“回文”,
如level)。请填空。#include"stdio.h"#include"string.h"main()
C语言习题集合(指针)
{
chars[80],*t1,*t2;intm;gets(s);m=strlen(s);t1=s;
t2=【1】;while(t1<t2)
{if(*t1!=*t2)break;else{t1++;
【2】;}}
if(t1<t2)printf("NO\n");elseprintf("YES\n");
}
13.当运行以下程序时,从键盘输入:apple↙
tample↙
则下面程序的运行结果是________。#include"stdio.h"main(){
chars[80],*t;t=s;gets(t);
while(*(++t)!='\0')
if(*t=='a')break;else{t++;gets(t);}puts(t);}
14.当运行以下程序时,从键盘输入6↙,则下面程序的运行结果是________。
#include"stdio.h"#include"string.h"
main(){
chars[]="97531",c;c=getchar();f(s,c);puts(s);}
f(char*t,charch){
while(*(t++)!='\0');while(*(t-1)<ch)*(t--)=*(t-1);
C语言习题集合(指针)
*(t--)=ch;
}15.若有定义:inta[]={1,2,3,4,5,6,7,8,9,10,11,12},*p[3],m;则下面程序段的输出是________。
for(m=0;m<3;m++)p[m]=&a[m*4];printf("%d\n",p[2][2]);
16.下面程序的运行结果是________。
#include"stdio.h"main(){
chars[]="1357",*t;t=s;
printf("%c,%c\n",*t,++*t);}
17.以下程序将数组a中的数据按逆序存放。请填空。
#include"stdio.h"#defineM10main(){
inta[M],m,n,temp;
for(m=0;m<M;m++)scanf("%d",a+m);m=0;n=M-1;while(m<n){
temp=*(a+m);【1】;
*(【2】)=temp;m++;n--;}
for(m=0;m<M;m++)printf("%3d",*(a+m));}
18.以下程序在a数组中查找与x值相同的元素的所在位置。请填空。
#include"stdio.h"main(){
inta[11],x,m;
printf("pleaseinputtennumbers:\n");for(m=1;m<11;m++)scanf("%d",a+m);printf("pleaseinputx:");scanf("%d",&x);*a=【1】;m=10;
while(x!=*(a+m))
【2】;
C语言习题集合(指针)
if(m>0)printf("%5d'spositionis:%4d\n",x,m);elseprintf("%dnotbeenfound!\n",x);
}
19.以下程序的功能是________。
#include"stdio.h"main(){
char*s[]=={"PASCAL","FORTRAN","COBOL","BASIC"};char**p;intn;p=s;
for(n=0;n<4;n++)
printf("%s\n",*(p++));}
20.若有定义和语句:inta[4]={1,2,3,4},*p;p=&a[2];,则*--p的值是________。21.若有定义和语句:inta[2][3]={0},(*p)[3];p=a;,则p+1表示数组________。22.若有如下定义和语句:
int*p[3],a[6],n;
for(m=0;m<3;m++)p[m]=&a[2*m];则*p[0]引用的是a数组元素【1】;*(p[1]+1)引用的是a数组元素【2】。23.若有以下定义和语句,在程序中引用数组元素a[m]的四种形式是:【1】、【2】、【3】和
a[m]。(假设m已正确说明并赋值)inta[10],*p;p=a;
24.下面程序的输出结果是________。
#include"stdio.h"main(){
intb[2][3]={1,3,5,7,9,11};int*a[2][3];inti,j;int**p,m;
for(i=0;i<2;i++)for(j=0;j<3;j++)
a[i][j]=*(b+i)+j;
p=a[0];
for(m=0;m<6;m++){
printf("%4d",**p);p++;}}
25.定义语句int*f();和int(*f)();的含义分别为【1】和【2】。26.请根据运行结果,完成main函数中的填空。
C语言习题集合(指针)
Array_add(inta[],intn){
intm,sum=0;
for(m=0;m<n;m++)sum+=a[m];return(sum);}
main(){
intArray_add(inta[],intn);
staticinta[3][4]={2,4,6,8,10,12,14,16,18,20,22,24};int*p,total1,total2;【1】;
pt=Array_add;p=a[0];
total1=Array_add(p,12);total2=(*pt)(【2】);
printf("total1=%d\ntotal2=%d\n",total1,total2);}
运行结果:total1=156
total2=156
7.3答案及部分解析
一.选择题答案
1.D2.D3.B4.B5.A6.D7.D8.B9.D10.C11.B12.A13.C14.C15.C16.A17.A18.C19.D20.C21.C22.D23.C24.C25.C26.C27.B28.D29.B30.D31.【1】C32.【1】C33.【1】C34.【1】A35.【1】A36.【1】B【2】C【2】A【2】C【2】C【2】C【2】C37.C38.C39.D40.D41.B42.B43.A44.D45.A46.C47.D48.B49.B50.B
1.解析:所谓指针是一种特殊的变量,它存放的是另一个简单变量、数组等的地址。由计
算机组成原理可知,内存的每一个存储单元都对应一个地址,CPU正是通过这个地址来访问每个存储单元的。而变量名最终仍要翻译成地址,才能找到所对应的真正的存储单元,进行读/写操作。当定义了一个指针后,对这个指针变量进行使用时,可以简单的理解为:加*后,对应一个数(变量值),不加*,对应一个地址。所以:当由如下定义:inta,*p,*q,b;
可以进行如下的赋值操作,类型才能兼容。如:p=&a;q=p;*q=5;q=&b;a=b;b=*p;
本题中,x为简单变量,p为指向一个变量的指针,类型不兼容。应为:q=&x;
C语言习题集合(指针)
13.解析:A.不等价的原因在于后一组语句“char*s;*s="girl";”,其中s是指针变量,在
引用一个指针变量之前,应对其赋一个初值,即将一个字符串的地址赋给它。指针变量前不加“*”,代表地址;加“*”代表该地址对应的字符,本题中“*s="girl"”语句的目的是给该指针赋初值(地址),故应该去掉s前的“*”,两组语句方等价。B.的错误在于后一组语句“chars[10];s[10]={"girl"};”数组可以在定义的同时赋初值,或者通过strcpy函数赋值,但绝对不可以使用赋值语句赋值。D.的错误在于后一组语句“chars[4]=t[4]="boy";”,C语言规定在对多个变量赋以同一个值时,不可以使用连等的方式,必须分别赋值。
20.解析:对于scanf语句,格式符后的参数应该为一个变量的地址。本题中:A.的错误
在于s已经为数组名,数组名代表一片连续单元的起始地址,不应该再加取地址符&;B的错误在于s为指针变量,一个指针变量在使用时,必须先赋一个地址值,否则,会任意指向一个存储单元,可能会造成本程序、其他程序以及整个系统的崩溃。D.的错误在于t[2]是一个数组元素,是一个数值,而不是存储该数值的单元的地址值,所以,应该加上取地址符。
24.解析:strcat函数的形式“strcat(参数1,参数2);”其中参数1可以为数组名,参数2
可以为数组名或指向字符的指针。该函数要求作为参数1的字符数组必须足够大,以便容纳连接后的新字符串。故:A.的错误在于s的长度小于参数2的字符数组t的长度;B.的错误在于作为参数1的字符数组s未赋初值,里面存放的是不确定的字符串,使第二个字符串不能确定连接到字符串1中的位置。D.中的参数1是个指针,而之所以参数1不可以为指针的原因在于“char*s="12345";”相当于“chars[]="12345";”确定了s的长度;显然,其长度不足以容纳连接两串后的新串。
29.解析:数组名不能进行自加运算,没有意义。而加、减运算也需要在数组范围内进行,
一旦超出范围,也没有意义。
30.解析:s是字符数组名,它里面存储的是一串字符。对字符串赋值的时候,可以通过定
义的同时赋初值,或者使用strcpy函数,绝对不可以使用赋值语句。即:chars[6];
这是错误的赋值方式s="abcd";
chars[6];
strcpy(s,"abcd");
这是正确的赋值方式或者直接这样:
chars[6]="abcd";
对于指针则可以通过赋值语句赋值,因为它赋的是一个字符串的首地址。
32.解析:要想按照本题要求“每传递三个字符后再存放一个空格”,需要经过这样的两步
方可以:第一,统计原字符串s,每隔3位截取下来,赋给另一个字符数串,这需要做个循环即可;第二,要考虑到是不是每次截取下来的字符串都添加一个空格,因为最后一次截取下来的字符不需再加空格,那么加一个判断语句:是否上一个循环真的循环了4次即可。注意上一个循环体的循环判断语句“j<=3&&*p”,说明该循环体可以因“j=4”或者“字符串结束*p='\0'”而终止循环。“j=4”的情况是意味着每截取3位,添加一个空格;*p='\0'意味着判断到字符串的尾部,不许再加空格,同时,包括外围的while也终止循环。
33.解析:八进制数转换为十进制数的方法是:位权展开法
(每一位的数值乘以它的权值即
C语言习题集合(指针)
8n)。由于本题中把八进制数定义为字符串的形式,所以需要将其从字符转换到整型数,即通过字符间的“减”运算。如:'7'-'0'=7。
二.填空题答案1.答案:【1】p【2】*p2.答案:【1】char*p,c;【2】scanf("%c",&c);或者c=getchar();【3】p=&c;3.答案:(2)266
(1)166
解析:第一步.调用fun函数之前,进行了如下图7-1所示的操作:全局变量p指向
图7-1
p
main函数中的局部变量y。
第二步:当发生函数调用时,实参向形参传递。这时,新开辟了整型变量x和指向main中的变量y的指针y,显然,它和全局变量p一样指向了同一个单元。fun函数中的x、y和main中的x、y是两个不同的变量,为了清晰的表示调用过程,图7-2用x'、y'代替fun中的x、y。
第三步:执行fun函数。按顺序先进行两个赋值运算:“(1)*p=*y'+z';(2)
p
图7-2
x'=*p-z';”,这时候,没有改变p的指向,而是改变了p所指向变量y(main中的变量y)的数值,即“*p=*y'+z';”等价与“y=y+z';”,故main中的变量y等于6;同时,因为*p的值改变,fun函数的形参x'的值因执行“x'=*p-z';”语句而变为2。该过程如图7-3所示。然后接着执行一个打印输出语句“printf("(2)%d%d%d\n",x',*y',*p);”,所以,该步的输出结果应为:(2)266
正在阅读:
C语言习题集合(指针)06-06
建筑工程资料管理全套范例(纯表格类)07-17
2017-2023年中国呼叫器市场监测调查分析与投资战略咨询预测报告05-21
京剧老生唱词01-17
建筑业工人岗前培训 - 图文09-20
基于MATLAB的图像处理字母识别11-28
中央国家机关办公楼(区)物业管理服务基本项目收费参考标准11-27
30105工作面回撤通道开口施工安全技术措施(各部门发)05-03
生物分离工程考试范围11-15
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 指针
- 习题
- 集合
- 语言
- ECLIPSE建模流程及注意要点
- 毕业设计机械类外文翻译
- 中国历史文化名村名单
- 全国2012年4月自考英语国家概况试题
- 校园微电影剧本 13广告陈益勇
- 压缩空气系统节能案例(压缩空气_节能_体系_案例_宣导_演讲)
- PKPM异形柱结构的设计
- 计算机技术在数学建模中的应用探讨
- 2011年11月二级企业培训师真题
- 全国公共英语等级考试PETS一级词汇表word版下载
- 江汉大学思想道德与法律考试
- 中国近现代史纲要论文
- 第16章 含硫磷硅化合物
- 猪抗病育种研究进展及对几个认识问题的讨论
- 利率期货定价与交易策略分析
- 基于云计算环境下的数字档案馆建设与服务研究
- 一年级下册语文教学总结
- 所有水果的英文翻译
- CORELDRAW X4常用快捷键
- 基于单片机的 FSK 信号发生器