文档库 最新最全的文档下载
当前位置:文档库 › C语言习题--指针与字符串(较难)

C语言习题--指针与字符串(较难)

C语言习题--指针与字符串(较难)
C语言习题--指针与字符串(较难)

GPS数据处理:

题目内容:

NMEA-0183协议是为了在不同的GPS(全球定位系统)导航设备中建立统一的BTCM(海事无线电技术委员会)标准,由美国国家海洋电子协会(NMEA-The National Marine Electronics Associa-tion)制定的一套通讯协议。GPS接收机根据NMEA-0183协议的标准规范,将位置、速度等信息通过串口传送到PC 机、PDA等设备。

NMEA-0183协议是GPS接收机应当遵守的标准协议,也是目前GPS接收机上使用最广泛的协议,大多

数常见的GPS接收机、GPS数据处理软件、导航软件都遵守或者至少兼容这个协议。

NMEA-0183协议定义的语句非常多,但是常用的或者说兼容性最广的语句只有$GPGGA、$GPGSA、$GPGSV、$GPRMC、$GPVTG、$GPGLL等。

其中$GPRMC语句的格式如下:

$GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,,,A*50

这里整条语句是一个文本行,行中以逗号“,”隔开各个字段,每个字段的大小(长度)不一,这里的示例只

是一种可能,并不能认为字段的大小就如上述例句一样。

字段0:$GPRMC,语句ID,表明该语句为Recommended Minimum Specific GPS/TRANSIT Data(RMC)推荐最小定位信息

字段1:UTC时间,hhmmss.sss格式

字段2:状态,A=定位,V=未定位

字段3:纬度ddmm.mmmm,度分格式(前导位数不足则补0)

字段4:纬度N(北纬)或S(南纬)

字段5:经度dddmm.mmmm,度分格式(前导位数不足则补0)

字段6:经度E(东经)或W(西经)

字段7:速度,节,Knots

字段8:方位角,度

字段9:UTC日期,DDMMYY格式

字段10:磁偏角,(000 - 180)度(前导位数不足则补0)

字段11:磁偏角方向,E=东W=西

字段16:校验值

这里,“*”为校验和识别符,其后面的两位数为校验和,代表了“$”和“*”之间所有字符(不包括这两个字符)的异或值的十六进制值。上面这条例句的校验和是十六进制的50,也就是十进制的80。

提示:^运算符的作用是异或。将$和*之间所有的字符做^运算(第一个字符和第二个字符异或,结果再和第三个字符异或,依此类推)之后的值对65536取余后的结果,应该和*后面的两个十六进制数字的值相等,

否则的话说明这条语句在传输中发生了错误。注意这个十六进制值中是会出现A-F的大写字母的。

现在,你的程序要读入一系列GPS输出,其中包含$GPRMC,也包含其他语句。在数据的最后,有一行

单独的

END

表示数据的结束。

你的程序要从中找出$GPRMC语句,计算校验和,找出其中校验正确,并且字段2表示已定位的语句,从中计算出时间,换算成北京时间。一次数据中会包含多条$GPRMC语句,以最后一条语句得到的北京时间作为结果输出。

你的程序一定会读到一条有效的$GPRMC语句。

输入格式:

多条GPS语句,每条均以回车换行结束。最后一行是END三个大写字母。

输出格式:

6位数时间,表达为:

hh:mm:ss

其中,hh是两位数的小时,不足两位时前面补0;mm是两位数的分钟,不足两位时前面补0;ss是两位数的秒,不足两位时前面补0。

输入样例:

$GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,,,A*50

END

输出样例:

10:48:13

时间限制:500ms内存限制:32000kb

答案:

#include

#include

#include

char *searchStr(char *p)

