C语言查缺补漏第四章

1.scanf()中,读取基本变量类型的值,咋变量名前加上一个&,字符串数组不需要加&。

2。Strlen()获取字符串的长度,不计空字符。

3.\0是字符串最后一个单元,标记字符串的结束。数组的容量必须至少比待存字符串数多一。

4.limit.h和flaot.h中提供整数类型和浮点类型大小限制相关的信息,这些事明示常量。

5.转换说明机器打印的输出结果:
%a:浮点数、十六进制数和p计数法
%A:浮点数、十六进制数和p计数法
%c:单个字符
%d:有符号十进制整数
%e:浮点数,e计数法
%E:浮点数,e计数法
%f:浮点数,十进制计数法
%g:根据值的不同,自动选择%f或%e,%e格式用于指数小于-4或者大于或等于精度时
%G:根据值的不同,自动选择%f或%E,%E格式用于指数小于-4或者大于或等于精度时
%i:有符号十进制整数(与%d相同)
%o:无符号八进制整数
%p:指针
%s:字符串
%u:无符号十进制整数
%x:无符号十六进制整数,使用十六进制整数0f
%X: 无符号十六进制整数,使用十六进制整数0F
%%:打印一个百分号

6.printf的修饰符:
标记:5种标记,-、+、空格、#、0
-:待打印项左对齐。即,从字段的左侧开始打印该项。
+:有符号值若为正,则在值前面显示加号;若为负,则在值前面显示减号。
空格:有符号值若为正,则在值前面显示前导空格(不显示任何符号);若为负,则在值前面显示减号+标记覆盖一个空格。
#:把结果转换为另一种形式。如果是%o,则以0开始;如果是%x或%X格式,则以0x或0X开始;对于所有的浮点格式,#保证了即使后面没有任何数字,也打印一个小数点字符。对于%g和%G格式,#防止结果后面的0被删除。
0:
数字:最小字段长度
.数字:精度
h:与整形转换说明一起使用,表示shot int 或unsigned short int类型的值。
hh:与整形转换说明一起使用,表示signed char 或unsigned char类型的值。
j:与整形转换说明一起使用,表示intmax_t 或uintmax_t类型的值。
I:与整形转换说明一起使用,表示long int 或unsigned long int类型的值。
II: 与整形转换说明一起使用,表示long long int 或unsigned long long int类型的值。
L: 与浮点转换说明一起使用,表示long double 类型的值。
T:与整形转换说明一起使用,表示ptrdiff_t类型的值,ptrdiff_t类型是两个指针差值的类型。
Z:与整形转换说明一起使用,表示size_t类型的值,size_t是sizeof的返回值类型。

7.printf函数也有返回值,返回打印字符的个数,包括空格和不可见的换行符。

8.在字符串中,不能再双引号括起来的字符串中间断行。给字符串断行方法有3种:1.使用多个printf,2.使用反斜杠和enter组合来断行。3.在两个用双引号括起来的字符串之间用空白隔开。

9.scanf的转换说明
%c:把输入解释成字符
%d:把输入解释成有符号十进制整数
%e、%f、%g、%a:把输入解释成浮点数
%E、%F、%G、%A:把输入解释成浮点数
%i: 把输入解释成有符号十进制整数
%o: 把输入解释成有符号八进制整数
%p: 把输入解释成指针(地址)
%s: 把输入解释成字符串。从第一个非空白字符开始,到下一个空白字符之前的左右字符都是输入
%u: 把输入解释成无符号十进制整数
%x、%X: 把输入解释成有符号十六进制整数

10.scanf转换说明中的说明符
*:抑制赋值
数字:最大字段宽度,输入达到最大字段宽度时,获第一次遇到空白字符时停止
hh:把整数作为signed char 或unsigned char 类型读取
ll:把整数作为long long 或unsigned long long 类型读取
h/l/L:%hd/%hi->short int
%ho/%hx/%hu->unsigned short int
%ld/%li->long
%lo/%lx/%lu->unsigned long
%le/%lf/%lg->double
在e/f/g前面使用L而不是l表明把对应值储存为long double
如果没有修饰符,d/i/o->int,f/g->float
j:在整型转换说明后面时,表示intmax_t或uintmax_t类型
z:在整型转换说明后面时,表明使用sizeof的返回类型
t:在整型转换说明后面时,表示两个指针差值的类型

