一週間で身につくC言語の基本

おさえておきたいプログラミングの基本

【応用問題2】 C言語の応用プログラミング、ポインタと配列・文字列


問題4:ポインタとアドレス

この問題を解くためには…

応用編第2日目参照

応用編第3日目参照

probex4-1.(難易度:★★)

以下のプログラムを実行すると結果は実行結果1のようになる。

probex4-1:main.c
#include <stdio.h>

int main(int argc, char** argv){
    //  サイズ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");
    return 0;
}
実行結果1
1 2 3 4 5

このプログラムの一部を改造し、次の実行結果2のようになるようにプログラムを変えなさい。ただし、変えてよい部分は、ポインタ変数pへの操作の部分のみとする。

実行結果2
5 4 3 2 1

probex4-2.(難易度:★★★)

実行結果の例を参考にして、長さ5の整数型の配列変数aに、すべての成分に0から100の乱数の値を代入して表示し、以下の条件を満たす数値を表示するプログラムを作りなさい。

  • 5つの整数の値は、main巻数の中でローカルな配列変数に代入すること。
  • 配列の値の表示・値を2倍する処理にはそれぞれ専用の関数を用意すること。
  • 前述の関数の引数は、すべて整数型のポインタを用いる事。
実行結果の例
発生した乱数:1 5 2 8 9 2倍した値:2 10 4 16 18

probex4-3(難易度:★)

以下のプログラムは、ポインタ変数arrayに動的に配列を確保し、処理を行うプログラムである。コメントで示された部分①と②を、適切な処理に変えて、プログラムを完成させなさい。

probex4-3:main.c
#include <stdio.h>
#include <malloc.h>
                    
int main(int argc, char** argv){
    //	数値配列代入用のポインタ変数
    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
#include <stdio.h>
#include <malloc.h>
                    
int main(int argc, char** argv){
    //	数値配列代入用のポインタ変数
    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);
    return 0;
}

次のような実行結果になる。

実行結果
0.000000 0.100000 0.200000

このプログラムを、以下のような実行結果になるように変更しなさい。

期待される実行結果
0.000000 0.100000 0.200000 0.300003 0.400000 0.500000

問題5:文字列とポインタ

応用編第4日目参照

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(2つの文字列が同じ場合)
文字列1:ABC ← キーボードから入力 文字列2:ABC ← キーボードから入力 同じものです
期待される実行結果2(2つの文字列が異なる場合)
文字列1:ABC ← キーボードから入力 文字列2:DEF ← キーボードから入力 異なるものです

probex5-6.(難易度:★★)

probex5-5.と同じ結果が得られるものを、strcmp()関数を用いずに作りなさい。


probex5-7.(難易度:★)

以下のプログラムは、文字列として定義されている「100」を、整数の値に変換して出力するプログラムである。/** **/でコメントされている部分に、不完全な部分を実装し、プログラムを完成させなさい。

期待される実行結果
#include <stdio.h>
#include <string.h>

int main(int argc,char** argv){
    char[] numString = "100";	//	数値の文字列
    int num;	//	numStringの数値を入れる変数
    /**
        numStringを整数値に変換し、numに代入
    **/
    printf("%d\n",num);
    return 0;
}
期待される実行結果
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

一週間で学べるコースの一覧
Udemy
...
2024/10/01

Udemyでも学びましょう!

一週間でわかるC言語・C++言語がオンライン講座になりました!動画音声によってさらにわかりやすくなりました!! 1講座で2つの言語を学ぶことができる上に、練習問題の回答もダウンロードできます。

Read →
Impress一週間シリーズ
1週間でC言語の基礎が学べる本
2024/10/01

書籍化された一週間シリーズ

本講座が「1週間でC言語の基礎が学べる本」として書籍化されました!サイトの内容プラスアルファでより学習しやすくなっています!Impressより発売中です!!

Read →
Impress一週間シリーズ
...
2024/10/01

書籍化された一週間シリーズ

一週間シリーズは書籍化されています。こちらもどうぞ!

Read →
プログラマーなら欲しいグッズ
プログラミンググッズ

プログラミンググッズ

快適なプログラミング環境を構築したい人々にぜひとも揃えてほしいグッズです。

Read →
制作・管理
シフトシステム株式会社

シフトシステム株式会社

このサイトはシフトシステム株式会社によって制作・管理がなされています。

Read →