C中陣列疑惑,C語言陣列問題

2023-04-15 07:35:03 字數 5714 閱讀 4525

1樓:高金山

陣列有分動態陣列和靜態陣列;

動態陣列,是指數組的元素個數,不是宣告的時候就定下來,比如int a=new int[i];這裡的i也是變數,有可能為1,也可能為10。

靜態陣列,是指宣告的時候,元素的個數就確定下來了,比如int a[10];

c語言中都是靜態陣列,c++中才有動態陣列的概念。

樓主所說的並不是我上面說的這個含義。

未經過初始化的陣列的元素沒有確定的值,但加static關鍵字後,陣列所有元素初值為0。這是沒有錯的。

int a[10]; printf("%d",a[5]);輸出的是乙個不確定的數值,但一旦陣列宣告後,這個數值就是固定的了,並不會隨時改變,所以老是同乙個數值。

照我上面所說的概念,你這裡的陣列談不上動態不動態。

int b[10]=;printf("%d",b[5]);輸出的就為0,因為它進行了初始化,雖然沒有給其餘的元素賦值,但初始化的時候,系統給它們賦值為0了。

也談不上動態不動態。

2樓:匿名使用者

也許與你想的有些偏差,static是乙個比較特殊的修飾符,全域性變數或者陣列用static來修飾,表示只在此檔案中可以訪問,別的檔案中不可訪問(對於多檔案工程來說)。

函式內部的static表示該變數有全域性的生存期,資料可以保持到程式結束,但只能在該函式內部訪問,不像全域性的變數。

靜態的變數確實會全部初始化為0的,但int b[10] =這種與靜態無關,是因為c語言中,如果使用初始化列表,則未初始化的元素自動置為零。

所以,乙個常用的將所有元素置為零的技巧是:

int b[10] =

3樓:匿名使用者

在c語言中,一般情況下用的陣列都是動態陣列,因為它的靈活性好。用起來方便,你剛才上面說的兩個陣列都是動態陣列。

4樓:匿名使用者

不能叫動態陣列吧,下邊的那個是靜態儲存的,分配在堆上的int b[10]=;叫做對陣列初始化,個數不夠就是0

關於c語言陣列的一些疑惑?

5樓:匿名使用者

書上說的沒錯,你可能把array[10]理解成乙個陣列元素了吧,其實它只是把乙個包含有10個元素的陣列作為引數,而不是乙個陣列元素,明白了嗎?

6樓:格里程式設計辦公技巧

左邊書上說的是陣列的元素不能作為形參,不能理解為陣列不能作為形參。

實際上這書它說的太繞了,不易理解。

只要記住陣列作為函式引數可以由下面幾種方式:

1. type fun(type arr,int size);

fun(type *arr, int size);

fun(type arr[常數], int size);

其中1/2種方式是最常用的,第三種不常用,一般不會寫常數因為寫了編譯器也不關心。另外乙個問題也是你問的吧具體可以看看那個說明。

7樓:匿名使用者

陣列元素不能作為形參, 但是陣列能啊, 例子中形參是乙個陣列。

請問c語言的陣列程式設計問題?

8樓:匿名使用者

c語言**和執行結果如下:

根據提供的輸入資料,4號選手劉嘉玲的平均分79明顯是最高的,不應被淘汰。

最低分應為5號選手梁朝偉的59分,所以圖中輸出與示例不一致。

但結果應該沒錯,確實輸出了最低分選手的相關資訊,望~

附原始碼:#include

#define n 5

int main()

int no[n], score[n][4], i, j, sum, k = 0;

char name[n][50];

for (i = 0; i < n; i++)

scanf("%d", no[i]);

for (i = 0; i < n; i++)

scanf("%s", name[i]);

for (i = 0; i < n; i++)

sum = 0; /記錄每名選手總成績並求平均分。

for (j = 0; j < 3; j++)

scanf("%d", score[i][j]);

