網域名稱俱樂部


返回   網域名稱俱樂部 > 電腦與網路技術 > 電腦網路相關技術 > 一般軟體與網路使用討論

回覆
 
主題工具
  #11  
舊 2014-02-05, 09:49 PM
yumi yumi 目前離線
進階會員
 
註冊日期: 2005-12-29
文章: 1,373
預設

如果出题的人要求打印1-10的立方的话,有很多种写法可以达到目的。当然,不可少的是计算赋值、然后打印了。

#include <stdio.h>
int main(void)
{
int sqrs[11];
int x;
for(x=1;x<11;x++)
{sqrs[x]=x*x*x; printf("%d\n",sqrs[x]);}
return 0;
}
__________________
收购各位版友的四字母com、数字米com/net/cc、三杂米com、拼音米。价格随行市价。站内联系。
回覆時引用此篇文章
  #12  
舊 2014-02-05, 09:56 PM
哈啦 的頭像
哈啦 哈啦 目前離線
論壇管理員
 
註冊日期: 2002-05-28
文章: 22,996
預設

引用:
作者: yumi 查看文章
#include <stdio.h>
int main(void)
{
int sqrs[11];
int x;
for(x=1;x<11;x++)
{sqrs[x]=x*x*x; printf("%d\n",sqrs[x]);}
return 0;
}
你這個程式的邏輯我就完全能懂了,thanks!!

但請教一下,陣列不是都要從sqrs[0]開始嗎?雖然你這程式打印出來是正確的,我也都能理解,只是為何不是從[0](如前面那個程式是以sqrs[x-1]來達到以0開始的作用)開始?
__________________
咖啡走路
微博


您是網站站長嗎?歡迎到站長俱樂部 一起討論吧。
按我看版規
code.club
回覆時引用此篇文章
  #13  
舊 2014-02-05, 10:08 PM
yumi yumi 目前離線
進階會員
 
註冊日期: 2005-12-29
文章: 1,373
預設

区别就在于:
原先的程序,定义了int sqrs[10];,只是从sqrs[0]到sqrs[9]这10个单元,没有sqrs[10],所以在计算10个立方值时,无法把10的立方放进sqrs[10],只好采取错位的方式,把x的立方放在sqrs[x-1]的位置。
而我后来定义的是int sqrs[11];从sqrs[0]定义到了sqrs[10],在计算10个立方值时,可以把10的立方放进sqrs[10],直接把x的立方放进sqrs[x],这样更好理解、符合人的习惯。当然这样,sqrs[0]就闲置无用了,浪费了4个字节的内存。但在今天,已经没有必要在意4个字节内存了。怎么容易理解就怎么写呗。
__________________
收购各位版友的四字母com、数字米com/net/cc、三杂米com、拼音米。价格随行市价。站内联系。
回覆時引用此篇文章
  #14  
舊 2014-02-05, 10:11 PM
哈啦 的頭像
哈啦 哈啦 目前離線
論壇管理員
 
註冊日期: 2002-05-28
文章: 22,996
預設

引用:
作者: yumi 查看文章
当然这样,sqrs[0]就闲置无用了,浪费了4个字节的内存。但在今天,已经没有必要在意4个字节内存了。怎么容易理解就怎么写呗。

原來如此,所以陣列以0為起始,但我們未必非得凡事都從它的0開始,頂多就是浪費了之前配置的一些memory了,是這樣嗎? 又長知識了。
__________________
咖啡走路
微博


您是網站站長嗎?歡迎到站長俱樂部 一起討論吧。
按我看版規
code.club
回覆時引用此篇文章
  #15  
舊 2014-02-06, 09:19 AM
lukawa lukawa 目前離線
進階會員
 
註冊日期: 2002-09-23
文章: 117
預設

其實我一直覺得學程式有些習慣需要內化,就像是array由0開始,這跟我們一般的習慣
就不大一樣,或者說

x = x +1

如果以數學來說,應該沒有一個值,會符合上面的運算式的^^!!
所以上面的"equal" 應該是解釋為 "assign"
這寫程式寫久了就會內化成習慣,但是剛開始學程式的人,可能都會有類似的疑問
另外站長的疑問,比較像是把題目跟答案倒著看了,先想著題目,自然就會有這樣的答案出來
回覆時引用此篇文章
  #16  
舊 2014-02-06, 12:37 PM
哈啦 的頭像
哈啦 哈啦 目前離線
論壇管理員
 
註冊日期: 2002-05-28
文章: 22,996
預設

引用:
作者: lukawa 查看文章
其實我一直覺得學程式有些習慣需要內化,就像是array由0開始,這跟我們一般的習慣
就不大一樣,或者說

