■probex4-1.(難易度:★★)
以下のプログラムを実行すると結果は実行結果1のようになる。
probex4-1:main.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include <stdio.h> void main(){ // サイズSIZEの配列を用意する。 int nums[] = { 1,2,3,4,5 }; int *p = NULL; int i; p = nums; // pにnumsのアドレスを入力 for( i = 0 ; i < 5; i++){ printf("%d ",*p); p++; // p2のアドレスをインクリメント } printf("¥n"); } |
実行結果1
1 2 3 4 5
このプログラムの一部を改造し、実行結果2のようになるようにプログラムを変えなさい。ただし、変えてよい部分は、ポインタ変数pへの操作の部分のみとする。
実行結果2
5 4 3 2 1
■ probex4-2.(難易度:★★★)
実行結果の例を参考にして、長さ5の整数型の配列変数aに、すべての成分に0から100の乱数の値を代入して表示し、以下の条件を満たす数値を表示するプログラムを作りなさい。
(1) 5つの整数の値は、グローバル変数ではない配列変数に入れること
(2) の配列への値の表示、値の二倍は、それぞれ専用の関数を用いること。
(3) の引数として、整数型ポインタをを用いること。
実行結果の例
発生した乱数:1 5 2 8 9
二倍した値:2 10 4 16 18
■ probex4-3(難易度:★)
以下のプログラムは、ポインタ変数arrayに動的に配列を確保し、処理を行うプログラムである。コメントで示された部分①と②を、適切な処理に変えて、プログラムを完成させなさい。probex4-3:main.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <stdio.h> #include <malloc.h> void main(){ // 数値配列代入用のポインタ変数 int *array = NULL; int i; // ①長さ10の配列の生成(mallocを使用) for(i = 0; i < 10; i++){ array[i] = i; // 値の代入 } // 値の表示 for(i = 0; i < 10; i++){ printf("%d ",array[i]); // 値の代入 } printf("¥n"); // ②生成したメモリの開放(free()を使用) } |
期待される実行結果
0 1 2 3 4 5 6 7 8 9
■ probex4-4(難易度:★)
以下のプログラムを実行するとprobex4-4:main.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #include <stdio.h> #include <malloc.h> void main(){ // 数値配列代入用のポインタ変数 double *a = NULL; int i; // メモリの生成 a = (double*)malloc(sizeof(double)*3); for(i = 0; i < 3; i++){ a[i] = 0.1 * i; } // 結果の表示 for(i = 0; i < 3; i++){ printf("%f ",a[i]); } printf("¥n"); // メモリの開放 free(a); } |
次のような実行結果になる。
実行結果
0.000000 0.100000 0.200000
期待される実行結果
0.000000 0.100000 0.200000 0.300003 0.400000 0.500000
■ probex5-1(難易度:★)
キーボードから2つの字列を入力し、その2つを結合した文字列を表示するプログラムを作成しなさい。ただし、最終的に出力する文字列は、strcpy()および、strcat()関数を用いて、2つの文字列を1つに統合したものにすること。
期待される実行結果
文字列1:ABC ← キーボードから入力
文字列2:DEF ← キーボードから入力
結合した結果:
ABCDEF
■ probex5-2(難易度:★★★)
probex5-1と同じ結果を得られるプログラムを、strcpy()やstrcat関数といった、文字列操作関数を用いずに作りなさい。
■ probex5-3(難易度:★)
キーボードから文字列を入力し、その文字列の長さを表示するプログラムを作りなさい。この時、strlen()関数を用いること。
期待される実行結果
文字列を入力:ABCDEF ←キーボードから入力
文字列の長さ:6文字
■ probex5-4(難易度:★★)
probex5-3と同じ結果を得られるプログラムを、strlen関数を用いないで作りなさい。
■ probex5-5.(難易度:★)
キーボードから2つの字列を入力し、2つが同じものならば、「同じものです」と表示し、違うのならば、「違うものです」と表示するプログラムを作りなさい。ただし、文字列の比較にはstrcmp()関数を用いること。
期待される実行結果①(二つの文字列が同じ場合)
文字列1:ABC ← キーボードから入力
文字列2:ABC ← キーボードから入力
同じものです
期待される実行結果②(二つの文字列が異なる場合)
文字列1:ABC ← キーボードから入力
文字列2:DEF ← キーボードから入力
異なるものです
■ probex5-6.(難易度:★★)
probex5-5.と同じ結果が得られるものを、strcmp()関数を用いずに作りなさい。
■ probex5-7.(難易度:★)
以下のプログラムは、文字列として定義されている「100」を、整数の値に変換して出力するプログラムである。/** **/でコメントされている部分に、不完全な部分を実装し、プログラムを完成させなさい。期待される実行結果
1 2 3 4 5 6 7 8 9 10 11 | #include <stdio.h> #include <string.h> void main(){ char[] numString = "100"; // 数値の文字列 int num; // numStringの数値を入れる変数 /** numStringを整数値に変換し、numに代入 **/ printf("%d\n",num); } |
期待される実行結果
100
■ probex5-8.(難易度:★★)
キーボードから3つの文字列を入力させ、そのうち最も長い文字列を表示するプログラムを作りなさい。ただし、同じ長さの文字列が複数ある場合は、すべて表示すること。
期待される実行結果の例①(最長のものが1つしかない場合)
文字列1:lemon ← キーボードから入力
文字列2:apple ← キーボードから入力
文字列3:pineapple ← キーボードから入力
もっとも長い文字列:
pineapple
期待される実行結果の例②(最長のものが複数の場合)
文字列1:yellow ← キーボードから入力
文字列2:green ← キーボードから入力
文字列3:orange ← キーボードから入力
もっとも長い文字列:
yellow
orange
■ probex5-9.(難易度:★★)
以下の条件と、実行結果の例をもとにして、キーボードから入力した文字列を反転させるプログラムを作りなさい。
(1) 文字列の長さの最大値は16文字。
(2) キーボードから入力された文字列を、その長さ+1の配列変数をmalloc()で生成させて代入する。
(3) (2)で生成させた配列に、入力させた文字列を反転させたデータを入れる。
(4) 結果を出力する。
(5) 生成したメモリを、free()で開放する。
期待される実行結果の例
文字列を入力(最大16文字):ABCDE ← キーボードから入力
EDCBA