{//搜索关键字,并返回指针,没找到返回0 char s[]="$GPRMC";

char *sp=strstr(p,s);

if(sp)

return sp;

return 0;

char *getNextPStr(char *p)

{//得到下一个题目要求的字符串,返回指针char * sp = searchStr(p);

char * pstr = p;

while(1)

{

pstr=pstr+strlen(pstr)+1;

sp=searchStr(p);

if(sp!=p)

return sp;

}

return 0;

}

int xtoi(int num)

{//16进制转10进制

// int a,b,out=0;

// if(num<10)

// return num;

// a=num/10;

// b=num%10;

// out = xtoi(a)*16 + b;

return num*16/10;

}

int chackStr(char *p)

{//检测此语句是否能够通过校验,可以的话1,否则返回0 char *ps = p;

ps++;//跳过$字符

int num;

int pi=0; // 校验和

num = ps[0];

ps++;//第2个字符

while(1)

{

if(ps[0]=='*')

{

break;

}

num=num^*ps;

ps++;

}

ps++;//将指针指向数字

sscanf(ps,"%x",&pi);

if(num==pi)

return 1;

return 0;

}

char* getOKDate(const char *p)

{//输入验证成功的字符串指针,得到已定位句子的时间,将结果保存char a[1000];

char b[1000];

char *ps=a;

char *date=b;

strcpy(ps,p);

ps = strchr(ps,',');

ps++;

strcpy(date,ps);

strtok(date,".");

ps = strchr(ps,',');

ps++;

if(ps[0]=='A')

return date;

// printf("ok");

return 0;

}

int chackEnd(char *p)

{//检测字符串是否是end

char end[]="END";

if(strcmp(p,end)==0)

return 1;

return 0;

}

void outTime(int i)

{

if(i<10)

printf("0");

printf("%d",i);

}

int main()

{

char str[1000]; //字符串载体

gets(str);

// char str[]="$GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,,,A*50";

char *pstr=str; //活动指针

char *pp=str; //判断指针

char d[30];

char *date=d; //保存时间的字符串

//得到$GPRMC开头语句指针

while(!chackEnd(pstr))

{

if(searchStr(pstr))

{

pp = searchStr(pstr);

if(chackStr(pp))

// printf("success");

//将时间数据保存

if(getOKDate(pp))

date = getOKDate(pp);

}

gets(str);

pstr=str;

}

//得到可以验证通过的最后一个字符串的时间,并且输出int time,h,m,s;

time = atoi(date);

h = time/10000;

time = time%10000;

m = time/100;

s = time%100;

h += 8;

if(h>=24)

h -= 24;

outTime(h);

printf(":");

outTime(m);

printf(":");

outTime(s);

return 0;

}

c语言指针习题及答案69923

指针习题及答案 一.选择题 1.变量的指针,其含义是指该变量的 B 。 A)值B)地址C)名D)一个标志 2.已有定义int k=2;int *ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是 B 。 A)k=*ptr1+*ptr2 B)ptr2=k C)ptr1=ptr2 D)k=*ptr1*(*ptr2) 3.若有说明:int *p,m=5,n;以下程序段正确的是 D 。 A)p=&n ; B)p = &n ; scanf(“%d”,&p); scanf(“%d”,*p); C)scanf(“%d”,&n); D)p = &n ; *p=n ; *p = m ; 4.已有变量定义和函数调用语句:int a=25;print_value(&a);下面函数的输出结果是 D 。 void print_value(int *x) { printf(“%d\n”,++*x); } A)23 B)24 C)25 D)26 5.若有说明:int *p1, *p2,m=5,n;以下均是正确赋值语句的选项是 C 。 A)p1=&m; p2=&p1 ; B)p1=&m; p2=&n; *p1=*p2 ; C)p1=&m; p2=p1 ; D)p1=&m; *p1=*p2 ; 6.若有语句:int *p,a=4;和p=&a;下面均代表地址的一组选项是 D 。 A)a,p,*&a B)&*a,&a,*p C)*&p,*p,&a D)&a,&*p,p 7.下面判断正确的是 C 。 A)char *a=”china”; 等价于char *a; *a=”china” ; B)char str[10]={“china”}; 等价于char str[10]; str[ ]={“china”;} C)char *s=”china”; 等价于char *s; s=”china” ; D)char c[4]=”abc”,d[4]=”abc”; 等价于char c[4]=d[4]=”abc” ; 8.下面程序段中,for循环的执行次数是 C 。 char *s=”\ta\018bc” ; for ( ; *s!=’\0’ ; s++) printf(“*”) ; A)9 B)7 C)6 D)5 9.下面能正确进行字符串赋值操作的是 C 。 A)char s[5]={“ABCDE”}; B)char s[5]={‘A’,’B’,’C’,’D’,’E’}; C)char *s ; s=”ABCDE” ; D)char *s; scanf(“%s”,s) ; 10.下面程序段的运行结果是 C 。 char *s=”abcde” ; s+=2 ; printf(“%d”,s); A)cde B)字符’c’C)字符’c’的地址D)不确定11.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是 B 。 A)c=*p1+*p2 B)p2=c C)p1=p2 D)c=*p1*(*p2) 12.设有程序段:char s[ ]=”china”; char *p ; p=s ;则下面叙述正确的是 D 。A)s和p完全相同

C语言指针习题__附答案[1]

一、选择题 1.变量的指针,其含义是指该变量的_________. a)值b)地址 c)名d)一个标志 2.若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是_____. a)a,point,*&a b)&*a,&a,*point c)*&point,*point,&a d)&a,&*point ,point 3.若有说明;int *p,m=5,n;以下正确的程序段的是________. a)p=&n; b)p=&n; scanf("%d",&p); scanf("%d",*p); c)scanf("%d",&n); d)p=&n; *p=n; *p=m; 4. 以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是________. 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是一个指针变量 5. 已有变量定义和函数调用语句:int a=25; print_value(&a); 下面函数的正确输出结果是________. void print_value(int *x) { printf(“%d\n”,++*x);} a)23 b)24 c)25 d)26 6.若有说明:long *p,a;则不能通过scanf语句正确给输入项读入数据的程序段是 A) *p=&a;scanf("%ld",p);

计算机二级c语言第九章 数组和指针习题与答案

