鱼C论坛

 找回密码
 立即注册
查看: 2499|回复: 20

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

[复制链接]
发表于 2014-11-4 15:43:19 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
求详解,谢谢啦!
IMG_20141104_151547.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-11-4 15:58:52 | 显示全部楼层
不要做伸手党好不好呀,至少把源代码打一遍呀,让我们帮着做题呢?详解,int k; 用不用详解呀,至少要说清哪个地方不会?请楼主见谅~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-4 16:27:25 From FishC Mobile | 显示全部楼层
#include "stdio.h" main( ) {         char str[  ]="SSSWLIA",c;         int k;         for( k=2;(c=str[k])!='\0';k++)         {                 switch(c)                 {                         case'I':++k;break;                         case'L':continue;                         default: putchar(c);continue;                 }         putchar('*');         } }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-4 16:28:13 From FishC Mobile | 显示全部楼层
不好意思我把楼上打错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-4 16:31:03 From FishC Mobile | 显示全部楼层
#include "stdio.h" main( ) {         char str[  ]="SSSWLIA",c;         int k;         for( k=2;(c=str[k])!='\0';k++)         {                 switch(c)                 {                         case'I':++k;break;                         case'L':continue;                         default: putchar(c);continue;                 }         putchar('*');         } } 答案是SW*,我不明白switch语句在这里是怎么执行的,不懂是怎么循环出来的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-4 16:32:05 From FishC Mobile | 显示全部楼层
拈花小仙 发表于 2014-11-4 15:58
不要做伸手党好不好呀,至少把源代码打一遍呀,让我们帮着做题呢?详解,int k; 用不用详解呀,至 ...

恩,好的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-4 16:32:57 From FishC Mobile | 显示全部楼层
拈花小仙 发表于 2014-11-4 15:58
不要做伸手党好不好呀,至少把源代码打一遍呀,让我们帮着做题呢?详解,int k; 用不用详解呀,至 ...

恩,不好意思,好的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-4 16:42:45 From FishC Mobile | 显示全部楼层
这是源代码  #inlude "stdio.h"  main( ) {       char str[ ]="SSSWLIA",c;       int k;       for( k=2;(c=str[k])!='\0';k++)       {             switch(c)             {                case'I':++k;break;                case'L':continue;                default:putchar(c);continue;              }        putchar('*');        } }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-4 16:44:53 From FishC Mobile | 显示全部楼层
#include "stdio.h"
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-4 16:46:50 From FishC Mobile | 显示全部楼层
不好意思,出错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-4 16:57:08 | 显示全部楼层
#include "stdio.h"
main( )
{
        char str[  ]="SSSWLIA",c;
        int k;
        for( k=2;(c=str[k])!='\0';k++)
        {
                switch(c)
                {
                        case'I':++k;break;
                        case'L':continue;
                        default: putchar(c);continue;
                }
        putchar('*');
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-4 18:55:07 | 显示全部楼层
weihuiwei123 发表于 2014-11-4 16:57
#include "stdio.h"
main( )
{

那么接下来你先分析一下,不对的大家就会帮着答了,我这样是为了楼主。即使不会也要试着分析哦。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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*
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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啊!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-4 20:33:33 | 显示全部楼层
sw虽然没有学过c语言但学过java的发在意先告诉我D的可能性很大……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

那个break是switch里面的 不是for里面的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢你!这里的switch语句是怎么执行的呢,我觉得是输出SS一直输出S,因为我觉得continue执行后判断c的真假,而c的值在这里是S,根据continue的功能会一直输出S,然后后面就不会了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-8 20:57:50 | 显示全部楼层
第一次循环 k = 2,c = str[k] = ‘S’,而‘S’ != ‘I’和‘L’,所以执行default后面的putchar(c),输出‘S’
第二次循环 k = 3,c = str[k] = ‘W’,而‘W’ != ‘I’和‘L’,所以执行default后面的putchar(c),输出‘W’
第三次循环 k = 4,c = str[k] = ‘L’,所以执行case 'L': 后面的continue
第四次循环 k = 5,c = str[k] = ‘I’,所以执行case 'I': 后面的break,退出循环
退出循环后输出‘*’,程序结束

所以结果是 SW*
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2014-11-8 21:58:42 | 显示全部楼层
还有试卷的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-9 20:11:11 | 显示全部楼层
我觉得这题的关键在于break语句,break作用是在switch语句中控制case语句,一般每个case语句后面都要加个break,防止执行多个case语句。因此该题break作用是控制switch语句,并非控制for循环语句,因此break语句并不能中断for语句的执行

第一次循环 k = 2,c = str[2] = ‘S’,所以执行default后面的putchar(c),输出‘S’;
第二次循环 k = 3,c = str[3] = ‘W’,所以执行default后面的putchar(c),输出‘W’
第三次循环 k = 4,c = str[4] = ‘L’,所以执行case 'L': 后面的continue
第四次循环 k = 5,c = str[5] = ‘I’,所以执行case 'I': 后面的++k,此时k=5,‘break’表示退出switch语句,然后执行putchar('*')
第五次循环 k = 6,c = str[6] = ‘A’,所以执行default后面的putchar(c),输出‘A’
第六次循环 k = 7,c = str[7] = ‘\0’,退出循环,程序结束

所以结果是 SW* A
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 07:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表