c語言 陣列及指標部分

2021-08-02 02:39:10 字數 4552 閱讀 8472

prac1:實現從鍵盤任意輸入10個整數,用函式程式設計實現將其中最大數與最小數的位置對換後,再輸出調整後的陣列。

#include

#define arrsize 10

voidmaxminexchang(inta,intn)

elseif(a[i] < minvalue)

}

temp = a[maxpos];

a[maxpos] = a[minpos];

a[minpos] = temp;

}

main()

maxminexchang(a, n);

printf("after maxminexchange:\n");

for(i=0; i

printf("\n");

}

prac2:輸入一行字元,統計其中的英文本元、數字字元、空格和其他字元的個數。

輸入提示資訊:"please input a string:"

輸入字串用gets()

輸出提示資訊和格式:

"english character: %d\n"

"digit character: %d\n"

"space: %d\n"

從stdio流中讀取

字串,直至接受到換行符或

eof時停止,並將讀取的結果存放在buffer

指標所指向的字元

陣列中。換行符不作為讀取串的內容,讀取的換行符被轉換為『\0』空字元,並由此來結束字串。

返回值讀入成功,返回與引數buffer相同的

指標;讀入過程中遇到

eof(end-of-file)或發生錯誤,返回

null指標。所以在遇到返回值為null的情況,要用

ferror或

feof函式檢查是發生錯誤還是遇到eof。

注意本函式可以無限讀取,不會判斷上限,所以程式設計師應該確保

buffer的空間足夠大,以便在執行讀操作時不發生溢位。如果溢位,多出來的字元將被寫入到

堆疊中,這就覆蓋了堆疊原先的內容,破壞乙個或多個不相關變數的值。

這個事實導致gets函式只適用於玩具程式,為了避免這種情況,我們可以用

fgets(stdin) (fgets實際上可以讀取標準輸入(即大多數情況下的鍵盤輸入),具體參閱

fgets詞條)來替換gets()。在v7的手冊(2023年)中說明:為了

向後相容,gets刪除換行符,gets並不將換行符存入

緩衝區。

由於可以無限讀取,所以在2023年12月,ansi 採納了 iso/iec 9899:2011 標準,標準中刪除了 gets()

函式,使用乙個新的更安全的函式gets_s()替代(具體用法看下面示例)。

用法:gets()函式用來從標準輸入裝置(鍵盤)讀取

字串直到換行符結束,但換行符會被丟棄,然後在末尾新增'\0'字元。其呼叫格式為:

gets(s);

其中s為字串變數(字串

陣列名或字串

指標)。

gets(s)函式與scanf("%s",s)相似,但不完全相同,使用scanf("%s",s) 函式輸入字串時存在乙個問題,就是如果輸入了空格會認為字串結束,空格後的字元將作為下乙個輸入項處理,但gets()函式將接收輸入的整個字串直到遇到換行為止。

也就是說:gets()函式讀取到\n(我們輸入的回車)於是停止讀取,但是它不會把\n包含到字串裡面去。

回到題目上面:

修改如下:

#include

#include

int main()

printf("english character:  %d\n", c);

printf("digit character:  %d\n", b);

printf("space:  %d\n", a);

printf("other character:  %d\n", d);

return 0;

}ps:c語言中有判斷字元ch是否為英文本母的isalpha()函式,判斷大寫字母的isupper(),判斷小寫字母的islower()

以上函式都包括在中。

用法例項:(在visual c++6.0中執行通過) 1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

#include

#include

intmain()

printf("\n");

return0;

}

輸出:bd

prac3:定義乙個長度為30的整型陣列,按順序賦予從2開始的偶數,然後按順序每5個數求出乙個平均值,放在另乙個陣列中,輸出這個陣列。

**輸出格式要求:"%6d"

程式的執行示例如下:

6 16 26 36 46 56

#include

intmain()

i = 0;

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

}

b[j] = sum / 5;

printf("%6d", b[j]);

}

printf("\n");

}

prac4:

程式設計計算1~1000之內的所有完數(例如,6的因子是1,2,3,而1+2+3=6)。

**輸入資料提示資訊:無

**輸入資料格式:無

**輸出格式要求:"%d\n"

# include

intsb(intn)

if(j==n)

return1;

else

return0;

}

voidmain()

}

C語言指標陣列和陣列指標

初學者總是分不出指標陣列與陣列指標的區別。其實很好理解 指標陣列 首先它是乙個陣列,陣列的元素都是指標,陣列佔多少個位元組由陣列本身決定。它是 儲存指標的陣列 的簡稱。陣列指標 首先它是乙個指標,它指向乙個陣列。在32 位系統下永遠是佔4 個位元組,至於它指向的陣列佔多少位元組,不知道。它是 指向陣...

C語言指標陣列和陣列指標

初學者總是分不出指標陣列與陣列指標的區別。其實很好理解 指標陣列 首先它是乙個陣列,陣列的元素都是指標,陣列佔多少個位元組由陣列本身決定。它是 儲存指標的陣列 的簡稱。陣列指標 首先它是乙個指標,它指向乙個陣列。在32 位系統下永遠是佔4 個位元組,至於它指向的陣列佔多少位元組,不知道。它是 指向陣...

C語言指標陣列和陣列指標

初學者總是分不出指標陣列與陣列指標的區別。其實很好理解 指標陣列 首先它是乙個陣列,陣列的元素都是指標,陣列佔多少個位元組由陣列本身決定。它是 儲存指標的陣列 的簡稱。陣列指標 首先它是乙個指標,它指向乙個陣列。在32 位系統下永遠是佔4 個位元組,至於它指向的陣列佔多少位元組,不知道。它是 指向陣...