weihuiwei123 发表于 2014-11-4 15:43:19

关于c语言数组课后下小问题

求详解,谢谢啦!

拈花小仙 发表于 2014-11-4 15:58:52

{:7_122:}不要做伸手党好不好呀,至少把源代码打一遍呀,让我们帮着做题呢?详解,int k; 用不用详解呀,至少要说清哪个地方不会?请楼主见谅~

weihuiwei123 发表于 2014-11-4 16:27:25

#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:28:13

不好意思我把楼上打错了

weihuiwei123 发表于 2014-11-4 16:31:03

#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语句在这里是怎么执行的,不懂是怎么循环出来的

weihuiwei123 发表于 2014-11-4 16:32:05

拈花小仙 发表于 2014-11-4 15:58
不要做伸手党好不好呀,至少把源代码打一遍呀,让我们帮着做题呢?详解,int k; 用不用详解呀,至 ...

恩,好的

weihuiwei123 发表于 2014-11-4 16:32:57

拈花小仙 发表于 2014-11-4 15:58
不要做伸手党好不好呀,至少把源代码打一遍呀,让我们帮着做题呢?详解,int k; 用不用详解呀,至 ...

恩,不好意思,好的

weihuiwei123 发表于 2014-11-4 16:42:45

这是源代码#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('*');      } }

weihuiwei123 发表于 2014-11-4 16:44:53

#include "stdio.h"

weihuiwei123 发表于 2014-11-4 16:46:50

不好意思,出错了

weihuiwei123 发表于 2014-11-4 16:57:08

#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('*');
        }
}

拈花小仙 发表于 2014-11-4 18:55:07

weihuiwei123 发表于 2014-11-4 16:57
#include "stdio.h"
main( )
{


那么接下来你先分析一下,不对的大家就会帮着答了,我这样是为了楼主。即使不会也要试着分析哦。

machimilk 发表于 2014-11-4 19:30:26

本帖最后由 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*

小山童鞋 发表于 2014-11-4 20:28:26

machimilk 发表于 2014-11-4 19:30
应该输出SW* for k=2 那么从数组的第三个元素开始,第三个元素S在case里面没有对应的,就选择了default,就p ...

putchar('*');在for循环里面啊!!!而在这条语句前是switch,switch里面要么是continue,要么是break,所以后面的putchar('*');根本不可能执行。所以答案里不可能存在‘*’。所以只能选D啊!

一步人生終是謎 发表于 2014-11-4 20:33:33

sw虽然没有学过c语言但学过java的发在意先告诉我D的可能性很大……

machimilk 发表于 2014-11-4 20:40:59

小山童鞋 发表于 2014-11-4 20:28
putchar('*');在for循环里面啊!!!而在这条语句前是switch,switch里面要么是continue,要么是break,所 ...

那个break是switch里面的 不是for里面的

weihuiwei123 发表于 2014-11-4 22:11:09

拈花小仙 发表于 2014-11-4 18:55
那么接下来你先分析一下,不对的大家就会帮着答了,我这样是为了楼主。即使不会也要试着分析哦。

谢谢你!这里的switch语句是怎么执行的呢,我觉得是输出SS一直输出S,因为我觉得continue执行后判断c的真假,而c的值在这里是S,根据continue的功能会一直输出S,然后后面就不会了

风之残月 发表于 2014-11-8 20:57:50

第一次循环 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*

纯属宅男 发表于 2014-11-8 21:58:42

还有试卷的?

hfut_wangfei 发表于 2014-11-9 20:11:11

我觉得这题的关键在于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
查看完整版本: 关于c语言数组课后下小问题