高校1年のプログラム初心者です。
つい最近C言語を始めることになって課題が出されたのですが分かりません。
色々組み合わせるんだろうけど組み合わせ方どころか全然です。
心優しい人がいましたら助けてください。
問1 変数aには半角英文字Fを代入し、英数bには16進数4AB7を代入し、変数cには実数16.5を代入し、配列d[]には半角英字の文字列SWATを代入し、それらa~dを正しく印字するプログラムを書け。
問2 キーボードから10以上の正整数を1つ入力して、その数字を7で割ったあまりが0であればSunday 1であればMonday 2であればTuesday 3であればWedonesday
4であればThursday 5であればFriday それ以外ならSaturudayを印字するプログラムを書け。
問3 キーボードから文字列を入力されたときに、その文字列のデータを配列d[]に格納し、文字列を最初から1文字ずつ取り出して、もし小文字のアルファベットであれば大文字に変換して印字するプログラムを書け。(例 sevenと入力すればSEVEN印字されるようにせよ)
問4 キーボードから正整数を入力したら、その約数がすべて印字されるプログラムを作成せよ。例えば12を代入すれば1,2,3,4,6が印字され、17を代入すれば1のみが印字されるようにせよ(注意 約数とは、自分自身より小さくて割り切れる正整数のこと。素数の約数は1しか無い。)
誰かお願いします。
自分が分かったのは、printfを使うことぐらいです・・・
課題なのですが分かりません。助けてください。
Re: 課題なのですが分かりません。助けてください。
追記です。すみません。
提出期限が明日なので急いでいます。
自分の勉強不足でギリギリまで粘って調べていたのですが、手も足も出ませんでした。
誰かお願いします。
提出期限が明日なので急いでいます。
自分の勉強不足でギリギリまで粘って調べていたのですが、手も足も出ませんでした。
誰かお願いします。
Re: 課題なのですが分かりません。助けてください。
課題を出されるということはそれなりに学習する時間があったということでしょうか。
明日提出でprintfを使うことしかわからないとなればかなり致命的ですね。
後日必ず勉強をしてください。
問1
明日提出でprintfを使うことしかわからないとなればかなり致命的ですね。
後日必ず勉強をしてください。
問1
Dango San
- Dixq (管理人)
- 管理人
- 記事: 1661
- 登録日時: 13年前
- 住所: 北海道札幌市
- 連絡を取る:
Re: 課題なのですが分かりません。助けてください。
そもそも「正しく印字」の定義がわかりませんが…
(例えば4AB7を4AB7や4ab7と「印字」したらNG?16.5を16.500000と「印字」したらNG?
そもそも「印字」とは?普通に標準出力に出力するだけじゃダメで、I/Oを叩くかなんかでプリンタに出力させないといけない?)
(調べてみたら何も起こらないようですけど…)
N1256 7.19.6.1 The fprintf functionより引用
(例えば4AB7を4AB7や4ab7と「印字」したらNG?16.5を16.500000と「印字」したらNG?
そもそも「印字」とは?普通に標準出力に出力するだけじゃダメで、I/Oを叩くかなんかでプリンタに出力させないといけない?)
printf系の関数でdouble型の値を出力するには%lfではなく%f(または%gなど)を用いるべきであると言われています。
(調べてみたら何も起こらないようですけど…)
N1256 7.19.6.1 The fprintf functionより引用
l (ell)
(中略)
or has no effect on a following a, A, e, E, f, F, g, or G conversion
specifier.
(中略)
f,F A double argument representing a floating-point number is converted to
decimal notation in the style [−]ddd.ddd, where the number of digits after
the decimal-point character is equal to the precision specification.
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
- Dixq (管理人)
- 管理人
- 記事: 1661
- 登録日時: 13年前
- 住所: 北海道札幌市
- 連絡を取る:
Re: 課題なのですが分かりません。助けてください。
問2
似た答えを書いて答えを促そうと思いましたが、すみませんが、もう寝ます。。。
明日が期限で今日質問しているようでは、アドバイスすらできません。
しっかりスケジュールを見積もって行動しましょう。
> 自分の勉強不足でギリギリまで粘って調べていたのですが、手も足も出ませんでした。
自分ができているコードがあればそれを提示してください。
それすらもできないのであれば、問1なんかは基本中の基本ですから、
全く勉強していないということが伺えます。
コンパイルできる環境は家に準備しているのでしょうか?
#include <stdio.h>
int main() {
char* day[]=
{
"日曜",
"月曜",
"火曜",
"水曜",
"木曜",
"金曜",
"土曜",
};
int id;
scanf("%d",&id);
printf("%s",day[id%7]);
}
明日が期限で今日質問しているようでは、アドバイスすらできません。
しっかりスケジュールを見積もって行動しましょう。
> 自分の勉強不足でギリギリまで粘って調べていたのですが、手も足も出ませんでした。
自分ができているコードがあればそれを提示してください。
それすらもできないのであれば、問1なんかは基本中の基本ですから、
全く勉強していないということが伺えます。
コンパイルできる環境は家に準備しているのでしょうか?
Re: 課題なのですが分かりません。助けてください。
問3
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
/* 入力を読み込む */
char *read_input(void) {
size_t buffer_size = 512;
size_t idx = 0;
char *buffer = malloc(buffer_size);
for(;;) {
int input = getchar();
if (input == EOF) break;
buffer[idx++] = input;
if (idx >= buffer_size - 1) {
/* buffer_sizeのオーバーフローチェックをしていないので、良くない */
buffer_size *= 2;
buffer = realloc(buffer, buffer_size);
if (buffer == NULL) {
perror ("realloc");
exit(1);
}
}
}
buffer[idx] = '\0';
return buffer;
}
void syori(const char *data) {
size_t len = strlen(data);
char d[len + 1]; /* C99以降またはGCC拡張の可変長配列 */
char *itr;
strcpy(d, data);
for (itr = d; *itr != '\0'; itr++) {
if (islower(*itr)) {
putchar(toupper(*itr));
} else {
/* 小文字のアルファベットでない場合は未定義なので、とりあえず何もしない */
}
}
}
int main(void) {
char *input_data;
input_data = read_input();
syori(input_data);
free(input_data);
return 0;
}
最後に編集したユーザー みけCAT on 2015年11月30日(月) 23:39 [ 編集 1 回目 ]
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 課題なのですが分かりません。助けてください。
特別授業的な感じで今日出た課題です。
コンパイルってコマンドプロンプトでやるやつですよね?
一応ノートPCはあります。
明日の授業で講師の方に質問して勉強します!
コンパイルってコマンドプロンプトでやるやつですよね?
一応ノートPCはあります。
明日の授業で講師の方に質問して勉強します!
Re: 課題なのですが分かりません。助けてください。
問4
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <limits.h>
unsigned long long read_ll(void) {
volatile unsigned long long d = 0;
for(;;) {
int input = getchar();
if (input == EOF) {
if (d > 0) return d; else exit(0);
}
if (!isdigit(input)) break;
if (d > ULLONG_MAX / 10 || d * 10 > ULLONG_MAX - (input - '0')) {
fputs("sorry, input is too big!\n", stderr);
exit(1);
}
d = d * 10 + (input - '0');
}
return d;
}
void print_ll(unsigned long long n) {
if (n > 0) {
print_ll(n / 10);
putchar((int)(n % 10 + '0'));
}
}
void yakusuu_wo_sagasu(unsigned long long n, unsigned long long start) {
unsigned long long i;
for (i = start; i <= ULLONG_MAX / i && i * i <= n; i++) {
if (n % i == 0) {
putchar(',');
print_ll(i);
if (n / i != i) {
yakusuu_wo_sagasu(n, i + 1);
putchar(',');
print_ll(n / i);
}
break;
}
}
}
int main(void) {
unsigned long long nyuuryoku;
for(;;) {
nyuuryoku = read_ll();
if(nyuuryoku == 0) continue;
else if (nyuuryoku == 1) {
puts(""); /* 1より小さい正整数は無い */
} else {
fputs("1", stdout);
yakusuu_wo_sagasu(nyuuryoku, 2);
putchar('\n');
}
}
return 0;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 課題なのですが分かりません。助けてください。
問1は代入と書いてあるので、初期化だと不正解になったりしないのかな。
配列dに関する文言を見るに、出題者が区別できていないような気はするけれど。
配列dに関する文言を見るに、出題者が区別できていないような気はするけれど。