11.如果使用%s转换说明,scanf会读取除空白以外所有字符。Scanf会根据%s转换说明读取一个单词。如果是套读取包含空格的字符串这种特殊情况,可以用getchar()或fgets()等函数。

12.scanf返回读取成功的项数。如果没有读取任何项,且需要读取一个数字而用户却输入一个非数值字符串,scanf便返回0.当scanf检测到文件结尾时,会返回EOF。

13.printf和scanf都可以使用修饰符来修改转换说明的含义。对于printf,如果不想预先指定字段宽度,希望通过程序来指定,可以用修饰符来代替字段宽度,也可修改精度。对于scanf,把*放在%和转换字符之间,会使得scanf跳过相应的输出项,在程序需要读取文件的热定咧内容时,这项跳过功能很有用。

14.想把数据打印成列,指定固定字段宽度很有用。

15.一些例子:
printf(“%c”,’\41’)输出!
一个字段宽度与位数相同的十进制整数:%d
一个字段宽度为6,最少有4为数字的十进制整数:%6.4d
一个形如+3.13、字段宽度等于数字中字符数的浮点数:%+0.2f
一个字段宽度为8的字符串的前个字符:%%8.8s
一个字段宽度为7,左对齐字符串中的前5个字符%-7.5

课后习题:

#include <stdio.h>
#include <string.h>
#include <float.h>
#define cogon 3.785
#define colon 1.609
void num1(void)
{
char name[10];
char name0[10];
printf("请输入名和姓(名 空格 姓)");
scanf("%s %s",name,name0);
printf("%s,%s",name,name0);
getchar();
}

void num2(void)
{
char name[10];
printf("请输入名字:");
scanf("%s",name);
printf("\"%s\"\n",name);
printf("\"%20s\"\n",name);
printf("\"%-20s\"\n",name);
printf("%*s\n",strlen(name)+3,name);
getchar();
getchar();
}


void num3(void)
{
 float num;
 printf("请输入一个浮点数:");
 scanf("%f",&num);
 printf("The input is %.1f or %.1e\n",num,num);
 printf("The input is %+.3f or %.3e\n",num,num);
 getchar();
 getchar();
}


void num4(void)
{float high;
char name[10];
 printf("请输入身高和姓名,(身高空格姓名)\n");
 scanf("%f %s",&high,name);
 printf("%s,you are %.3f feet tall\n",name,high);
 getchar();
}


void num5(void)
{float a,b;
 printf("请输入以兆每秒(Mb/s)为单位的下载速度和以兆字节(MB)为单位的文件大小");
 scanf("%f %f",&a,&b);
 printf("At %.2f megabits per second, a file of %.2f megabyts\n downloads in %.2f second",a,b,b*8/a);
}


void num6(void)
{char name[10];
 char name0[10];
 printf("输入名:");
 scanf("%s",name);
 printf("\n输入姓:");
 scanf("%s",name0);
 printf("\n%s %s",name,name0);
 printf("\n%*zd %*zd",strlen(name),strlen(name),strlen(name0),strlen(name0)); 
 printf("\n%s %s",name,name0);
 printf("\n%-*zd %-*zd",strlen(name),strlen(name),strlen(name0),strlen(name0)); 
}


void num7(void)
{
double a=1.0/3.0;
float b=1.0/3.0;
printf("a=%.6f",a);
printf("\n");
printf("a=%.12f",a);
printf("\n");
printf("a=%.16f",a);
printf("\n");
printf("b=%.6f",b);
printf("\n");
printf("b=%.12f",b);
printf("\n");
printf("b=%.16f",b);
printf("\n");
printf("FLT_DIG=%f",FLT_DIG);
printf("\n");
printf("DBL_DIG=%f",DBL_DIG);



}

void num8(void)
{float gon,lon;
printf("请输入旅行的旅程数(英里):");
scanf("%f",&lon);
printf("\n请输入消耗的汽油量(加仑):");
scanf("%f",&gon);
printf("\n消耗每加仑汽油行驶的英里数:%.1f",lon/gon);
printf("\n每百公里消耗汽油的升数:%.1f",100*gon*cogon/lon*colon);

}








int main(void)
{
num1();
num2();
num3();
num4();
num5();
num6();
num7();
num8();
return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

独孤西

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值