C言語 ドラえもんキャラの点数をバブルソートで並び替え(降順)を作ってみた。

C言語自作サンプルメニューへ
これからプログラミングをはじめる方へ
基本情報技術者試験トップへ
息抜きに(=^・^=)写真で癒し

おはこんばんにちは!!!
うにゃうにゃエンジニアの猫です(=^・^=)mm

バブルソートを使って、スネ夫、のび太、出木杉くん、ジャイアン、しずかちゃんの点数を高い方から(降順)バブルソートを使って並び替えます。
バブルソートは配列の後ろから前後の値を見比べて必要であれば交換して、先頭から値が決定していきます。

スネ夫72点、のび太0点、出木杉君100点、ジャイアン23点、しずかちゃん95点だとします。
最大値に並び替えると、100→95→72→23→0になります。
この最初に配列のインデックス0の所に出木杉君の100、次は1の位置にしずかちゃん、2の位置にスネ夫君…と決定する位置は移っていきます。
この決定位置を表す変数を「kime」とします。

降順のバブルソートの場合、「72,0,100,23,95」は、後ろの95点と23点を比べて、大きい方が前になるように交換していきます。
比較の為に見ている位置は後ろから前に向かっていきます。
この見ている所を変数「mite」とします。

また、値を交換する為の作業領域をtmpとします。

では、実行結果です。

点線の上が並び替える前の配列の状態、下がバブルソートで降順にソートをした後の配列の状態です。

プログラムはこちらになります。

並び替え関数Narabikae

表示関数Hyouji

main関数

コードはコチラです。

#include <stdio.h>
//点数を並び替える
void Narabekae(int score[]){
int kime; //配列の先頭からの確定位置
int mite; //後ろから前へ向かって見ているインデックス
int tmp; //入れ替えの為の作業領域
for(kime=0;kime<5;kime++){ for(mite=4;mite>kime;mite–){
if(score[mite]>score[mite-1]){ //「>」の向きを返ると昇順
tmp=score[mite];
score[mite]=score[mite-1];
score[mite-1]=tmp;
}
}
}
}
//点数を表示する
void Hyouji(int score[]){
printf(“————————————\n”);
for(int i=0;i<5;i++){
printf(“[%d点] “,score[i]);
}
printf(“\n”);
}
int main(){
//スネ夫、のび太、出木杉、ジャイアン、しずかの点数の配列
int score[]={72,0,100,23,95};
Hyouji(score);
Narabekae(score);
Hyouji(score);
}

参考図書
基本情報技術者試験のアルゴリズムでお世話になった本

C言語の入門講座を終えた今のインプット本
基本情報技術者試験の復習にもなります。
C言語を使ってコンピュータの仕組みが理解出来る実験プログラムがあり、
50の実験がそれぞれ独立しているので、短編小説を読んでいる様に読めてコードを入力して動作させています。

C言語自作サンプルメニューへ
これからプログラミングをはじめる方へ
基本情報技術者試験トップへ
息抜きに(=^・^=)写真で癒し

最後まで読んで下さってありがとうございました。
愛しています(=^・^=)mm

C言語で最大値最小値(ドラえもんキャラのテストの点数)を求めてみた。

C言語自作サンプルメニューへ
これからプログラミングをはじめる方へ
基本情報技術者試験トップへ
息抜きに(=^・^=)写真で癒し

おはこんばんにちは!!!
うにゃうにゃエンジニアの猫です(=^・^=)mm

国民的アニメ「ドラえもん」のキャラクターの点数を使って、最大値(出木杉君の点数。最高点)と、最小値(のび太くんの点数。最低点)を求めてみます。

点数は「スネ夫、のび太、出木杉くん、ジャイアン、しずかちゃん」の点数の順番で配列 int score[]={72,0,100,23,95};を使います。

関数Dekisugiで最高点を求めます。
仮の最高点を先頭のスネ夫の点数にして、その点数より大きい点数があれば仮の最高点Maxを更新します。

関数Nobitaで最低点を求めます。
仮の最低点を先頭のスネ夫の点数にして、その点数より小さい点数があれば仮の最低点Minを更新します。