第九章数组和指针 1、有以下程序 main() { int a[]={2,4,6,8,10}, y=0, x, *p; p=&a[1]; for(x= 1; x< 3; x++) y += p[x]; printf("%d\n",y); } 程序运行后的输出结果是 A)10 B)11 C)14 D)15 2、有以下程序 void sum(int a[]) { a[0] = a[-1]+a[1]; } main() { int a[10]={1,2,3,4,5,6,7,8,9,10}; sum(&a[2]); printf("%d\n", a[2]); } 程序运行后的输出结果是 A)6 B)7 C)5 D)8 3、有以下程序 main() { int p[8]={11,12,13,14,15,16,17,18},i=0,j=0; while(i++< 7) if(p[i]%2) j+=p[i]; printf("%d\n",j); } 程序运行后的输出结果是 A)42 B)45 C)56 D)60 4、设有定义语句 int x[6]={2,4,6,8,5,7},*p=x,i; 要求依次输出x数组6个元素中的值,不能完成此操作的语句是 A)for(i=0;i<6;i++) printf("%2d",*(p++)); B)for(i=0;i<6;i++) printf("%2d",*(p+i)); C)for(i=0;i<6;i++) printf("%2d",*p++); D)for(i=0;i<6;i++) printf("%2d",(*p)++); 5、有以下程序 #include < stdio.h > main() { int a[]={1,2,3,4,5,6,7,8,9,10,11,12,},*p=a+5,*q=NULL; *q=*(p+5); printf("%d %d\n",*p,*q); } 程序运行后的输出结果是 A)运行后报错 B)6 6 C)6 11 D)5 10

c语言指针部分题答案

#include int substring(char *s,char *t); int main() { char s[50]; char t[20]; int num; scanf("%s%s",s,t); num=substring(s,t); printf("%d\n",num); return 0; } int substring(char *s,char *t) { char *st=s; char *tt=t; int num=0; int offset=0; for(;*st!='\0';) { offset=0; for(;*tt!='\0';) { if(*st==*tt) { st++,tt++,offset++; } else break; } if(*tt=='\0') num++; else { st=st-offset+1; } tt=t; } return num; } #include void change(char *s); void insert(char *s);

int main() { char s[100]; scanf("%s",s); change(s); insert(s); printf("%s\n",s); return 0; } void change(char *s) { for(;*s!='\0';s++) { if(((*s)>'A'&&(*s)<='V')||((*s)>='a'&&(*s)<'v')) *s=(*s)+4; if(((*s)>='W'&&(*s)<='Z')||((*s)>='w'&&(*s)<='z')) *s=(*s)-22; } } void insert(char *s) { char temp[100]; int size=0,i; for(i=0;s[i]!='\0';i++) { temp[size]=s[i]; size++; temp[size]=' ',size++; } temp[size]='\0'; for(i=0;temp[i]!='\0';i++) s[i]=temp[i]; s[i]='\0'; } #include int replace(char *s); int main() { char s[50]; int num; scanf("%s",s);

C语言复习题及答案

一.单项选择题 1.下列选项中,不是转义字符集中的符号是( C )。 A \\ B \’ C 074 D \0 2. 下列给出的符号串中,不属于C语言保留字的是( B )。 A switch B cher C case D else 3. 下列给出的符号串中,不能作为C语言标识符的是( C )。 A a_2 B _2a C a.3 D a_3 4. 下列属于C语言字符常量的是( C )。 A ‘abc’ B “\n” C ‘a’ D ‘a\0’ 5. 字符串”ABC”再内存占用的字节数为( B )。 A 3 B 4 C 6 D 8 6. 设有宏定义“#define R 2+3”,则R*R的宏替换结果正确的是( B )。 A (2+3)*(2+3) B 2+3*2+3 C 5*5 D 5.0*5.0 7. 设整形变量I的值为3,则表达式i---i的值为( A )。 A 0 B 1 C 2 D 3 8. 表达式“10!=9”的值为( D )。 A true B 非零值 C 0 D 1 9. 设有语句int a=3;则执行了语句a+=a-=a*a;后,变量a的值为( D )。 A 3 B 0 C 9 D -12 10. 下列选项中,正确的赋值表达式为( C )。 A a=7+b+c=a+7 B a=7+b++=a+7 C a=(7+b,b++,a+7) D a=7+b,c=a+7 11. 若有以下定义语句:char a;float c; double d; 则表达式a*b+d-c值的类 型为( D )。 A float B int

C char D double 12. 用十进制数表示表达式“12||012”的运算结果是( A )。 A 1 B 0 C 14 D 12 13. 下列一组运算符中,优先级别最高的运算符是( C )。 A <= B = C % D && 14. 设定“ char a=3,b=6,c;”,计算表达式c=(a^b)<<2后c的二进制值是 ( D )。 A 00011100 B 00000111 C 00000001 D 00010100 15. 设x,y,z,t 均为int类型,则执行下列语句串后,变量t的值为(C )。 X=y=z=0; If(x=y) t=z; Else t=!z; A 不定值 B 2 C 1 D 0 16. 设整形变量m1值为3,m2值为2,m3值为1,执行下列语句后,整形变量 m4值为( D )。 Switch(m1=m2==m3+1) { case1:m4=1;break; case2:m4=3;break; case3:m4=2;break; default:m4=4; } A 1 B 2 C 3 D 4 17. 设有数据定义语句“int a[200];”,下列数组元素引用中下标不越界的是 ( A )。 A a[-1] B a[0] C a[201] D a[200] 18. 若有以下数据定义语句,则数值为4的表达式是( A )。 int a[12]={1,2,3,4,5,6,7,8,9,10,11,12}; A a[‘g’-‘c’] B a[4]

