1. 程式人生 > >c程序設計 8.15寫幾個函數:①輸個職工的姓名和職工號;②按職工號由小到大順序排序,姓名順序也隨之調整;③要求輸入一個職工號,用折半法找出該職工的姓名,從主函數輸入要查找的職工號,輸出該職工

c程序設計 8.15寫幾個函數:①輸個職工的姓名和職工號;②按職工號由小到大順序排序,姓名順序也隨之調整;③要求輸入一個職工號,用折半法找出該職工的姓名,從主函數輸入要查找的職工號,輸出該職工

xmx ebr ckey ros lbp loj ase vfk cu2

8.15寫幾個函數:①輸個職工的姓名和職工號;②按職工號由小到大順序排序,姓名順序也隨之調整;③要求輸入一個職工號,用折半法找出該職工的姓名,

從主函數輸入要查找的職工號,輸出該職工。

寫的時候為方便輸入,我設的是輸入3名職工的信息。 #define N 3

#include <stdio.h>
#define N 3 
#define LEN 20

//定義一個結構體類型
struct student{
    char name[LEN];
    int num;
};

int main(){
    int no;
    void output(struct student stu[]);
    
void input(struct student stu[]); void sortByNum(struct student stu[]); void binSearch(int no,struct student stu[]); struct student stu[N]; input(stu); output(stu); sortByNum(stu); output(stu); printf("請輸入要查找的職工號no.:\n"); scanf("%d",&no); binSearch(no,stu);
return 0; } //輸入N 名職工的姓名和編號 void input(struct student stu[]){ printf("請輸入%d職工的姓名和編號:\n",N); for(int i=0; i<N; i++){ scanf("%s %d",stu[i].name,&stu[i].num); } } //輸出職工的姓名編號 void output(struct student stu[]){ for(int i=0; i<N; i++){ printf("name:%20s, no.:%5d\n",stu[i].name,stu[i].num); } }
//按職工號從小到大排序,姓名也隨之排序 //選擇排序 void sortByNum(struct student stu[]){ int min,i,j; struct student t; for(i=0; i<N; i++){ min=i; for(j=i+1; j<N; j++){ if(stu[j].num < stu[min].num){min=j;} } if(min!=i){ t=stu[min]; stu[min]=stu[i]; stu[i]=t; } } printf("按職工號從小到大排序完畢.\n"); } //二分查找職工編號 void binSearch(int no,struct student stu[]){ //賦初始值 int low=0,high=N-1,mid; while(low<=high) { mid=(low+high)/2; if(no>stu[mid].num){low=mid+1;} else if(no<stu[mid].num){high=mid-1;} else if(no==stu[mid].num) {printf("name:%s\n",stu[mid].name); break; } } //循環結束有兩個原因:1.break。2. low>high. 需要再次判斷無解的原因。 if(low>high) printf("can‘t find the no.%d worker.",no); }

運行結果:

技術分享

c程序設計 8.15寫幾個函數:①輸個職工的姓名和職工號;②按職工號由小到大順序排序,姓名順序也隨之調整;③要求輸入一個職工號,用折半法找出該職工的姓名,從主函數輸入要查找的職工號,輸出該職工