C言語超初心者のための基本交換法・基本挿入法プログラミング

このQ&Aのポイント
  • C言語超初心者のための基本交換法・基本挿入法プログラミングの解説です。
  • 課題として与えられた数列を大きい順に並べ直す方法をC言語で実装する方法を解説します。
  • 基本交換法と基本挿入法のプログラムを説明し、それぞれの変数の役割についても詳しく説明します。
回答を見る
  • ベストアンサー

C言語超初心者です><

閲覧ありがとうございます。 C言語超初心者です。 「基本交換法・基本挿入法をC言語でプログラミングせよ」という課題が出されました。 ググッてみたところ、乗っているのは数字を小さい順に並べるものばかりで、 作りたいのは数列(6 2 5 3 1 7 4)を大きい順に並べ直すというものです。 つまり(7 6 5 4 3 2 1)にしたいのですが、小さい数を右に右にずらすのではなく、 大きい数を左に左にずらすというのは可能でしょうか? 可能であれば、そのプログラムを教えていただきたいです。 できれば、学校で習っているのが下記の形から始めるというものなので、その形で書き始めていただけるとわかりやすいです。 #include <stdio.h> void main(void) その際、よろしければ説明(特にそれぞれの変数が何を指すのか)なども加えていただけると嬉しいです。 わがままばかりですいませんが、お力を貸してください>< よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.3

>多分どちらも最後の出力の当たりがおかしいと思うのですが 変数iとjを見直してください。 >【バブルソート】 ANo.2で指示したとおりに変更されていません。 >【挿入ソート】 if(a[i-1]<tmp) と不等号を変更したように, while(j>0&&a[j-1]>tmp); の a[j-1]>tmp も同様に不等号を逆にしてください。 指摘し忘れてました,失礼。 >doと&&は未学習なのですが、違う表記とかってできますか? do~while(後判断)を while(前判断)に変更する方はともかく, &&(かつ)による複合条件式が使えないと 自然な発想でコードが書けないし, 違う表記をしてもそれもまた未学習だとなる恐れがあるので, 私は今回はパスします。

yurieru092
質問者

お礼

できました!!! 何回もコメントしていただいて 本当にありがとうございました>< 本当に助かりました。

その他の回答 (2)

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.2

▼バブルソート(無駄な処理がありますの方) if(a[i]>a[i+1]){  tmp=a[i];  a[i]=a[i+1];  a[i+1]=tmp; } を次のように変更。 if(a[j]<a[j+1]){  tmp=a[j];  a[j]=a[j+1];  a[j+1]=tmp; } ▼挿入ソート if (data[i-1] > tmp) { の不等号を < に変更。

yurieru092
質問者

補足

ありがとうございます 参考にしたんですが、上手くできません。 多分どちらも最後の出力の当たりがおかしいと思うのですが・・・ 何がおかしいですか? 【バブルソート】 #include <stdio.h> void main(void) { int i,j,tmp; int a[]={6,2,5,3,1,7,4}; for(i=0;i<6;i++) { for(j=0;j<6;j++) { if(a[i]<a[j+1]) { tmp=a[j]; a[j] =a[j+1]; a[j+1]=tmp; } } } for(i=0;i<7;i++) {printf(“%d “,a[j]);} } 【挿入ソート】 #include <stdio.h> void main(void) { int i,j,tmp; int a[]={6,2,5,3,1,7,4}; for(i=1;i<7;i++) { tmp=a[i]; if(a[i-1]<tmp) { j=i; do { a[j]=a[j-1]; j--; } while(j>0&&a[j-1]>tmp); a[j]=tmp; } } for(i=0;i<7;i++) {printf(“%d “,a[j]);} } *それと、このソートで出てくるdoと&&は未学習なのですが、違う表記とかってできますか? もしできたらでいいのですが…

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.1

>ググッてみたところ、乗っているのは数字を小さい順に並べるものばかり そのコードが載っているURLを提示してください。 おそらく数か所を変更するだけで質問者が望むアルゴリズムになるでしょう。

yurieru092
質問者

補足

早速の回答ありがとうございます。 以下のURLで見つけました。 バブルソート http://www.hrtdotnet.jp/pro/c/step3/step3_1.html (無駄な処理がありますの方) 挿入ソート http://ja.wikipedia.org/wiki/%E6%8C%BF%E5%85%A5%E3%82%BD%E3%83%BC%E3%83%88 よろしくお願いします。

関連するQ&A

  •  現在、私はC言語を学んでいます。

     現在、私はC言語を学んでいます。  プログラミングの初期の初期の問題なんですが、 「Hello World」という有名なプログラムがありますよね? それについての質問です。 #include<stdio.h> main() { printf("Hello World"); return 0; } も #include<stdio.h> main(void) { printf("Hello World"); return 0; } も #include<stdio.h> int main() { printf("Hello World"); } もちゃんと表示できます。 ここで質問です。 int main(void) int main() main() main(void) はどう違うんですか? あと、 return 0; はあっても無くてもいいようなんですが どういう意味があるんでしょうか?

  • C言語初心者です。

    C言語初心者です。 1^2-2^2+3^3-4^2…+99^2-100^2の値を求めるプログラムを作成したいのですが上手くいきません。 どこが足りないのですか? #include <stdio.h> int main(void) { printf("%d", 1^2 - 2^2 + 3^2 - 4^2 … + 99^2 - 100^2); return (0); } よろしくお願いします。

  • プログラミング言語Cとプログラミング言語C++

    プログラミング言語Cとプログラミング言語C++の違いって何ですか? あと、プログラミング言語C++についていくつか質問があります。 #include <iostream> using namespace std; void main(){ cout << "Hello world!" << endl; } このプログラムについて質問なんですが、iostreamってプログラミング言語Cで言うstdio.hのことですか? using namespace stdって何ですか? あと、 cout <<"Hello world!"って何ですか?

  • C言語超初心者からの質問

    最近プログラミングの勉強を始めたものなんですが、ここで質問して薦められた「明解 C言語入門編 著柴田望洋」の一番最初の項目の整数の和を求めるプログラムをやったのですが実行しても反応がありません。 どこが間違っているのでしょうか? ちなみに使っているエディタはK2Editorです。 回答よろしくお願いします。 以下プログラム /* 整数値15と37の和を表示する */ #include <stdio.h> int main(void) {   printf("%d", 15 + 37);    /* 整数値15と37の和を十進数で表示 */   return (0); }

  • C言語について大変初歩的なことなのですが…

    先日C言語でのプログラミングを勉強し始めようと思いたち、 「世界一わかりやすいCプログラミングの授業」という本を買ったのですが、 書いてあった、 #include <stdio.h> main() { printf("hello,world\n"); } というプログラムを作ったのですが、エラーが起きました。 そこで「C言語入門」と検索し調べたサイトでは、 mainの前にintと入っていたのでそうしてみたところエラーがおきませんでした。 本が間違っているとは思えないのですが、これはどういう事でしょうか、教えてください。 まだなんの知識もないのでお手数ですがそこを考慮していただくとありがたいです。 

  • c言語のついて

    c言語で・・・ #include <stdio.h> main() {   printf("こんにちは!"); } というプログラム(適当に作りました)が動きません。 ドコを間違えていますか?

  • C言語の初心者です。これを実行してみてください。

    「a」って打ち込んだら「a」ってでましたか? #include<stdio.h> int main(void){ char a; printf("aaa\n"); scanf_s("%c", &a); printf("%c", a); return 0; }

  • Visual C++ 2008 Express Edition

    Visual C++ 2008 Express Editionをダウンロードしたのですが、使い方が全く分かりません。C言語を学習しています。 例えば #include <stdio.h> int main(void) { printf("Hello, World!\n"); return 0; } というようなプログラミングを実行するにはどうすればいいでしょうか

  • C言語の問題が解けません!

    僕は、C言語を勉強しているのですがこの問題の答えがわかりません。 どうか教えてください。 回答お願いします。 ・問題・ 10文字以内の2つの英単語を入力し、アルファベット順で最初にくる単語を表示するプログラムを作りなさい。 /プログラム/ #include<stdio.h> #include<string.h> int main(void) { char str1[256],str2[256]; int i; printf("文字列1は?"); printf("文字列2は?"); return 0; }

  • C言語の偏差値とかのプログラミングはどうやるのでしょうか?

    C言語の偏差値とかのプログラミングはどうやるのでしょうか? できなさ過ぎて困っています #include <stdio.h> しか、わかりません

専門家に質問してみよう