-
C言語で文字列を逆順に出力する方法:forループとstrrev関数を使ったサンプルプログラム
この記事では、ライブラリの定義済み関数に頼らずに文章を逆順に出力するCプログラムを紹介します。forループを活用することで、入力されたメッセージを簡単に逆順で表示できます。 プログラム1:forループで文字列を逆順に出力する #include<stdio.h> int main(){ char stmt[100]; int i; printf(enter the message:\n); f
-
switch文を使わずにelseif文で数値を英語の単語として出力するC言語プログラムの作り方
課題 C言語において、switch文を使わずに入力された数値を英語の単語として出力するには、どのようにプログラムを書けばよいのでしょうか。 本記事では、if〜else if文による条件分岐と文字列配列を組み合わせて、0〜99までの整数を英単語に変換して表示するプログラムの実装方法を解説します。 解決策:複数の条件分岐で場合分けする このプログラムでは、2桁の整数を単語として出力するために、以下の条件を順番にチェックしています。 if (no < 0 || no > 99)入力された数値が0〜99の範囲外の場合は、エラーメッセージを表示します。 else if (no == 0)
-
whileループを使って文章の平均単語長を計算するCプログラムの作成方法
この記事では、whileループを使用して、入力された文章に含まれる単語の平均文字数(平均単語長)を計算するCプログラムを紹介します。問題実行時に文章を1行入力し、その文章内に存在する単語の平均の長さを計算するコードを作成してください。解決策基本的な考え方は以下の通りです。空白文字以外の文字をカウントして「総文字数」を求める空白文字の数から「単語数」を求める(初期値は1)総文字数を単語数で割ることで平均単語長を計算するアルゴリズムSTART Step 1: 文字型・int型・double型の変数を宣言する Step 2: 任意の文章を入力する Step 3: whileループ 条
-
C言語の構造体でクリケット選手の情報を表形式に整理し、平均得点順にソートするプログラムの作り方
問題 C言語の構造体(structure)を使って、クリケット選手のデータを「平均得点(アベレージ)」を基準に昇順へソートし、表形式で格納・表示するにはどうすればよいのでしょうか。 解決策 ここでは、クリケット選手の情報として「名前」「年齢」「試合数」「平均得点」の4項目を扱います。これらの情報は、構造体の仕組みを利用することで、プログラム実行時にコンソールから入力できるようになります。 入力が完了したら、各選手の平均得点に基づいてデータを昇順に並べ替え、表形式で画面に出力します。こうすることで、誰の成績がどの位置にあるのかがひと目でわかるようになります。 ソートのロジック 選手を平均得点の
-
C言語でファイルを使って0〜100の乱数の合計を計算する方法を解説
このプログラムでは、0から100の間で生成された乱数を合計する処理を行います。実行するたびに乱数が新しく生成されるため、プログラムを実行するたびに合計値は異なる結果になります。 乱数の合計を求める基本的なロジック 0〜100の範囲の乱数の合計を計算するために使用するロジックは以下の通りです。ループ処理の中で乱数を配列に格納しながら、同時に合計値を加算していきます。 for(i = 0; i <=99; i++){ // 乱数を配列に格納する num[i] = rand() % 100 + 1;
-
C言語における有効な宣言・初期化と無効な宣言・初期化の違いを徹底解説
はじめに:この記事で扱う問題C言語でプログラミングを行う際、「有効な宣言・初期化」と「無効な宣言・初期化」にはどのようなものがあるのかを、具体例を挙げながら解説します。有効・無効な記述について論じる前に、まずC言語で変数を宣言し、初期化する基本的な方法をおさらいしておきましょう。変数宣言とは変数宣言の基本構文は以下の通りです。構文Datatype v1,v2,…vn;ここで、v1、v2、…vn はそれぞれ変数名を表します。例えば、次のように記述します。int sum;float a,b;変数の宣言方法には、主に次の2種類があります。ローカル宣言グローバル宣言ローカル宣言とは、mainブロックな
-
【C言語】sizeofとoffsetofで構造体メンバーのサイズとオフセットを表示するプログラムの作成方法
C言語では、sizeof演算子とoffsetofマクロを組み合わせることで、構造体そのもののサイズや、各メンバー変数のサイズ・オフセット(構造体の先頭からのバイト位置)を簡単に調べることができます。本記事では、構造体の基本をおさらいしながら、実際にサイズとオフセットを表示するプログラムまでをわかりやすく解説します。 問題 構造体を定義し、そのメンバー変数のサイズとオフセットを表示するCプログラムを作成しましょう。 構造体(Structure)とは、異なるデータ型の変数を1つの名前のもとにグループ化して扱えるようにした集合体のことです。 構造体宣言の一般形式 datatype member1
-
C言語でポインタの使い方を学べるサンプルプログラムを作成する
ポインタとは、別の変数のアドレス(メモリ上の場所)を格納するための変数のことです。C言語においてポインタは非常に重要な概念であり、メモリを直接操作することで効率的なプログラミングを可能にします。 ポインタの特徴 ポインタを使うことでメモリ空間を節約できます。 メモリ上の場所へ直接アクセスできるため、実行速度が速くなります。 ポインタを利用すると、メモリへのアクセスが効率化され、動的なメモリの割り当て(確保)と解放が可能になります。 連結リストや木構造などのデータ構造でもポインタが広く使われています。 ポインタの宣言 int *p; これは「p」がポインタ変数であり、別の整数型変数のアドレ
-
C言語で既存ファイルの総行数をカウントするプログラムの作成方法
この記事では、C言語を使って既存のファイルを開き、そのファイルに含まれる行数を数えるプログラムの作成方法を解説します。指定したファイルが存在する場合は行数をカウントし、存在しない場合は「ファイルが見つからない」というエラーメッセージを表示します。ファイルとはファイルとは、レコード(データ)の集まりのことであり、ハードディスク上にデータを永続的に保存しておくための場所です。ファイルに対して実行できる主な操作は以下のとおりです。ファイルに名前を付ける(命名)ファイルを開くファイルから読み込むファイルへ書き込むファイルを閉じるファイルを開くための構文ファイルポインタの宣言と、fopen関数によるファ
-
C言語でファイルからデータを読み込み、表形式で表示するプログラムの作成方法
問題C言語を使って、ファイルに保存されている一連のデータ項目を読み取り、それをコンソール上に列(表)形式で表示するには、どのようにプログラムを書けばよいのでしょうか。 解決策まずファイルを書き込みモードで開き、一連の情報を書き込んだ後にファイルを閉じます。その後、再度同じファイルを読み込みモードで開き、データをコンソール上に列形式で表示します。 ファイルを書き込みモードで開く FILE *fp; fp = fopen(sample.txt, w); 指定したファイルが存在しない場合は、新しいファイルが作成されます。 ファイルがすでに存在する場合は、以前の内容は消去され、新しく書き込まれた内容
-
【C言語】strncmpライブラリ関数を使って2つの文字列を比較するプログラムの作り方
strncmpは、C言語のヘッダーファイル「string.h」に定義されている標準ライブラリ関数の一つです。この関数を使用すると、2つの文字列を比較し、どちらの文字列が大きい(辞書順で後ろにある)のかを判定することができます。 strcmp関数(文字列比較) strcmp関数は、2つの文字列を比較するための関数です。戻り値として、両方の文字列の中で最初に一致しなかった文字同士のASCIIコードの差を返します。 構文 int strcmp(string1, string2); 差が0の場合:string1 = string2(2つの文字列は等しい) 差が正の値の場合:string1 &
-
【C言語】strncat関数でソース文字列からn文字を宛先文字列へ連結する方法
C言語では、strncatという標準ライブラリ関数を使うことで、ソース文字列(連結元)から指定したn文字分だけを、宛先文字列(連結先)へ連結できます。本記事では、strncatの基本的な使い方を、strcatとの違いや具体的なサンプルコード・実行結果とあわせて解説します。 問題 C言語のstrncatライブラリ関数を使用して、ソース文字列からn文字を宛先文字列へ連結するプログラムを作成してください。 解決策 strcat関数とは まず、比較のためstrcat関数の基本をおさらいしておきましょう。 2つの文字列を結合(連結)するための関数です。 連結後の文字列が収まるよう、宛先側の配列に
-
【C言語】fread()・fwrite()関数の使い方を解説!構造体データをファイルに保存して読み出す方法
課題fread()関数とfwrite()関数を使用して、学生の詳細情報をファイルに保存し、その内容を再度読み出して画面に表示するCプログラムを作成します。解決策fread()関数は、レコード(構造体)全体を一度に読み込むための関数です。1バイトずつではなく、まとまったデータとして高速に入出力できるのが特徴です。書式(構文)fread( &構造体変数, sizeof(構造体変数), 読み込むレコード数, ファイルポインタ );使用例struct emp{ int eno; char ename[3
-
C言語の数学関数を使って利息を含む最終金額を計算する方法
本記事では、C言語の数学関数(exp関数)を活用して、預け入れた金額が利息によって何年後にいくらになるかを計算するプログラムを紹介します。複利計算の基本的な考え方と、実際のコード実装までをわかりやすく解説します。 問題 銀行に預け入れた金額が、一定の利率で一定年数経過した後、利息を含めていくらになるかを求めるC言語プログラムを作成してください。 解法 利息を含む最終金額は、以下の数式で計算できます。 M = ((r / 100) * t); A = P * exp(M); 各変数の意味は次のとおりです。 r:年利率(%) t:預ける年数 P:預け入れる元金 M:中間計算用の一時変数 A:利息
-
C言語のatexit()関数を検証するサンプルプログラム
atexit()は、プログラムの終了時に呼び出される関数を事前に登録しておくための標準ライブラリ関数です。終了時の後処理(リソースの解放やログの出力など)を行いたい場合に便利な機能です。この関数はstdlib.hヘッダーファイルに定義されており、使用するにはプログラムの先頭でインクルードする必要があります。atexit()関数の基本的な仕組みatexit()に登録された関数は、LIFO(後入れ先出し)の順序で呼び出されます。つまり、最後に登録した関数が最初に実行されます。登録できる関数の数は処理系によって異なりますが、C標準では最低32個まで登録できることが保証されています。例1: 基本的な使
-
C言語のtime.hライブラリ関数を使って現在日時をISO形式で表示する方法
課題C言語を使用して、現在の日付と時刻をISO標準形式で表示するにはどうすればよいのでしょうか。解決策システムから取得した現在の日付と時刻を、ISO形式で出力する方法を解説します。たとえば、出力結果は「2020年12月15日(月)22:50」のような形式になります。このプログラムで使用する主な標準ライブラリ関数は以下の2つです。使用する関数time()関数現在の暦時刻(カレンダー時間)を取得して返します。引数にNULLを指定すると、現在時刻がtime_t型の値として返されます。strftime()関数時刻情報を指定した書式の文字列に変換します。この関数はtime.hヘッダーファイルに含まれてお
-
C言語のmalloc関数とは?動的メモリ確保の基本とサンプルコードを解説
課題 動的メモリ確保関数を使用して、複数の要素を入力・表示し、その合計値を計算するCプログラムを作成します。 malloc関数とは C言語における標準ライブラリ関数 malloc は、プログラムの実行時(ランタイム)に指定したバイト数分のメモリブロックを動的に確保する関数です。戻り値は void 型ポインタで、確保されたメモリ領域の先頭アドレスを指します。なお、malloc で確保したメモリは初期化されていないため、不定な値(ゴミ値)が含まれた状態になっている点に注意が必要です。 構文 void *malloc(サイズ(バイト数)) 具体的な使用例は以下の通りです。 int *ptr;pt
-
C言語のisupper()関数を使って文字列内の大文字数をカウントする方法
問題概要 C言語プログラミングでは、入力された文字列の中に大文字アルファベットが何文字含まれているのかを調べたい場面があります。本記事では、標準ライブラリのisupper()関数を使う方法と、使わずに実現する方法の2つのアプローチを、サンプルコード付きで解説します。 解決策:大文字をカウントするロジック 文中の大文字の数を数えるために使用したロジックは以下の通りです。 for(a=string[0];a!=\0;i++){ a=string[i]; if (isupper(a)){ counter=counter+1; //counter++;
-
C言語で前置・後置インクリメント演算子の動作を示すプログラムを作成する方法
インクリメント演算子(++)とはインクリメント演算子は、変数の値を1だけ増加させるために使用される演算子です。「前置インクリメント(++a)」と「後置インクリメント(a++)」の2種類があり、記述位置によって処理の順序が異なります。前置インクリメント: 演算子をオペランドの前に置きます。値が先に1増やされ、その増加した値に対して処理が行われます。例:z = ++a; → a = a + 1; その後 z = a;後置インクリメント: 演算子をオペランドの後ろに置きます。現在の値で処理が先に行われ、その後に値が1増やされます。例:z = a++; → z = a; その後 a = a + 1;例
-
C言語における静的メモリ割り当てとは?仕組みとサンプルコードで徹底解説
C言語でプログラムが使用するメモリは、大きく分けて「静的メモリ割り当て」と「動的メモリ割り当て」の2つの方法で確保されます。 静的メモリ割り当て(Static Memory Allocation)とは 静的メモリ割り当てとは、変数のサイズがプログラムの実行前に決定され、固定サイズの領域として割り当てられる方式です。一度確保されたメモリは、明示的に解放することはできません。プログラム内で宣言された変数に対して、あらかじめメモリが割り当てられます。 静的メモリ割り当ての主な特徴 アドレス演算子「&」を使って変数のアドレスを取得し、ポインタに代入することができます。 メモリはコンパイル時