落伍者站长论坛's Archiver

日不落525 发表于 2008-6-26 15:53

跪求高手进!

跪求高手帮忙解释下这个顺序存储结构···  谢谢了···
#include <stdio.h>
#include <stdlib.h>
#define max 50
int N=0;
struct student {
char name[50];
int num;
};
void reorder(student str[])
{
student temp;
for(int i=0;i<N;i++)
{
for(int j=i;j<N;j++)
{
if(str[i].num>str[j].num)
{
temp=str[i];
str[i]=str[j];
str[j]=temp;
}
}
}
printf("reorder string is:\n");
for(i=0;i<N;i++)
{
printf("%s,%d\n",str[i].name,str[i].num);
}
}
void findout(student str[],int n)
{
int low,hight,avg;
int flag=0;
low=0;
hight=N-1;
while(str[low].num<str[hight].num)
{
avg=(hight-low)/2;
if(n==str[avg].num)
{
printf("Find the student's name is:%s\n",str[avg].name);
flag=1;
break;
}

[[i] 本帖最后由 日不落525 于 2008-6-26 15:58 编辑 [/i]]

开放日 发表于 2008-6-26 15:57

#include <stdio.h>
#include <stdlib.h>
#define max 50 //常数声明
int N=0;
struct student {
char name[50];
int num;
}; //结构声明

void reorder(student str[]) //过程声明
{
student temp; /定义temp 变量为 student 类型


for(int i=0;i<N;i++)
{
for(int j=i;j<N;j++)
{
if(str[i].num>str[j].num)
{
temp=str[i];
str[i]=str[j];
str[j]=temp; //以上三句实现str[i]、str[j]值的对换
}
}
}
//两个循环实现对结构str中所有数据遍历访问,并按str中num的值从小到大排列(下沉法)

printf("reorder string is:\n");
for(i=0;i<N;i++)
{
printf("%s,%d\n",str[i].name,str[i].num);
}
}
//打印结构体中所有数据

void findout(student str[],int n)
{
int low,hight,avg;
int flag=0;
low=0;
hight=N-1;
while(str[low].num<str[hight].num)
{
avg=(hight-low)/2;
if(n==str[avg].num)
{
printf("Find the student's name is:%s\n",str[avg].name);
flag=1;
break; //跳出循环
}
//本过程想要实现的作用是打印出变量student str[]中元素num值为变量n且其num值为其他两个元素num值的平均数的元素的name值。(过程调用时指定变量student str[]及变量n的值。)


不过好像这个过程有问题,变量low 、hight没有自加(自减)
改为::
void findout(student str[],int n)
{
int low,hight,avg;
int flag=0;
low=0;
hight=N-1;
while(str[low].num<str[hight].num)
{
avg=(hight-low)/2;
if(n==str[avg].num)
{
printf("Find the student's name is:%s\n",str[avg].name);
flag=1;
break;
low=lov++;
high=high--;
}

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.