C语言求助(4道选择题)要说下怎么想的

C语言求助(4道选择题)要说下怎么想的,第1张

第一题:答案是 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程序有关数组或指针的选择题并且有正确答案的、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9345047.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存