課題なのですが分かりません。助けてください。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
sirena

課題なのですが分かりません。助けてください。

#1

投稿記事 by sirena » 8年前

高校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を使うことぐらいです・・・

sirena

Re: 課題なのですが分かりません。助けてください。

#2

投稿記事 by sirena » 8年前

追記です。すみません。
提出期限が明日なので急いでいます。
自分の勉強不足でギリギリまで粘って調べていたのですが、手も足も出ませんでした。

誰かお願いします。

だんごさん
記事: 273
登録日時: 12年前

Re: 課題なのですが分かりません。助けてください。

#3

投稿記事 by だんごさん » 8年前

課題を出されるということはそれなりに学習する時間があったということでしょうか。
明日提出でprintfを使うことしかわからないとなればかなり致命的ですね。

後日必ず勉強をしてください。
問1

コード:

#include <stdio.h>

int main( void ){
	int a = 'F';
	int b = 0x4ab7;
	double c = 16.5;
	char d[] = "SWAT";
	printf("%c,%x,%lf,%s",a,b,c,d);
	return 0;
}
非表示エリア
この非表示エリアを表示するには、登録し、ログインする必要があります。
 Dango San

アバター
Dixq (管理人)
管理人
記事: 1661
登録日時: 13年前
住所: 北海道札幌市
連絡を取る:

Re: 課題なのですが分かりません。助けてください。

#4

投稿記事 by Dixq (管理人) » 8年前

非表示エリア
この非表示エリアを表示するには、登録し、ログインする必要があります。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 課題なのですが分かりません。助けてください。

#5

投稿記事 by みけCAT » 8年前

そもそも「正しく印字」の定義がわかりませんが…
(例えば4AB7を4AB7や4ab7と「印字」したらNG?16.5を16.500000と「印字」したらNG?
そもそも「印字」とは?普通に標準出力に出力するだけじゃダメで、I/Oを叩くかなんかでプリンタに出力させないといけない?)
だんごさん さんが書きました:問1

コード:

#include <stdio.h>

int main( void ){
	int a = 'F';
	int b = 0x4ab7;
	double c = 16.5;
	char d[] = "SWAT";
	printf("%c,%x,%lf,%s",a,b,c,d);
	return 0;
}
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: 課題なのですが分かりません。助けてください。

#6

投稿記事 by Dixq (管理人) » 8年前

問2

コード:

#include <stdio.h>

int main() {
	char* day[]=
	{
		"日曜",
		"月曜",
		"火曜",
		"水曜",
		"木曜",
		"金曜",
		"土曜",
	};
	int id;
	scanf("%d",&id);
	printf("%s",day[id%7]);
}
似た答えを書いて答えを促そうと思いましたが、すみませんが、もう寝ます。。。
明日が期限で今日質問しているようでは、アドバイスすらできません。
しっかりスケジュールを見積もって行動しましょう。

> 自分の勉強不足でギリギリまで粘って調べていたのですが、手も足も出ませんでした。

自分ができているコードがあればそれを提示してください。
それすらもできないのであれば、問1なんかは基本中の基本ですから、
全く勉強していないということが伺えます。
コンパイルできる環境は家に準備しているのでしょうか?

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 課題なのですが分かりません。助けてください。

#7

投稿記事 by みけCAT » 8年前

問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で殴ればいい!(死亡フラグ)

sirena
記事: 1
登録日時: 8年前

Re: 課題なのですが分かりません。助けてください。

#8

投稿記事 by sirena » 8年前

特別授業的な感じで今日出た課題です。
コンパイルってコマンドプロンプトでやるやつですよね?
一応ノートPCはあります。

明日の授業で講師の方に質問して勉強します!

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 課題なのですが分かりません。助けてください。

#9

投稿記事 by みけCAT » 8年前

問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で殴ればいい!(死亡フラグ)

だんごさん
記事: 273
登録日時: 12年前

Re: 課題なのですが分かりません。助けてください。

#10

投稿記事 by だんごさん » 8年前

みけCAT さんが書きました:
だんごさん さんが書きました:問1

コード:

#include <stdio.h>

int main( void ){
	int a = 'F';
	int b = 0x4ab7;
	double c = 16.5;
	char d[] = "SWAT";
	printf("%c,%x,%lf,%s",a,b,c,d);
	return 0;
}
printf系の関数でdouble型の値を出力するには%lfではなく%f(または%gなど)を用いるべきであると言われています。
(調べてみたら何も起こらないようですけど…)
すみません、そこまで深く考えてませんでした…
 Dango San

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: 課題なのですが分かりません。助けてください。

#11

投稿記事 by ISLe » 8年前

問1は代入と書いてあるので、初期化だと不正解になったりしないのかな。
配列dに関する文言を見るに、出題者が区別できていないような気はするけれど。

閉鎖

“C言語何でも質問掲示板” へ戻る