質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

4回答

986閲覧

「2 3 1」を表示するプログラム

sigure666

総合スコア14

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2020/08/30 11:24

「2 3 1」を出力するプログラムなのですが、定数、カンマ、セミコロンの使用が禁止されているため、さっぱりわからないです。
考え方だけでも良いので教えてください。

c

1 2#include<stdio.h> 3void rotate( int *x, int *y, int *z){ 4int a; 5 6x ; 7; 8; 9= a ; 10 11} 12int main(void){ 13int a=1,b=2,c=3; rotate(&a,&b,&c); printf( "%d %d %d\n" , a,b,c ); return 0; 14} 15

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mjk

2020/08/30 11:30

何かの問題でしたらその問題の全文かリンクを貼ってください。 記載されている情報以外の条件などが他にもまだありませか?
sigure666

2020/08/30 11:41

すみません。 リンクは無いですし、掲載している情報で全てです。 中央の4行部分を改変してプログラムを作るみたいなのですが、さっぱりなんです…
mjk

2020/08/30 11:42

回答でどうでしょうか?実行すると2 3 1と出力されるはずです。
SHOMI

2020/08/30 11:50

>中央の4行部分を改変してプログラムを作るみたいなのですが 質問にそのようなことが一切書かれていませんが… もとの出題文を手を加えずに書いてください。
sigure666

2020/08/30 13:37

>>SHOMIさん 勘違いしてしまい申し訳ないです。私は問題文に手を加えてはおりません。記述が質問文に書いてあることしか書いておらず、私の予想で補助部分として書かせて頂いただけです。
guest

回答4

0

定数、カンマ、セミコロンの使用が禁止されているため

  • 定数を使わない…sizeof(char)が1というように、常に同じ値を返す式を使って必要な値を作る
  • カンマを使わない…1引数の関数だけ呼び出す
  • セミコロンを使わない…if(some_func()){}の形で逃げる
#include <stdio.h> int main(void){ // 「2」の出力 if(putchar(sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char) + sizeof(char))){} }

(あまりに長くなったので、2文字目以降の出力は省略します)

投稿2020/08/30 11:49

maisumakun

総合スコア145899

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mjk

2020/08/30 11:59

ある意味凄いですね。 全体で「定数、カンマ、セミコロンの使用が禁止」なら真っ先に無理って思いました。
maisumakun

2020/08/30 12:05

ちなみに、C99以降では、mainのreturnは省略しても動作する(return 0;と書いたものとみなされる)とのことですので、そのセミコロンも使わずに文法的にクリアできます。
amiya

2020/08/30 12:20

ひたすら足すのではなくて、シフト演算とか混ぜたら、もう少し小さくなりそうw putchar( (sizeof(char) + sizeof(char) + sizeof(char)) << (sizeof(char) << sizeof(char) << sizeof(char)) + sizeof(char) + sizeof(char) ) たぶんこれで、'2'になるかな?
sigure666

2020/08/30 12:34

全体で定数、カンマ、セミコロンが禁止されていてもこんな表現方法があるんですね… 大変参考になりました。しっかりと勉強したいと思います。
kazuma-s

2020/08/30 15:01

int main(void) { if (puts("2 3 1")) { } } で十分でしょう。 文字列リテラル "2 3 1" は定数ではありません。 int a['2']; と書けても、int a[*"2 3 1"]; とは書けません。 case '2': と書けても、case *"2 3 1": とは書けません。
guest

0

ベストアンサー

こういうことでしょうか?
穴埋め問題などでしたら条件満たしてるはずです。

(※C言語のポインタのことはよく分かりませんが)

参考:関数とポインタ

C

1#include <stdio.h> 2void rotate(int *x, int *y, int *z) { 3 int a; 4 5 a = *x; 6 *x = *y; 7 *y = *z; 8 *z = a; 9 10} 11int main(void) { 12 int a = 1, b = 2, c = 3; 13 rotate(&a, &b, &c); 14 printf("%d %d %d\n", a, b, c); 15 getchar(); 16 return 0; 17}

投稿2020/08/30 11:41

mjk

総合スコア303

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sigure666

2020/08/30 11:48

確かに此方のプログラムですと「2 3 1」と表示されますね。 大変助かりました。ありがとうございます! 参考リンクも掲載して下さりとても有難いです。 しっかりと勉強させていただきます!
guest

0

穴埋めですか?

C

1#include<stdio.h> 2void rotate( int *x, int *y, int *z){ 3int a; 4 5a = *x ; 6++*x; 7++*y; 8*z = a ; 9 10} 11int main(void){ 12int a=1,b=2,c=3; rotate(&a,&b,&c); printf( "%d %d %d\n" , a,b,c ); return 0; 13}

追加したのは

text

1a = * 2++*x 3++*y 4*z

ですから、定数、カンマ、セミコロンは使用していません。

投稿2020/08/30 16:45

kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

定数、カンマ、セミコロンの使用が禁止

何の為の縛りなのか謎ですが、C言語の文法上それは無理かと……。

投稿2020/08/30 11:29

amiya

総合スコア1218

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sigure666

2020/08/30 11:43

無理なんですね… 中央の4行部分 x; ; ; =a; 改変する問題みたいなのですがさっぱりなんです…
amiya

2020/08/30 11:44

その段階で既にセミコロン(;)使っちゃってますが。
mjk

2020/08/30 11:46

恐らく「これ以上」使わないでという制限では無いでしょうか?
amiya

2020/08/30 11:46

ああ、全体で使うなという意味ではないのですね。 (しかしなんでこんな意味不明な縛り方する必要があるんだろう…;をきちんと書けるようになることの方がよほど大事なような^^;)
mjk

2020/08/30 11:48

エスパーすると何かの問題集とか教科書の穴埋め問題的なことでは無いかと。
maisumakun

2020/08/30 11:50

> 全体で使うなという意味 で書いてしまいました。
sigure666

2020/08/30 12:38

>>amiyaさん、maisumakunさん 稚拙な文章でわかりづらく申し訳なかったです。 お二人の助言、大変参考になりました。 しっかりと勉強しようと思います。 今回はありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問