C语言指针习题及答案

指针主要内容的习题及答案 ?选择题 1. 变量的指针,其含义是指该变量的 __B ____________ 。 A )值 B )地址 C )名 D )一个标志 2. 已有定义int k=2;int *ptr1,*ptr2; 且ptrl 和ptr2均已指向变量k ,下面不 能正确执行的赋值语句是 B 。 4.已有变量定义和函数调用语句:int a=25;print_value (&a ); 下面函数的输出 结果是 D __________________ void prin t_value(i nt *x) { printf( “ %d\n” ,++*x); } A) 23 B ) 24 C ) 25 D ) 26 5.若有说明:int *p1, *p2,m=5,n; 以下均是正确赋值语句的选项是 ____ C ____________ 。 A) p 仁&m; p2=&p1 ; B ) p 仁&m; p2=&n; *p1 =*p2 ; C ) p 仁&m; p2=p1 ; D ) p 仁&m; *p 仁*p2 ; 6. 若有语句:int *p,a=4;和p=&a ;下面均代表地址的一组选项是 ____________ D _________ 。 A) a,p,*&a B )&*a,&a,*p C ) *&p,*p ,&a D )&a,&*p,p 7. 下面判断正确的是__C _________________ 。 A) char *a= ” china ” ; 等价于 char *a; *a= ” china ” ; B) char str[1O]={“ china ” };等价于 char str[1O]; str[ ]={ “ china ” ;} C) char *s= ” china ” ; 等价于 char *s; s= ” china ” ; A) k=*ptr1+*ptr2 B ) ptr2=k C ) ptr1=ptr2 3.若有说明:int *p,m=5,n; A ) p=&n ; seanf( “ %d ,&p); C ) scanf( “ %d ,&n); *p=n ; 以下程序段正确的是 B scanf ( D *p = m ; D ) k=*ptr1*(*pt ⑵ D 。 )p = &n ; “%d ,*p); )p = &n ;

C语言指针习题及答案

指针主要内容的习题及答案 一.选择题 1.变量的指针,其含义是指该变量的 B 。 A)值B)地址C)名D)一个标志2.已有定义int k=2;int *ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是 B 。 A)k=*ptr1+*ptr2 B)ptr2=k C)ptr1=ptr2 D)k=*ptr1*(*ptr2) 3.若有说明:int *p,m=5,n;以下程序段正确的是 D 。 A)p=&n ; B)p = &n ; scanf(“%d”,&p); scanf(“%d”,*p); C)scanf(“%d”,&n); D)p = &n ; *p=n ; *p = m ; 4.已有变量定义和函数调用语句:int a=25;print_value(&a);下面函数的输出结果是 D 。 void print_value(int *x) { printf(“%d\n”,++*x); } A)23 B)24 C)25 D)26 5.若有说明:int *p1, *p2,m=5,n;以下均是正确赋值语句的选项是 C 。 A)p1=&m; p2=&p1 ; B)p1=&m; p2=&n; *p1=*p2 ; C)p1=&m; p2=p1 ; D)p1=&m; *p1=*p2 ; 6.若有语句:int *p,a=4;和p=&a;下面均代表地址的一组选项是 D 。 A)a,p,*&a B)&*a,&a,*p C)*&p,*p,&a D)&a,&*p,p 7.下面判断正确的是 C 。 A)char *a=”china”; 等价于char *a; *a=”china” ; B)char str[10]={“china”}; 等价于char str[10]; str[ ]={“china”;} C)char *s=”china”; 等价于char *s; s=”china” ; D)char c[4]=”abc”,d[4]=”abc”; 等价于char c[4]=d[4]=”abc” ;

C语言指针习题及答案

指针主要内容的习题及答案?选择题 1.变量的指针,其含义是指该变量的A)值B)地址B 。 D )一个标志C)名 2.已有定义int k=2;int *ptr1,*ptr2; 且ptrl 和ptr2 均已指向变量k,下面不能正确执行的赋值语句是 B 。 A) k=*ptr1+*ptr2 B) ptr2=k C) ptr1=ptr2 D) k=*ptr1*(*ptr2) 3. 若有说明:int *p,m=5,n;以下程序段正确的是 D _________ 。 A)p=&n ; B)p = &n ; seanf( %d”,&p);seanf( %d”,*p); C) seanf( %d”,&n);D)p = &n ; *p=n ; *p = m ; 4. 已有变量定义和函数调用语句:int a=25;print_value(&a); 下面函数的输出结果是 D ___________ 。 void prin t_value(i nt *x) { printf( %d\n”,++*x); } A) 23 B) 24 C) 25 D) 26 5. 若有说明:int *p1, *p2,m=5,n; 以下均是正确赋值语句的选项是____ C _______ 。 A) p仁&m; p2=&p1 ; B) p仁&m; p2=&n; *p1 =*p2 ; C) p仁&m; p2=p1 ; D) p仁&m; *卩仁*p2 ; 6. 若有语句:int *p,a=4;和p=&a;下面均代表地址的一组选项是__________ D _____ 。 A) a,p,*&a B)&*a,&a,*p C)*&p,*p,&a D)&a,&*p,p 7. 下面判断正确的是__C __________ 。 A) char *a=”ch in a”;等价于char *a; *a=”ch in a”; B) char str[1O]={ china”};等价于char str[1O]; str[ ]={ china”;} C) char *s=”china”;等价于char *s; s=”china” ; D) char c[4]=”abc',d[4]= ”abc”;等价于char c[4]=d[4]= ”abc ;

