想要一些 c程序有关数组或指针的选择题并且有正确答案的
类似于1、设有说明语句charstr1[10],str2[10]={"books"};则能将字符串"books"赋给数组str1的正确语句是【B】。A)str1={"bo...
类似于
1、设有说明语句 char str1[10],str2[10]={"books"}; 则能将字符串"books"赋给数组str1的正确语句是【 B 】。
A) str1={"books"}; B) strcpy(str1,str2);
C) strcpy(str2,str1); D) str1=str2; 展开
1、设有说明语句 char str1[10],str2[10]={"books"}; 则能将字符串"books"赋给数组str1的正确语句是【 B 】。
A) str1={"books"}; B) strcpy(str1,str2);
C) strcpy(str2,str1); D) str1=str2; 展开
1个回答
展开全部
指针
一、选择题
1、以下程序的运行结果是( B )
sub(int x,int y,int *z)
{
*z=y-x;
}
void main()
{
int a,b,c;
sub(10,5,&a);
sub(7,a,&b);
sub(a,b,&c);
printf("%4d,%4d,%4d\n",a,b,c);
}
(A) 5, 2, 3
(B) -5, -12, -7
(C) -5, -12, -17
(D) 5, -2, -7
2、执行以下程序后,a的值为( C ),b的值为( C )
void main()
{
int a,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);
}
① (A) -1
(B) 1
(C) 0
(D) 4
② (A) 5
(B) 6
(C) 7
(D) 10
3、下面程序应能对两个整型变量的值进行交换。以下正确的说法是( D )
void main()
{
int a=10,b=20;
pirntf("(1) a=%d,b=%d\n",a,b);
swap(&a,&b);
printf("(2) a=%d,b=%d\n",a,b);
}
swap(int p,int q)
{
int t;
t=p;p=q;q=t;
}
(A) 该程序完全正确
(B) 该程序有错,只要将语句swap(&a,&b); 中的参数改为a,b即可
(C) 该程序有错,只要将swap()函数中的形参p和q以及t均定义为指针(执行语句不变)即可
(D) 以上说法都不正确
4、有四组对指针变量进行操作的语句,以下判断正确的选项是( D )
(1) int *p,*q; q=p;
int a,*p,*q; p=q=&a;
(2) int a,*p,*q; q=&a; p=*q;
int a=20,*p; *p=a;
(3) int a=b=0,*p; p=&a; b=*p;
int a=20,*p,*q=&a; *p=*q;
(4) int a=20,*p,*q=&a; p=q;
int p,*q; q=&p;
(A) 正确:(1) 不正确:(2)(3)(4)
(B) 正确:(1)(4) 不正确:(2)(3)
(C) 正确:(3) 不正确:(1)(2)(4)
(D) 以上结论都不正确
5、以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是( B )
void 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是一个指针变量
6、以下程序有错,错误原因是( D ) //此题不严密,ch虽未置初值,但*p=*q无语法上的错误。
void 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; 语句
7、有如下语句 int a=10,b=20,*p1,*p2; p1=&a; p2=&b; 若要让p1也指向b,可选用的赋值语句是( B )
(A) *p1=*p2;
(B) p1=p2;
(C) p1=*p2;
(D) *p1=p2;
8、已有定义int k=2; int *ptr1,*ptr2; 且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是( B )
(A) k=*ptr1+*ptr2;
(B) ptr2=k;
(C) ptr1=ptr2;
(D) k=*ptr1*(*ptr2);
9、变量的指针,其含义是指该变量的( B )
(A) 值
(B) 地址
(C) 名
(D) 一个标志
10、若已定义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
11、若有语句int *point ,a=4; 和point=&a; 下面均代表地址的一组选项是( D )
(A) a,point,*&a
(B) &*a,&a,*point
(C) *&point,*point,&a
(D) &a,&*point,point
12、若已有说明float *p,m=3.14; 要让p指向m,则正确的赋值语句是( B )
(A) p=m;
(B) p=&m;
(C) *p=m;
(D) *p=&m;
13、若有说明:int *p,m=5,n; 以下正确的程序段是( D )
(A) p=&n;
scanf("%d",&P);
(B) p=&n;
scanf("%d",*p);
(C) scanf("%d",&n);
*p=n;
(D) p=&n;
*p=m;
14、若有说明:int *p1,*p2,m=5,n; 以下均是正确赋值语句的选项是( C ) //(B)从语法上说也没错,但是n还未初始化
(A) p1=&m; p2=&p1;
(B) p1=&m; p2=&n; *p1=*p2;
(C) p1=&m; p2=p1;
(D) p1=&m; *p2=*p1;
15、已有变量定义和函数调用语句;int a=25; print_value(&a); 下面函数的正确输出结果是( D )
void print_value(int *x)
{
printf("%d\n",++*x);
}
(A) 23
(B) 24
(C) 25
(D) 26
16、下面判断正确的是( 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";
17、设char *s="\ta\017bc"; 则指针变量s指向的字符串所占的字节数是( C )
(A) 9
(B) 5
(C) 6
(D) 7
18、下面程序段中,for循环的执行次数是( C )
char *s="\ta\018bc";
for( ; *s!='\0'; s++) printf("*");
(A) 9
(B) 5
(C) 6
(D) 7
19、下面能正确进行字符串赋值操作的是( 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);
20、下面程序段的运行结果是( C )
char *s="abcde";
s+=2; printf("%d",s);
(A) cde
(B) 字符'c'
(C) 字符'c'的地址
(D) 无确定的输出结果
21、设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是( B )
(A) c=*p1+*p2;
(B) p2=c;
(C) p1=p2;
(D) c=*p1*(*p2);
22、设有下面的程序段:
char s[]="china"; char *p; p=s;
则下列叙述正确的是( D )
(A) s和p完全相同
(B) 数组s中的内容和指针变量p中的内容相等
(C) s数组长度和p所指向的字符串长度相等
(D) *p与s[0]相等
23、下面程序段的运行结果是( C )
char *format="%s,a=%d,b=%d\n";
int a=1,b=10;
a+=b;
printf(format,"a+=b",a,b);
(A) for,"a+=b",ab
(B) format,'a+=b"
(C) a+=b,a=11,b=10
(D) 以上结果都不对
24、下面程序段的运行结果是( B )
char *p="%d,a=%d,b=%d\n";
int a=111,b=10,c;
c=a%b; p+=3;
printf(p,c,a,b);
(A) 1,a=111,b=10
(B) a=1,b=111
(C) a=111,b=10
(D) 以上结果都不对
25、以下正确的程序段是( A、B、C )
(A) char str[20];
(B) char *p;
(C) char str[20];
scanf("%s",&str[2];)
(D) char str[20],*p=str;
scanf("%s",p[2]);
26、以下正确的程序段是( C )
(A) char str1[]="12345",str2[]="abcdef";
strcpy(str1,str2);
(B) char str[10],*st="abcde"; strcat(str,st);
(C) char str[10]=" ",*st="abcde"; strcat(str,st);
(D) char *st1="12345",*st2="abcde"; strcat(st1,st2);
27、下面程序段的运行结果是( B )
char str[]="ABC",*p=str;
printf("%d\n",*(p+3));
(A) 67
(B) 0
(C) 字符'C'的地址
(D) 字符'C'
28、下面程序段的运行结果是( ) //此题错误,p指向字符串常量,运行时strcpy(p,"ABCD")会出错。
char *p="abcdefgh";
p+=3;
printf("%d\n",strlen(strcpy(p,"ABCD")));
(A) 8
(B) 12
(C) 4
(D) 7
29、下面程序段的运行结果是( C )
char a[]="language",*p;
p=a;
while(*P!='u') {printf("%c",*p-32); p++;}
(A) LANGUAGE
(B) language
(C) LANG
(D) langUAGE
30、若有语句:char s1[]="string",s2[8],*s3,*s4="string2"; 则对库函数strcpy的错误调用是( A、B、C、D )
(A) strcpy(s1,"string2"); //数组s1只有7个数组元素,"string2"加字符串末尾的0需要8个字节
(B) strcpy(s4,"string1"); //s4指向字符串常量
(C) strcpy(s3,"string1"); //s3未初始化
(D) strcpy(s1,s2); //s2未初始化
31、以下与库函数strcpy(char *p1,char *p2)功能不相等的程序段是( D )
(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++;}
32、以下与库函数strcmp(char *s,char *t)的功能相等的程序段是( C )
(A) strcmp(char *s,char *t)
{
for( ; *s++==*t++; }
if(*s=='\0') return 0;
return *s-*t;
}
(B) strcmp2(char *s,char *t)
{
for( ; *s++==*t++; }
if(!*s) return 0;
return *s-*t;
}
(C) strcmp3(char *s,char *t)
{
for( ; *t==*s; )
{
if(!*t) return 0; t++; s++;
}
return *s-*t;
}
(D) strcmp4(char *s,char *t)
{
for( ; *s==*t; s++,t++)
if(!*s) return 0;
return *t-*s;
}
33、下面说明不正确的是( D )
(A) char a[10]="china";
(B) char a[10],*p=a; p="china";
(C) char *a; a="china";
(D) char a[10],*p; p=a="china";
34、若有说明语句
char a[]="It is mine";
char *p="It is mine";
则以下不正确的叙述是( D )
(A) a+1表示的是字符t的地址
(B) p指向另外的字符串时,字符串的长度不受限制
(C) p变量中存放的地址值可以改变
(D) a中只能存放10个字符
35、若已定义char s[10]; 则在下面表达式中不表示s[1]的地址的是( B )
(A) s+1
(B) s++
(C) &s[0]+1
(D) &s[1]
36、下面程序段的运行结果是( D )
char s[6]; s="abcd", printf("\"%s\"\n",s);
(A) "abcd"
(B) "abcd "
(C) \"abcd\"
(D) 编译出错
37、下面程序的功能是从输入的十个字符串中找出最长的那个串。请选择填空。①( 此题四个供选择的答案都有错误 )②( A、B )
#include<stdio.h>
#include<string.h>
#define N 10
void main()
{
char str[N][81],*sp;
int i;
for(i=0;i<N;i++) gets(str[i]);
sp= ① ; //如果选C需强制转换,即p=(int *)str;
for(i=1;i<N;i++) if(strlen(sp)<strlen(str[i])) sp=②; //原题少了sp=
printf("sp=%d,%s\n",strlen(sp),sp);
}
① (A) str[i]
(B) &str[i][0]
(C) str
(D) str[N]
② (A) str[i]
(B) &str[i][0]
(C) str
(D) str[N]
38、下面程序的功能是将一个整数字符串转换为一个整数,如"-1234"转换为-1234。请选择填空。①( A ) ②( C ) ③( B )
#include<stdio.h>
#include<string.h>
void main()
{
char s[6];
int n;
gets(s);
if(*s=='-') n=-chnum(s+1);
else n=chnum(s);
printf("%d\n",n);
}
chnum(char *p)
{
int num=0,k,len,j;
len=strlen(p);
for( ; ① ; p++)
{
k= ② ;
j=(--len);
while( ③ ) {k=k*10;}
num=num+k;
}
return num;
}
① (A) *p!='\0'
(B) *(++p)!='\0'
(C) *(p++)!='\0'
(D) len!=0
② (A) *p
(B) *p+'0'
(C) *p-'0'
(D) *p-32
③ (A) --j>0
(B) j-->0
(C) --len>0
(D) len-->0
39、下面程序的功能是将八进制正整数字符串转换为十进制整数。请选择填空。①( C ) ②( C )
#include<stdio.h>
void main()
{
char *p,s[6]; int n;
p=s;
gets(p);
n= ① ;
while( ② !='\0') n=n*8+*p-'0';
printf("%d\n",n);
① (A) 0
(B) *p
(C) *p-'0'
(D) *p+'0'
② (A) *p
(B) *p++
(C) *(++p)
(D) p
40、下面程序的功能是统计子串substr在母串str中出现的次数。请选择填空。①( B ) ②( B ) ③( C )
#include<stdio.h>
void main()
{
char str[80],substr[80];
int n;
gets(str); gets(substr);
printf("%d\n",count(str,substr));
}
count(char *str,char *substr)
{
int i,j,k,num=0;
for(i=0; ① ;i++)
for( ② ,k=0; substr[k]==str[j]; k++; j++)
if(substr[③]=='\0'){num++;break;}
return num;
}
① (A) str[i]==substr[i]
(B) str[i]!='\0'
(C) str[i]=='\0'
(D) str[i]>substr[i]
② (A) j=i+1
(B) j=i
(C) j=0
(D) j=1
③ (A) k
(B) k++
(C) k+1
(D) ++k
一、选择题
1、以下程序的运行结果是( B )
sub(int x,int y,int *z)
{
*z=y-x;
}
void main()
{
int a,b,c;
sub(10,5,&a);
sub(7,a,&b);
sub(a,b,&c);
printf("%4d,%4d,%4d\n",a,b,c);
}
(A) 5, 2, 3
(B) -5, -12, -7
(C) -5, -12, -17
(D) 5, -2, -7
2、执行以下程序后,a的值为( C ),b的值为( C )
void main()
{
int a,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);
}
① (A) -1
(B) 1
(C) 0
(D) 4
② (A) 5
(B) 6
(C) 7
(D) 10
3、下面程序应能对两个整型变量的值进行交换。以下正确的说法是( D )
void main()
{
int a=10,b=20;
pirntf("(1) a=%d,b=%d\n",a,b);
swap(&a,&b);
printf("(2) a=%d,b=%d\n",a,b);
}
swap(int p,int q)
{
int t;
t=p;p=q;q=t;
}
(A) 该程序完全正确
(B) 该程序有错,只要将语句swap(&a,&b); 中的参数改为a,b即可
(C) 该程序有错,只要将swap()函数中的形参p和q以及t均定义为指针(执行语句不变)即可
(D) 以上说法都不正确
4、有四组对指针变量进行操作的语句,以下判断正确的选项是( D )
(1) int *p,*q; q=p;
int a,*p,*q; p=q=&a;
(2) int a,*p,*q; q=&a; p=*q;
int a=20,*p; *p=a;
(3) int a=b=0,*p; p=&a; b=*p;
int a=20,*p,*q=&a; *p=*q;
(4) int a=20,*p,*q=&a; p=q;
int p,*q; q=&p;
(A) 正确:(1) 不正确:(2)(3)(4)
(B) 正确:(1)(4) 不正确:(2)(3)
(C) 正确:(3) 不正确:(1)(2)(4)
(D) 以上结论都不正确
5、以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是( B )
void 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是一个指针变量
6、以下程序有错,错误原因是( D ) //此题不严密,ch虽未置初值,但*p=*q无语法上的错误。
void 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; 语句
7、有如下语句 int a=10,b=20,*p1,*p2; p1=&a; p2=&b; 若要让p1也指向b,可选用的赋值语句是( B )
(A) *p1=*p2;
(B) p1=p2;
(C) p1=*p2;
(D) *p1=p2;
8、已有定义int k=2; int *ptr1,*ptr2; 且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是( B )
(A) k=*ptr1+*ptr2;
(B) ptr2=k;
(C) ptr1=ptr2;
(D) k=*ptr1*(*ptr2);
9、变量的指针,其含义是指该变量的( B )
(A) 值
(B) 地址
(C) 名
(D) 一个标志
10、若已定义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
11、若有语句int *point ,a=4; 和point=&a; 下面均代表地址的一组选项是( D )
(A) a,point,*&a
(B) &*a,&a,*point
(C) *&point,*point,&a
(D) &a,&*point,point
12、若已有说明float *p,m=3.14; 要让p指向m,则正确的赋值语句是( B )
(A) p=m;
(B) p=&m;
(C) *p=m;
(D) *p=&m;
13、若有说明:int *p,m=5,n; 以下正确的程序段是( D )
(A) p=&n;
scanf("%d",&P);
(B) p=&n;
scanf("%d",*p);
(C) scanf("%d",&n);
*p=n;
(D) p=&n;
*p=m;
14、若有说明:int *p1,*p2,m=5,n; 以下均是正确赋值语句的选项是( C ) //(B)从语法上说也没错,但是n还未初始化
(A) p1=&m; p2=&p1;
(B) p1=&m; p2=&n; *p1=*p2;
(C) p1=&m; p2=p1;
(D) p1=&m; *p2=*p1;
15、已有变量定义和函数调用语句;int a=25; print_value(&a); 下面函数的正确输出结果是( D )
void print_value(int *x)
{
printf("%d\n",++*x);
}
(A) 23
(B) 24
(C) 25
(D) 26
16、下面判断正确的是( 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";
17、设char *s="\ta\017bc"; 则指针变量s指向的字符串所占的字节数是( C )
(A) 9
(B) 5
(C) 6
(D) 7
18、下面程序段中,for循环的执行次数是( C )
char *s="\ta\018bc";
for( ; *s!='\0'; s++) printf("*");
(A) 9
(B) 5
(C) 6
(D) 7
19、下面能正确进行字符串赋值操作的是( 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);
20、下面程序段的运行结果是( C )
char *s="abcde";
s+=2; printf("%d",s);
(A) cde
(B) 字符'c'
(C) 字符'c'的地址
(D) 无确定的输出结果
21、设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是( B )
(A) c=*p1+*p2;
(B) p2=c;
(C) p1=p2;
(D) c=*p1*(*p2);
22、设有下面的程序段:
char s[]="china"; char *p; p=s;
则下列叙述正确的是( D )
(A) s和p完全相同
(B) 数组s中的内容和指针变量p中的内容相等
(C) s数组长度和p所指向的字符串长度相等
(D) *p与s[0]相等
23、下面程序段的运行结果是( C )
char *format="%s,a=%d,b=%d\n";
int a=1,b=10;
a+=b;
printf(format,"a+=b",a,b);
(A) for,"a+=b",ab
(B) format,'a+=b"
(C) a+=b,a=11,b=10
(D) 以上结果都不对
24、下面程序段的运行结果是( B )
char *p="%d,a=%d,b=%d\n";
int a=111,b=10,c;
c=a%b; p+=3;
printf(p,c,a,b);
(A) 1,a=111,b=10
(B) a=1,b=111
(C) a=111,b=10
(D) 以上结果都不对
25、以下正确的程序段是( A、B、C )
(A) char str[20];
(B) char *p;
(C) char str[20];
scanf("%s",&str[2];)
(D) char str[20],*p=str;
scanf("%s",p[2]);
26、以下正确的程序段是( C )
(A) char str1[]="12345",str2[]="abcdef";
strcpy(str1,str2);
(B) char str[10],*st="abcde"; strcat(str,st);
(C) char str[10]=" ",*st="abcde"; strcat(str,st);
(D) char *st1="12345",*st2="abcde"; strcat(st1,st2);
27、下面程序段的运行结果是( B )
char str[]="ABC",*p=str;
printf("%d\n",*(p+3));
(A) 67
(B) 0
(C) 字符'C'的地址
(D) 字符'C'
28、下面程序段的运行结果是( ) //此题错误,p指向字符串常量,运行时strcpy(p,"ABCD")会出错。
char *p="abcdefgh";
p+=3;
printf("%d\n",strlen(strcpy(p,"ABCD")));
(A) 8
(B) 12
(C) 4
(D) 7
29、下面程序段的运行结果是( C )
char a[]="language",*p;
p=a;
while(*P!='u') {printf("%c",*p-32); p++;}
(A) LANGUAGE
(B) language
(C) LANG
(D) langUAGE
30、若有语句:char s1[]="string",s2[8],*s3,*s4="string2"; 则对库函数strcpy的错误调用是( A、B、C、D )
(A) strcpy(s1,"string2"); //数组s1只有7个数组元素,"string2"加字符串末尾的0需要8个字节
(B) strcpy(s4,"string1"); //s4指向字符串常量
(C) strcpy(s3,"string1"); //s3未初始化
(D) strcpy(s1,s2); //s2未初始化
31、以下与库函数strcpy(char *p1,char *p2)功能不相等的程序段是( D )
(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++;}
32、以下与库函数strcmp(char *s,char *t)的功能相等的程序段是( C )
(A) strcmp(char *s,char *t)
{
for( ; *s++==*t++; }
if(*s=='\0') return 0;
return *s-*t;
}
(B) strcmp2(char *s,char *t)
{
for( ; *s++==*t++; }
if(!*s) return 0;
return *s-*t;
}
(C) strcmp3(char *s,char *t)
{
for( ; *t==*s; )
{
if(!*t) return 0; t++; s++;
}
return *s-*t;
}
(D) strcmp4(char *s,char *t)
{
for( ; *s==*t; s++,t++)
if(!*s) return 0;
return *t-*s;
}
33、下面说明不正确的是( D )
(A) char a[10]="china";
(B) char a[10],*p=a; p="china";
(C) char *a; a="china";
(D) char a[10],*p; p=a="china";
34、若有说明语句
char a[]="It is mine";
char *p="It is mine";
则以下不正确的叙述是( D )
(A) a+1表示的是字符t的地址
(B) p指向另外的字符串时,字符串的长度不受限制
(C) p变量中存放的地址值可以改变
(D) a中只能存放10个字符
35、若已定义char s[10]; 则在下面表达式中不表示s[1]的地址的是( B )
(A) s+1
(B) s++
(C) &s[0]+1
(D) &s[1]
36、下面程序段的运行结果是( D )
char s[6]; s="abcd", printf("\"%s\"\n",s);
(A) "abcd"
(B) "abcd "
(C) \"abcd\"
(D) 编译出错
37、下面程序的功能是从输入的十个字符串中找出最长的那个串。请选择填空。①( 此题四个供选择的答案都有错误 )②( A、B )
#include<stdio.h>
#include<string.h>
#define N 10
void main()
{
char str[N][81],*sp;
int i;
for(i=0;i<N;i++) gets(str[i]);
sp= ① ; //如果选C需强制转换,即p=(int *)str;
for(i=1;i<N;i++) if(strlen(sp)<strlen(str[i])) sp=②; //原题少了sp=
printf("sp=%d,%s\n",strlen(sp),sp);
}
① (A) str[i]
(B) &str[i][0]
(C) str
(D) str[N]
② (A) str[i]
(B) &str[i][0]
(C) str
(D) str[N]
38、下面程序的功能是将一个整数字符串转换为一个整数,如"-1234"转换为-1234。请选择填空。①( A ) ②( C ) ③( B )
#include<stdio.h>
#include<string.h>
void main()
{
char s[6];
int n;
gets(s);
if(*s=='-') n=-chnum(s+1);
else n=chnum(s);
printf("%d\n",n);
}
chnum(char *p)
{
int num=0,k,len,j;
len=strlen(p);
for( ; ① ; p++)
{
k= ② ;
j=(--len);
while( ③ ) {k=k*10;}
num=num+k;
}
return num;
}
① (A) *p!='\0'
(B) *(++p)!='\0'
(C) *(p++)!='\0'
(D) len!=0
② (A) *p
(B) *p+'0'
(C) *p-'0'
(D) *p-32
③ (A) --j>0
(B) j-->0
(C) --len>0
(D) len-->0
39、下面程序的功能是将八进制正整数字符串转换为十进制整数。请选择填空。①( C ) ②( C )
#include<stdio.h>
void main()
{
char *p,s[6]; int n;
p=s;
gets(p);
n= ① ;
while( ② !='\0') n=n*8+*p-'0';
printf("%d\n",n);
① (A) 0
(B) *p
(C) *p-'0'
(D) *p+'0'
② (A) *p
(B) *p++
(C) *(++p)
(D) p
40、下面程序的功能是统计子串substr在母串str中出现的次数。请选择填空。①( B ) ②( B ) ③( C )
#include<stdio.h>
void main()
{
char str[80],substr[80];
int n;
gets(str); gets(substr);
printf("%d\n",count(str,substr));
}
count(char *str,char *substr)
{
int i,j,k,num=0;
for(i=0; ① ;i++)
for( ② ,k=0; substr[k]==str[j]; k++; j++)
if(substr[③]=='\0'){num++;break;}
return num;
}
① (A) str[i]==substr[i]
(B) str[i]!='\0'
(C) str[i]=='\0'
(D) str[i]>substr[i]
② (A) j=i+1
(B) j=i
(C) j=0
(D) j=1
③ (A) k
(B) k++
(C) k+1
(D) ++k
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询