sum +=score[i][j];

score[i][3] =sum / 3;

if (score[i][3] k = i; /記錄平均分最低的選手下標。

printf("被淘汰的選手資訊為:最低分為:%d 編號為:%d 姓名為:%s", score[k][3], no[k], name[k]);

return 0;

c語言陣列問題

9樓:毓良剛棋

//printf貌似錯了,兩邊需要雙引號。是轉移字元,表示換行了。

這個程式就是讓你輸入乙個包含5個整形資料的陣列,再把他們輸出。

請輸入和請輸出。

是程式制定讓它輸出出來的中文說明,不是指輸出這兩句話就可以讓你有輸入和輸出的操作,輸入和輸出是由scanf和printf來實現的。

兩個for迴圈的作用在程式裡說清楚了。

執行的結果只有乙個,就是下面那一行。上面那行是你除錯的時候輸入進去的,不是輸出。

10樓:賓松蘭黎羅

好像不會輸出。

「-22」吧。

就是讀入5個數。

再輸出意思(1)main程式入口(2)設定x為0-5的整形陣列整形變數k

(4)一次讀入5個數(6)輸出5個數。

for是用於給陣列賦值。

scanf是讀入資料。

執行結果是乙個。

因為第一行本來是你輸入的。

11樓:宋愛景介環

作用:輸入乙個陣列,然後再把這個陣列輸出;

但我不知道為什麼最後乙個是-22

2 1定義乙個整形陣列x[5],和k

輸入資料。輸出資料。

3你第二個寫錯了,應該是。

輸出資料為。

而請輸入資料是隨即打5個。

4for語句是迴圈結構。

scanf起到將資料傳送給計算機,你的程式有很多錯誤,我修改了並執行,下面是正確的。

#include

voidmain()

12樓:長士恩竇羅

向整形陣列輸入5個數字,然後在輸出,不過這裡要改下for(k=0;k<5;k++)

不然你就出錯了像你上面的-22

printf

("請輸入資料:")

for(k=0;k<5;k++)

scanf("%d",&x[k]);這裡是迴圈形式向陣列輸入各個資料,scanf()是輸入函式,每一步的意思程式說的很清楚了,建議你看看數,這太基礎了,都不好解釋了:)

c語言陣列在使用中常見的幾種錯誤

13樓:司馬刀劍

在電腦程式中,通常可能發生以下三種型別的錯誤:

(1)語法錯誤:這是指程式中含有不符合語法規定的語句,例如關鍵字或符號書寫錯誤(將printf寫成print、將陣列元素引用寫成a(2)等)、使用了未定義的變數、括號不配對等。含有語法錯誤的程式是不能通過編譯的,因此程式將不能執行。

(2)邏輯錯誤:這是指程式中沒有語法錯誤,可以通過編譯、連線生成可執行程式,但程式執行的結果與預期不相符的錯誤。例如整型變數的取值超出了有效的取值範圍、在scanf函式遺漏了取位址運算子&、陣列元素引用中下標越界、在應當使用復合語句時沒有使用復合語句等。

由於含有邏輯錯誤的程式仍然可以執行,因此這是一種較難發現、較難除錯的程式錯誤,在程式設計、除錯中應予特別注意。

(3)系統錯誤:這是指程式沒有語法錯誤和邏輯錯誤,但程式的正常執行依賴於某些外部條件的存在,如果這些外部條件缺失,則程式將不能執行。例如折半查詢法是在已經排序的陣列上進行的,但實際的資料並沒有進行排序、程式中需要開啟乙個已經存在的檔案,但這個檔案由於其他原因丟失等。

c語言陣列問題?

14樓:岔路程式緣

你說的二維陣列,要用weekday[i][j]來表示sunday、monday……到saturday之間的每一天的星期名稱。

