为了账号安全,请及时绑定邮箱和手机立即绑定

结果没问题,然而代码和标准结果不一样,不让过,哈哈!

#include <stdio.h>
int main() 
{ 
    // 定义相乘数字i,j以及结果result
    int i, j, result;
    /*
     * 使用for循环解决本题相对简单哦~
     * 小编偷偷的将源码放在任务“不会了怎么办”中了哦~
     * 小编希望童鞋们独立完成哦~
     */
    for(i=9;i>0;i--)
    {    for(j=1;j<=i;j++)
            printf("%d * %d = %d\t",i,j,i*j);
        printf("\n");
    }
    
    return 0;
}



正在回答

7 回答

用的是什么吃软件啊   想要

0 回复 有任何疑惑可以回复我~

//如果是1月的话,那么day的值是多少,那就是一年中的第多少天,没必要再去找之前有几个月
//用month的值减去1,就得到了month的前面有多少个月,代入switch去累加本月的day前面的天数
 switch(month-1)
    {
        case 11:day+=30;//month是12月,那么前面就有11个月,11月本身是30天
        case 10:day+=31;//month是12月,那么前面就有10个月,10月本身是31天,以此类推
        case 9:day+=30;//没有break;所以程序运行本case之后,下面的所有还会运行一遍,这样就累加起来了
        case 8:day+=31;
        case 7:day+=31;
        case 6:day+=30;
        case 5:day+=31;
        case 4:day+=30;
        case 3:day+=31;
        //现在的公历历法关于闰年的规定是能被4整除但不能被100整除,或者能被400整除。
        //最早的公历历法关于闰年的规定是能被4整除——了解一下即可,不是本题意思。
        case 2:if((year%4==0 && year%100) || year%400==0)
                            day+=29;
                      else
                            day+=28;
        case 1:day+=31;
    }
    printf("2008年8月8日是该年的第%d天",day);


0 回复 有任何疑惑可以回复我~
#1

qq_狗活_twEPQW

唉 我看4-16里没有for循环就光一个switch然后它也用了break。我就以为switch也是一个循环,break是跳出switch用的,现在明白了,大佬你刚学c吗,标识符背这么熟
2019-02-22 回复 有任何疑惑可以回复我~
#2

白腿小隼熊猫鸟 提问者 回复 qq_狗活_twEPQW

过奖了,不敢称大佬,很多年前接触过C,现在想复习一下,所以还有些印象。一起加油吧!
2019-02-23 回复 有任何疑惑可以回复我~

emm,看运行结果那里的英文好像可以勉强猜出错误。可以叫你大佬吗,一下就学到6去了,我还在4.可以帮我看看我的代码哪错了吗、(这是4-17求2008年8月8日是这一年的第几天的代码,你可以复制帮我看下吗,为什么我是254。。)


#include <stdio.h>
int main()
{
    /* 定义需要计算的日期 */
    int year = 2008;
    int month = 8;
    int day = 8;
    int j;
    /*
     * 请使用switch语句,if...else语句完成本题
     * 如有想看小编思路的,可以点击左侧任务中的“不会了怎么办”
     * 小编还是希望大家独立完成哦~
     */for(j=1;j<month;j++){
        switch(month){
        case 1:day=day+31;break;
        case 2:break; 
        case 3:day=day+31;break;
        case 4:day=day+30;break;
        case 5:day=day+31;break;
        case 6:day=day+30;break;
        case 7:day=day+31;break;
        case 8:day=day+31;break;
        case 9:day=day+30;break;
        case 10:day=day+31;break;
        case 11:day=day+30;break;
        case 12:day=day+31;break;
        }
     }
    
     int i;
        i=year%4==0&&year%100!=0;
    
     if(i==1) {
         printf("是该年中的第%d天",day=day+29);
     }
        else {
            printf("是该年的第%d天",day=day+28);
        }
   
 return 0;
}

0 回复 有任何疑惑可以回复我~
#1

qq_狗活_twEPQW

我原来的代码 的 case2后面没有加break;结果输出就是254,我还以为加上break;结果会少31,没想到加上后输出还是254没变啊。。。。
2019-02-22 回复 有任何疑惑可以回复我~
#2

白腿小隼熊猫鸟 提问者

本来最上面的提问是想发发自己的回答和调侃一下的。 你这段代码里,for()循环没有必要,也不合适,实际运行的情况,在题目的已知条件下,过程是这样的: (1)进入for()循环,满足循环条件,进入switch结构,(2)找到case 8,执行day = day + 31;然后break;跳出switch结构。(3)下一次for()循环。 所以,for()循环总共执行了7次,也就是day加31加了7次,所以最后的结果是8+31*7+29=254天。
2019-02-22 回复 有任何疑惑可以回复我~
#3

白腿小隼熊猫鸟 提问者

要累计某个月份之前的天数,可以手动计算,可以写出每个月的天数并列成算式,还可以借助switch结构的执行特点。 switch结构的语句执行特点是,只要没有遇到break;,那么即使找到了case,这个case后面的所有语句还是会顺序执行。 所以,你可以把case后面的值改为从12写到1,后面不加break;,这样的话,比如8月份,那么程序在直接进入case 8之后,还会继续顺序执行后面的case 7一直到case 1。这样就把天数累加起来了,还直观。
2019-02-22 回复 有任何疑惑可以回复我~
#4

白腿小隼熊猫鸟 提问者

把代码写在下面了,下面回答允许写的字多一些,而且有代码框架,容易看一些。你看看吧。
2019-02-22 回复 有任何疑惑可以回复我~
查看1条回复

找到原因了。原来是自动检查里,要求输出的样式必须是"%d*%d=",数字和*号之间不能有空格。嗯,好吧。

0 回复 有任何疑惑可以回复我~

emm不是说for后面不用分号吗,分号当执行体又是什么意思。而且你不打{}如果系统把printf("\n");也识别到子循环里面去了,那不就子循环循环一次就换行了,不懂。。。

0 回复 有任何疑惑可以回复我~
#1

白腿小隼熊猫鸟 提问者

用大括号{}的原因是后面有多行语句。如果只有一行语句的话,自然可以省略大括号。 放心吧,C语言的标准就是这样规定的,编译器不会把printf("\n");放到子循环里去的,没有大括号的时候,它就只认后面遇到的第一个分号。 第6-9节多维数组,我又写了一个类似的,给你参考一下: //使用第二种方式初始化方式声明并初始化二维数组arr2 int arr2[2][2]; for(int i=0,multiple=1;i<2;i++) for(int j=0;j<2;j++) arr2[i][j] = 10 * multiple++;
2019-02-22 回复 有任何疑惑可以回复我~

谁说for循环后面的代码必须有大括号{}呢?有代码就可以了,甚至就算是一个光秃秃的分号也符合语法。

后面的\t是水平制表符,相当于是按一下tab键。

0 回复 有任何疑惑可以回复我~

你这第二个for后面没有{},怎么可能循环printf,而且\t是什么东西,看不懂


0 回复 有任何疑惑可以回复我~
#1

白腿小隼熊猫鸟 提问者

谁说for循环后面的代码必须有大括号{}呢?有代码就可以了,甚至就算是一个光秃秃的分号也符合语法。 后面的\t是水平制表符,相当于是按一下tab键。
2019-02-21 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

结果没问题,然而代码和标准结果不一样,不让过,哈哈!

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信