C语言指针精选习题和答案

一、用指针方法编写一个程序,输入3个整数,将它们按由小到大的顺序输出#include void swap(int *pa,int *pb) { int temp; temp = *pa; *pa = *pb; *pb = temp; } void main() { int a,b,c,temp; scanf("%d%d%d",&a,&b,&c); if(a>b) swap(&a,&b); if(b>c) swap(&b,&c); if(a>c) swap(&a,&c); printf("%d,%d,%d",a,b,c); } 二、C语言用指针方法输入3个字符串按由小到大顺序输出 #include "stdio.h" #include "string.h" int main(int argc, char* argv[]) { char *t; char *p1=NULL,*p2=NULL,*p3=NULL; char ch1[20]={0},ch2[20]={0},ch3[20]={0}; p1=ch1; p2=ch2; p3=ch3; printf("No1:"); scanf("%s",p1); fflush(stdin); printf("No2:"); scanf("%s",p2); fflush(stdin); printf("No3:"); scanf("%s",p3);

fflush(stdin); if(strcmp(p1,p2)>0) {t=p1;p1=p2;p2=t;} if(strcmp(p1,p3)>0) {t=p1;p1=p3;p3=t;} if(strcmp(p2,p3)>0) {t=p2;p2=p3;p3=t;} printf("%s\n%s\n%s\n",p1,p2,p3); return 0; } 9.4编程输入一行文字,找出其中的大写字母,小写字母,空格,数字,及 其他字符的个数 #include void main() { int a=0,b=0,c=0,d=0,e=0,i=0; char *p,s[20]; while((s[i]=getchar())!='\n')i++; p=s; while(*p!=10) { if(*p>='A'&&*p<='Z') a++; else if(*p>='a'&&*p<='z') b++; else if(*p==' ') c++; else if(*p>='0'&&*p<='9') d++; else e++; p++; } printf("大写字母%d 小写字母%d\n",a,b); printf("空格 %d 数字 %d 非字符 %d\n",c,d,e); }

C语言指针习题及答案

指针习题及答案 一.选择题 1、变量的指针,其含义就是指该变量的 B 。 A)值B)地址C)名D)一个标志 2、已有定义int k=2;int *ptr1,*ptr2;且ptr1与ptr2均已指向变量k,下面不能正确执行的赋值语句就是 B 。 A)k=*ptr1+*ptr2 B)ptr2=k C)ptr1=ptr2 D)k=*ptr1*(*ptr2) 3、若有说明:int *p,m=5,n;以下程序段正确的就是 D 。 A)p=&n ; B)p = &n ; scanf(“%d”,&p); scanf(“%d”,*p); C)scanf(“%d”,&n); D)p = &n ; *p=n ; *p = m ; 4、已有变量定义与函数调用语句:int a=25;print_value(&a);下面函数的输出结果就是 D 。 void print_value(int *x) { printf(“%d\n”,++*x); } A)23 B)24 C)25 D)26 5、若有说明:int *p1, *p2,m=5,n;以下均就是正确赋值语句的选项就是 C 。 A)p1=&m; p2=&p1 ; B)p1=&m; p2=&n; *p1=*p2 ; C)p1=&m; p2=p1 ; D)p1=&m; *p1=*p2 ; 6、若有语句:int *p,a=4;与p=&a;下面均代表地址的一组选项就是 D 。 A)a,p,*&a B)&*a,&a,*p C)*&p,*p,&a D)&a,&*p,p 7、下面判断正确的就是 C 。 A)char *a=”china”; 等价于char *a; *a=”china” ; B)char str[10]={“china”}; 等价于char str[10]; str[ ]={“china”;} C)char *s=”china”; 等价于char *s; s=”china” ; D)char c[4]=”abc”,d[4]=”abc”; 等价于char c[4]=d[4]=”abc” ; 8、下面程序段中,for循环的执行次数就是 C 。 char *s=”\ta\018bc” ; for ( ; *s!=’\0’ ; s++) printf(“*”) ; A)9 B)7 C)6 D)5 9、下面能正确进行字符串赋值操作的就是 C 。 A)char s[5]={“ABCDE”}; B)char s[5]={‘A’,’B’,’C’,’D’,’E’}; C)char *s ; s=”ABCDE” ; D)char *s; scanf(“%s”,s) ; 10、下面程序段的运行结果就是 C 。 char *s=”abcde” ; s+=2 ; printf(“%d”,s); A)cde B)字符’c’C)字符’c’的地址D)不确定 11、设p1与p2就是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句就是 B 。 A)c=*p1+*p2 B)p2=c C)p1=p2 D)c=*p1*(*p2) 12、设有程序段:char s[ ]=”china”; char *p ; p=s ;则下面叙述正确的就是 D 。 A)s与p完全相同 B)数组s中的内容与指针变量p中的内容相等

