第一题:答案是 B。num=0这是初始值,下面进入while循环因为num<=2,所以做num++;这个表达式的值等价与num=num+1现在num=1了;然后就做printf打印出num的值是1。在进行判断num=1<2就在继续做num++,num变为了2在打印,再循环num=2<=2就再做num++,num现在变为3在打印,最后判断num=3>2所以跳出循环程序结束!最后答案就是 1 2 3 所以B
第二题:答案是A。a=1进入switch语句做case 1: b=1;break;这时b就变为1了啊!在做b=a+b;这时b=2了!在下面就做while(!b);那就退出do—while循环了!最后打印a=1,b=2整个程序结束所以答案就是A
第三题: 答案C 先做while((c=getchar())!='\n') 这时c=4在做switch(c -'2')所以就到了语句 case 2: putchar(c+4);break;这时就打印出8了!当4467输入时就自然打印出8889了但是请注意当输入5时做switch(c -'2')这时做的是case 3: putchar(c+3);
default: putchar(c+2);break;也就是说做到break为止switch语句一定要注意做到break才能跳出这整个switch所以当输入5时就自然得到87这2个数了!最后一个5也是87这2个得数;所以最后答案88898787
第4题:答案D先做switch(c++) ;做完做 case 'A': k++;break;因为C++是先用后++的
也就是说C++这时的值还是“A”做完之后做k++; 这时k=2了 然后因为while(c<'C')为真所以就做 switch(c++)这时做 case 'B': k--;(这时k=1)case 'C': k+=2;break;(这时k=3)是上面说过的先用在++;最后在做k++;(这时k=4)应为C已经变为了"C"所以跳出循环打印出k=4 所以答案:D
第5题:答案D 要是做题就把答案反带回去看它题目++你就——符合题意就OK了 要是上机的话可以单步调试来看看的!
指针
一、选择题
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=314; 要让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<stdioh>
#include<stringh>
#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<stdioh>
#include<stringh>
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=k10;}
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<stdioh>
void main()
{
char p,s[6]; int n;
p=s;
gets(p);
n= ① ;
while( ② !='\0') n=n8+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<stdioh>
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
以上就是关于C语言求助(4道选择题)要说下怎么想的全部的内容,包括:C语言求助(4道选择题)要说下怎么想的、想要一些 c程序有关数组或指针的选择题并且有正确答案的、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)