c语言国二的例题 求详解
有以下程序:#include<stdio.h>main(){chars[]="012xy\08s34f4w2";inti,n=0;for(i=0;s[i]!=0;i++)...
有以下程序:
#include <stdio.h>
main()
{ char s[]="012xy\08s34f4w2";
int i,n=0;
for(i=0;s[i]!=0;i++)
if(s[i] >= '0' && s[i] <= '9') n++;
printf("%d\n",n);
}
程序运行后的输出结果是( )。
A. 0
B. 3
C. 7
D. 8
正确答案:B
答题信息:
答疑:【解析】本题中遇到"\"字符循环结束,所以只统计"\"之前的数字字符,所以为3。
s【0】不就是0吗 然后for语句中循环的条件是s[0]!=0
那不就是直接结束了吗 为什么for语句还会运行
还有它给的答案 说 遇到 ‘\’则停止
又是为什么 展开
#include <stdio.h>
main()
{ char s[]="012xy\08s34f4w2";
int i,n=0;
for(i=0;s[i]!=0;i++)
if(s[i] >= '0' && s[i] <= '9') n++;
printf("%d\n",n);
}
程序运行后的输出结果是( )。
A. 0
B. 3
C. 7
D. 8
正确答案:B
答题信息:
答疑:【解析】本题中遇到"\"字符循环结束,所以只统计"\"之前的数字字符,所以为3。
s【0】不就是0吗 然后for语句中循环的条件是s[0]!=0
那不就是直接结束了吗 为什么for语句还会运行
还有它给的答案 说 遇到 ‘\’则停止
又是为什么 展开
展开全部
C里字符的结束符就是'\0',转为int后就是0,s[0]里存储的是一个字符的'0',它转成int后结果为48(也就是0的ascii码,具体的你可以自己查一下ascii表,或者自己用 printf("%d",(int)(s[0]))输出一下看看),所以你的问题,s[0]='0'=48是不等于0的,对于s[i]!=0来说,只有遇到s[5]才会停止,也就是遇到\0停止,并不是遇到\就停止。
至于上面的char s[]="012xy\08s34f4w2",实际上是
s[0]='0'
s[1]='1';
s[2]='2';
s[3]='x';
s[4]='y';
s[5]='\0'=0;
s[6]='8';
.....
s[13]='2';
s[14]='\0';
至于上面的char s[]="012xy\08s34f4w2",实际上是
s[0]='0'
s[1]='1';
s[2]='2';
s[3]='x';
s[4]='y';
s[5]='\0'=0;
s[6]='8';
.....
s[13]='2';
s[14]='\0';
更多追问追答
追问
好的 了解了谢谢
能再问一个问题吗
我刚刚试着在char s【】里面把\移到s后面
运算结果是7 为什么呢
麻烦了
追答
如果你写的是char s[]="012xy8s34f4w2\0";这样写实际上是没太大意义的,你可以直接写char s[]="012xy8s34f4w2";因为这种数组会自动在后面补上\0,举个例子,比如说char s[]="a"; 这个s数组长度实际上就是2,s[0]='a',s[1]='\0'=0(也因为同样的原因,如果你写成char s[1]="a"就会无法通过编译)
回到你之前的012xy8s34f4w2\0,这样写的话统计的实际上是你字符串中'0'到'9'之间的数字(ascii码从48到59),从上面后来看,符合条件的只有0128342这7个数,结果当然就是7
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询