x = x +1

如果以數學來說,應該沒有一個值,會符合上面的運算式的^^!!
所以上面的"equal" 應該是解釋為 "assign"
這寫程式寫久了就會內化成習慣,但是剛開始學程式的人,可能都會有類似的疑問
另外站長的疑問,比較像是把題目跟答案倒著看了,先想著題目,自然就會有這樣的答案出來
所言極是。
__________________
咖啡走路
微博


您是網站站長嗎?歡迎到站長俱樂部 一起討論吧。
按我看版規
code.club
回覆時引用此篇文章
  #17  
舊 2014-02-06, 12:52 PM
sakillll sakillll 目前離線
進階會員
 
註冊日期: 2004-07-11
文章: 1,481
預設

哈大在學寫程式?
__________________
123
回覆時引用此篇文章
  #18  
舊 2014-02-06, 01:02 PM
哈啦 的頭像
哈啦 哈啦 目前離線
論壇管理員
 
註冊日期: 2002-05-28
文章: 22,996
預設

引用:
作者: sakillll 查看文章
哈大在學寫程式?
對,自己看一點,主要是年紀大了,為了防止腦袋退化,兼學點有用的東西。
__________________
咖啡走路
微博


您是網站站長嗎?歡迎到站長俱樂部 一起討論吧。
按我看版規
code.club
回覆時引用此篇文章
  #19  
舊 2014-02-06, 01:36 PM
sakillll sakillll 目前離線
進階會員
 
註冊日期: 2004-07-11
文章: 1,481
預設

引用:
作者: 哈啦 查看文章
對,自己看一點,主要是年紀大了,為了防止腦袋退化,兼學點有用的東西。
趕快做出成品給大家玩玩
__________________
123
回覆時引用此篇文章
  #20  
舊 2014-02-06, 04:38 PM
哈啦 的頭像
哈啦 哈啦 目前離線
論壇管理員
 
註冊日期: 2002-05-28
文章: 22,996
預設

繼續請教高手:
以下的式子是要把陣列a1的數值複製給陣列a2。

課本上的標準寫法如下:
引用:
#include <stdio.h>

int main(void)
{

int i,a1[10],a2[10];

for(i=1;i<11;i++) a1[i-1]=i;
for(i=0;i<10;i++) a2[i]=a1[i];
for(i=0;i<10;i++) printf("%d\n",a2[i]);

return 0;
}
而我看了yumi剛才的寫法後獲得啟發,也改寫為如下:
引用:
#include <stdio.h>

int main(void)
{

int i,a1[10],a2[10];

for(i=1;i<11;i++){
a1[i-1]=i;
a2[i]=a1[i-1];
printf("%d\n",a2[i]);}
return 0;
}
這二者跑出來的結果都是一樣的,看似我改寫的也頗為正確,不過我自己懷疑第二個式子中有不可見的錯誤存在?(編譯器未發出警告),就是紅字部份的a2[i]=a1[i-1],它等於是a2陣列的第一個是從a2[1]啟始,前面的a2[0]並未被賦值,這一點不打緊,但由於a2[10]之前已宣告為只有十個元素,因此這裡最後會一路被加到a[10]而這是第十一個元素,超過了原先只能有十個元素的宣告。看網路上說,
引用:
C/C++ 為了執行效率,並不會自動檢查陣列索引值是否超過陣列邊界,
我們要自己寫程式來確保不會越界。一旦越界,將導致無法預期的後果。
因此我的疑問如下,我這改寫的式子雖然答案是ok的,但它式子本身應是錯的,是嗎?
其次,陣列元素超過原來宣告的數目,未必一定會造成錯誤,就是說有可能有影響也有可能沒影響,所謂的導致無法預期的後果?是這樣嗎?
我有試著把a2[i]=a1[i-1]改成
a2[i-1]=a1[i-1] 或者
a2[i]=a1[i]
結果答案出來全都亂七八糟。
請問正確的改寫法該是什麼呢?

唔該先。
__________________
咖啡走路
微博


您是網站站長嗎?歡迎到站長俱樂部 一起討論吧。
按我看版規
code.club
回覆時引用此篇文章
回覆

主題工具

發文規則
不可以發表新主題
不可以發表回覆
不可以上傳附件
不可以編輯自己的文章

啟用 BB 代碼
論壇啟用 表情符號
論壇啟用 [IMG] 代碼
論壇禁用 HTML 代碼



所有時間均為 +8。現在的時間是 05:25 AM


本站主機由網易虛擬主機代管
Powered by vBulletin® 版本 3.8.4
版權所有 ©2000 - 2024,Jelsoft Enterprises Ltd.