因為在c語言中,變數沒有字串型別,想存放乙個字串,就要用到一維字元陣列。所以,有時候也把一維字元陣列變數看成「字串變數」。如宣告char a[10];,則程式中可以用a(不帶後面的中括號)指代a[10]中存放的全體字元,就是把a當成字串了。

二維字元陣列,可以理解為一維字串陣列。如char b[i][j];,則b[i]可以代表每乙個字串了。

回到原題,這裡可以用weekday[i]來代表星期的每乙個名字,如weekday[0]=「sunday」,等等。

15樓:高數線代程式設計狂

你這麼看,這個二維陣列,第一維表示行號,第二維表示列號。如果直接兩維都指定取得是乙個字元。只指定第一維,就是取第一行所有字元。

而每行實際存的就是星期一,星期二,這些字串。此程式也就是要輸出這些字串。

c++陣列問題

16樓:匿名使用者

sizeof是求所佔大小。onearray代表陣列名,也就是代表整個陣列。於是sizeof(onearray) 就是整個陣列所佔空間的大小。

同理,sizeof(onearray[0])表示下標為0的元素所佔空間大小。你的元素型別相同,所以每個大小都是sizeof(onearray[0])。

整個大小除以每個大小,就是個數。

比如整個陣列佔30位元組,每個元素3個位元組,故有十個元素。

17樓:暢景彰

sizeof()這個函式的功能是求括號裡面資料佔用記憶體的大小。

sizeof(onearray)是求整個陣列中所有的元素總共佔用記憶體的大小,而sizeof(onearray[0])是求出這個陣列中,單個元素佔用的記憶體大小,所以相除的話就是你這個陣列有多少個元素了。

18樓:匿名使用者

一列n個相同的箱子,求n

n=箱子總長 / 單個箱子長度。

如此汝可明白?

c語言陣列問題

19樓:也許_沒有_也許

本題巧妙運用陣列c中的元素來統計陣列s中1234這4個數字出現的次數。

程式執行完後,最終結果是4332,表示1出現了4次,2和3各出現了3次,4出現了2次。

for(i=0;i<12;i++)

c[s[i]]+

當i=0時,s[i]相當於s[0],取數字其實是1,相當於c[1]++這樣c陣列中的第乙個元素就自然從0變為1

同理,當i=2時,s[2]的內容是2,相當於c[2]++這樣c陣列中的第二個元素就自然從0變為1,這時統計1和2兩個數字各出現過1次了。

以此類推,i=3和i=4的時候,c[4]++已經執行過2次,表示數字4已出現過2次。

再往下推下去,思路已經很明了,後面的**也沒太大難度。

本題的關鍵在於c[s[i]]+這行**,你順到我說的思路,根據迴圈變數的增值,把數字都代進去,自然就會看明白。

c[5]=是把c陣列中所有的元素清0

C語言自加問題,C語言 陣列 字元陣列 自加問題

字尾加加是先計算表示式再自加,k i i 對於第乙個i來說,其表示式是i i 對於第2個i來說其表示式是i i,因此先計算i i得到6,再計算第乙個i 得到4,再計算第2個i 得到5,最後i的值為5,k的值為6。後自增i i是在表示式完成運算才進行自加的,而先加 i則相反,是先自加,後完成,所以k ...

c語言字串陣列逆序問題,C語言字串陣列逆序問題

第乙個問題 字串陣列的長度不包括最後的 0 第二處問題 1 把 for i 0 str1 i 0 i 後面加上乙個分號 2 把for i 0 str1 i 0 i 後面的花括號去掉 3 再把 puts str1 前面的花括號去掉就可以了 程式如下 include stdio.h int main c...

C語言指標陣列的問題

關注位址型別,只要型別匹配就正確,下面描述中注意括號,用來斷句。int a 2 3 陣列型別是int 2 3 位址型別是 int 3 含義是 指向 含3個整數的一維陣列 的常量指標,該指標指向的位址為3個列的一行,所以陣列名本身就是行位址。int p 3 陣列型別是 int 3 含義是 含3個 整數...