C语言指针经典练习题-及答案

C语言指针练习题及答案 一、选择题 1. 变量的指针,其含义是指该变量的____. a)值b)地址 c)名d)一个标志 2.若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是__ _. a)a,point,*&a b)&*a,&a,*point c)*&point,*point,&a d)&a,&*point ,point 3.若有说明;int *p,m=5,n;以下正确的程序段的是________. a)p=&n; b)p=&n; scanf("%d",&p); scanf("%d",*p); c)scanf("%d",&n); d)p=&n; *p=n; *p=m; 4. 以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是__ _____. 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是一个指针变量 5. 已有变量定义和函数调用语句:int a=25; print_value(&a); 下面函数的正确输出结果是______. void print_value(int *x) { printf(“%d\n”,++*x);} a)23 b)24 c)25 d)26 6.若有说明:long *p,a;则不能通过scanf语句正确给输入项读入数据的程序段是 A) *p=&a;scanf("%ld",p); B) p=(long *)malloc(8);scanf("%ld",p); C) scanf("%ld",p=&a); D) scanf("%ld",&a); 7.有以下程序 #include main() { int m=1,n=2,*p=&m,*q=&n,*r; r=p;p=q;q=r; printf("%d,%d,%d,%d\n",m,n,*p,*q); }程序运行后的输出结果是

c语言练习题带答案)

一、单项选择题 1.(A)是构成C语言程序的基本单位。 A、函数 B、过程 C、子程序 D、子例程 2.C语言程序从C开始执行。 A) 程序中第一条可执行语句B) 程序中第一个函数 C) 程序中的main函数D) 包含文件中的第一个函数 3、以下说法中正确的是(C)。 A、C语言程序总是从第一个定义的函数开始执行 B、在C语言程序中,要调用的函数必须在main( )函数中定义 C、C语言程序总是从main( )函数开始执行 D、C语言程序中的main( )函数必须放在程序的开始部分 4.下列关于C语言的说法错误的是(B )。 A) C程序的工作过程是编辑、编译、连接、运行 B) C语言不区分大小写。 C) C程序的三种基本结构是顺序、选择、循环 D) C程序从main函数开始执行 5.下列正确的标识符是(C)。 A.-a1 B.a[i] C.a2_i D.int t 6.下列C语言用户标识符中合法的是(B)。 A)3ax B)x C)case D)-e2 E)union 7.下列四组选项中,正确的C语言标识符是(C)。 A)%x B)a+b C)a123 D)123 8、下列四组字符串中都可以用作C语言程序中的标识符的是(A)。 A、print _3d db8 aBc B、I\am one_half start$it 3pai C、str_1 Cpp pow while D、Pxq My->book line# His.age 9.C语言中的简单数据类型包括(D)。 A、整型、实型、逻辑型 B、整型、实型、逻辑型、字符型 C、整型、字符型、逻辑型 D、整型、实型、字符型 10.在C语言程序中,表达式5%2的结果是C。 A)2.5 B)2 C)1 D)3 11.如果int a=3,b=4;则条件表达式"a

C语言指针练习+答案+讲解

第七章指针 7.1 选择题 1.若有说明:int a=2, *p=&a, *q=p;,则以下非法的赋值语句是(D)。 A. p=q; B. *p=*q; C. a=*q; D. q=a; a是整型数, int *p,*q定义了指针, p,q是指向整型的指针。 p取得a的地址,而q取得p的地址 p,q是指针(也就是一个地址),而*p和*q是这个指针指向的整型数值(存放在这个地址的值)。 A)把q的地址赋给p,则p和q完全一样了,都指向一个数2 B)把q中数据个p C)把q中数据给a D)a中数据是2,不能够给一个地址。除非*q=a 2.若定义:int a=511, *b=&a;,则printf("%d\n", *b);的输出结果为:D A.无确定值 B. a的地址 C. 512 D. 511 int a=511,*b=&a; a 是整形变量 b 是整形指针变量,指向 a printf("%d\n",*b);就是输出指针变量 b, 所指变量的值输出结果511 3.已有定义int a=2, *p1=&a, *p2=&a; 下面不能正确执行的赋值语句是(B)。A. a=*p1+*p2; B. p1=a; C. p1=p2; D. a=*p1*(*p2); 47、已知在程序中定义了如下的语句: int *P1,*P2; int k; p1=&k;p2=&k;

