C语言一维数组习题求教

cardlan2012 2012-12-17 05:16:09
题目如下:
编写一个程序,输入10个双精度型数字到一个名为raw的数组中。在10个由用户输入的数字被输入到数组后,你的程序应该循环经历raw数组10次。在每次通过这个数组期间,你的程序应该选择raw数组中的最小数值,并把这个被选择的数值放在位于一个名为sorted的数组中的下一个变量中。因此,当你的程序完成时,sorted数组应该包含raw数组中按照从小到大排序的数值。(提示:确保在每次经历一个很高的数字期间重新设置被选取的最小数值,以使它不再被选择。你将需要在第一个for循环内的另一个for循环,以便确定每次经理的最小数值。)

以上题目中,红色字体部分不知道如何处理,所以每次取出来的都是最小值,没取到第二小,第三小。。。的数值。
请帮忙,谢谢!
...全文
326 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
cardlan2012 2012-12-20
  • 打赏
  • 举报
回复

#include <stdio.h>
#define gradeNum 10

int main()
{
	int raw[gradeNum], sorted[gradeNum];
	int i, j, j2, temp;
	int minNum, maxNum;
	
	for(i=0; i<gradeNum; i++)
	{
		printf("Enter the %d number: \n", i);
		scanf("%d", &raw[i]);
	}

	minNum=raw[0];
	maxNum=raw[2];

	for(i=0; i<gradeNum; i++)
	{
		if(raw[i]>maxNum)
			maxNum=raw[i];
	}

	printf("The max number is %d\n", maxNum);

	for(i=0; i<gradeNum; i++)
	{	
		for(j=0; j<gradeNum; j++)
		{
			if(raw[j]<minNum)
			{
				minNum=raw[j];
				j2=j;
			}
		}

		sorted[i]=minNum;
		raw[j2]=raw[j2]+maxNum;
		minNum=raw[j2];
		printf("The value stored in %d position is %d\n", i, sorted[i]);
		
	}

	return 0;
}
这几天在忙别的,今天一看,发现问题很简单,就是在判断为真的时候把值存到另一个变量中,再改变最小值就可以了,一会结贴。
ForestDB 2012-12-19
  • 打赏
  • 举报
回复
简单点说,就是每次遍历过raw之后,将选出来的值作为新的最小值。

# include <stdio.h>

int main()
{
    double raw[10];
    double sorted[10];
    double min = 0;
    double selected;
    int i;
    int j;

    printf("input 10 double: ");
    for (i = 0; i < 10; i++)
        scanf("%lf", raw + i);

    for (i = 0; i < 10; i++)
    {
        selected = raw[0];
        for (j = 0; j < 10; j++)
        {
            if (raw[j] > min && raw[j] < selected)
                selected = raw[j];
        }
        min = selected;
        sorted[i] = selected;
    }

    for (i = 0; i < 10; i++)
        printf("%lf\n", sorted[i]);

    return 0;
}
kingdom_0 2012-12-19
  • 打赏
  • 举报
回复
// Win32ApplicationTest.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <Windows.h>
#include <iostream>
#include <map>
#include <queue>
//#include <Psapi.h>
#include <fstream>
#include <vector>
#include <comdef.h>
#include <Winsock2.h>
#pragma comment ( lib, "psapi.lib" )
#pragma  comment(lib, "ws2_32")

#include <windows.h>
//#include <stdio.h>
#include <string>
#include <locale>
#include <float.h>

using namespace std;
#define ArrSize 3

int _tmain(int argc, _TCHAR* argv[])
{
	double raw[ArrSize]={0};
	double sorted[ArrSize]={0};
	cout<<"Please enter ten double values:"<<endl;
	for (int i = 0;i <ArrSize;i++)
	{
		cout<<"the "<<i+1<<"th double value:";
		cin>>raw[i];
		//cout<<endl;
	}
	double tempValue = raw[0];
	for (int j = 0;j < ArrSize; j++)
	{
		tempValue = DBL_MAX;
		for (int i = 0;i <ArrSize;i++)
		{
			if (tempValue > raw[i] && raw[i] > sorted[j-1])
			{
				tempValue = raw[i];
			}
			cout<<raw[i]<<endl;
		}
		sorted[j] = tempValue;
	}
	
	for (int i = 0;i <ArrSize;i++)
	{
		cout<<"the sorted double value:";
		cout<<sorted[i]<<"  ";
	}
	system("pause");
	return 0;
}
cardlan2012 2012-12-18
  • 打赏
  • 举报
