c语言课后练习题第四章
生活随笔
收集整理的這篇文章主要介紹了
c语言课后练习题第四章
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
關(guān)鍵點(diǎn)
轉(zhuǎn)換說明 輸出
%a 浮點(diǎn)數(shù)、十六進(jìn)制數(shù)和P計(jì)數(shù)法
%A 浮點(diǎn)數(shù)、十六進(jìn)制數(shù)和P計(jì)數(shù)法
%c 單個(gè)字符
%d 十進(jìn)制數(shù)字
%e 浮點(diǎn)數(shù) e計(jì)數(shù)法
%E 浮點(diǎn)數(shù) e計(jì)數(shù)法
%f 浮點(diǎn)數(shù) 十進(jìn)制計(jì)數(shù)法
%g
%G
%i 有符號十進(jìn)制數(shù)
%o 八進(jìn)制數(shù)字
%p 地址
%s 字符串
%u 無符號十進(jìn)制
%x 十六進(jìn)制
%X 十六進(jìn)制
%% 百分號轉(zhuǎn)換說明的意義
轉(zhuǎn)換說明把以二進(jìn)制格式存儲在計(jì)算機(jī)中的值轉(zhuǎn)傳承一些列字符便于顯示
復(fù)習(xí)題
1.再次運(yùn)行程序清單4.1,但是在要求輸入名時(shí),請輸入名和姓(根據(jù)
英文書寫習(xí)慣,名和姓中間有一個(gè)空格),看看會發(fā)生什么情況?為什么?
答:程序不能正常運(yùn)行。第1個(gè)scanf()語句只讀取用戶輸入的名,而用戶輸入的姓仍留在輸入緩沖區(qū)中(緩沖區(qū)是用于儲存輸入的臨時(shí)存儲區(qū))。下一條scang()語句在輸入緩沖區(qū)查找重量時(shí),從上次讀入結(jié)束的地方開始讀取。這樣就把留在緩沖區(qū)的姓作為體重來讀取,導(dǎo)致 scanf()讀取失敗。另一方面,如果在要求輸入姓名時(shí)輸入Lasha 144,那么程序會把144作為用戶的體重(雖然用戶是在程序提示輸入體重之前輸入了144)。2.假設(shè)下列示例都是完整程序中的一部分,它們打印的結(jié)果分別是什
么?
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,應(yīng)如何修改?
答:printf("%c\n", 81);4.找出下面程序中的錯(cuò)誤。
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;
}
正確的程序應(yīng)該為
#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.假設(shè)一個(gè)程序的開頭是這樣:
#define BOOK "War and Peace"
int main(void)
{
float cost =12.99;
float percent = 80.0;
請構(gòu)造一個(gè)使用BOOK、cost和percent的printf()語句,打印以下內(nèi)容:
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.打印下列各項(xiàng)內(nèi)容要分別使用什么轉(zhuǎn)換說明?
a.一個(gè)字段寬度與位數(shù)相同的十進(jìn)制整數(shù) %d
b.一個(gè)形如8A、字段寬度為4的十六進(jìn)制整數(shù) %4x
c.一個(gè)形如232.346、字段寬度為10的浮點(diǎn)數(shù)%10.3f
d.一個(gè)形如2.33e+002、字段寬度為12的浮點(diǎn)數(shù)%12.2e
e.一個(gè)字段寬度為30、左對齊的字符串%-30s7.打印下面各項(xiàng)內(nèi)容要分別使用什么轉(zhuǎn)換說明?
a.字段寬度為15的unsigned long類型的整數(shù) %15ud
b.一個(gè)形如0x8a、字段寬度為4的十六進(jìn)制整數(shù) %4x
c.一個(gè)形如2.33E+02、字段寬度為12、左對齊的浮點(diǎn)數(shù)%-12e
d.一個(gè)形如+232.346、字段寬度為10的浮點(diǎn)數(shù)%+10.3f
e.一個(gè)字段寬度為8的字符串的前8個(gè)字符%8.8s8.打印下面各項(xiàng)內(nèi)容要分別使用什么轉(zhuǎn)換說明?
a.一個(gè)字段寬度為6、最少有4位數(shù)字的十進(jìn)制整數(shù)%6.4d
b.一個(gè)在參數(shù)列表中給定字段寬度的八進(jìn)制整數(shù)%#o
c.一個(gè)字段寬度為2的字符%2c
d.一個(gè)形如+3.13、字段寬度等于數(shù)字中字符數(shù)的浮點(diǎn)數(shù)%+0.2f
e.一個(gè)字段寬度為7、左對齊字符串中的前5個(gè)字符%+7.5s
9.分別寫出讀取下列各輸入行的scanf()語句,并聲明語句中用到變量和
數(shù)組。
a.101
b.22.32 8.34E?09
c.linguini
d.catch 22
e.catch 22 (但是跳過catch)
10.什么是空白?
答:空白包括空格、制表符和換行符。C 語言使用空白分隔記號。scanf()使用空白分隔連續(xù)的輸入項(xiàng)。
11.下面的語句有什么問題?如何修正?
printf("The double type is %z bytes..\n", sizeof(double));
答:printf("The double type is %s bytes..\n", sizeof(double));12.假設(shè)要在程序中用圓括號代替花括號,以下方法是否可行?
#define ( {
#define ) }編程練習(xí)
1.編寫一個(gè)程序,提示用戶輸入名和姓,然后以“名,姓”的格式打印出
來。
#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.編寫一個(gè)程序,提示用戶輸入名和姓,并執(zhí)行一下操作:
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.編寫一個(gè)程序,讀取一個(gè)浮點(diǎn)數(shù),首先以小數(shù)點(diǎn)記數(shù)法打印,然后以
指數(shù)記數(shù)法打印。用下面的格式進(jìn)行輸出(系統(tǒng)不同,指數(shù)記數(shù)法顯示的位
數(shù)可能不同):
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.編寫一個(gè)程序,提示用戶輸入身高(單位:英寸)和姓名,然后以下
面的格式顯示用戶剛輸入的信息:
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.編寫一個(gè)程序,提示用戶輸入以兆位每秒(Mb/s)為單位的下載速度
和以兆字節(jié)(MB)為單位的文件大小。程序中應(yīng)計(jì)算文件的下載時(shí)間。注
意,這里1字節(jié)等于8位。使用float類型,并用/作為除號。該程序要以下面
的格式打印 3 個(gè)變量的值(下載速度、文件大小和下載時(shí)間),顯示小數(shù)點(diǎn)
后面兩位數(shù)字:
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.編寫一個(gè)程序,先提示用戶輸入名,然后提示用戶輸入姓。在一行打
印用戶輸入的名和姓,下一行分別打印名和姓的字母數(shù)。字母數(shù)要與相應(yīng)名
和姓的結(jié)尾對齊,如下所示:
Melissa Honeybee
7
8
接下來,再打印相同的信息,但是字母個(gè)數(shù)與相應(yīng)名和姓的開頭對齊,
如下所示:
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.編寫一個(gè)程序,將一個(gè)double類型的變量設(shè)置為1.0/3.0,一個(gè)float類
型的變量設(shè)置為1.0/3.0。分別顯示兩次計(jì)算的結(jié)果各3次:一次顯示小數(shù)點(diǎn)
后面6位數(shù)字;一次顯示小數(shù)點(diǎn)后面12位數(shù)字;一次顯示小數(shù)點(diǎn)后面16位數(shù)
字。程序中要包含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.編寫一個(gè)程序,提示用戶輸入旅行的里程和消耗的汽油量。然后計(jì)算
并顯示消耗每加侖汽油行駛的英里數(shù),顯示小數(shù)點(diǎn)后面一位數(shù)字。接下來,
使用1加侖大約3.785升,1英里大約為1.609千米,把單位是英里/加侖的值轉(zhuǎn)
換為升/100公里(歐洲通用的燃料消耗表示法),并顯示結(jié)果,顯示小數(shù)點(diǎn)
后面 1 位數(shù)字。注意,美國采用的方案測量消耗單位燃料的行程(值越大越
好),而歐洲則采用單位距離消耗的燃料測量方案(值越低越好)。使用
#define 創(chuàng)建符號常量或使用 const 限定符創(chuàng)建變量來表示兩個(gè)轉(zhuǎn)換系數(shù)。
總結(jié)
以上是生活随笔為你收集整理的c语言课后练习题第四章的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Linux】set ff=unix
- 下一篇: 杨辉三角C语言编程