プロが教えるわが家の防犯対策術!

西暦年と月を入力し、その月の最初の日(一日)の曜日を表す番号(日曜なら0、月曜なら1.......、土曜日なら6という整数)で返す関数 int calc_youbi(int y,int m)とする。また、1か月の日数をdaynumとして、その月の最初の日(1日)の曜日を*youbiとして受け取り、一か月分のカレンダーを出力するとともに、翌月の1日の曜日を*youbiとして受け渡す関数を、void print_calendar(int daynum,int *youbi)とする。
 西暦年と月の情報を入力して、最初に calc_youbiを一回、その後にprint_calendarを二回使うことによって二か月分のカレンダーを出力するプログラムを教えてください。
以下は、実行例です。
enter year:2010
enter month:6
Su Mo Tu We Th Fr Sa
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Su Mo Tu We Th Fr Sa
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

A 回答 (3件)

おぉう, 副作用を間違えてたよ.



#include <stdio.h>
#include <stdlib.h>

int calc_youbi(int y, int m);
void print_calendar(int daynum, int *youbi);

int main()
{
int y, m, youbi;

printf("enter year:"); scanf("%d", &y);
printf("enter month:"); scanf("%d", &m);

youbi=calc_youbi(y, m);
y += !(m%=12);
print_calender((calc_youbi(y, ++m)-youbi+7)%7+28, &youbi);
y += !(m%=12);
print_calender((calc_youbi(y, ++m)-youbi+7)%7+28, &youbi);

return EXIT_SUCCESS;
}
のような感じかな.
    • good
    • 0

なんというか馬鹿な設計だ....



例えば
#include <stdio.h>
#include <stdlib.h>

int calc_youbi(int y, int m);
void print_calendar(int daynum, int *youbi);

int main()
{
int y, m, youbi;

printf("enter year:"); scanf("%d", &y);
printf("enter month:"); scanf("%d", &m);

youbi=calc_youbi(y, m);
m%=12;
print_calender((calc_youbi(y+=!m, 1+m++)-youbi+7)%7+28, &youbi);
m%=12;
print_calender((calc_youbi(y+=!m, 1+m++)-youbi+7)%7+28, &youbi);

return EXIT_SUCCESS;
}
とか, かなぁ.

ああ, calc_youbi やら print_calendar やらは自分で考えてね.
    • good
    • 0

>C言語のポインタのプログラムについてのしつもんです


タイトル間違ってませんか?
本件、

プログラム作成依頼

でしょ。
    • good
    • 5
この回答へのお礼

言われてみればそうですね。。。。。
すみません

お礼日時:2017/07/03 02:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!