動態呼叫函式
1 - **示例:利用函式指標,實現函式動態呼叫
1 #include 23//------------------------ 排序 -------------------------4//
定義乙個 bool 變數
5 typedef enum
bool;910
//結構體:儲存學生資訊
11 typedef struct
stustudent;
1819
20//
列印學生原有資訊
21void printstudent(student *s,int
count);
28 printf("
\n********************===\n");
29}3031
//按年齡排序
32//
問題:一旦需求改變,如要求按照性別或分數排序,很明顯,這種寫法就很不靈活
33void sortbyage(student *stu,int
count)43}
44}4546 printf("
----------------\n按年齡公升序\n\n");
47for (int i = 0; i < count; i++) ;
51 printf("
\n----------------\n");
5253}54
55//
-------------------- 動態地呼叫函式 ---------------------
56//
函式名作為引數,傳哪個就呼叫哪個
57//
步驟 ①:首先要搞出對應功能的函式
58//
年齡排序
59bool sortwithage(student s1,student s2)
6263
//分數排序
64bool sortwithscore(student s1,student s2)
6768
//姓名排序
69bool sortwithname(student s1,student s2)
7374
//步驟 ②:搞個同上函式型別的函式指標
75//
方式一:不使用 typedef 關鍵字
76//
此時函式指標作為引數,苦澀難懂,極為不便
77void sortstudent01(student *stu,int count,bool(*sortdemo)(student s1,student s2))87}
88}89}
9091
//方式二:使用 typedef 關鍵字
92 typedef bool(*sort)(student s1,student s2);
93//
簡潔明瞭
94void sortstudent(student *stu,int count,sort st,char methodname[20
])104
}105
}106
107 printf("
----------------\n按照 %s 進行排序\n\n
",methodname);
108for (int i = 0; i < count; i++) ;
112 printf("
\n----------------\n");
113114
}115
116117
//------------------ 根據字串,呼叫相應的函式 -----------------
118119
//步驟 ①:確定方法,並宣告同型別的函式指標
120int maxvalue(int a,int
b)123
124int minvalue(int a,int
b)127
128//
錯誤提示
129int errormessage(int a,int
b)133 typedef int (*pfun)(int a,int
b);134
135//
步驟 ②
136//
結構體:包含字串(函式名)、指向該函式的指標
137 typedef struct
namefunctionpairnfpdemo;
141142
//把方法放進結構體
143 nfpdemo nfp[2] =,
146
147};
148149
//步驟 ③:定義乙個函式,返回值是該型別函式的指標
150 pfun getfunctionwithname(char
name)
157}
158159
return
errormessage;
160};
161162
163int main(int argc, const
char *ar**) ,
167 ,
168 ,
169
170};
171172 printstudent(stu, sizeof(stu)/sizeof(stu[0
]));
173 sortbyage(stu,4
);174
175//
----------------------------------------
176//
只需要輸入函式名,就可以執行相應的函式
177 sortstudent(stu, 4, sortwithage,"
age"
);178 sortstudent(stu, 4, sortwithscore,"
score");
179 sortstudent(stu, 4, sortwithname,"
name");
180181
182//
-----------------------------------------
183//
根據字串,呼叫相應的函式
184 pfun pp = getfunctionwithname("ma"
);185 printf("
%d\n
", pp(30,40
));186
187return0;
188 }
LQ訓練營 C 學習筆記 動態規劃入門
1.3 動態規劃的優化原理與無後效性 2 動態規劃問題 2.2 蒜頭君下山問題 2.3 三維的蒜頭君回家問題 動態規劃是程式設計解題的一種重要手段,1951年美國數學家 bellman等人,根據一類多階段問題的特點,把多階段決策問題變成一系列相互聯絡的單階段問題,然後逐個解決。與此同時,他提出這類問...
等式 清華OJ 訓練營 c 實現
描述 有n個變數和m個 相等 或 不相等 的約束條件,請你判定是否存在一種賦值方案滿足所有m個約束條件。輸入第一行乙個整數t,表示資料組數。接下來會有t組資料,對於每組資料 第一行是兩個整數n,m,表示變數個數和約束條件的個數。接下來m行,每行三個整數a,b,e,表示第a個變數和第b個變數的關係 若...
C語言刷題訓練營 第一講
老師經常告訴我們 學習程式設計最好的辦法就是上機實踐,因為你要對計算機下指令,想讓計算機幫你幹活,就得多和計算機 交流 實踐才能出真知。輸入描述 無 輸出描述 include int main 解析 本題是乙個沒有輸入要求的題目,只考察輸入,所以只需要準確無誤的輸出結果就行了。題目描述 每個人都想成...