学校の課題

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
C言語初心者

学校の課題

#1

投稿記事 by C言語初心者 » 16年前

a[10],b[10],c[20]をint型の配列とする。a[/url],b[/url]にそれぞれ10個ずつの整数を昇順に入力し、それらを併合した結果をc[/url]に格納し、出力するプログラムを作成。

わかる限り、書いてみたのですが、どうもうまくいきません。
どなたか、解説していていただけますでしょうか?

#include<stdio.h>
#include<math.h>
#define N20

int main(void)
{
int a[10];
int b[10];
int c[20];

int i,j,n,l,m,w;
int temp1;
n=10;
printf("aに10個のデータを入力\n");
for(i=0;i<9;i++)
{
printf("aにデータを入力\n",i+1);
scanf("%d",&a);
}

for(i=0;i<9;i++)
{
for(n=i+1;n<10;n++)
{
if(a[n]>a)
{
temp1=a[n];
a[n]=a;
a=temp1;
}
}
}
printf("ソート結果\n");
for(i=0;i<10;i++)
{
printf("%d\n",a);
c=a;
}
for(j=0;j<9;j++)
{
for(l=j+1;l<10;l++)
{
if(b[[/url]>b[j])
{
temp1=b[[/url];
b[[/url]=b[j];
b[j]=temp1;
}
}
}
printf("ソート結果\n");
for(j=0;j<10;j++)
{
printf("%d/n",a[j]);
c[10+j]=b[j];
}
for(m=0;m<19;m++)
{
for(w=m+1;w<20;w++)
{
if(c[m]>c[w])
{
temp1=c[m];
c[m]=c[w];
b[w]=temp1;
}
}
}
printf("ソート結果\n");
for(w=0;w<20;w++)
{
printf("%d\n",a[m]);
}
return 0;
}

Haru

Re:学校の課題

#2

投稿記事 by Haru » 16年前

とりあえず、最初の所だけ

>for(i=0;i<9;i++)
>{

 これだと、iは9回しかループしないかと思います。

>printf("aにデータを入力\n",i+1);

 printf中に%d回目とか入れないと、,i+1が使えないです。

bの配列にいれるscanfがないです。

ぱっと見た感じはこんなところではないでしょうか?

toyo

Re:学校の課題

#3

投稿記事 by toyo » 16年前

a[ ], b[ ]はバブルソートでいいですが
c[ ] に入れるのはマージソートにするのが課題の趣旨かなと思ったりしました。

ibis

Re:学校の課題

#4

投稿記事 by ibis » 16年前

まぁコードの可読性としては標準関数のqsortとかが良いでしょうけどね。

bの値が未定義ですね。
bにも何か入力しましょう。

printf関数のformat引数が"%d/n"というのがありますが、"%d\n"ですよね?

管理人

Re:学校の課題

#5

投稿記事 by 管理人 » 16年前

まず、プログラムコードを投稿するときはプレタグを使ってください。
詳しくは規約をご覧ください。
投稿された元データを見ましたが、字下げがぐちゃぐちゃでした。
まず綺麗に括弧と括弧を同じ位置に字下げし、プログラムをみやすくしましょう。
Emacsなどならタブを押していけば字下げできます。

それから昇順に入力するんじゃなくて入力した数値を昇順に並び替えるプログラムじゃないですか?

また、せっかくdefineで定義を使っているのならそれを使ってあげましょう。

何も考えずに綺麗に書き換えました。
bの値が未定ですし、正しい実行結果は得られません。

推測するに、
aに適当に入力したものを昇順にして表示し、
bに適当に入力したものを昇順にして表示し、
さらにそれらをくっつけて、昇順にしてcに格納し、表示するプログラムをかけという問題なのではないでしょうか?

また、n=10を最初にいれているのはなぜでしょう?
まず、問題を明確にすること。
そして全部いっぺんに作ろうと思わず、

入力を受け付ける部分
ソートする部分
表示する部分

と段階的に少しずつ作っていきましょう。
いっぺんに作るのが困難でもひとつだけ作ればできることもあります。
#include<stdio.h>
#include<math.h>
#define N1 10
#define N2 20
int main(void){
	int a[N1],b[N1],c[N2];
	int i,j,n,l,m,w,temp1;
	n=10;
	printf("aに%d個のデータを入力\n",N1);
	for(i=0;i<N1;i++){
		printf("%d個目: aにデータを入力\n",i+1);
		scanf("%d",&a);
	}
	for(i=0;i<N1-1;i++){
		for(n=i+1;n<N1;n++){
			if(a[n]>a){
				temp1=a[n];
				a[n]=a;
				a=temp1;
			}
		}
	}
	printf("ソート結果\na: ");
	for(i=0;i<N1;i++){
		printf("%d ",a);
		c=a;
	}
	printf("\n");
	for(j=0;j<N1-1;j++){
		for(l=j+1;l<N1;l++){
			if(b[[/url]>b[j]){
				temp1=b[[/url];
				b[[/url]=b[j];
				b[j]=temp1;
			}
		}
	}
	printf("ソート結果\na: ");
	for(j=0;j<10;j++){
		printf("%d/n",a[j]);
		c[10+j]=b[j];
	}
	printf("\n");
	for(m=0;m<N2-1;m++){
		for(w=m+1;w<N2;w++){
			if(c[m]>c[w]){
				temp1=c[m];
				c[m]=c[w];
				b[w]=temp1;
			}
		}
	}
	printf("ソート結果\na: ");
	for(w=0;w<N2;w++){
		printf("%d\n",a[m]);
	}
	printf("\n");
	return 0;
}

閉鎖

“C言語何でも質問掲示板” へ戻る