则下列语句中不能正确执行是( B ) A、k=*P1+*P2; B、p2=k; C、P1=P2; D、K=*P1 * (*P2); P1 P2是指针,K是整型变量,变量怎么可以赋值给指针呢? A其实是执行了K=K+K(P1和P2都指向K,所以*P1 *P2其实都是指K) C是赋值语句 D其实执行了K=K*K 4.变量的指针,其含义是指该变量的(B)。 A.值 B.地址 C.名 D.一个标志5.若有说明语句:int a, b, c, *d=&c;,则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是(A)。 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); 对于int c,*d=&c;,c是一整型数据,d是一指针,它指向变量c(即d=&c,*是指针类型的说明符),所以,输入c的值可以用scanf("%d",&c); 也可以用scanf("%d",d); 6.若已定义int a=5; 下面对(1)、(2)两个语句的正确解释是(D)。 (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。 A:(1):*p,定义p为int类型指针(2):*p,表示p所指向的变量 B(1)把变量a的地址赋给指针变量p(2)把变量a的值,赋值给P所指向的变量 C前半句正确,后半句错误,(2)是把变量a的值赋值给P所指的变量。

C语言指针习题及答案

指针习题及答案 一?选择题 1.变量的指针,其含义是指该变量的 B A )值 B )地址 C )名 D )一个标志 2.已有定义int k=2;int *ptr1,*ptr2; 且ptr1和ptr2 均已指向变量 k ,下面不能正确执行 的赋值语句是 B 。 A ) k=*ptr1+*ptr2 B ) ptr2=k C ) ptr1=ptr2 D ) k=*ptr1*(*ptr2) 3.若有说明:int *p,m=5,n; 以下程序段正确的是 D 。 A ) p=&n ; B ) p = &n ; scanf( %d ",&p); scanf( %d ",*p); C ) scanf( %d",&n); D ) p = &n ; *p=n ; *p = m ; 4.已有变量定义和函数调用语句: int a=25;print_value(&a); 下面函数的输出结果是 ______ D _____ 。 A) c=*p1+*p2 B ) p2=c C ) p 仁p2 D ) c=*p1*(*p2) 12. 设有程序段:char s[ ]= "china ";char *p ; p=s ;则下面叙述正确的是 D A) s 和p 完全相同 void prin t_value(i nt *x) { printf( %d\n ",++*x); } A ) 23 B ) 24 5. 若有说明:int *p1, *p2,m=5,n; A ) p 仁&m; p2=&p1 ; C ) p 仁&m; p2=p1 ; 6. 若有语句: A ) a,p,*&a 7. 下面判断正确的是 C) 25 D ) 26 以下均是正确赋值语句的选项是 C B ) p 仁&m; p2=&n; *p1 =* p2 ; D) p 仁&m; *p 仁*p2 ; int *p,a=4; 和p=&a ;下面均代表地址的一组选项是 B ) &*a,&a,*p C ) *&p,*p,&a C D ) &a,&*p,p A ) B ) C ) D ) char *a= "ch in a "; 等价于 char *a; *a= "ch in a "; char str[10]={ “hina"};等价于 char str[10]; str[ ]={ “hina";} char *s= "ch in a "; 等价于 char *s; s= "ch in a "; char c[4]= "abc ",d[4]= "abc ";等价于 8. 下面程序段中,for 循环的执行次数是 char *s= "\ta\018bc "; for ( ; *s!= '\0'; s++) printf( *"); A ) 9 B ) 7 9. 下面能正确进行字符串赋值操作的是 A ) char s[5]={ ABCDE ”}; C ) char *s ; s= "ABCDE "; 10. 下面程序段的运行结果是 char *s= "abcde"; s+=2 ; printf( %d",s); A ) cde B )字符}' 11. 设pl 和p2是指向同一个字符串的指针变量, 值语句是—B char c[4]=d[4]= "abc ” ; C C ) 6 C B ) D ) C ) char s[5]={ A ', 'B ','C','D','E'}; char *s; scanf( %s",s); 字符’c'的地址 D )不确定 c 为字符变量,则以下不能正确执行的赋

c语言面试题__指针篇

c语言面试题__指针篇 1. char * const p; char const * p const char *p 上述三个有什么区别? char * const p; //常量指针,p的值不可以修改 char const * p;//指向常量的指针,指向的常量值不可以改 const char *p; //和char const *p ------------------------------------------------------ 2. char str1[] = "abc"; char str2[] = "abc"; const char str3[] = "abc"; const char str4[] = "abc"; const char *str5 = "abc"; const char *str6 = "abc"; char *str7 = "abc"; char *str8 = "abc"; cout << ( str1 == str2 ) << endl; cout << ( str3 == str4 ) << endl; cout << ( str5 == str6 ) << endl; cout << ( str7 == str8 ) << endl; 打印结果是什么? 解答:结果是:0 0 1 1 str1,str2,str3,str4是数组变量,它们有各自的内存空间;而 str5,str6,str7,str8是指针,它们指向相同的常量区域 ----------------------------------------------- 3. 以下代码中的两个sizeof用法有问题吗? void UpperCase( char str[] ) // 将 str 中的小写字母转换成大写字母 { for( size_t i=0; i

C语言数组和指针练习题

若当堂没做完,下周四之前上交也可。 至 用户名和密码:stu C语言程序设计练习题——数组 一、选择题 77、以下对一维数组a的正确说明是_d ___ A、char a(10); B、int a[ ]; C、int k=5,a[k]; D、char a[ ]={'a' , 'b' , 'c'}; 78、若有说明语句:int a[2][4];,则对a数组元素的正确引用是_a___ A、a[0][3] B、a[0][4] C、a[2][2] D、a[2][2+1] 79、以下能对二维数组y进行初始化的语句是_b__ A、static int y[2][ ]={{1,0,1}, {5,2,3}}; B、static int y[ ][3]={{1,2,3}, {4,5,6}}; C、static int y[2][4]={{1,2,3}, {4,5} , {6}}; D、static int y[ ][3]={{1,0,1,0}, { }, {1,1}}; 80、若有说明语句:int y[ ][4]={0,0};则下面叙述不正确的是_d___ A、数组y的每个元素都可得初值0 B、二维数组y的行数为1 C、该说明等价于int y[ ][4]={0}; D、只有元素y[0][0]和y[0][1]可得到初值0,其余元素均得不到初值0 81、以下各组选项中,均能正确定义二维实型数组s的选项是_c___ A、float s[3][4]; B、float s(3,4); float s[ ][4]; float s[ ][ ]={{0};{0}}; float s[3][ ]={{1},{0}}; float s[3][4]; C、 float s[3][4]; D、float s[3][4]; static float s[ ][4]={{0},{0}}; float s[3][ ]; auto float s[ ][4]={{0},{0},{0}}; float s[ ][4]; 82、若有说明语句:int a[ ][3]={1,2,3,4,5,6,7,8}; ,则a数组的行数为__a__ A、3 B、2 C、无确定值 D、1 83、若二维数组y有m列,则在y[i][j]前的元素个数为_B___ A、j*m+i B、i*m+j C、i*m+j-1 D、i*m+j+1 84、下面程序中有错误的行是__D__ 1、 main( ) 2、 { 3、 int x[3]={1}; 4、 int k; 5、 scanf("%d", &x); 6、 for (k=1; k<3; k++) 7、 x[0]=x[0]+x[i]; 8、 printf("x[0]=%d\n", x[0]); 9、 } A、3 B、6 C、7 D、5 85、若有以下语句,则正确的描述是__b__ char x[ ]="12345"; char y[ ]={'1', '2', '3', '4', '5'}; A、x数组与y数组的长度相同 B、x数组长度大于y数组长度 C、x数组长度小于y数组长度

C语言指针习题及答案

指针主要内容得习题及答案 一.选择题 1、变量得指针,其含义就是指该变量得 B 。 A)值 B)地址 C)名 D)一个标志 2、已有定义int k=2;int *ptr1,*ptr2;且ptr1与ptr2均已指向变量k,下面不能正确执行得赋值语句就是 B 。 A)k=*ptr1+*ptr2 B)ptr2=k C)ptr1=ptr2 D)k=*ptr1*(*ptr2) 3、若有说明:int *p,m=5,n;以下程序段正确得就是 D 。 A)p=&n ; B)p = &n ; scanf(“%d”,&p); scanf(“%d”,*p); C)scanf(“%d”,&n); D)p = &n ; *p=n ; *p = m ; 4、已有变量定义与函数调用语句:int a=25;print_value(&a);下面函数得输出结果就是 D 。 void print_value(int *x) { printf(“%d\n”,++*x); } A)23 B)24 C)25 D)26 5、若有说明:int *p1, *p2,m=5,n;以下均就是正确赋值语句得选项就是 C 。 A)p1=&m; p2=&p1 ; B)p1=&m; p2=&n; *p1=*p2 ; C)p1=&m; p2=p1 ; D)p1=&m; *p1=*p2 ; 6、若有语句:int *p,a=4;与p=&a;下面均代表地址得一组选项就是

