基礎作業;
請在第一周作業的基礎上,繼續完成:找出給定的檔案中陣列的最大值及其對應的最小下標(下標從0開始)。並將最大值和對應的最小下標數值寫入檔案。
輸入:請建立以自己英文名字命名的txt檔案,並輸入陣列元素數值,元素值之間用逗號分隔。
輸出:在不刪除原有檔案內容的情況下,將最大值和對應的最小下標數值寫入檔案。
#include#includeint main()
//檔案處理(逐個讀入和處理資料)
for(int i=0;i<20;i++)
j++;
} //查詢最大值str[index];
index=0;
for(int i=0;istr[index])
}//將最大值及下標寫入檔案
fprintf(fp,",max=%d,index=%d",str[index],index);
printf(" %d %d",str[index],index);
//關閉檔案
問題1:fscanf(fp,"%d",&str[i]);,讀取檔案中由逗號隔開的數字時錯誤。
解決辦法:在運用fprintf與fscanf時,在向檔案輸出資料及從檔案讀取資料時,分隔符應該相一致
fscanf(fp,"%d,",&str[i]);
fprintf(fp,",max=%d,index=%d,",str[index],index);
/*若檔案中資料之間的分隔符為逗號,則輸入資料時以逗號為資料之間的分隔符,這樣做到前後一致。
分隔符也可採用/n,即回車符,那麼程式中二句相應改為:
問題2:c語言for迴圈中fscanf讀取當達到檔案結尾時如何結束迴圈。
解決辦法:fscanf是有返回值的。如果返回eof,證明到達檔案結尾;
即if(fscanf(fp,"%d,",&str[i])==eof)
挑戰作業:
給定乙個整數陣列(包含正負數),找到乙個具有最大和的子陣列,返回其最大的子陣列的和
#include#include/*主函式*/
int main()
fscanf(fp,"%d,\n%d,\n",&line,&length);
printf("%d\n%d\n",line,length);
n=2*length;
/*將陣列複製一邊,兩陣列首尾連線成乙個環形*/
int a[line][n];//初始化陣列
for(int i=0;imax)
}a[line][length+i]=a[line][i]; //每次將已經計算過的數放到最後
}printf("max=%d",max);
fprintf(fp,",max=%d",max);
//關閉檔案
if(fclose(fp))
return 0;
}
將陣列複製一邊,首尾連線成乙個環形,從下標為0的數開始,逐個往後加,每加乙個都要和最大值比較,若比最大值大,就將此時的值給最大值,當加到6個數時,停止累加,清空累加值;此時從下標為1的數開始逐個往後加,同上次方法一樣,當加到6個數時,清空累加值;此時從下標為2的數開始逐個往後加……;直到下標為i-1的數累加完畢,此時該陣列中所有子陣列的值都已經遍歷到了,得到的最大值就是最大的子陣列的和。
在參考別人的程式的時候,發現別人程式中有些**沒有學,比如《的用法和意思
上網查知;
1.右移運算子:
c語言中兩個大於號》是右移位操作,就是把乙個數的二進位制形式的最右幾位丟棄,最前面補原來最高位的數字(原來是0就補0;原來是1就補1)
右移運算的兩個運算元應為整數型別。第乙個運算元是要進行移位操作的數,第二個運算元指定第乙個運算元移動的位數。如果第二個運算元等於0則不發生任何移位。運用舉例:
問:計算表示式14 >> 2的值。
答:表示式14 >> 2的值為3,因為14(即二進位制的00001110)向右移兩位等於3(即二進位制的00000011)
2.輸入運算元:
在c++裡面我們把》當作輸入操作符,它是stream這個類裡乙個重要的運算子。
在c++中,有乙個stream這個類,所有的i/o都以這個「流」類為基礎的,包括我們要認識的檔案i/o,stream這個類有兩個重要的運算子:
析取器(>>)
從流中輸入資料。比如說系統有乙個預設的標準輸入流(cin),一般情況下就是指的鍵盤,所以,cin>>x;就表示從標準輸入流中讀取乙個指定型別(即變數x的型別)的資料。從左運算元指定的輸入流讀入資料到右運算元:cin >> i 把標準輸入流中的下乙個值讀入到i中。
和其他的函式沒有什麼區別。c/c++追求的就是簡潔,當大量的輸入需要處理的時候,我們用函式就要這樣,scanf("%d%d%d",&a,&b,&c);(假設為短整型)
.....但是用操作符的話就可以這樣,cin>>a>>b>>c
3.轉換運算子:
字元是可使用多種不同字元方案或**頁來表示的抽象實體。例如,unicode utf-16 編碼將字元表示為 16 位整數序列,而 unicode utf-8 編碼則將相同的字元表示為 8 位位元組序列。公共語言執行庫使用 unicode utf-16(unicode 轉換格式,16 位編碼形式)表示字元。
舉例:$array[0] = ($str >> 16 & 0xff);
表示把字串$str轉換為unicode 16位的編碼,然後儲存到陣列中。常見的utf-8編碼方式就是把例子中的16改成了8,表示unicode編碼,16位字元。
通過這次的作業,我發現自己的知識積累太少了,寫稍微難一點的題目就有點捉襟見肘,不過這次作業對我來說有雖然難度,但通過上網查資料,不僅弄懂了別人的程式,而且用自己的方法寫出了自己程式,也了解得到了很多沒有學到的知識,感覺收穫很多。
比如#include "iostream"與#include的區別:前者先在當前目錄找iostream檔案,找不到再去系統標頭檔案路徑找,後者反之。因此,做為乙個良好的習慣,在包含系統標頭檔案時盡量用<>,而在包含自己的工程中的標頭檔案時用
比如void rewind(file *stream); 的功 能: 將檔案內部的位置指標重新指向乙個流(資料流/檔案)的開頭。
2023年春季學期第二週作業
基礎作業 請在第一周作業的基礎上,繼續完成 找出給定的檔案中陣列的最大值及其對應的最小下標 下標從0開始 並將最大值和對應的最小下標數值寫入檔案。輸入 請建立以自己英文名字命名的txt檔案,並輸入陣列元素數值,元素值之間用逗號分隔。輸出在不刪除原有檔案內容的情況下,將最大值和對應的最小下標數值寫入檔...
2023年春季學期第二週作業
請在第一周作業的基礎上,繼續完成 找出給定的檔案中陣列的最大值及其對應的最小下標 下標從0開始 並將最大值和對應的最小下標數值寫入檔案。輸入 請建立以自己英文名字命名的txt檔案,並輸入陣列元素數值,元素值之間用逗號分隔。輸出在不刪除原有檔案內容的情況下,將最大值和對應的最小下標數值寫入檔案。遇到問...
2023年春季學期第二週作業
基礎作業 請在第一周作業的基礎上,繼續完成 找出給定的檔案中陣列的最大值及其對應的最小下標 下標從0開始 並將最大值和對應的最小下標數值寫入檔案。輸入請建立以自己英文名字命名的txt檔案,並輸入陣列元素數值,元素值之間用逗號分隔。輸出在不刪除原有檔案內容的情況下,將最大值和對應的最小下標數值寫入檔案...