這道題目涉及到了C語言結構體,函數指針,排序的相關內容
函數
小王是公司的倉庫管理員,一天,他接到了這樣一個任務:從倉庫中找出一根鋼管(倉庫中待測的鋼管數不超過1000根)。這聽起來不算什麼,可是這根鋼管的要求可真是讓他犯難了,要求以下:
一、 這根鋼管必定要是倉庫中最短的;
二、 這根鋼管必定要是最短的鋼管中最粗的;
三、 這根鋼管必定要是符合前兩條的鋼管中編碼最大的(每根鋼管都有一個互不相同的編碼,越大表示生產日期越近)。
相關的資料到是有,但是,手工從幾百份鋼管材料中選出符合要求的那根……
要不,仍是請你編寫個程序來幫他解決這個問題吧。
輸入測試的鋼管數n,整數n(n<=1000)表示測試數據的組數)
每根鋼管有這樣三個信息,分別表示一根鋼管的長度(以毫米爲單位)、直徑(以毫米爲單位)和編碼(一個含有9位數字的字符串)。
輸出符合條件的那根鋼管
測試
鋼管結構體定義以下:編碼
typedef struct m { int a;//長度 int b;//直徑 char c[10];//編號 }Infor;
輸入提示信息:"請輸入鋼管數量:\n"
輸入數據格式:"%d"
輸入提示信息:"請輸入鋼管信息(長度、直徑和編碼:\n"
輸入數據格式:"%d%d%s"
輸出提示信息:printf("倉庫中符合條件的那根鋼管的信息是:\n");
輸出數據格式:"%d\t%d\t%s\n"
指針
#include <stdio.h> #include <stdlib.h> #include <string.h> const int maxn = 1010; typedef struct m info; struct m { int a; int b; char c[10]; }; void sort(int n, info a[],int (*cmp)(info, info)); int SortBya(info, info); int SortByb(info, info); int SortByc(info, info); int main(void) { int n; info a[maxn]; printf("請輸入鋼管數量:\n"); scanf("%d",&n); printf("請輸入鋼管信息(長度、直徑和編碼:\n"); int i; for(i=0;i<n;i++) scanf("%d %d %s",&a[i].a, &a[i].b, a[i].c); sort(n, a, SortBya); int find = 0, mark=0; int t = a[0].a; while(!find) { mark ++; if(t != a[mark].a) find = 1; } sort(mark, a, SortByb); find = 0; mark = 0; t = a[0].b; while(!find) { mark ++ ; if(t != a[mark].b) find = 1; } sort(mark, a, SortByc); printf("倉庫中符合條件的那根鋼管的信息是:\n"); printf("%d\t%d\t%s\n", a[0].a, a[0].b, a[0].c); return 0; } void sort(int n, info a[],int (*cmp)(info, info)) { int i,j; for(i=1;i<n;i++) for(j=0;j<n-i;j++) if((*cmp)(a[j], a[j+1])) { info temp; temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; } } int SortBya(info a, info b) { if(a.a > b.a) return 1; else return 0; } int SortByb(info a, info b) { if(a.b < b.b) return 1; else return 0; } int SortByc(info a, info b) { long int t1,t2; t1 = atol(a.c); t2 = atol(b.c); if(t1 < t2) return 1; else return 0; }