【问题标题】:Calculate first day of a calendar week计算日历周的第一天
【发布时间】:2016-02-05 02:40:46
【问题描述】:

我正在用 C 做一个课堂项目,我需要计算给定 21 世纪“跳过 2000 年”的年份的月份和日期。 老师把它分解成步骤:

第一步是获取年份的最后两位数字;我已经完成了

yy = yyyy % 100;

第二步是计算两位数的 25% 并将小数点除以 获取 2-10% 的数字,然后将其添加到自身;我已经完成了

result = result + (result/5.0):

我只是有点纠结于如何去掉小数位?

第三步是将我们的 25% 值加回到我们在第一步中得到的原始两位数。 这也是我坚持的另一个步骤。

第四步是减去7的最大拟合倍数;我在顶部创建了一个数组。

鉴于输入的年份是闰年,我需要从 25% 的值中减去 1。

我现在已经包含了我所有的代码。任何投入将不胜感激!

编辑: 我已经修复了我的 for 循环并花了一些时间检查我的代码,当我尝试用 "d[ypercent] 输出一天时,我被困住了,我得到了一堆乱七八糟的字符。我已将 ypercent 指向一个字符串值,我似乎不知道为什么。我也发布了我的更新代码。我已经检查过了,它编译得很好,但它不会输出正确的日期。

所以我的问题是:如何修复“printf(”1 月 1 日在 %s :\n", yyyy, d[ypercent]);"显示正确的日期?

#include <stdio.h>

  int main()
  {       
    int x = 0;
    int yy, yyyy;
    int lastX, ypercent;
    float result;

    const char *d[7];                                                                                                         
    d[0] = "Sunday";
    d[1] = "Monday";
    d[2] = "Tuesday";
    d[3] = "Wednesday";
    d[4] = "Thursday";
    d[5] = "Friday";
    d[6] = "Saturday";
    d[7] = "Sunday";

    printf("Which year? ");
    scanf ("%d", &yyyy);

    yy = yyyy % 100;                                                                                                
    ypercent = yy + yy *(.25);


    result = yy * .1;                                                                                               
    result = result + (result/5.0);    

         for  (x = 0; x < ypercent; x++)                                                                                    
            {    
             if ((7 * x) > ypercent)                                                                                        
             break;                                                                                                 
             lastX = x;                                                                                             
            }

            ypercent = ypercent - lastX;


    printf("Janurary 1st, %d is on a %s :\n ", yyyy , d[ypercent]);

    getchar();
    return 0;
}

【问题讨论】:

  • 问题是......?学习How to Ask
  • x++7 是语法错误。你是说x += 7 吗?
  • 您的for 循环似乎还缺少一个结束}。我建议在寻求帮助之前发布您至少编译过的代码。
  • 在尝试分配之前,您也没有为 d 分配任何内存。并且缺少几个分号。
  • AFAICS,表达式 result = result + (result/5.0): 将计算 result 先前值的 120%,而不是 25%。也许我错过了什么。

标签: c computer-science


【解决方案1】:

除了错别字(如缺少分号和括号)

您应该将 d 声明为字符串指针数组

char *d[7];

我只是有点纠结于如何去掉小数位?

您需要做的就是将其转换为 int。那会去掉小数点。

int intresult = result + (result/5.0);

请注意,由于声明,您不需要显式转换它

int intresult = (int)(result + (result/5.0));

但是,您可以截断它,但将浮点模式下的值保留为

result = (int)(result + (result/5.0));

【讨论】:

  • 请注意,int(result + (result/5.0)) 在 C++ 中有效,但在 C 中无效;它将用 C 写成(int)(result + (result/5.0))。如果你的 C 编译器接受它,它就是对标准 C 语法的扩展。
  • @JonathanLeffler 谢谢打字太快了。固定
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-28
  • 2021-08-26
  • 2015-10-07
  • 2011-04-06
  • 2011-01-06
  • 1970-01-01
相关资源
最近更新 更多