1.下面判断正确的是 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” ;
A选项应该是a指向字符串
B选项后面括号里面有个分号
D选项不能连等赋予
3.下面能正确进行字符串赋值操作的是 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) ;
注:A中'\0'没有写入,后面的值不确定
5.设 p1 和 p2 是指向同一个字符串的指针变量,c 为字符变量,则以下不能正确执行的赋值语句是 B
A、c=*p1+*p2
B、p2=c
C、p1=p2
D、c=*p1*(*p2)
B选项指针不能指向变量,应该是地址
6.设有程序段:char s[ ]=”china”; char *p ; p=s ;则下面叙述正确的是
D
A、s 和 p 完全相同
B、数组 s 中的内容和指针变量 p 中的内容相等
C、s 数组长度和 p 所指向的字符串长度相等
D、*p 与 s[0]相等
注:字符串长度不统计‘'\0';但数组长度里统计
15.定义如下数组 s:char s[51];准备将字符串”Happy new year”记录下来,___B____是错误的输入语句
A、gets(s+2);
B、 scanf(“%20s”,s);
C、 for(i=0;i<15;i++) s[i]=getchar( ); s[i]=’\0’;
D、while((c=getchar())!=’\n’) s[i++]=c; s[i]=’\0’;
注:scanf读到空格也不往后读了,因此输入不了全部
16.有以下程序
#include<stdlib.h>
#include<stdio.h>
void main()
{ char *p,*q;
p=(char*)malloc(sizeof(char)*20);
q=p;
scanf("%s%s",p,q);
printf("%s%s\n",p,q);
}
若从键盘输入:abc def<回车>,则输出结果是:A
A、def def B、abc def C、abc d D、d d
结果:
指针p,q指向一样
18.以下程序运行后,输出结果是____C___。
#include<stdio.h>
#include<string.h>
void fun(char *w,int n)
{ char t,*s1,*s2;
s1=w; s2=w+n-1;
while(s1<s2) {
t=*s1++;
*s1=*s2--;
*s2=t;
}
}
void main()
{ char s[] = "1234567";
char *p = s; fun(p,strlen(p));
puts(p);
}
A、1234567
B、7654321
C、1711717
D、7177171
结果为:
*s1++后,下次*s1会向后移动一位,*s2--也是向前移动一位
40.以下程序的输出是____C____。
struct st
{int x;
int *y;
} *p;
int dt[4]={10,20,30,40};
struct st aa[4]={50,&dt[0],60,&dt[0],60,&dt[0],60,&dt[0],};
main()
{
p=aa;
printf("%d\n",++(p->x));
}
A、10
B、11
C、51
D、60
注:++(p->x)是已经到x了,然后给x的值++;而不是指向下一个x