鎮(zhèn)江市住房城鄉(xiāng)建設(shè)局網(wǎng)站谷歌seo推廣
《C Primer Plus》第13章復(fù)習(xí)題與編程練習(xí)
- 復(fù)習(xí)題
- 1. 下面的程序有什么問題?
- 2. 下面的程序完成什么任務(wù)?(假設(shè)在命令行環(huán)境中運(yùn)行)
- 3. 假設(shè)程序中有下列語句:
- 4. 編寫一個程序,不接受任何命令行參數(shù)或接受一個命令行參數(shù)。如果有一個參數(shù),將其解釋為文件名;如果沒有參數(shù),使用標(biāo)準(zhǔn)輸入(stdin)作為輸入。假設(shè)輸入完全是浮點(diǎn)數(shù)。該程序要計(jì)算和報告輸入數(shù)字的算術(shù)平均值。
- 5. 編寫一個程序,接受兩個命令行參數(shù)。第1個參數(shù)是字符,第2個參數(shù)是文件名。要求該程序只打印文件中包含給定字符的那些行。
復(fù)習(xí)題
1. 下面的程序有什么問題?
int main(void)
{ int * fp; int k; fp = fopen("gelatin"); for (k = 0; k < 30; k++) fputs(fp, "Nanette eats gelatin."); fclose("gelatin");return 0;
}
缺少頭文件,fopen()和fclose()函數(shù)錯誤。
修改后的代碼如下:
#include <stdio.h>int main(void)
{ FILE *fp; int k; fp = fopen("gelatin", "w"); for (k = 0; k < 30; k++) fputs("Nanette eats gelatin.\n", fp); fclose(fp);return 0;
}
2. 下面的程序完成什么任務(wù)?(假設(shè)在命令行環(huán)境中運(yùn)行)
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main(int argc, char *argv [])
{ int ch; FILE *fp; if (argc < 2) exit(EXIT_FAILURE); if ((fp = fopen(argv[1], "r")) == NULL) exit(EXIT_FAILURE); while ((ch = getc(fp)) != EOF) if (isdigit(ch)) putchar(ch); fclose(fp); return 0;
}
如果有第二個參數(shù),嘗試打開一個和該參數(shù)名同名的文件,如果該文件可以打開,在屏幕上輸出一個其中的所有數(shù)字。
運(yùn)行結(jié)果:
3. 假設(shè)程序中有下列語句:
#include <stdio.h>
FILE * fp1,* fp2;
char ch;fp1 = fopen("terky", "r");
fp2 = fopen("jerky", "w");
另外,假設(shè)成功打開了兩個文件。補(bǔ)全下面函數(shù)調(diào)用中缺少的參數(shù):
a.ch = getc();
b.fprintf( ,“%c\n”, );
c.putc( , );
d.fclose(); /* 關(guān)閉terky文件 */
a. fp1
b. fp2 ch
c. ch fp2
d. fp1
4. 編寫一個程序,不接受任何命令行參數(shù)或接受一個命令行參數(shù)。如果有一個參數(shù),將其解釋為文件名;如果沒有參數(shù),使用標(biāo)準(zhǔn)輸入(stdin)作為輸入。假設(shè)輸入完全是浮點(diǎn)數(shù)。該程序要計(jì)算和報告輸入數(shù)字的算術(shù)平均值。
代碼:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>void makeFile()
{srand((unsigned long)time(0));FILE *fp;fp = fopen("file.txt", "w");//生成100個浮點(diǎn)數(shù),小數(shù)點(diǎn)前有3位,小數(shù)點(diǎn)后有4位for (int j = 0; j < 100; ++j){for (int i = 0; i < 7; ++i){if (i == 3){putc('.', fp);}putc(rand() % 10 + '0', fp);}putc('\n', fp);}fclose(fp);
}int main(int argc, char **argv)
{makeFile();FILE *fp;double n, sum = 0.0;int num = 0;if (argc == 1){fp = stdin;}else if (argc == 2){if ((fp = fopen(argv[1], "r")) == NULL){fprintf(stderr, "Open %s failed\n", argv[1]);exit(EXIT_FAILURE);}}else{fprintf(stderr, "Usage:%s [filename]\n", argv[0]);exit(EXIT_FAILURE);}while (fscanf(fp, "%lf", &n) == 1){num++;sum += n;}if (num){printf("%lf\n", sum / n);}else{puts("There is no number");}system("pause");return 0;
}
運(yùn)行結(jié)果:
使用文件輸入:
使用鍵盤輸入:
5. 編寫一個程序,接受兩個命令行參數(shù)。第1個參數(shù)是字符,第2個參數(shù)是文件名。要求該程序只打印文件中包含給定字符的那些行。
注意
C程序根據(jù)’\n’識別文件中的行。假設(shè)所有行都不超過256個字符,你可能會想到用fgets()。