回复
嗯,不是老师要求的,是书上的习题。习题不是要求用冒泡排序,是要求从第一个数组中选择一个最小值,放到第二个数组中,然后再选择第二小的,放到第二个数组中的第二个位置,依此类推。
  • 打赏
  • 举报
回复
这个程序可以用,刚那个程序还有点问题,你试试看:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	int x;
	int i;
	int j;
	int k;
	int raw[11]={0};
	int sorted[100]={0};
	for(i=0;i<10;i++)
	{
		scanf("%d",&x);
		raw[i]=x;
		if(i==0)
			sorted[i]=x;
		sorted[i]=x;
		for(j=0;j<i;j++)
		{
			if(sorted[i]<sorted[j])
			{
				int temp;
				temp=sorted[j];
				sorted[j]=sorted[i];
				for(k=i;k>j;k--)       //对于已经排好序的,只需要把后面的每位往后移动一个,然后再把交换的值放到刚输入的值之后就行了。。
				{
					sorted[k]=sorted[k-1];
				}
				sorted[j+1]=temp;
				
			}
		}
	}

	printf("The original order is:\n");
	for(i=0;i<10;i++)
	{
		printf("%d ",raw[i]);
	}

	printf("\n");
	printf("After sorted:\n");
	for(i=0;i<10;i++)
	{
		printf("%d ",sorted[i]);
	}

	system("pause");
	return 0;
}
derekrose 2012-12-17
  • 打赏
  • 举报
回复
for(t=0; t<gradeNum; t++) { for(i=0; i<gradeNum; i++) { if(raw[i]<minNum && raw[i] > stored[t - 1]) minNum=raw[i]; } stored[t]=minNum; printf("The value stored in %d position is %d\n", t, stored[t]); }
derekrose 2012-12-17
  • 打赏
  • 举报
回复

	for(t=0; t<gradeNum; t++)
	{
		for(i=0; i<gradeNum; i++)
		{
			if(raw[i]<minNum && raw[i] > stored[t - 1])
			minNum=raw[i];
		}
	
		stored[t]=minNum;
		printf("The value stored in %d position is %d\n", t, stored[t]);
	}
我这样改你认为对不对
derekrose 2012-12-17
  • 打赏
  • 举报
回复
引用 3 楼 cardlan2012 的回复:
引用 2 楼 derekrose 的回复:找到最小的之后加入数组,然后自增1万 C/C++ code?1234567891011for(t=0; t<gradeNum; t++){ for(i=0; i<gradeNum; i++) { if(raw[i]<minNum) minNum=raw[i]; } sto……
额,刚才开个玩笑的哈,也是可行的咯,找一个变量记住下标i,然后加入到stored数组之后把该下标所指的数字自增10000,这个数字比较喜感而已。。。。 其实你们老师这个要求真的很怪异哦,如果要求空间,那我说的自增10000很不错哦,又不用别的内存,但是可读性太差了,你自增的数字是怎么确定的啊,为什么定为10000,或者说人家根本就不想改动原数组怎么办; 如果不要求你用多少内存你可以搞一个数组叫visited用来标记是否访问过该数据,跟我刚才说的差不多也要一个变量标记,但是这个要求一个n大小的多余内存。
  • 打赏
  • 举报
回复

for(i=0;i<10;i++)
{
scanf("%d",x);
raw[i]=d;
for(j=0;j<i;j++)
{
if(d<sorted[j])
{
int temp;
temp=sorted[j];
sorted[j]=d;
for(k=i+1;k>j;k--)       //对于已经排好序的,只需要把后面的每位往后移动一个,然后再把交换的值放到刚输入的值之后就行了。。
{
   sorted[k]=sorted[k-1];
}
sorted[j+1]=temp;

}

else
sorted[i]=d;
}
}
额。。发现好像有点复杂。没有编译啊。。
cardlan2012 2012-12-17
  • 打赏
  • 举报
回复
引用 2 楼 derekrose 的回复:
找到最小的之后加入数组,然后自增1万

	for(t=0; t<gradeNum; t++)
	{
		for(i=0; i<gradeNum; i++)
		{
			if(raw[i]<minNum)
			minNum=raw[i];
		}
	
		stored[t]=minNum;
		printf("The value stored in %d position is %d\n", t, stored[t]);
	}
自增的语句写在哪里?我已经计算出最大值,准备把它等于最大值,但是不知道出现最小值时是循环到哪里了。
derekrose 2012-12-17
  • 打赏
  • 举报
回复
找到最小的之后加入数组,然后自增1万
cardlan2012 2012-12-17
  • 打赏
  • 举报
回复
因为是习题,所以请大家仅使用一维数组以前的知识来编写。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