完数c++语言程序_C语言经典100题(19)
1
上期答案揭曉首先給大家看看上一篇文章C語言經典100題(18)中第三部分編程題的答案:
#includeint main(){ int s=0,a,n,t; printf("請輸入 a 和 n:\n"); scanf("%d%d",&a,&n); t=a; while(n>0) { s+=t; a=a*10; t+=a; n--; } printf("a+aa+...=%d\n",s); return 0;}以上實例輸出結果為:
請輸入 a 和 n:2 5a+aa+...=246902
今日知識分享
指針的算術運算
C 指針是一個用數值表示的地址。因此,您可以對指針執行算術運算。可以對指針進行四種算術運算:++、--、+、-。
假設?ptr?是一個指向地址 1000 的整型指針,是一個 32 位的整數,讓我們對該指針執行下列的算術運算:
ptr++在執行完上述的運算之后,ptr?將指向位置 1004,因為 ptr 每增加一次,它都將指向下一個整數位置,即當前位置往后移 4 個字節。這個運算會在不影響內存位置中實際值的情況下,移動指針到下一個內存位置。如果?ptr?指向一個地址為 1000 的字符,上面的運算會導致指針指向位置 1001,因為下一個字符位置是在 1001。
遞增一個指針
我們喜歡在程序中使用指針代替數組,因為變量指針可以遞增,而數組不能遞增,數組可以看成一個指針常量。下面的程序遞增變量指針,以便順序訪問數組中的每一個元素:
#include const int MAX = 3;int main (){ int var[] = {10, 100, 200}; int i, *ptr; /* 指針中的數組地址 */ ptr = var; for ( i = 0; i < MAX; i++) { printf("存儲地址:var[%d] = %x\n", i, ptr ); printf("存儲值:var[%d] = %d\n", i, *ptr ); /* 移動到下一個位置 */ ptr++; } return 0;}當上面的代碼被編譯和執行時,它會產生下列結果:
存儲地址:var[0] = bf882b30存儲值:var[0] = 10存儲地址:of var[1] = bf882b34存儲值:var[1] = 100存儲地址:of var[2] = bf882b38存儲值:var[2] = 200遞減一個指針
同樣地,對指針進行遞減運算,即把值減去其數據類型的字節數,如下所示:
#include const int MAX = 3;int main (){ int var[] = {10, 100, 200}; int i, *ptr; /* 指針中最后一個元素的地址 */ ptr = &var[MAX-1]; for ( i = MAX; i > 0; i--) { printf("存儲地址:var[%d] = %x\n", i-1, ptr ); printf("存儲值:var[%d] = %d\n", i-1, *ptr ); /* 移動到下一個位置 */ ptr--; } return 0;}當上面的代碼被編譯和執行時,它會產生下列結果:
存儲地址:var[2] = 518a0ae4存儲值:var[2] = 200存儲地址:var[1] = 518a0ae0存儲值:var[1] = 100存儲地址:var[0] = 518a0adc存儲值:var[0] = 10指針的比較
指針可以用關系運算符進行比較,如 ==、< 和 >。如果 p1 和 p2 指向兩個相關的變量,比如同一個數組中的不同元素,則可對 p1 和 p2 進行大小比較。
下面的程序修改了上面的實例,只要變量指針所指向的地址小于或等于數組的最后一個元素的地址 &var[MAX - 1],則把變量指針進行遞增:
#include const int MAX = 3;int main (){ int var[] = {10, 100, 200}; int i, *ptr; /* 指針中第一個元素的地址 */ ptr = var; i = 0; while ( ptr <= &var[MAX - 1] ) { printf("Address of var[%d] = %x\n", i, ptr ); printf("Value of var[%d] = %d\n", i, *ptr ); /* 指向上一個位置 */ ptr++; i++; } return 0;}當上面的代碼被編譯和執行時,它會產生下列結果:
Address of var[0] = bfdbcb20Value of var[0] = 10Address of var[1] = bfdbcb24Value of var[1] = 100Address of var[2] = bfdbcb28Value of var[2] = 2003
今日經典編程題題目:一個數如果恰好等于它的因子之和,這個數就稱為"完數"。例如6=1+2+3.編程找出1000以內的所有完數。程序分析:請參照:C語言經典100題(14)。各位有興趣的讀者可以自行設計程序實現,我將在下一篇文章揭曉該題的代碼實現供參考!
掃碼關注我,手把手帶你擼代碼如果你覺得文章讓您增長了知識,
請點擊右下方的“在看”
??總結
以上是生活随笔為你收集整理的完数c++语言程序_C语言经典100题(19)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 闽政通换手机号了怎么办,原来的登录密码忘
- 下一篇: 食盐中的抗结剂是什么东西 介绍食盐中的抗