ページ 11

c言語プログラムを作成でわかりません

Posted: 2017年6月13日(火) 14:48
by masa4869
2重ループを利用して、以下のようなプログラムを作成を教えてください
A
AB
ABC



ABCDEFG...YZ

Re: c言語プログラムを作成でわかりません

Posted: 2017年6月13日(火) 15:47
by purin52002
こんにちは

AからZまで順番に表示する文字を増やしていくというプログラムでよろしいでしょうか?^^;

masaさんがなんの言語を使うかわからないのでアルゴリズムについてお話します。(タイトルに思いっきり書いてましたね^^;申し訳ないorz)
おそらくですが、外側のループで何文字表示するかを計算し、内側のループで実際に文字を表示するものだと思います。(思いました。違ったら言ってください^^;)

コード:

for i = 0 to 25
    for j = 0 to i + 1
        print 'A' + j
    print \n
のような感じでかけないかな、と思います。
print 'A' + j と言うのはAのアスキーコードにjを足した文字を表示する という意味です。
アスキーコードは連続しているので、例えば ’A'+1 は B になるはずです。(詳しくはググってください^p^)
オフトピック
  • 質問内容を明確にする
  • 使用言語も書く
  • 自分でかけるとこまで書いたコードも載せる
以上のようなことをしてもらえると答える側があまり頭を使わずに済むので楽です^p^

Re: c言語プログラムを作成でわかりません

Posted: 2017年6月13日(火) 20:35
by Math
>c言語プログラムを作成でわかりません
とあるから普通には

コード:

#include <stdio.h>

void main(void)
{
	int i, j;

	for (i = 65; i <= (65 + 25); i++) {
		for (j = 65; j <= i; j++){
			printf("%c", j);
		}
		printf("\n");
	}
}

コード:

1>------ すべてのリビルド開始: プロジェクト:ConsoleApplication10, 構成: Debug Win32 ------
1>c1.c
1>ConsoleApplication10.vcxproj -> D:\z17\c\ConsoleApplication10\Debug\ConsoleApplication10.exe
1>ConsoleApplication10.vcxproj -> D:\z17\c\ConsoleApplication10\Debug\ConsoleApplication10.pdb (Partial PDB)
========== すべてリビルド: 1 正常終了、0 失敗、0 スキップ ==========

コード:

