問題① 次のプログラムを、できるだけ短く書き直してください。
#include <stdio.h>
int main(void)
{
int num1 = 10;
int num2 = 20;
int num3 = 30;
("%d %d %d\n", num1, num2, num3);
printf
= num3;
num1 = num3;
num2
("%d %d %d\n", num1, num2, num3);
printf}
たとえば次のような感じになります。
#include <stdio.h>
int main(void)
{
int num1 = 10, num2 = 20, num3 = 30;
("%d %d %d\n", num1, num2, num3);
printf
= num2 = num3;
num1
("%d %d %d\n", num1, num2, num3);
printf}
実行結果:
10 20 30
30 30 30
同じ型の変数はまとめて宣言できますし、同時にそれぞれに初期値を与えることも可能です。また、同じ値を複数の変数に代入する際には、=演算子を繰り返し使用できます。
問題② 次のプログラムを、条件演算子を使って書き直してください。
#include <stdio.h>
int main(void)
{
int num = 90;
if (num < 100) {
("Less than 100.\n");
printf}
else {
("Over 100.\n");
printf}
}
条件演算子(?:) を使えば、printf関数の実引数のところで、直接条件分岐できます。
#include <stdio.h>
int main(void)
{
int num = 90;
("%s 100\n", (num < 100) ? ("Less than") : ("Over"));
printf}
実行結果:
Less than 100
問題③ 10文字の文字列 “abcdefghij” があります。先頭と末尾の両方から 1文字ずつを取り出して出力するプログラムを、カンマ演算子を使って書いてください。
#include <stdio.h>
int main(void)
{
char str[] = "abcdefghij";
// 先頭と末尾の両方から 1文字ずつ出力する
for (int i = 0, j = sizeof(str) - 2; j >= 0; ++i, --j) {
("%c %c\n", str[i], str[j]);
printf}
}
実行結果:
a j
b i
c h
d g
e f
f e
g d
h c
i b
j a
末尾の添字が分かりづらいですが、sizeof(str) - 2
で求めています。10文字だと分かっているので、そういう記号定数を作ってもいいですが、どちらかというと、コンパイラに文字数を数えさせる(=配列の要素数を決定させる)方が柔軟で安全です。
この場合、全体の大きさを sizeof(str)
で求められますが、これには末尾の '\0'
の分まで含まれています。また、添字は 0 から始まるので、sizeof
で取得できる値では 1 大きいことになります。
末尾の '\0'
と、0 開始というルールから、末尾の添字は
sizeof(str) - 2
となる訳です。
()
の前後の空白の空け方)(
の直後、)
の直前に空白を入れない)return 0;
を削除(C言語編全体でのコードの統一)≪さらに古い更新履歴を展開する≫
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |