
最大値検索法のプログラムコードです。
どこがおかしいのでしょうか?
分かる方、教えてください。
よろしくおねがいします。
swapのプログラムコード
#include <stdio.h>
void swap(int *px,int *py);
int main (void)
{
FILE *fp;
if ((fp=fopen("file.txt","rt"))==NULL){
printf("File open error.\n");
return 0;
}
int i,a[100];
for(i=0;i<100;i++){
fscanf(fp,"%d,",&a[i]); //ファイルから読み込み処理。//
}
fclose(fp);
for(i=0;i<10;i++) printf("[%d]=%d\n",i,a[i]);
/*1.ソートすべきデータの中で最大のデータを見つけ、
2.そのデータを最後のデータと入れ替える。
最大データは配列のどこにあるのか⇒maxi
その値⇒max とする。*/
//データが10個の場合
int max,maxi,j;
max=a[0],maxi=0;
for(i = 0;i < 9; i++){
if(a[i + 1] > max){
max = a[i + 1];
maxi = i + 1;
}
swap(&a[maxi],&a[9-j]);
/* コマンド $cc sort.c swap.c */
for(j=0;j<9;j++){
printf("%d\n",j);
max=a[0], maxi=0;
for(i=0;i<9-j;i++){
//最大値をもつデータ探索;(カウンタ変数)
max++;
}
//最大データと探索範囲最後のデータとの入れ替え:
//void swap(int *px, int *py){
int n,*px,*py;
n = *px;
*px = *py;
*py = n;
// }
if((fp=fopen("file.txt","wt"))==NULL){
printf("File open error.\n");
return 0;
}
for(i=0;i<100;i++){
fprintf(fp,"%d",a[i]);
}
fclose(fp);
}
}
sort.cのプログラムコード
#include<stdio.h>
void swap (int *px,int *py);
int main(void)
{
int a[0],b,maxi,j,max;
max=a[0],maxi=0;
printf("input \"a\" as integer = "); scanf("%d",&a);
printf("input \"b\" as integer = "); scanf("%d",&b);
printf("Before swap...\n");
printf("a - b = %d, a / b = %d...%d\n",a-b,a-b,a-b);
// swap(&px,&py);
swap(&a[maxi],&a[9-j]);
printf("After swap...\n");
printf("a - b = %d, a / b = %d...%d\n",a-b,a-b,a-b);
return 0;
}
void swap (int *px,int *py)
{
int n;
n = *px;
*px = *py;
*py = n;
}
実行結果
/tmp/ccBGIpCi.o(.text+0x0): In function `main':
: multiple definition of `main'
/tmp/ccMCttJd.o(.text+0x0): first defined here
/usr/bin/ld: Warning: size of symbol `main' changed from 304 in /tmp/ccMCttJd.o to 641 in /tmp/ccBGIpCi.o
collect2: ld はステータス 1 で終了
No.1ベストアンサー
- 回答日時:
エラーの原因は main 関数の定義が2つもあること。
swap関数だけ使いたいなら、後半のソースのmain関数の定義は不要。
あるいは、swapの定義だけ抜き出せば、後半のソース自体が不要。
> swapのプログラムコード
> sort.cのプログラムコード
内容からすると逆のようですが。
> for(i=0;i<100;i++){
> fscanf(fp,"%d,",&a[i]); //ファイルから読み込み処理。//
> }
ここで100個読んでるのに、あとは10個しか使っていない。
そもそも100個読めてるかも疑問。fscanfを使うときはエラーチェックを。
> /*1.ソートすべきデータの中で最大のデータを見つけ、
> 2.そのデータを最後のデータと入れ替える。
> 最大データは配列のどこにあるのか⇒maxi
> その値⇒max とする。*/
> //データが10個の場合
多分課題を出した人がヒントとして書いたものと思われる。
ここから
> swap(&a[maxi],&a[9-j]);
> /* コマンド $cc sort.c swap.c */
ここまでは、ほぼ説明の通り。(謎の変数jがあるけど)
最大値と列の最後(a[9])を入れ替えただけなので、残り9個はソートされていないまま。
だから、次はその9個の中から、最大値と列の最後(a[9-1])を入れ替える
次は、残りの8個の中から、最大値と列の最後(a[9-2])を入れ替える
次は、残り7個から...
...と最後まで続けるのが、選択ソートのやりかた。
それができると、10個のソートはできる。でも、プログラムからすると、100個のデータを並びかえる必要があるようだから、どうしたらいいかを考える。
ここから下の
> *py = n;
> // }
までは何がやりたいのか、まったく理解できません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Vba Replace関数について教えて...
-
CSSが全く分かりません、お助け...
-
プログラミング 素数か素数では...
-
c言語の問題の説明、各所ごとに
-
DLLファイルの逆コンパイラにつ...
-
逆コンパイルと逆アセンブルの...
-
C言語について。
-
C#でログファイルにファイルパ...
-
終端記号、非終端記号とは
-
VisualStudioでC++クラスを追加...
-
int16_t の _t は何?
-
Cのオブジェクトファイルの逆ア...
-
C言語の関数のextern宣言
-
DNCL(共テ用プログラミング言語...
-
C#でTreeViewのCheckBoxのサイ...
-
CPUが16bitでも32bitOSでコンパ...
-
C言語 列挙型(enum型)変数について
-
コマンドプロンプトについて。
-
visual studioでフォームデザイ...
-
Windows Formアプリからコンソ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
3×3のラテン方陣をつくるプログ...
-
c言語プログラミングで初項を1....
-
コンソールAPIのSetConsoleScre...
-
プログラミングが分かりません。
-
TCP/IP: 非ソケットに対するソ...
-
Expression: nptr != NULL
-
加減剰余のオーバーフローについて
-
大至急です! 1,ターミナルから...
-
c言語を使用しています。英語小...
-
#include <stdio.h> #include <...
-
以下の問題のプログラムを教え...
-
アセンブリプログラムで特定の...
-
'printf':識別子が見つかりませ...
-
素数について
-
C言語で10個の数字を読み込んで...
-
C言語 コンパイルエラー(文字...
-
プログラムがエラーが出る原因
-
C/C++ return文で関数の返却値...
-
C言語初心者です。計算がうまく...
-
Cの共用体を使ったローテートに...
おすすめ情報