関数Dekisugiと、Nobitaは、main関数から呼び出します。
それらの関数内で表示も行っているので戻り値はありません。

引数として、main関数で定義した5人の点数の配列を渡します。

では、実行結果です。

プログラムはこちらになります。

関数Dekisugi

関数Nobita

main関数

コードはコチラです。

#include <stdio.h>
//最高点を求めて表示する関数Dekisugi
void Dekisugi(int score[]){
int Max=score[0];
for(int i=1;i<5;i++){ if(score[i]>Max){
Max=score[i];
}
}
printf(“最高点:%d点!!さすがだね!!\n”,Max);
}
//最低点を求めて表示する関数Nobita
void Nobita(int score[]){
int Min=score[0];
for(int i=1;i<5;i++){
if(score[i]<Min){ //ここを変更すると最小値を求める処理になる
Min=score[i];
}
}
printf(“最低点:%d点( ;∀;) 裏山に隠そう・・・。\n”,Min);
}
int main(){
//スネ夫、のび太、出木杉、ジャイアン、しずかの点数の配列
int score[]={72,0,100,23,95};
Dekisugi(score);
Nobita(score);
}

最後まで読んで下さってありがとうございました。
愛しています(=^・^=)mm

参考図書
基本情報技術者試験のアルゴリズムでお世話になった本


C言語の入門講座を終えた今のインプット本
基本情報技術者試験の復習にもなります。
C言語を使ってコンピュータの仕組みが理解出来る実験プログラムがあり、
50の実験がそれぞれ独立しているので、短編小説を読んでいる様に読めてコードを入力して動作させています。

C言語自作サンプルメニューへ
これからプログラミングをはじめる方へ
基本情報技術者試験トップへ
息抜きに(=^・^=)写真で癒し

C言語 二重ループ市松模様を作ってみた。

C言語自作サンプルメニューへ
これからプログラミングをはじめる方へ
基本情報技術者試験トップへ
息抜きに(=^・^=)写真で癒し

おはこんばんにちは!!!
うにゃうにゃエンジニアの猫です(=^・^=)mm

今年2021年、新型コロナウイルスで延期になったオリンピックはどうなることやらですが、
C言語で市松模様を作ってみたいと思います。
市松模様は互い違いに色が塗ってある模様なので、多重ループ(二重ループ)を使って表します。

簡単に図を書来ます。

この図を見ると、ある規則に気づきました。
色が塗ってあるところは、i=0ではj=0,2,4,6,8…
と、iが偶数の所ではjも偶数になっていて、
i=1では色が塗ってあるjはj=1,3,5,7と基数になっています。

つまり、iとj共に偶数 または iとj共に奇数 だったら塗る、
そうでなければ白ということになります。

剰余演算子を使っています。%で表すと、
偶数でしたら%2であまりがゼロ、基数でしたら%2であまりが1です。

これをC言語で書く場合は、
「i%2==0 AND j%2==0」OR 「i%2==1 AND j%2==1」
なので、ANDを&&、ORを||と書いて、

「(i%2==0 && j%2==0) || (i%2==1 && j%2==1))」

になります。
この条件が当てはまる所を■、当てはまらない所を□としてコードを組んでみました。

実行してみると、このようになりました。

プログラムはコチラになります。

#include <stdio.h>
void ichimatsu(int i,int j){
if((i%2==0 && j%2==0) || (i%2==1 && j%2==1)){
printf(“■”);
}else{
printf(“□”);
}
}
int main(void){
for(int i=0;i<10;i++){
for(int j=0;j<20;j++){
ichimatsu(i,j);
}
printf(“\n”);
}
}

最後まで読んで下さってありがとうございました。
愛してます(=^・^=)mm

参考図書
基本情報技術者試験のアルゴリズムでお世話になった本

C言語の入門講座を終えた今のインプット本
基本情報技術者試験の復習にもなります。
C言語を使ってコンピュータの仕組みが理解出来る実験プログラムがあり、
50の実験がそれぞれ独立しているので、短編小説を読んでいる様に読めてコードを入力して動作させています。

C言語自作サンプルメニューへ
これからプログラミングをはじめる方へ
基本情報技術者試験トップへ
息抜きに(=^・^=)写真で癒し