Re: [問題] 請問初學C語言推薦書(文長

作者: losepacific (Losepacific)   2018-05-11 01:06:17
※ 引述《Neisseria (Neisseria)》之銘言:
: 不預先將陣列排序的話,大概就是 O(n)
: 以下提供一個 C 的版本:
: #include <assert.h>
: #include <stddef.h>
: // Yet another linear search.
: #define max(sz, arr, out) do { \
: if (sz <= 1) { \
: out = arr[0]; \
: break; \
: } \
: out = arr[0]; \
: size_t i; \
: for (i = 1; i < sz; i++) { \
: out = arr[i] > out ? arr[i] : out; \
: } \
: } while (0);
: int main(void) {
: int arr_i[] = {4, 2, 5, 1, 3};
: int max_i;
: max(5, arr_i, max_i);
: assert(max_i == 5);
: float arr_f[] = {2.2, 3.3, 1.1, 5.5, 4.4};
: float max_f;
: max(5, arr_f, max_f);
: assert(max_f == 5.5);
: return 0;
: }
: 這是寫好玩的,考試不要這樣寫,這樣只是在搞自己
: 有寫過一些 C 的就知道原因
看了大大的程式碼才想到有可能會遇到小數。
所以修改了自己之前寫的程式碼,改完如下:
#include <stdio.h>
#include <stdlib.h>
float max(char**, int);
int main(int argc, char* argv[]){
printf("%f\n", max(argv+1, argc-1));
return 0;
}
float max(char** ap, int limit){
if (limit == 1) return atof(*ap) ;
float tmp;
return atof(*ap) > (tmp = max(ap+1, limit-1)) ? atof(*ap) : tmp;
}
作者: losepacific (Losepacific)   2018-05-11 01:43:00
忘了考慮不給參數的狀況了!!
作者: KanzakiHAria (神崎・H・アリア)   2018-05-11 05:13:00
當你個版?不會使用大E兩篇合在一起?

Links booklink

Contact Us: admin [ a t ] ucptt.com