c语言问题,求详细解释,在线等
试题6#include<stdio.h>structnum{inta;intb;};voidf(structnums[],intn){intindex,j,k;struc...
试题6
#include <stdio.h>
struct num
{
int a;
int b;
};
void f(struct num s[],int n)
{
int index,j,k;
struct num temp;
for(k=0;k<n-1;k++)
{
index=k;
for(j=k+1;j<n;j++)
if(s[j].b<s[index].b)index=j;
temp=s[index];
s[index]=s[k];
s[k]=temp;
}
}
main()
{
int count ,i,k,m,n,no;
struct num s[100],*p;
scanf("%d%d%d",&n,&m,&k);
for(i=0;i<n;i++)
{
s[i].a=i+1;
s[i].b=0;
}
p=s;
count=no=0;
while(no<n)
{
if(p->b==0)count++;
if(count==m)
{
no++;
p->b=no;
count=0;
}
p++;
if(p==s+n)
p=s;
}
f(s,n);
printf("%d:%d\n",s[k-1].b,s[k-1].a);
}
(21)程序运行时,输入5 4 3,输出 (21) 。
A.3:5 B.2:3
C.1:2 D.4:1
(22)程序运行时,输入5 3 4,输出 (22) 。
A.3:5 B.1:2
C.4:3 D.4:2
(23)程序运行时, 输入7 5 2,输出 (23) 。
A.1:5 B.6:1
C.2:3 D.2:4
(24)程序运行时,输入4 2 4#,输出 (24) 。
A.3:3 B.4:2
C.2:4 D.4:1 展开
#include <stdio.h>
struct num
{
int a;
int b;
};
void f(struct num s[],int n)
{
int index,j,k;
struct num temp;
for(k=0;k<n-1;k++)
{
index=k;
for(j=k+1;j<n;j++)
if(s[j].b<s[index].b)index=j;
temp=s[index];
s[index]=s[k];
s[k]=temp;
}
}
main()
{
int count ,i,k,m,n,no;
struct num s[100],*p;
scanf("%d%d%d",&n,&m,&k);
for(i=0;i<n;i++)
{
s[i].a=i+1;
s[i].b=0;
}
p=s;
count=no=0;
while(no<n)
{
if(p->b==0)count++;
if(count==m)
{
no++;
p->b=no;
count=0;
}
p++;
if(p==s+n)
p=s;
}
f(s,n);
printf("%d:%d\n",s[k-1].b,s[k-1].a);
}
(21)程序运行时,输入5 4 3,输出 (21) 。
A.3:5 B.2:3
C.1:2 D.4:1
(22)程序运行时,输入5 3 4,输出 (22) 。
A.3:5 B.1:2
C.4:3 D.4:2
(23)程序运行时, 输入7 5 2,输出 (23) 。
A.1:5 B.6:1
C.2:3 D.2:4
(24)程序运行时,输入4 2 4#,输出 (24) 。
A.3:3 B.4:2
C.2:4 D.4:1 展开
3个回答
展开全部
#include <stdio.h>
struct num
{
int a;
int b;
};
void f(struct num s[],int n) //该函数是将struct num s[]数组从小到达排序
{
int index,j,k;
struct num temp;
for(k=0;k<n-1;k++)
{
index=k;
for(j=k+1;j<n;j++)
if(s[j].b<s[index].b)index=j; //找struct num s[]里最小的b所在的位置j
temp=s[index]; //最小值给temp
s[index]=s[k]; //将k-1位置的b值给原最小j-1位置
s[k]=temp; //将最小值给k-1位置
}
}
main()
{
int count ,i,k,m,n,no;
struct num s[100],*p;
scanf("%d%d%d",&n,&m,&k);
for(i=0;i<n;i++) //将struct num s[]数组成员b(1-n个)全置0,成员a作为编号1-n
{
s[i].a=i+1;
s[i].b=0;
}
p=s;
count=no=0;
while(no<n) //循环n次
{
if(p->b==0)count++; //每m个0,使第m个为no++
if(count==m)
{
no++;
p->b=no;
count=0;
}
p++; //当P只向struct num s[]最后一个时,重新回到头
if(p==s+n)
p=s;
} //对n个成员赋值后结束。
f(s,n); //从小到大排序
printf("%d:%d\n",s[k-1].b,s[k-1].a);//输出第k-1个成员b与a的值
}
21题:输入n=5,m=4,k=3.一共有5个元素,先使s[1].a=1,s[2].a=2,s[3].a=3,s[4].a=4, s[5].a=5。使1-5个b都为0。之后对lm(l=1,2……)个0赋值,s[4].b=1,s[3].b=2, s[5].b=3,s[2].b=4,s[1].b=5。然后在对s[].b进行从小到大排列得:
num s[1].b=1,num s[1].a=4;
num s[2].b=2,num s[2].a=3;
输出*****num s[3].b=3,num s[3].a=5;
num s[4].b=4,num s[4].a=2;
num s[5].b=5,num s[5].a=1.
输出s[k-1].b,s[k-1].a,本题是s[2].b,s[2].a
22题。
s[].a:1 2 3 4 5
s[].b:2 4 1 5 3
排序后:
s[].a:3 1 5 2 4
s[].b:1 2 3 4 5
输出s[4].b=4,s[4].a=2.
其他同理,运行下就出来了。
给好评哦,亲!
struct num
{
int a;
int b;
};
void f(struct num s[],int n) //该函数是将struct num s[]数组从小到达排序
{
int index,j,k;
struct num temp;
for(k=0;k<n-1;k++)
{
index=k;
for(j=k+1;j<n;j++)
if(s[j].b<s[index].b)index=j; //找struct num s[]里最小的b所在的位置j
temp=s[index]; //最小值给temp
s[index]=s[k]; //将k-1位置的b值给原最小j-1位置
s[k]=temp; //将最小值给k-1位置
}
}
main()
{
int count ,i,k,m,n,no;
struct num s[100],*p;
scanf("%d%d%d",&n,&m,&k);
for(i=0;i<n;i++) //将struct num s[]数组成员b(1-n个)全置0,成员a作为编号1-n
{
s[i].a=i+1;
s[i].b=0;
}
p=s;
count=no=0;
while(no<n) //循环n次
{
if(p->b==0)count++; //每m个0,使第m个为no++
if(count==m)
{
no++;
p->b=no;
count=0;
}
p++; //当P只向struct num s[]最后一个时,重新回到头
if(p==s+n)
p=s;
} //对n个成员赋值后结束。
f(s,n); //从小到大排序
printf("%d:%d\n",s[k-1].b,s[k-1].a);//输出第k-1个成员b与a的值
}
21题:输入n=5,m=4,k=3.一共有5个元素,先使s[1].a=1,s[2].a=2,s[3].a=3,s[4].a=4, s[5].a=5。使1-5个b都为0。之后对lm(l=1,2……)个0赋值,s[4].b=1,s[3].b=2, s[5].b=3,s[2].b=4,s[1].b=5。然后在对s[].b进行从小到大排列得:
num s[1].b=1,num s[1].a=4;
num s[2].b=2,num s[2].a=3;
输出*****num s[3].b=3,num s[3].a=5;
num s[4].b=4,num s[4].a=2;
num s[5].b=5,num s[5].a=1.
输出s[k-1].b,s[k-1].a,本题是s[2].b,s[2].a
22题。
s[].a:1 2 3 4 5
s[].b:2 4 1 5 3
排序后:
s[].a:3 1 5 2 4
s[].b:1 2 3 4 5
输出s[4].b=4,s[4].a=2.
其他同理,运行下就出来了。
给好评哦,亲!
更多追问追答
追问
a是怎么变的
追答
a就是给数据的编号,是与b联系在一起的,知识为了表明b这个数据原来所在的位置。当b背排序的时候,随b在顺序上做同样的变化。变完后,看a就可以知道该数据原来是在什么位置。
s[].a:1 2 3 4 5
s[].b:2 4 1 5 3
排序后:
s[].a:3 1 5 2 4
s[].b:1 2 3 4 5
这里b已经从小到大排序了,看a就知道该b原来在几号位置。如排序后,b=1,a=3,说明该b是原来的3号位置。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询