20201022-成信大-C語言程式設計-20201學期《C語言程式設計B》C-trainingExercises26
20201022-成信大-C語言程式設計-20201學期《C語言程式設計B》C-trainingExercises26
本次練習用到的資料檔案
Comp.txt for P320
123 + 556
Comp.txt for P321
123 + 556
300 - 215
1001 - 18976
9123 + 5156
Comp.txt for P324
123
300
1001
9123
9000
CompA.txt
+
-
-
+
compB.txt
556
215
18976
5156
P320
/*
讀檔案,完成運算
編寫一程式P320.C實現以下功能
在文字檔案Comp.txt裡有需要計算結果的整數算式,每個算式佔一行且檔案中只有一個算式,運算型別只有“加法(+)”或者“減法(-)”且運算子前後至少有一個空格。
計算該算式的結果並在螢幕上顯示。
單擊此處下載程式執行時測試用的算式檔案Comp.txt(加法示例,程式設計時還應考慮算式為減法的情況)並儲存到程式P320.C所在的資料夾且檔名保持不變。
程式設計可用素材:
printf("%d + %d = %d\n");
printf("%d - %d = %d\n");
程式的執行效果應類似地如圖1和圖2所示。
123 + 556 = 679
圖1 程式執行效果示例(測試用算式檔案Comp.txt內容為整數加法算式)
123 - 556 = -433
*/
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int data1, data2;
int result;
char ch;
FILE *fp;
// open file
if ((fp = fopen("Comp.txt", "r")) == NULL)
{
printf("Open file failure.\n");
exit(0);
}
// read data
// 只有一行資料,直接格式化讀取,注意,%c前有一個空格
fscanf(fp, "%d %c %d", &data1, &ch, &data2);
if ('+'==ch)
{
result = data1 + data2;
printf("%d + %d = %d\n", data1, data2, result);
}
else
{
result = data1 - data2;
printf("%d - %d = %d\n", data1, data2, result);
}
//close file
fclose(fp);
return 0;
}
P321
/*
編寫一程式P321.C實現以下功能
在文字檔案Comp.txt裡有需要計算結果的整數算式,每個算式佔一行且檔案中有多個(數量不確定)算式,運算型別只有“加法(+)”或者“減法(-)”且運算子前後至少有一個空格。
計算這些算式的結果並在螢幕上顯示。
單擊此處下載程式執行時測試用的算式檔案Comp.txt並儲存到程式P321.C所在的資料夾且檔名保持不變。
程式設計可用素材:
printf("Line %03d: %5d + %-5d = %-6d\n");
printf("Line %03d: %5d - %-5d = %-6d\n");
程式的執行效果應類似地如圖1所示。
Line 001: 123 + 556 = 679
Line 002: 300 - 215 = 85
Line 003: 1001 - 18976 = -17975
Line 004: 9123 + 5156 = 14279
圖1 程式執行效果示例(使用系統提供的測試用算式檔案Comp.txt)
*/
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int data1, data2;
int result;
char ch;
int i = 1;
FILE *fp;
// open file
if ((fp = fopen("Comp.txt", "r")) == NULL)
{
printf("Open file failure.\n");
exit(0);
}
// read data
while (!feof(fp))
{
fscanf(fp, "%d %c %d", &data1, &ch, &data2);
if (!('+' == ch || '-' == ch)) // 如果讀出來的不是運算子號,就終止
{
break;
}
if ('+' == ch)
{
result = data1 + data2;
printf("Line %03d: %5d + %-5d = %-6d\n", i, data1, data2, result);
}
else
{
result = data1 - data2;
printf("Line %03d: %5d - %-5d = %-6d\n", i, data1, data2, result);
}
ch = '\0'; // 每一次用完之後,就將運算子清空
i++;
}
// close file
fclose(fp);
return 0;
}
/*
另一種思路,就是將fscanf的返回值拿來判斷
程式中用到fscanf、fprintf,為了判斷異常,需要知道兩個函式的返回值含義
原型:int fscanf(FILE* stream, const char* format, [argument...]);
1.fscanf正常情況下返回從檔案中讀出的引數個數
fscanf返回的是實際讀取的資料個數,出錯或者到結尾返回EOF。
2.fprintf正常情況下返回寫入檔案的位元組數
注意細節:
1. 在空白符這個意義上來講,fscanf 對空格、製表符、換行符是一視同仁的,不加區分的;%s會跳過前面的空白符,但是不會跳過後面的空白符;%c不會跳過空白符。
2. *表示讀取一個域,但是不賦值給變數。
3. []表示只讀取中括號內的字元,[]表示不讀取中括號內的字元,值得注意的是%[]s將不會跳過前面的空白符。
4. 如果還沒有任何一個域匹配成功或者任何一個匹配失敗發生之前,就達到了檔案流末尾,就算出錯;或者讀取檔案流出錯。這兩種情況下,fscanf 返回EOF。
*/
P324
/*
編寫一程式P324.C實現以下功能
在文字檔案Comp.txt、CompA.txt、CompB.txt裡有需要計算結果的整數算式,檔案Comp.txt提供參加運算的第一個數,檔案CompA.txt提供進行運算的運算子(只有“加法(+)”或者“減法(-)”),檔案CompB.txt提供參加運算的第二個數,每個數或運算子均佔一行,組合起來成為一個算式,遇到無法組成一個完整算式時即結束運算。這樣的算式有多個(數量不確定)。計算這些算式的結果並在螢幕上顯示。
單擊下載程式執行時測試用的算式檔案Comp.txt、CompA.txt、CompB.txt並儲存到程式P324.C所在的資料夾且檔名保持不變。
程式設計可用素材:
printf("Line %03d: %5d %c %-5d = %-6d\n");
程式的執行效果應類似地如圖1所示。
Line 001: 123 + 556 = 679
Line 002: 300 - 215 = 85
Line 003: 1001 - 18976 = -17975
Line 004: 9123 + 5156 = 14279
圖1 程式執行效果示例
*/
#include <stdio.h>
int main(void)
{
int a1, a2, n = 1;
char ch;
FILE *fp1, *fp2, *fp3;
fp1 = fopen("Comp.txt", "r");
fp2 = fopen("CompA.txt", "r");
fp3 = fopen("CompB.txt", "r");
// 賦值後再判斷,語句更簡單一些
if (fp1 == NULL || fp2 == NULL || fp3 == NULL)
{
printf("error\n");
return 0;
}
while (!feof(fp2)) // 運算完成,首先要有運算子
{
// 充分利用返回值判斷讀取是否成功,三個資料要同時都有,才可以完成運算
if ((fscanf(fp1, "%d", &a1) == 1) && (fscanf(fp2, " %c", &ch) == 1) && (fscanf(fp3, "%d", &a2) == 1))
{
if (ch == '+')
{
printf("Line %03d: %5d %c %-5d = %-6d\n", n, a1, ch, a2, a1 + a2);
}
else
{
printf("Line %03d: %5d %c %-5d = %-6d\n", n, a1, ch, a2, a1 - a2);
}
n++; // 計數器
}
else // 如果讀取失敗【即兩個運算元和一個操作符,只要有一個未讀到資料,就不再處理】
{
break;
}
}
// 要記得關閉檔案
fclose(fp1);
fclose(fp2);
fclose(fp3);
return 0;
}
P325
/*
編寫一程式P325.C實現以下功能
在文字檔案Comp.txt、CompA.txt、CompB.txt裡有需要計算結果的整數算式,
檔案Comp.txt提供參加運算的第一個數,
檔案CompA.txt提供進行運算的運算子(只有“加法(+)”或者“減法(-)”),
檔案CompB.txt提供參加運算的第二個數,每個數或運算子均佔一行,組合起來成為一個算式,遇到無法組成一個完整算式時即結束運算。
這樣的算式有多個(數量不確定)。計算這些算式的結果並將結果以文字檔案格式儲存到程式P325.C所在的資料夾中且檔名命名為CompC.txt。
單擊下載程式執行時測試用的算式檔案Comp.txt、CompA.txt、CompB.txt並儲存到程式P325.C所在的資料夾且檔名保持不變。
程式設計可用素材:
fprintf(…"Line %03d: %5d %c %-5d = %-6d\n");
程式執行後生成的檔案CompC.txt的內容應類似地如圖1所示。
圖1 程式執行效果示例(生成的檔案CompC.txt之內容)
*/
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[])
{
int data1, data2, result;
char ch;
int i = 1;
int r1, r2, r3; // 檔案讀取返回值
FILE *fp1, *fp2, *fp3, *fp4;
// 檔案正常開啟
if ((fp1 = fopen("Comp.txt", "r"))==NULL)
{
printf("open file Comp.txt failure.\n");
exit(0);
}
if ((fp2 = fopen("CompA.txt", "r"))==NULL)
{
printf("open file CompA.txt failure.\n");
exit(0);
}
if ((fp3 = fopen("CompB.txt", "r"))==NULL)
{
printf("open file CompB.txt failure.\n");
exit(0);
}
// 注意:這個檔案是寫資料
if ((fp4 = fopen("CompC.txt", "w"))==NULL)
{
printf("open file CompC.txt failure.\n");
exit(0);
}
while (!feof(fp2)) // 要有運算子號,才可以運算
{
r1 = fscanf(fp2, " %c", &ch);
r2 = fscanf(fp1, "%d", &data1);
r3 = fscanf(fp3, "%d", &data2);
if ((r1 == 1) && (r2 == 1) && (r3 == 1)) //是否都成功讀取了資料
{
if ('+' == ch)
{
result = data1 + data2;
fprintf(fp4, "Line %03d: %5d %c %-5d = %-6d\n", i, data1, ch, data2, result);
}
else
{
result = data1 - data2;
fprintf(fp4, "Line %03d: %5d %c %-5d = %-6d\n", i, data1, ch, data2, result);
}
i++; // 計數器
}
else
{
break;
}
}
// 關閉檔案
fclose(fp1);
fclose(fp2);
fclose(fp3);
fclose(fp4);
return 0;
}
相關文章
- C語言程式設計C語言程式設計
- C語言程式設計B作業04C語言程式設計
- C語言程式設計原理C語言程式設計
- c語言程式設計題C語言程式設計
- C語言MySQL程式設計示例C語言MySql程式設計
- C 語言程式設計(unix) (轉)程式設計
- 結對程式設計(c語言)程式設計C語言
- 奇怪的C語言——C51程式設計C語言注意事項C語言程式設計
- C 語言程式設計利器之 CLion程式設計
- C#函數語言程式設計C#函數程式設計
- C語言程式設計基本規範C語言程式設計
- MySQL的C語言程式設計(一)MySqlC語言程式設計
- 程式語言設計,程式設計哲學程式設計
- 偽隨機數C語言程式設計隨機C語言程式設計
- C語言程式設計-漢字點陣C語言程式設計
- C語言+圖形程式設計——自制象棋C語言程式設計
- C++的函數語言程式設計C++函數程式設計
- C 語言程式設計習慣總結程式設計
- 初步瞭解C語言Windows程式設計C語言Windows程式設計
- Linux下C語言程式設計(轉)LinuxC語言程式設計
- 傻瓜程式設計入門(C語言版)程式設計C語言
- C語言程式設計題T1C語言程式設計
- C語言指標應用程式設計C語言指標程式設計
- 【程式設計大賽刷題記錄】C語言 06程式設計C語言
- 【程式設計大賽刷題記錄】C語言 02程式設計C語言
- C 語言高效程式設計與程式碼優化程式設計優化
- C語言/C++對程式設計學習的重要性!C語言C++程式設計
- c語言程式設計學習之二維陣列C語言程式設計陣列
- 《C程式設計語言》 練習3-5C程式程式設計
- C語言如何實現泛型程式設計?C語言泛型程式設計
- C語言程式設計之《資料輸出》C語言程式設計
- C語言趣味程式設計100例pdfC語言程式設計
- 大一C語言程式設計練習題C語言程式設計
- C語言 之 多執行緒程式設計C語言執行緒程式設計
- C語言程式設計——9,預處理命令C語言程式設計
- C語言高效程式設計的幾招(轉)C語言程式設計
- c語言程式設計--實驗報告一C語言程式設計
- c語言程式設計——實驗報告六C語言程式設計