关于c语言数组课后下小问题
求详解,谢谢啦! {:7_122:}不要做伸手党好不好呀,至少把源代码打一遍呀,让我们帮着做题呢?详解,int k; 用不用详解呀,至少要说清哪个地方不会?请楼主见谅~ #include "stdio.h" main( ) { char str[]="SSSWLIA",c; int k; for( k=2;(c=str)!='\0';k++) { switch(c) { case'I':++k;break; case'L':continue; default: putchar(c);continue; } putchar('*'); } } 不好意思我把楼上打错了 #include "stdio.h" main( ) { char str[]="SSSWLIA",c; int k; for( k=2;(c=str)!='\0';k++) { switch(c) { case'I':++k;break; case'L':continue; default: putchar(c);continue; } putchar('*'); } } 答案是SW*,我不明白switch语句在这里是怎么执行的,不懂是怎么循环出来的 拈花小仙 发表于 2014-11-4 15:58不要做伸手党好不好呀,至少把源代码打一遍呀,让我们帮着做题呢?详解,int k; 用不用详解呀,至 ...
恩,好的 拈花小仙 发表于 2014-11-4 15:58
不要做伸手党好不好呀,至少把源代码打一遍呀,让我们帮着做题呢?详解,int k; 用不用详解呀,至 ...
恩,不好意思,好的 这是源代码#inlude "stdio.h"main( ) { char str[ ]="SSSWLIA",c; int k; for( k=2;(c=str)!='\0';k++) { switch(c) { case'I':++k;break; case'L':continue; default:putchar(c);continue; } putchar('*'); } } #include "stdio.h" 不好意思,出错了 #include "stdio.h"
main( )
{
char str[]="SSSWLIA",c;
int k;
for( k=2;(c=str)!='\0';k++)
{
switch(c)
{
case'I':++k;break;
case'L':continue;
default: putchar(c);continue;
}
putchar('*');
}
} weihuiwei123 发表于 2014-11-4 16:57
#include "stdio.h"
main( )
{
那么接下来你先分析一下,不对的大家就会帮着答了,我这样是为了楼主。即使不会也要试着分析哦。 本帖最后由 machimilk 于 2014-11-4 21:07 编辑
应该输出SW* for k=2 那么从数组的第三个元素开始,第三个元素S在case里面没有对应的,就选择了default(因为default里面有continue所以),就putchar了这个S,然后循环第四个元素W,也是default的putchar,这时候就打印了SW然后第五个元素,当遇到了L就结束了本次循环,然后下次循环遇到了I,直接就break跳出switch后putchar('*')同时k又增长了(本来下次循环应该指向A了,现在指向了结束符\0),不满足了for循环的条件就不执行了 所以结果应该是SW* machimilk 发表于 2014-11-4 19:30
应该输出SW* for k=2 那么从数组的第三个元素开始,第三个元素S在case里面没有对应的,就选择了default,就p ...
putchar('*');在for循环里面啊!!!而在这条语句前是switch,switch里面要么是continue,要么是break,所以后面的putchar('*');根本不可能执行。所以答案里不可能存在‘*’。所以只能选D啊! sw虽然没有学过c语言但学过java的发在意先告诉我D的可能性很大…… 小山童鞋 发表于 2014-11-4 20:28
putchar('*');在for循环里面啊!!!而在这条语句前是switch,switch里面要么是continue,要么是break,所 ...
那个break是switch里面的 不是for里面的 拈花小仙 发表于 2014-11-4 18:55
那么接下来你先分析一下,不对的大家就会帮着答了,我这样是为了楼主。即使不会也要试着分析哦。
谢谢你!这里的switch语句是怎么执行的呢,我觉得是输出SS一直输出S,因为我觉得continue执行后判断c的真假,而c的值在这里是S,根据continue的功能会一直输出S,然后后面就不会了 第一次循环 k = 2,c = str = ‘S’,而‘S’ != ‘I’和‘L’,所以执行default后面的putchar(c),输出‘S’
第二次循环 k = 3,c = str = ‘W’,而‘W’ != ‘I’和‘L’,所以执行default后面的putchar(c),输出‘W’
第三次循环 k = 4,c = str = ‘L’,所以执行case 'L': 后面的continue
第四次循环 k = 5,c = str = ‘I’,所以执行case 'I': 后面的break,退出循环
退出循环后输出‘*’,程序结束
所以结果是 SW* 还有试卷的? 我觉得这题的关键在于break语句,break作用是在switch语句中控制case语句,一般每个case语句后面都要加个break,防止执行多个case语句。因此该题break作用是控制switch语句,并非控制for循环语句,因此break语句并不能中断for语句的执行
第一次循环 k = 2,c = str = ‘S’,所以执行default后面的putchar(c),输出‘S’;
第二次循环 k = 3,c = str = ‘W’,所以执行default后面的putchar(c),输出‘W’
第三次循环 k = 4,c = str = ‘L’,所以执行case 'L': 后面的continue
第四次循环 k = 5,c = str = ‘I’,所以执行case 'I': 后面的++k,此时k=5,‘break’表示退出switch语句,然后执行putchar('*')
第五次循环 k = 6,c = str = ‘A’,所以执行default后面的putchar(c),输出‘A’
第六次循环 k = 7,c = str = ‘\0’,退出循环,程序结束
所以结果是 SW* A
页:
[1]
2