c语言地4章课后题.docx
《c语言地4章课后题.docx》由会员分享,可在线阅读,更多相关《c语言地4章课后题.docx(12页珍藏版)》请在冰豆网上搜索。
c语言地4章课后题
一、第四章p56-58页的习题4.1—4.3。
4-1
(1)分析并写出下列程序运行结果
#include
main()
{
charc1='a',c2='b',c3='c';/*定义三个字符*/
printf("a%cb%cc%c\n",c1,c2,c3);/*格式化输出三个字符*/
}
结果:
(2)
#include
main()
{
inta=12,b=15;
printf("a=%d%%,b=%d%%\n",a,b);/*格式化输出a=12%,b=15%*/
}
结果:
(3)假设程序输入123456
#include
main()
{
inta,b;
scanf("%2d%*2s%2d",&a,&b);/*对输入的数取前两位赋给a,跳过长度为2的字符串,再取两位数赋给b*/
printf("%d,%d\n",a,b);
}
结果:
4-2分析下面程序,请指出错误原因和程序错在哪里,并改正错误
改正后:
#include
main()
{
longa,b;
floatx,y;
scanf("%ld,%ld",&a,&b);
getchar();
scanf("%5f,%5f",&x,&y);
printf("a=%ld,b=%ld\n",a,b);
printf("x=%f,y=%f\n",x,y);
}
错误分析:
1、定义long型,输入时要写成%ld,输入时不能加入\n,取址符号&丢掉,scanf函数中不.n,规定精度
2、输出a,b对应为long型,输出格式符为%ld,x,y对应为float型,输出格式为%f,%f
3、在两个scanf()函数中,输入4个数时,会在两个整数和两个浮点型数之间加入逗号,但加入逗号后,第二条scanf()语句会认为逗号也为有效输入项,后面的浮点型数就不会被读入,所以要加入getchar()函数将逗号吸收掉。
4-3、填空题
(1)要使下面程序在屏幕上显示1,2,34,则从键盘输入的数据格式应为1234
#include
main()
{
chara,b;
intc;
scanf("%c%c%d",&a,&b,&c);
printf("%c,%c,%d\n",a,b,c);
}
结果:
(2)在与上面程序的键盘输入相同的情况下,若将程序中的第7条语句修改为
Printf(“%-2c%-2c%d\n”,a,b,c);
则屏幕输出为1234
(3)要使上面程序的键盘输入数据格式为1,2,34,输出语句在屏幕上显示的结果也为1,2,34,则应将程序中的第六条语句修改为scanf("%c%*c%c%*c%d",&a,&b,&c)
(4)在(3)的程序基础上,程序仍然输入1,2,34,若将程序中的第7条语句修改为
Pirntf(“\’%c\’,\’%c’\,%d\n”,a,b,c);
则程序的屏幕输出为’1’,’2’,34
(5)要使上面程序的键盘输入无论用哪种格式输入数据,程序在屏幕上的输出结果都为1,2,34,则将程序中的第6条语句修改为scanf("%c%*c%c%*c%d",&a,&b,&c);
第1种输入方式:
1,2,34(以逗号作为分隔符)
第2种输入方式:
1234(以逗号作为分隔符)
第3种输入方式:
1234(以逗号作为分隔符)
第4种输入方式:
1
2
34(以回车作为分隔符)
二、收集资料,总结printf和scanf函数的用法。
一、print格式化输出函数
1、print(“要输出的字符序列”)
注意:
“要输出的字符序列”必须用英文的双引号括起来,其作用是在屏幕上原样输出“要输出的字符序列”。
例如:
printf(“Ilovechina!
”);
屏幕结果:
Ilovechina!
2、printf(“输出格式控制符”,输出列表项)
注意:
“输出格式控制符”必须用英文的双引号括起来,其作用是按照输出格式来输出后面的输出列表项的值。
Printf(“%d,%d”,x,y);的作用是:
以%d的格式输出变量x,y的值,中间以逗号分隔。
“输出格式控制符”可以是:
(1)格式符:
即由%和格式字符组成,如:
%d,%f等
(2)普通字符:
如printf(“a=%d,b=%d\n”,a,b);中的“a=”、“b=”都是普通字符,普通字符原样输出。
(3)转义字符:
如printf(“a=%d,b=%d\n”,a,b);中的“\n”。
其含义是“换行”。
C语言中常使用的格式字符共用9种。
格式符字
说明
d,i
输出带符号位的十进制整数(整数前无符号)
O
以八进制无符号形式输出整数(无前导o)
X或x
以十六进制无符号形式输出整数(无前导ox),用x则输出的a~f是小写的形式,用X则输出的a~f是大写的形式
U
以十进制无符号型输出整数
C
输出一个字符
S
输出字符串的字符,遇到“\0”时结束输出,或者输出由精度指定的字符数
F
以小数形式输出单精度或双精度数,隐含输出六位小数,当指定精度为0时,小数部分(包含小数点)都不输出
E或E
以标准形式输出单双精度数,当用E时,指数部分的e用E表示,小数位数保留6位
G或g
由系统决定采用%f,%e,%E的格式,以使输出宽度最小,当用G时,指数部分e用E表示
%
输出百分号%
在格式说明中,在%和上述格式字符之间还可以插入修饰符,如下表:
修饰符
说明
L或l
输出长整形,放在d,o,x,u之前;输出double型,放在f、e之前
h
输出短整型,放在d,o,x,u之前
m
输出数据宽度
n
对于实数,表示输出n位小数,对于字符串,表示截取字符个数
-
输出的数据在域内左对齐
Printf()函数常用的格式符如下:
(1)d格式符用来输出十进制整数
%d:
以整数的实际位数输出
%+d:
以整数的十进制实际位数输出,输出的正整数前带“+”
%md:
输出的整数有m列并右对齐,当m大于整数的宽度时,多余的位数用空格填补,当m小于整数的宽度时,则按实际宽度输出
%-md:
输出的整数有m列并左对齐,当m大于整数的宽度时,多余的位数用空格填补,当m小于整数的宽度时,则按实际宽度输出
例如:
printf(“%8d\n,%-8d\n”,2009,2009);
结果为:
2009
2009
%ld或%Ld:
按实际位输出长整形数据
%hd:
按实际位数输出短整型数据
%mld或%mLd:
输出的长整型数据有m列并右对齐,当m大于整数的宽度时,多余的位数用空格填补,当m小于整数的宽度时,则按实际宽度输出
%-mld或%-mLd:
输出的长整型数据有m列并左对齐,当m大于整数的宽度时,多余的位数用空格填补,当m小于整数的宽度时,则按实际宽度输出
例如:
longx=123456;
printf("%8ld\n%-8ld\n",x,x);
结果:
123456
123456
%0md:
输出的整数有m列并右对齐,当m大于整数的宽度时,多余的位数用0填补,当m小于整数的宽度时,则按实际宽度输出
注意:
没有%-0md
(2)o,x,u的格式符用法与d相同,只是o,x,u不考虑符号位
例如:
结果:
(3)c格式符用来输入一个字符。
用法:
%c:
输出一个字符
%mc:
输出的字符占m列并右对齐,多余的空位用空格填补
%-mc:
输出的字符占m列并左对齐,多余的空位用空格填补
例如:
printf(“%-4c\n%4c\n”,‘A’,‘A’);
结果:
A
A
(4)s格式符用来输出一个字符串。
用法:
%s:
以字符串的实际长度输出一个字符串
%ms:
输出的字符串占m列并右对齐,当m大于字符串的宽度时,多余的位数用空格填补,当m小于字符串的宽度时,则按实际宽度输出
%-ms:
输出的字符串占m列并左对齐,当m大于字符串的宽度时,多余的位数用空格填补,当m小于字符串的宽度时,则按实际宽度输出
例如:
结果:
%m.ns:
在m列的位置上输出一个字符串的前n个字符,并右对齐,m>n时,多余的位数用空格填补;m%-m.ns:
在m列的位置上输出一个字符串的前n个字符,并左对齐,m>n时,多余的位数用空格填补;m例如:
结果:
(5)f格式符以小数形式输出单双精度实数
%f:
输出单精度实数,整数部分全部输出,小数部分保留6位,在有效范围内的小数部分要进行四舍五入。
%lf或%Lf:
输出双精度实数,整数部分全部输出,小数部分保留6位,在有效范围内的小数部分要进行四舍五入。
例如:
结果:
%m.nf:
在m列的位置上输出一个实数保留n位小数并右对齐,系统自动对在有效数据范围内的小数部分进行四舍五入。
当m大于实际宽度时,则多余位用空格填补,当M小于实际宽度时,实数的整数部分按实际宽度输出。
%-m.nf:
在m列的位置上输出一个实数保留n位小数并左对齐,系统自动对在有效数据范围内的小数部分进行四舍五入。
当m大于实际宽度时,则多余位用空格填补,当M小于实际宽度时,实数的整数部分按实际宽度输出,且结果左对齐。
例如:
结果:
%.nf:
实数的整数部分按实际输出,小数部分保留n位,自动对在有效范围内的小数进行四舍五入保存,结果左对齐。
(6)e格式符用来以指数形式输出一个实数,用法同f格式符。
例如:
printf(“%e”,12.122344);
结果:
1.212234e+001
(7)g格式符用来输出实数,系统根据实数的大小,自动选择f格式符或e格式符输出,输出时选择占宽度较小的一种格式输出,且不输出无意义的0
总结:
1、数据类型应与格式说明符匹配,否则会出错。
2、int型数据可以用%u格式输出,一个unsigned型数据可用%d,%o,%x格式输出
3、除了X,E,G,L可以大写以外,其他格式必须小写
4、如果需要输出“%”,应在格式符内连续使用两个“%”,如:
Printf(“%5.2f%%”,3.0/100);结果:
33.33%
二、scanf()输入函数
格式输入函数scanf()用于从键盘输入数据,该输入数据按指定的输入格式赋给相应的输入项。
其输入格式为:
Scanf(“输入格式控制符”,输入项地址列表);
注意:
“输入格式控制符”必须用英文的双引号括起来,他的作用是按照输入格式从键盘从键盘键入若干类型的数据给后面的输入项。
例如:
inta,b;
Scanf(“a=%d,b=%d”,&a,&b);
运行时从键盘输入a=3,b=5按enter键,则变量a和b的值分别是3和5。
“输入格式控制符”可以是:
(1)格式符:
由%和格式字符构成,如%d和%f等
(2)普通字符:
如printf(“a=%d,b=%d\n”,a,b);中的“a=”,“,”、“b=”都是普通字符,输入时要按原样输入。
下表是scanf()格式说明
格式字符
说明
d和i
输入带符号的十进制整数
O
输入不带符号位的八进制整数
X和x
输入不带符号位的十六进制整数,大小写形式相同
u
输入不带符号位的十进制整数
c
输入单个字符
s
输入字符串
f
输入实数,以小数形式或指数形式
EegG
与f作用相同,e与f,g可以相互替换,大小写形式相同
在格式说明中,在%和上述格式字符之间还可以插入下表的修饰符
格式字符
说明
L或l
输入长整形,放在d,o,x,u的前面;
输入double型,放在f,e之前
h
输入短整型,放在d,o,x,u之前
m
用来指定输入数据的宽度
*
表示输入项在读入后不赋给相应的变量
输入scanf()函数要注意以下几点:
(1)地址表列要用地址运算符“&”取变量的地址或用指针变量
(2)“输入格式控制符”中的普通字符一定要按照原样输入
Scanf(“a=%d,b=%d”,&a,&b);输入时键入a=3,b=5按enter键。
如果“输入格式控制符”中没有普通字符,则输入时应以一个或多个空格、Tab键或enter键来分隔。
如:
Scanf(“%d%d”,&a,&b);正确的输入格式是35(回车),
35(回车),3(回车)5(回车)
(3)可指定输入数据的宽度,系统会自动按它截取所需的数据
例如:
结果:
也可用于字符型数据:
例如:
结果:
(4)需要连续输入多个字符是,字符之间不用分隔,而且空格、回车等作为有效字符输入
卖炭翁白居易(唐)字乐天号香山居士
卖炭翁,伐薪烧炭南山中。
满面尘灰烟火色,两鬓苍苍十指黑。
卖炭得钱何所营?
身上衣裳口中食。
可怜身上衣正单,心忧炭贱愿天寒。
夜来城外一尺雪,晓驾炭车碾冰辙。
牛困人饥日以高,市南门外泥中歇。
翩翩两骑(jì)来是谁?
黄衣使者白衫儿。
手把文书口称敕,回车叱牛牵向北。
一车炭,千余斤,宫使驱将(jiāng)惜不得。
半匹红绡一丈绫,系(jì)向牛头充炭直(值)。