C++練習 印出某天是星期幾


題目

使用者輸入日期(年 月 日),印出當天是星期幾。

程式要求:
由使用者於螢幕上輸入三個數字(數字間由空白隔開) ,經由計算後得出該日是
星期幾後必須使用 switch 來判斷並輸出在第一行(後方須使用 endl 換行),本作業僅能使用 C++撰寫
業僅能使用 C++撰寫
必須包含以下 function:
int which_date(int year, int month, int day);
此 function 需 return 一個 int,用來表示星期幾

輸出範例:
cout << "Wednesday" << endl;

2022 11 13
Sunday

完整程式碼

#include<iostream>
using namespace std;

//3.function
int which_date(int year,int month,int day)
{
    //4.設定好變數
    int c ;
    int y ;
    int m = month;
    if(m==1 || m==2){
        m=m+12;
        c=(year-1)/100;
        y=(year-1)%100;
    }
    else{
        c=year/100;
        y=year%100;
    }
    int d = day;

    //5.計算星期幾

    int w = ( y+ int(y/4) + int(c/4) -2*c + int(26*(m+1)/10)+d-1 ) % 7;

    //6.function返回值
    return w;
}

int main()
{
    //1.建立變數
    int year;
    int month;
    int day;

    //2.將輸入值存進變數
    cin >> year >> month >> day;

    //3.使用function並且有返回值
    int date = which_date(year,month,day);

    //7.switch對應後輸出
    switch(date) {
        case 0 :
            cout << "Sunday" << endl;
            break;
        case 1 :
            cout << "Monday" << endl;
            break;
        case 2 :
            cout << "Tuesday" << endl;
            break;
        case 3 :
            cout << "Wednesday" << endl;
            break;
        case 4 :
            cout << "Thursday" << endl;
            break;
        case 5 :
            cout << "Friday" << endl;
            break;
        case 6:
            cout << "Saturday" << endl;
            break;
        default:
            break;
    }

    return 0;
}

解題過程

基本語法參考自:
https://www.csie.ntu.edu.tw/~b98902112/cpp_and_algo/cpp02/string.html
星期幾的計算:
https://zh.wikipedia.org/zh-tw/%E6%98%9F%E6%9C%9F%E7%9A%84%E8%A8%88%E7%AE%97#%E8%94%A1%E5%8B%92%E5%85%AC%E5%BC%8F
switch語法:
https://openhome.cc/Gossip/CppGossip/switchStatement.html

1.建立變數存入輸入值

```
//1.建立變數
int year;
int month;
int day;

//2.將輸入值存進變數
cin >> year >> month >> day;
```

觀念: cin

2.建立function依照年月日輸出星期幾

觀念: function
當我們希望有一個黑盒子,可以傳進一些輸出,計算完傳出想要的輸出
這個黑盒子就是function

我設計function會經過下面的思路:
1.我需要一個功能要輸入一些東東,回傳一些東東
2.寫好function大至架構()
3.開始實作function中的內容

function的大至架構:

回傳值型態 函式名稱(參數1型態 參數名稱1, 參數2型態 參數名稱2, ... )
{
    Do anything you want...

    return 回傳值;
}

e.g. 我想要一個可以用年月日就可以計算星期幾的功能
--> input : 年月日 , output : 星期幾 , 設計好function大至架構

int which_date(int year,int month,int day)
{

}

接下來就是實作function細節

3. function內容如何實作

現在我們要在建立好的function裡面開始處理傳入數據

int which_date(int year,int month,int day)
{
    要開始做事囉~
}

這裡用到蔡勒公式:

此時我們的function已經傳入year,month,day可供function運用
這裡有幾個點需要注意:

1.如果是1、2月則要看成13、14月 並且年分-1
觀念:if/else,四則運算

    int c ;
    int y ;
    int m = month;
    if(m==1 || m==2){
        m=m+12;
        c=(year-1)/100;
        y=(year-1)%100;
    }
    else{
        c=year/100;
        y=year%100;
    }
    int d = day;

至此我們已經有對應到各月份正確的c,y,m,d可以用來計算

2.有高斯符號[]需要去掉小數 --> 用int處理
3.mod為取餘數 --> 用%處理

int w = ( y+ int(y/4) + int(c/4) -2*c + int(26*(m+1)/10)+d-1 ) % 7;

4.返回int值 w

return w;

至此function完成!!

int which_date(int year,int month,int day)
{
    //4.設定好變數
    int c ;
    int y ;
    int m = month;
    if(m==1 || m==2){
        m=m+12;
        c=(year-1)/100;
        y=(year-1)%100;
    }
    else{
        c=year/100;
        y=year%100;
    }
    int d = day;

    //5.計算星期幾

    int w = ( y+ int(y/4) + int(c/4) -2*c + int(26*(m+1)/10)+d-1 ) % 7;

    //6.function返回值
    return w;
}

4.switch處理function返回的值

在剛剛處理好function之後,我們可以得到回傳值date

int date = which_date(year,month,day);

date為0~6分別為星期天、一...、六
因此我們要把date的呈現結果,從int --> string
觀念: switch, cout

switch基本概念:

switch(變數名稱或運算式) {
    case 符合數字或字元:
        陳述句一;
        break;
    case 符合數字或字元:
        陳述句二;
        break;
    default:
        陳述三;
        break;
}

現在我們是需要判斷date的0~6 ,再輸出不同的string結果
因此變數名稱 --> date , 符合數字或字元 --> 0~6

switch(date) {
        case 0 :
            cout << "Sunday" << endl;
            break;
        case 1 :
            cout << "Monday" << endl;
            break;
        case 2 :
            cout << "Tuesday" << endl;
            break;
        case 3 :
            cout << "Wednesday" << endl;
            break;
        case 4 :
            cout << "Thursday" << endl;
            break;
        case 5 :
            cout << "Friday" << endl;
            break;
        case 6:
            cout << "Saturday" << endl;
            break;
        default:
            break;
    }

我們就可以成功的依照各種情況把int-->string呈現答案!!

#C++







你可能感興趣的文章

【Day01】用tkinter製作圖形視窗介面(GUI)

【Day01】用tkinter製作圖形視窗介面(GUI)

反射方法操作

反射方法操作

Day 163

Day 163






留言討論