c语言课后练习题第四章
生活随笔
收集整理的這篇文章主要介紹了
c语言课后练习题第四章
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
關鍵點
轉換說明 輸出
%a 浮點數、十六進制數和P計數法
%A 浮點數、十六進制數和P計數法
%c 單個字符
%d 十進制數字
%e 浮點數 e計數法
%E 浮點數 e計數法
%f 浮點數 十進制計數法
%g
%G
%i 有符號十進制數
%o 八進制數字
%p 地址
%s 字符串
%u 無符號十進制
%x 十六進制
%X 十六進制
%% 百分號轉換說明的意義
轉換說明把以二進制格式存儲在計算機中的值轉傳承一些列字符便于顯示
復習題
1.再次運行程序清單4.1,但是在要求輸入名時,請輸入名和姓(根據
英文書寫習慣,名和姓中間有一個空格),看看會發生什么情況?為什么?
答:程序不能正常運行。第1個scanf()語句只讀取用戶輸入的名,而用戶輸入的姓仍留在輸入緩沖區中(緩沖區是用于儲存輸入的臨時存儲區)。下一條scang()語句在輸入緩沖區查找重量時,從上次讀入結束的地方開始讀取。這樣就把留在緩沖區的姓作為體重來讀取,導致 scanf()讀取失敗。另一方面,如果在要求輸入姓名時輸入Lasha 144,那么程序會把144作為用戶的體重(雖然用戶是在程序提示輸入體重之前輸入了144)。2.假設下列示例都是完整程序中的一部分,它們打印的結果分別是什
么?
a.printf("He sold the painting for $%2.2f.\n", 2.345e2);
b.printf("%c%c%c\n", 'H', 105, '\41');
c.#define Q "His Hamlet was funny without being vulgar." printf("%s\nhas %d characters.\n", Q, strlen(Q));
d.printf("Is %2.2e the same as %2.2f?\n", 1201.0, 1201.0);
答:a.He sold the painting for $%2.2f.He sold the painting for $234.50.b. H i )c.His Hamlet was funny without being vulgar.has 41d.Is 12e3 the same as 1201.00?3.在第2題的c中,要輸出包含雙引號的字符串Q,應如何修改?
答:printf("%c\n", 81);4.找出下面程序中的錯誤。
define B booboo
define X 10
main(int)
{
int age;
char name;
printf("Please enter your first name.");
scanf("%s", name);
printf("All right, %c, what's your age?\n", name);
scanf("%f", age);
xp = age + X;
printf("That's a %s! You must be at least %d.\n", B, xp);
rerun 0;
}
正確的程序應該為
#define B "booboo"
#define X 10
int main ()
{int age;int xp;char name;printf("Please enter your first name.\n");scanf("%s", &name);printf("All right, %c, what's your age?\n", name);scanf("%f", age);xp = age + X;printf("That's a %s! You must be at least %d.\n", B, xp);rerun 0;}
5.假設一個程序的開頭是這樣:
#define BOOK "War and Peace"
int main(void)
{
float cost =12.99;
float percent = 80.0;
請構造一個使用BOOK、cost和percent的printf()語句,打印以下內容:
This copy of "War and Peace" sells for $12.99.
That is 80% of list.答:printf("his copy of "War and Peace" sells for $%0.2f.\nThat is %%d of list.", cost, percent)
6.打印下列各項內容要分別使用什么轉換說明?
a.一個字段寬度與位數相同的十進制整數 %d
b.一個形如8A、字段寬度為4的十六進制整數 %4x
c.一個形如232.346、字段寬度為10的浮點數%10.3f
d.一個形如2.33e+002、字段寬度為12的浮點數%12.2e
e.一個字段寬度為30、左對齊的字符串%-30s7.打印下面各項內容要分別使用什么轉換說明?
a.字段寬度為15的unsigned long類型的整數 %15ud
b.一個形如0x8a、字段寬度為4的十六進制整數 %4x
c.一個形如2.33E+02、字段寬度為12、左對齊的浮點數%-12e
d.一個形如+232.346、字段寬度為10的浮點數%+10.3f
e.一個字段寬度為8的字符串的前8個字符%8.8s8.打印下面各項內容要分別使用什么轉換說明?
a.一個字段寬度為6、最少有4位數字的十進制整數%6.4d
b.一個在參數列表中給定字段寬度的八進制整數%#o
c.一個字段寬度為2的字符%2c
d.一個形如+3.13、字段寬度等于數字中字符數的浮點數%+0.2f
e.一個字段寬度為7、左對齊字符串中的前5個字符%+7.5s
9.分別寫出讀取下列各輸入行的scanf()語句,并聲明語句中用到變量和
數組。
a.101
b.22.32 8.34E?09
c.linguini
d.catch 22
e.catch 22 (但是跳過catch)
10.什么是空白?
答:空白包括空格、制表符和換行符。C 語言使用空白分隔記號。scanf()使用空白分隔連續的輸入項。
11.下面的語句有什么問題?如何修正?
printf("The double type is %z bytes..\n", sizeof(double));
答:printf("The double type is %s bytes..\n", sizeof(double));12.假設要在程序中用圓括號代替花括號,以下方法是否可行?
#define ( {
#define ) }編程練習
1.編寫一個程序,提示用戶輸入名和姓,然后以“名,姓”的格式打印出
來。
#include <stdio.h>
int main (void)
{char first[10];char second[10];printf("please input first\n");scanf("%s",first);printf("please input scond\n");scanf("%s",second);printf("%s,%s\n", second, first);return 0;
}
2.編寫一個程序,提示用戶輸入名和姓,并執行一下操作:
a.打印名和姓,包括雙引號;
b.在寬度為20的字段右端打印名和姓,包括雙引號;
c.在寬度為20的字段左端打印名和姓,包括雙引號;
d.在比姓名寬度寬3的字段中打印名和姓。
#include <stdio.h>
int main (void)
{char first[10];char second[10];printf("please input first\n");scanf("%s",first);printf("please input scond\n");scanf("%s",second);printf("\"%s,%s\"\n", second, first);printf("\"%+20s,%+20s\"\n", second, first);printf("\"%3s,%3s\"\n", second, first);return 0;
}3.編寫一個程序,讀取一個浮點數,首先以小數點記數法打印,然后以
指數記數法打印。用下面的格式進行輸出(系統不同,指數記數法顯示的位
數可能不同):
a.輸入21.3或2.1e+001;
b.輸入+21.290或2.129E+001;
#include <stdio.h>
int main (void)
{float value;printf("please input value\n");scanf("%f",&value);printf("%0.1e\n", value);printf("%+0.3e\n", value);return 0;
}4.編寫一個程序,提示用戶輸入身高(單位:英寸)和姓名,然后以下
面的格式顯示用戶剛輸入的信息:
Dabney, you are 6.208 feet tall
使用float類型,并用/作為除號。如果你愿意,可以要求用戶以厘米為
單位輸入身高,并以米為單位顯示出來。
#include <stdio.h>
int main (void)
{char name[10];float height;printf("please input name\n");scanf("%s",name);printf("please input height\n");scanf("%f",&height);printf("%s,you are %0.3f feet tall\n", name, height/100);return 0;
}
5.編寫一個程序,提示用戶輸入以兆位每秒(Mb/s)為單位的下載速度
和以兆字節(MB)為單位的文件大小。程序中應計算文件的下載時間。注
意,這里1字節等于8位。使用float類型,并用/作為除號。該程序要以下面
的格式打印 3 個變量的值(下載速度、文件大小和下載時間),顯示小數點
后面兩位數字:
At 18.12 megabits per second, a file of 2.20 megabytes
downloads in 0.97 seconds.
#include <stdio.h>
int main (void)
{float speed;float total;printf("please input speed\n");scanf("%f",&speed);printf("please input total\n");scanf("%f",&total);printf("At %0.f megabits per second, a file of %0.f megabytes downloads in 0.97 seconds.\n", speed, total, total/speed);return 0;
}6.編寫一個程序,先提示用戶輸入名,然后提示用戶輸入姓。在一行打
印用戶輸入的名和姓,下一行分別打印名和姓的字母數。字母數要與相應名
和姓的結尾對齊,如下所示:
Melissa Honeybee
7
8
接下來,再打印相同的信息,但是字母個數與相應名和姓的開頭對齊,
如下所示:
Melissa Honeybee
7
8
#include <stdio.h>
#include <string.h>
int main (void)
{char first[10];char second[10];printf("please input first\n");scanf("%s",first);printf("please input scond\n");scanf("%s",second);printf("%5s %5s\n", second, first);printf("%5d %5d\n",strlen(second),strlen(first));return 0;
}7.編寫一個程序,將一個double類型的變量設置為1.0/3.0,一個float類
型的變量設置為1.0/3.0。分別顯示兩次計算的結果各3次:一次顯示小數點
后面6位數字;一次顯示小數點后面12位數字;一次顯示小數點后面16位數
字。程序中要包含float.h頭文件,并顯示FLT_DIG和DBL_DIG的值。1.0/3.0
的值與這些值一致嗎?
#include<stdio.h>
#include <float.h>
double a=1.0/3.0;
float b=1.0/3.0;
int main(void)
{printf("%.6lf\n",a);printf("%.12lf\n",a);printf("%.16lf\n",a);printf("%.6f\n",b);printf("%.12f\n",b);printf("%.16f\n",b);printf("FLT_ DIG: %d\n", FLT_DIG);printf("DBL_DIG: %d\n", DBL_DIG);
}8.編寫一個程序,提示用戶輸入旅行的里程和消耗的汽油量。然后計算
并顯示消耗每加侖汽油行駛的英里數,顯示小數點后面一位數字。接下來,
使用1加侖大約3.785升,1英里大約為1.609千米,把單位是英里/加侖的值轉
換為升/100公里(歐洲通用的燃料消耗表示法),并顯示結果,顯示小數點
后面 1 位數字。注意,美國采用的方案測量消耗單位燃料的行程(值越大越
好),而歐洲則采用單位距離消耗的燃料測量方案(值越低越好)。使用
#define 創建符號常量或使用 const 限定符創建變量來表示兩個轉換系數。
總結
以上是生活随笔為你收集整理的c语言课后练习题第四章的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Linux】set ff=unix
- 下一篇: 杨辉三角C语言编程