① c语言如何将结构体中的所有成员按照其中一个成员的排序方式输出
将结构体数组SI[MAX]使用排序算法然后输出即可。
以下给题主列出对SI[MAX]的冒泡排序代码:
voidbubbleSort(structSalary_Infoarr[],intlen){
inti,j
structSalary_Infotemp;
for(i=0;i<len-1;i++)
for(j=0;j<len-1-i;j++)
if(arr[j]>arr[j+1]){
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
调用bubbleSort函数:
bubbleSort(SI,MAX)/*注意这里的MAX需要换成实际的数组长度(职工人数)*/
② c语言结构体数组的输入输出
C
语言中,结构体(struct)是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。
结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。
定义与声明
结构体的定义如下所示,struct为结构体关键字,tag为结构体的标志,member-list为结构体成员列表,其必须列出其所有成员;variable-list为此结构体声明的变量。
在实际应用中,C语言结构体数组常被用来表示一个拥有相同数据结构的群体,比如一个班的学生、一个车间的职工等。
在C语言中,定义结构体数组和定义结构体变量的方式类似;
例:
struct stu{
char*name;//姓名
int num;//学号
int age;//年龄
char group;//所在小组
float score;//成绩
}class[5];
表示一个班级有5个学生。
(2)c语言结构体数组输出扩展阅读:
结构体数组的引用与引用一个结构体变量在原理上是一样的。只不过结构体数组中有多个结构体变量,我们只需利用for循环一个一个地使用结构体数组中的元素。
下面编写一个程序,编程要求:从键盘输入5个学生的基本信息,如姓名、年龄、性别、学号,然后将学号最大的学生的基本信息输出到屏幕。
#include<stdio.h>
#include<string.h>
struct STU
{
char name[20];
int age;
char sex;
char num[20];
};
void OutputSTU(struct STU stu[5]);
//函数声明,该函数的功能是输出学号最大的学生信息
int main(void)
{
int i;
struct STU stu[5];
for(i=0;i<5;++i)
{
printf("请输入第%d个学生的信息:",i+1);
scanf("%s%d%c%s",
stu<i>.name,
&stu<i>
.age,&stu<i>
.sex,stu<
i>.num);/*%c
前面要加空格,不然输入时会将空格赋给%c*/
}
OutputSTU(stu);
return 0;
}
void OutputSTU(struct STU stu[5])
{
struct STU stumax=stu[0];
int j;
for(j=1;j<5;++j)
{
if(strcmp(stumax.num,stu[j]
.num)<0)//strcmp函数的使用
{
stumax=stu[j];
}
}
printf("学生姓名:%s学生年龄:%d学生性别:%c学生学号:
%s ",stumax.name,
stumax.age,stumax.
sex,stumax.num);
}
输出结果是:
请输入第1个学生的信息:小红22 F Z1207031
请输入第2个学生的信息:小明21 M Z1207035
请输入第3个学生的信息:小七23 F Z1207022
请输入第4个学生的信息:小欣20 F Z1207015
请输入第5个学生的信息:小天19 M Z1207024
学生姓名:小明学生年龄:21学生性别:M学生学号:Z1207035
③ C语言结构体数组,输出中加取地址符是为什么
取地址符&作为一元运算符,结果是右操作对象的地址。例如森缺友&x返回x的地址。地址本身是一个抽象的概念,用于表示对象在存储器中的逻辑位置。
scanf("%d,%d",&x,&y);这里的&x表示x的地址,&y表示y的地址。scanf接收地址,然后把键盘(更确切地说是stdin输入流缓冲区)读入的信息按格式字符串的形式处理后存放到接收到的地址中。对于纯C来说,函数的参数是只能值参而不是变参,函数内部对参数的改变只影响参数本身而不影响调用函数时的实际参数(换句话说扮汪函数内部的只是副本)。所以这里不能向scanf传递x本身,需要用地址&x指明需要存放的位置,才能把值存到x中。
输出中使用&,例如printf("%X",&a);
作用就是把此槐变量a的物理地址用16进制的方式输出。
④ C语言中如何实现对结构体的查找以及输出
C语言的结构体是一组数据的组合,并不是简单的单一类型。所以在查找和输出的时候,均不能直接操作,而是要进行变通。
1 查找。
对于以某一项为关键字进行查找时,比如在结构体中有int型的成员a,要查找a为100的结构体变量,这时需要遍历每个结构体(数组、链表、或者其它任意形式),对每个元素的成员a值进行比较,符合的则表示查找成功。
对于结构体中元素较多,同时要对整个结构体每个元素都匹配才算查找到的特殊情况,可以使用memcmp的方式,整体进行比较,以减少代码量。不过这种情况较为少见,不过多描述。
2 输出。
对于结构体的输出,其实就是对其每一项,或者若干项成员变量的输出。
所以可以使用基本的输出函数,对每一项单独输出,输出中为了方便阅读,可以加一些说明文字。
如果对结构体输出有多处调用的需求,可以在将该功能封装为函数,供各个需要的函数调用。这样的好处是,当结构体的成员出现变化,或者结构体输出要求更改时,修改一处代码即可完成所有的输出修改,实现易于维护的效果。
⑤ 一个关于C语言的结构体数组输出的小问题
大家回答问题,为什么要再从新写套代码贴给他看呢,重要的是方法和知识点!!!代码就那么几个字母没有任何的意义。
虽然我也不能确定你后面的输出方法到底有没有错,因为我的确没有这样写过。
下面给你提供两个找问题的方法,希望有借鉴的作用:
1.你可以把can+0 的地址和 can[0].name 的地址输出来看看是不是同一个地址,如果不是同一个地址,那肯定就输出不了,如果打印出来的是同一个地址,那说明地址的指向是正确的.
2.你再试着显或首示转换一下再打印,如果晌拿还打印不出,那么就应该查资料,查他们的区别,就像数组a 和 &a 和&a[0]的区别。
我看到你采纳满意答宴团搭案了,can[0].name的调用方法肯定是正确的,但是前面的为什么是错的,你知道了吗?相比显然知道原因更重要,而不是知道要can[0].name这样写。
⑥ 如何输出一个结构体中的数组
首先你的循环的判断p<str.length,C语言中这样是裤薯唯获取不到长度的,你可以试试p<sizeof(str)/sizeof(str[0]);
输出语句手洞改成printf("%s,%d",str[i].ch,str[i].length);就可以输胡培出了
typedefstruct
{
char*ch;
intlength;
}Str;
intmain(){
Strstr[2]={{"ab",1},{"cd",2}};
for(intp=0;p<sizeof(str)/sizeof(str[0]);p++){
printf("%s,%d ",str[p].ch,str[p].length);
}
return0;
}
⑦ c语言中 输入人的姓名然后将这个姓名相关的结构体数组中的数据都输出出来
#include<stdio.h>
#include<string.h>
#defineN20
structSTUD{charname[40];intage,sex,number;};
voidmain(){structSTUDa[N];charname[40];inti;
for(i=0;i<N;i++)scanf("%s%d%d%d",a[i].name,&a[i].age,&a[i].sex,&a[i].number);
printf("输入姓名:");scanf("%s",name);
for(i=0;i<N;i++)
if(strcmp(name,a[i].name)==0){
printf("年龄%d,性别%s,学号%d ",a[i].age,(a[i].sex==1)?("男"):("女"),a[i].number);
break;
}
}
⑧ C语言结构体数组输出学生信息错误
数组下标是从0开始,没有score[4],将1234改握冲为0123
输入字符串会自动加上'\0',你给student[i].name[N]加了空字符后,字符串变短了,所以只有一个肆皮竖裂大字符,因为N等于1
⑨ C语言中无法输出结构体数组啊
for(i=0;i<N;i++);
{
printf("%3d %3d %3.2f %3d %3.2f %3.2f\n",peo2[i].room,peo2[i].sh,peo2[i].sf,peo2[i].dh,peo2[i].df,peo2[i].hj);
}
上面这个for语扰手指句缓配后面薯敬多了个分号
⑩ C语言结构体数组,输出中加取地址符是为什么
stAlpha[0].chLetter 表示第一个结构体中字符数组的首地址,再加上[2]就表示字符数组中的第3个字符,所以要再加上取址符来传给printf函数一个地址了。
写成这样就可以不加取址符了。
printf("%s,%s\n",stAlpha[0].chLetter+2,stAlpha[1].chLetter+2);