首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C语言一维数组习题求教解决方法

2013-01-25 
C语言一维数组习题求教题目如下:编写一个程序,输入10个双精度型数字到一个名为raw的数组中。在10个由用户输

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

以上题目中,红色字体部分不知道如何处理,所以每次取出来的都是最小值,没取到第二小,第三小。。。的数值。
请帮忙,谢谢!
[解决办法]

引用:
引用:找到最小的之后加入数组,然后自增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大小的多余内存。
[解决办法]
这个程序可以用,刚那个程序还有点问题,你试试看:


#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;
}

[解决办法]
// 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;
}


[解决办法]
简单点说,就是每次遍历过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;
}

热点排行