求1+2+…+n,要求不能使用乘除法、for、while、if、else...
阿新 • • 發佈:2019-01-31
題目:求1+2+…+n,
printf(“%u%u\n”,p+6,*(q+1)+4);
理解不了的地方:(*)q[5]=a,這句話是什麼意思呢?實在是費解,還請大牛給分析下
首先說明這短短兩條語句,卻包括了兩處語法錯誤:1,*p = a 這句是不合法的,兩個值的型別不同,前者是整形指標,後者是陣列指標,如果你一定要這樣做的話應該這樣寫 *p = (int *)a 強制轉換; 2,(*)q[5] = a 這句也是不對的(或者是我見識少,從未見過這種寫法),程式的意思可能是這樣 (*q)[5] = a 將q定義為陣列指標。
經過兩處改動後,再來看,假如a的地址是2000,int是4個位元組的話。那麼p+6的值就是2000 + 4*6 = 2024; *(q+1)+4 的值就是 2000 + 5*4 + 4*4。
最後,你說(*)q[5]=a 不理解,我認為是不解 (*q)[5] = a 這句,其實這是定義了一個數組指標,該指標指向的是一個數組。例如 ++q,是將q移動一個數組的距離,在本例中就是 4*5 。
要求不能使用乘除法、for、while、if、else、switch、case等關鍵字以及條件判斷語句(A?B:C)。
其實會有很多種解法,但是下面給出了一個簡單的程式碼-----巧用遞迴演算法。
#include <stdio.h> #include <stdlib.h> #include <string.h> int add_fun(int n, int & sum) { n && add_fun(n-1, sum); return (sum += n); } int main() { int sum = 0; int n = 100; printf("1+2+...+n = %d\n", add_fun(n, sum)); return 0; }
順便記錄下一些容易忘記的題目:
int a[3][5],*p=a,(*)q[5]=a;設a的地址為2000,則下述語句的輸出的結果??printf(“%u%u\n”,p+6,*(q+1)+4);
理解不了的地方:(*)q[5]=a,這句話是什麼意思呢?實在是費解,還請大牛給分析下
首先說明這短短兩條語句,卻包括了兩處語法錯誤:1,*p = a 這句是不合法的,兩個值的型別不同,前者是整形指標,後者是陣列指標,如果你一定要這樣做的話應該這樣寫 *p = (int *)a 強制轉換; 2,(*)q[5] = a 這句也是不對的(或者是我見識少,從未見過這種寫法),程式的意思可能是這樣 (*q)[5] = a 將q定義為陣列指標。
經過兩處改動後,再來看,假如a的地址是2000,int是4個位元組的話。那麼p+6的值就是2000 + 4*6 = 2024; *(q+1)+4 的值就是 2000 + 5*4 + 4*4。
最後,你說(*)q[5]=a 不理解,我認為是不解 (*q)[5] = a 這句,其實這是定義了一個數組指標,該指標指向的是一個數組。例如 ++q,是將q移動一個數組的距離,在本例中就是 4*5 。