見出し画像

C言語で Java Silver レベルの問題を作ってみる No.17

 プログラミング言語って、しばらく触れてないと細かな部分を忘れてしまいますよね。また、複数のプログラミング言語を習得している人は、頭がこんがりますね。

 そんな方におススメしたいのが、資格試験の問題を1日5問程度解いていく方法です。毎日のスキマ時間を活用して短時間で知識レベルを維持することが出来ますよ。Javaならば、Silverの問題集が最適です。
 Silverを既に取得している人も、これから取得を目指している人もぜひ試してみてください。

 さて、この記事では、タイトルの通り、C言語をテーマにしています。
問題を毎日5問投稿していきますので、C言語を習得中の方、C言語の知識を維持されたい方は、ぜひご活用ください。


■ ポインタ

□ 1. 次のプログラムをコンパイルし、実行したときの結果として、正しいものを選びなさい。(1つ選択)

#include <stdio.h>

int main(void) {
    char str1[20] = "hello";
    char *str2;

    str2 = "example";

    str1[0] = 'H';

    printf("%s\n", str1);
    printf("%s\n", str2);

    return 0;
}

A.    Hello
       example   と出力される
B. hello
       example   と出力される
C. コンパイルエラーが発生
D. 実行時にエラーが発生


■ 標準ライブラリ関数(文字列操作)

□ 2. 次のプログラムをコンパイルし、実行したときの出力結果として、正しいものを選びなさい。(1つ選択)

#include <stdio.h>
#include <string.h>

int main(void) {
    char str[100] = "hello";

    printf("%d\n",(int)strlen(str));

    return 0;
}

A. 5
B. 6
C. 100
D.   0


□ 3. 次のプログラムの空欄に入るコードとして、正しいものを選びなさい。(2つ選択)

#include <stdio.h>
#include <string.h>

int main(void) {
    char str1[20] = "program";
    char str2[20];

    strcpy(__空欄___); 

    printf("str2は\"%s\"です。\n", str2);
    
    return 0;
}
[実行結果]
str2は"program"です。

A. str1,str2
B. str2,str1
C. str2,"program"
D. "program,str2


□ 4. 次の文字列の標準ライブラリ関数に関する説明として、正しいものを選びなさい。(1つ選択)

A.  strcat() 関数は文字列を比較するために使われる
B.  strlen() 関数は文字列の長さを計算し、NUL文字を含む
C.  strcpy() 関数は文字列をコピーする際、バッファサイズが考慮される
D.  strcmp() 関数は二つの文字列を比較し、同じ場合は0を返す


□ 5. 次のプログラムをコンパイルし、実行したときの出力結果として、正しいものを選びなさい。(1つ選択)

#include <stdio.h>
#include <string.h>

int main(void) {
    char str1[30];
    char str2[30];

    strcpy(str1, "Hello");
    strcpy(str2, "World");

    strcat(str1, str2); 

    printf("str1は\"%s\"です。\n", str1);

    return 0;
}

A.     str1は"Hello"です。
B.  str1は"WorldHello"です。
C.  str1は"Hello"です。
D. str1は"HelloWorld"です。



解答

1.A

str1は"hello"で初期化されています。次に、str1[0]が'H'に変更され、str1は"Hello"になります。
str2は"example"というリテラルを指しています。
printfでstr1とstr2を出力すると、str1が"Hello"、str2が"example"として表示されます。
したがって、正しい選択肢は A. Hello / example です。

2.A

strlen() 関数は文字列の長さを返します。"hello" の長さは 5 で、NUL文字は含まれません。strlen()関数は、文字列の長さをsize_t型(符号なし整数型)で返すためint型にキャストして表示しています。

3.B C

 strcpy関数を使用して、str1の内容をstr2にコピーすることが目的です。 strcpy関数の形式はstrcpy(コピー先, コピー元)です。ここで、コピー先の配列(str2)、コピー元の文字列(str1)を指定します。

A. str1,str2: 誤り。引数の順序が逆です。
B. str2,str1: 正しい。str2がコピー先、str1がコピー元です。
C. str2,"program": 正しい。"program"は文字列リテラルであり、コピー元として指定できます。
D. "program",str2: 誤り。コピー先とコピー元が逆です。

4.D

A. 誤り。strcat()関数は文字列を結合するために使用されます。
B. 誤り。strlen()関数は文字列の長さを計算しますが、NUL文字(\0)はカウントされません。
C. 誤り。strcpy()関数はバッファサイズを考慮せずに文字列をコピーするため、バッファオーバーフローの原因となることがあります。
D. 正しい。strcmp()関数は二つの文字列を比較し、同じ場合は0を返します。

5.D

strcat() 関数は、str1 の末尾に str2 を追加します。初期状態の str1 が "Hello" で、str2 が "World" なので、連結後の str1 は "HelloWorld" になります。



本日の学習内容

お疲れ様でした。
継続は力なりです。
明日も頑張りましょう!

この記事が気に入ったらサポートをしてみませんか?