C語言-對一個結構體中的欄位進行排序
這是幫別人做的一個題目,好久沒有接觸過C語言了,有點發怵,不過似乎找回點當時學C語言,做課程設計的感覺。
題目:定義一個陣列(學生結構體陣列),裡面包含學號、姓名、身份證和三科學生成績,要求寫一個函式,根據學生任何一個欄位(如學號、姓名、身份證),進行排序。
原始碼:
//// stu.cpp : Defines the entry point for the console application.
////
//
#include "stdafx.h"
//------------------------------------------指標排序-------------------------------------------------------------------------------
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 3
//學生結構體
struct student{
long stuNum; //學號
char name[20];//姓名
char idCard[18];//身份證
float score[3];//三門成績
};
//根據學生姓名排序
void name_sort(student *stu,int n)
{
student temp;
for(int i=0;i<n-1;i++)
{
for(int j=0;j<n-1-i;j++)
{
if(strcmp(stu[j].name,stu[j+1].name)>0)
{
temp =stu[j+1];
stu[j+1]=stu[j];
stu[j]=temp;
}
}
}
printf("\n");
printf("*根據學生姓名排序後的學生情況:\n\n");
for(int i=0;i<N;i++)
{
printf("第 %d 個學生資訊:\n學號:%ld\t姓名:%s\t身份證:%s\t語文:%.2f\t數學:%.2f\t英語:%.2f\n\n",i+1,stu[i].stuNum,stu[i].name,stu[i].idCard,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
}
}
//根據身份證進行排序
void idCard_sort(student *stu,int n)
{
student temp;
for(int i=0;i<n-1;i++)
{
for(int j=0;j<n-1-i;j++)
{
if(strcmp(stu[j].idCard,stu[j+1].idCard)>0)
{
temp =stu[j+1];
stu[j+1]=stu[j];
stu[j]=temp;
}
}
}
printf("\n");
printf("*根據學生身份證排序後的學生情況:\n\n");
for(int i=0;i<N;i++)
{
printf("第 %d 個學生資訊:\n學號:%ld\t姓名:%s\t身份證:%s\t語文:%.2f\t數學:%.2f\t英語:%.2f\n\n",i+1,stu[i].stuNum,stu[i].name,stu[i].idCard,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
}
}
//根據學號進行排序
void stuNum_sort(student *stu,int n)
{
student temp;
for(int i=0;i<n-1;i++)
{
for(int j=0;j<n-1-i;j++)
{
if(stu[j].stuNum>stu[j+1].stuNum)
{
temp =stu[j+1];
stu[j+1]=stu[j];
stu[j]=temp;
}
}
}
printf("\n");
printf("*根據學生學號排序後的學生情況:\n\n");
for(int i=0;i<N;i++)
{
printf("第 %d 個學生資訊:\n學號:%ld\t姓名:%s\t身份證:%s\t語文:%.2f\t數學:%.2f\t英語:%.2f\n\n",i+1,stu[i].stuNum,stu[i].name,stu[i].idCard,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
}
}
//main函式
int main()
{
struct student stu[N],*pStu;
//控制檯螢幕變為藍色背景
system("color 1f");
printf("請依次輸入學生的學號,姓名,身份證,三門成績(空格分開)\n");
for(int i=0;i<N;i++)
{
printf("輸入第 %d 個學生的資訊\n",i+1);
scanf("%ld%s%s%f%f%f",&stu[i].stuNum,stu[i].name,stu[i].idCard,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
}
pStu=stu;
//清屏
system("cls");
printf("\n*** 輸入1 按照學生學號排序 ***\n*** 輸入2 按照學生姓名排序 ***\n*** 輸入3 按照學生身份證排序 ***\n*** 輸入0 退出 ***\n\n");
printf("請輸入:");
int t;
scanf("%d",&t);
//迴圈
do{
//根據使用者輸入的值選擇排序的欄位
switch (t)
{
case 1:
stuNum_sort(pStu,N);//學號排序
break;
case 2:
name_sort(pStu,N);//姓名排序
break;
case 3:
idCard_sort(pStu,N);//身份證排序
break;
default:
name_sort(pStu,N);
}
printf("\n請輸入:");
scanf("%d",&t);
}while(t!=0);
return 1;
}
//------------------沒有指標--------------------------------------------------------------------------------------------------
//
//#include<stdio.h>
//#include<stdlib.h>
//#include<string.h>
//
//#define N 5
//
////學生結構體
//struct student{
// long stuNum; //學號
// char name[20];//姓名
// char idCard[18];//身份證
// float score[3];//三門成績
//};
//
//
////根據學生姓名排序
//void name_sort(student stu[],int n)
//{
// student temp;
// for(int i=0;i<n-1;i++)
// {
// for(int j=0;j<n-1-i;j++)
// {
// if(strcmp(stu[j].name,stu[j+1].name)>0)
// {
// temp =stu[j+1];
// stu[j+1]=stu[j];
// stu[j]=temp;
//
// }
// }
// }
//
//
// printf("\n");
// printf("*根據學生姓名排序後的學生情況:\n\n");
//
// for(int i=0;i<N;i++)
// {
// printf("第 %d 個學生資訊:\n學號:%ld\t姓名:%s\t身份證:%s\t語文:%.2f\t數學:%.2f\t英語:%.2f\n\n",i+1,stu[i].stuNum,stu[i].name,stu[i].idCard,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
//
// }
//
//
//}
////根據身份證進行排序
//void idCard_sort(student stu[],int n)
//{
// student temp;
// for(int i=0;i<n-1;i++)
// {
// for(int j=0;j<n-1-i;j++)
// {
// if(strcmp(stu[j].idCard,stu[j+1].idCard)>0)
// {
// temp =stu[j+1];
// stu[j+1]=stu[j];
// stu[j]=temp;
//
// }
// }
// }
//
//
// printf("\n");
// printf("*根據學生身份證排序後的學生情況:\n\n");
//
// for(int i=0;i<N;i++)
// {
// printf("第 %d 個學生資訊:\n學號:%ld\t姓名:%s\t身份證:%s\t語文:%.2f\t數學:%.2f\t英語:%.2f\n\n",i+1,stu[i].stuNum,stu[i].name,stu[i].idCard,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
//
// }
//
//
//}
//
////根據學號進行排序
//
//void stuNum_sort(student stu[],int n)
//{
// student temp;
//
// for(int i=0;i<n-1;i++)
// {
// for(int j=0;j<n-1-i;j++)
// {
// if(stu[j].stuNum>stu[j+1].stuNum)
// {
// temp =stu[j+1];
// stu[j+1]=stu[j];
// stu[j]=temp;
//
// }
// }
// }
//
//
// printf("\n");
// printf("*根據學生學號排序後的學生情況:\n\n");
//
// for(int i=0;i<N;i++)
// {
// printf("第 %d 個學生資訊:\n學號:%ld\t姓名:%s\t身份證:%s\t語文:%.2f\t數學:%.2f\t英語:%.2f\n\n",i+1,stu[i].stuNum,stu[i].name,stu[i].idCard,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
//
// }
//
//
//}
//
////main函式
//
//int main()
//{
//
// struct student stu[N];
//
// //控制檯螢幕變為藍色背景
// system("color 1f");
//
// printf("請依次輸入學生的學號,姓名,身份證,三門成績(空格分開)\n");
// for(int i=0;i<N;i++)
// {
// printf("輸入第 %d 個學生的資訊\n",i+1);
// scanf("%ld%s%s%f%f%f",&stu[i].stuNum,stu[i].name,stu[i].idCard,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
//
// }
//
// //清屏
// system("cls");
//
//
// //printf("*你所輸入的學生資訊情況:\n");
// //for(i=0;i<N;i++)
// //{
// // printf("第 %d 個學生資訊:\n學號:%ld\t姓名:%s\t身份證:%s\t語文:%.2f\t數學:%.2f\t英語:%.2f\n",i+1,stu[i].stuNum,stu[i].name,stu[i].idCard,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
// //
// //}
//
//
// printf("\n*** 輸入1 按照學生學號排序 ***\n*** 輸入2 按照學生姓名排序 ***\n*** 輸入3 按照學生身份證排序 ***\n*** 輸入0 退出 ***\n\n");
//
// printf("請輸入:");
// int t;
// scanf("%d",&t);
//
// //迴圈
// do{
// //根據使用者輸入的值選擇排序的欄位
// switch (t)
// {
// case 1:
// stuNum_sort(stu,N);//學號排序
// break;
// case 2:
// name_sort(stu,N);//姓名排序
// break;
//
// case 3:
// idCard_sort(stu,N);//身份證排序
// break;
//
// default:
// name_sort(stu,N);
// }
//
//
// printf("\n請輸入:");
// scanf("%d",&t);
//
// }while(t!=0);
//
//
// return 1;
//}
首頁效果圖:
資源下載:
http://download.csdn.net/my/uploads
相關文章
- C語言結構聯合位欄位知識體系總結大學霸IT達人C語言
- jQuery對Table一個欄位排序jQuery排序
- C 語言結構體的對齊原則結構體
- C語言(結構體)C語言結構體
- c語言結構體中的一個char陣列怎麼賦值?C語言結構體陣列賦值
- 【c語言】統計一個數二進位制中的1的個數C語言
- C語言結構體專題C語言結構體
- 在InfoPakcage 中消失的語言欄位
- C 結構體中的位域概念結構體
- 資料結構之---C語言實現快速排序(多個版本)資料結構C語言排序
- C語言 連結串列排序C語言排序
- 關於C語言結構體對齊問題的探討C語言結構體
- 欄位按照指定 ID 順序進行排序排序
- 一個命令對文字進行高效排序排序
- 【c語言】求兩個數中不同的位的個數C語言
- C++結構體排序C++結構體排序
- C語言-->(十四)結構體、巨集、編譯C語言結構體編譯
- C語言結構體作為形參C語言結構體
- C語言_瞭解下結構體指標C語言結構體指標
- C語言實用演算法系列之學生管理系統_對整個結構體操作_氣泡排序_提取排序規則C語言演算法結構體排序
- 大資料MongoDB之mgo驅動如何對查詢結果進行排序(正序逆序多欄位排序)?大資料MongoDB排序
- 二維陣列根據欄位進行排序陣列排序
- 如何系統學習C 語言(中)之 結構體篇結構體
- dotnet C# 給結構體欄位賦值非執行緒安全C#結構體賦值執行緒
- 失落的C語言結構體封裝藝術C語言結構體封裝
- Laravel 對於 Mysql 欄位string型別查詢,當使用數字對這個欄位進行查詢,PHP弱型別語言導致索引失效LaravelMySql型別PHP索引
- C語言版資料結構及演算法_快速排序C語言資料結構演算法排序
- C語言教程——03 C語言結構C語言
- 【c++】結構體sort排序C++結構體排序
- 對N個數進行排序排序
- C語言訪問資料物件在記憶體中真實位模式的一個方法C語言物件記憶體模式
- Java stream sorted使用 Comparator 進行多欄位排序Java排序
- Go 語言 結構體Go結構體
- C語言-選擇結構C語言
- C語言中結構體struct的對齊問題C語言結構體Struct
- C 語言結構體記憶體佈局問題結構體記憶體
- C語言結構體記憶體佈局問題C語言結構體記憶體
- 結構體中的位域結構體