① 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);