D 。 A)a,p,*&a B)&*a,&a,*p C)*&p,*p,&a D)&a,&*p,p 7、下面判断正确得就是 C 。 A)char *a=”china”; 等价于 char *a; *a=”china” ; B)char str[10]={“china”}; 等价于 char str[10]; str[ ]={“china”;} C)char *s=”china”; 等价于 char *s; s=”china” ; D)char c[4]=”abc”,d[4]=”abc”; 等价于 char c[4]=d[4]=”abc” ; 8、下面程序段中,for循环得执行次数就是 C 。 char *s=”\ta\018bc” ; for ( ; *s!=’\0’ ; s++) printf(“*”) ; A)9 B)7 C)6 D)5 9、下面能正确进行字符串赋值操作得就是 C 。 A)char s[5]={“ABCDE”}; B)char s[5]={‘A’,’B’,’C’,’D’,’E’}; C)char *s ; s=”ABCDE”; D)char *s; scanf(“%s”,s) ; 10、下面程序段得运行结果就是 C 。 char *s=”abcde” ; s+=2 ; printf(“%d”,s); A)cde B)字符’c’ C)字符’c’得地址 D)不确定 11、设p1与p2就是指向同一个字符串得指针变量,c为字符变量,则以下不能正确执行得赋值语句就是 B 。

相关文档
相关文档 最新文档