A
AB
ABC
ABCD
ABCDE
ABCDEF
ABCDEFG
ABCDEFGH
ABCDEFGHI
ABCDEFGHIJ
ABCDEFGHIJK
ABCDEFGHIJKL
ABCDEFGHIJKLM
ABCDEFGHIJKLMN
ABCDEFGHIJKLMNO
ABCDEFGHIJKLMNOP
ABCDEFGHIJKLMNOPQ
ABCDEFGHIJKLMNOPQR
ABCDEFGHIJKLMNOPQRS
ABCDEFGHIJKLMNOPQRST
ABCDEFGHIJKLMNOPQRSTU
ABCDEFGHIJKLMNOPQRSTUV
ABCDEFGHIJKLMNOPQRSTUVW
ABCDEFGHIJKLMNOPQRSTUVWX
ABCDEFGHIJKLMNOPQRSTUVWXY
ABCDEFGHIJKLMNOPQRSTUVWXYZ
続行するには何かキーを押してください . . .
これでいいと思いますね。(^^;

(Windows10、VS2017 Community 使用)
[/size]

Re: c言語プログラムを作成でわかりません

Posted: 2017年6月14日(水) 00:54
by box

コード:

#if 0
65とか25とかマジックナンバーを書いていたり、mainの型がvoidだったりするのが
イヤなので、自分ならこう書く。絶対にこうじゃなきゃいけないことはないのは承知。
#endif

#include <stdio.h>

#define ALPHABETS (26)

int main(void)
{
    int i, j;

    for (i = 'A'; i < 'A' + ALPHABETS; i++) {
        for (j = 'A'; j <= i; j++) {
            putchar(j);
        }
        putchar('\n');
    }
    return 0;
}

Re: c言語プログラムを作成でわかりません

Posted: 2017年6月14日(水) 01:40
by みけCAT
オフトピック
課題の丸投げは禁止(これが課題かはわかりません)なのですが、みんなコードを投稿する流れのようなので…
ASCIIなど、アルファベットの文字コードが連続している環境用

コード:

#include <stdio.h>

int main(void) {
	int i, j;
	for (i = 'A'; i <= 'Z'; i++) {
		for (j = 'A'; j <= i; j++) {
			putchar(j);
		}
		putchar('\n');
	}
	return 0;
}
アルファベットの文字コードが連続していなくても大丈夫なバージョン

コード:

#include <stdio.h>

int main(void) {
	const char* alphabets = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	int i, j;
	for (i = 0; alphabets[i] != '\0'; i++) {
		for (j = 0; j <= i; j++) {
			putchar(alphabets[j]);
		}
		putchar('\n');
	}
	return 0;
}

Re: c言語プログラムを作成でわかりません

Posted: 2017年6月14日(水) 05:04
by かずま

コード:

#include <stdio.h>
 
int main(void) {
	for (int i = 0; i < 26; printf("%.*s\n", ++i, "ABCDEFGHIJKLMNOPQRSTUVWXYZ")) ;
    return 0;
}
これは、二重ループを使っていないので、解答ではありません。

二重ループを使った変態バージョン

コード:

#include <stdio.h>
 
int main(void) {
	for (int i = 0; ++i <= 26; puts(""))
		for (int j = 0; j < i; putchar("ABCDEFGHIJKLMNOPQRSTUVWXYZ"[j++])) ;
	return 0;
}
文字コードが ASCII なら、'A'=0x41、'Z'=0x5a ですが、
EBCDIC なら、'A'=0xc1、'I'=0xc9、'J'=0xd1、'R'=0xd9、'S'=0xe2、'Z'=0xe9 です。

Re: c言語プログラムを作成でわかりません

Posted: 2017年6月14日(水) 10:18
by Math
[訂正版]

コード:

#include <stdio.h>

int main(void)
{
	int i, j;

	for (i = 65; i <= (65 + 25); i++) {
		for (j = 65; j <= i; j++){
			printf("%c", j);
		}
		printf("\n");
	}
	return 0;
}

コード:

1>------ すべてのリビルド開始: プロジェクト:ConsoleApplication10, 構成: Debug Win32 ------
1>c1.c
1>ConsoleApplication10.vcxproj -> D:\z17\c\ConsoleApplication10\Debug\ConsoleApplication10.exe
1>ConsoleApplication10.vcxproj -> D:\z17\c\ConsoleApplication10\Debug\ConsoleApplication10.pdb (Partial PDB)
========== すべてリビルド: 1 正常終了、0 失敗、0 スキップ ==========

コード:

A
AB
ABC
ABCD
ABCDE
ABCDEF
ABCDEFG
ABCDEFGH
ABCDEFGHI
ABCDEFGHIJ
ABCDEFGHIJK
ABCDEFGHIJKL
ABCDEFGHIJKLM
ABCDEFGHIJKLMN
ABCDEFGHIJKLMNO
ABCDEFGHIJKLMNOP
ABCDEFGHIJKLMNOPQ
ABCDEFGHIJKLMNOPQR
ABCDEFGHIJKLMNOPQRS
ABCDEFGHIJKLMNOPQRST
ABCDEFGHIJKLMNOPQRSTU
ABCDEFGHIJKLMNOPQRSTUV
ABCDEFGHIJKLMNOPQRSTUVW
ABCDEFGHIJKLMNOPQRSTUVWX
ABCDEFGHIJKLMNOPQRSTUVWXY
ABCDEFGHIJKLMNOPQRSTUVWXYZ
続行するには何かキーを押してください . . .
いま読んでいるC言語の本はかなり詳しく解説してあり私のようなC初心者にはよくわかって最適です。
そこに”void main(void) は間違いとあり警告をだすものも多くなった”とあるがVS2017は警告はでないみたいですね。
記憶では勝手に int main(void) を生成するので ”return 0;”が出来ます。
main printf malloc などはCのキーワード(予約語)でないので(ライブラリー関数なので)
処理系依存になります。
ANSI Cの規格にはRationale(理論的根拠)という文書があり
Keep the spirit of C

Keep the language small and simple とあります。

その代わりプログラマーは全知全能であるという理念で安全性はほぼ無視されています。もともと”自分たちで使うためだけに”作られた言語だからだそうです。
[/size]

Re: c言語プログラムを作成でわかりません

Posted: 2017年6月18日(日) 02:10
by かずま
二重ループどころか、ループが一つもない、超変態プログラムです。

コード:

char s[27],i;
f(char*p){if(*p)s[i++]=*p,puts(s),f(p+1);}
main(){f("ABCDEFGHIJKLMNOPQRSTUVWXYZ");}

Re: c言語プログラムを作成でわかりません

Posted: 2017年6月20日(火) 05:22
by 白い変人
かずま さんが書きました:二重ループどころか、ループが一つもない、超変態プログラムです。

コード:

char s[27],i;
f(char*p){if(*p)s[i++]=*p,puts(s),f(p+1);}
main(){f("ABCDEFGHIJKLMNOPQRSTUVWXYZ");}
質問者ではありませんが、プロコンのCODE GOLFはそうやって攻めるのですね。
私は敬遠していた事もあり、CODE GOLFのノウハウはあまり無いのですが、感服しました。