你该逆袭了
红色标注的是:错误的答案
蓝色标注的是:正确的答案
零、知识点总结
1、
目前一个整形数据用 32 位二进制数表示,因此其取值范围是:-2 ^ (31) ~ 2 ^(31) - 1
2、
浮点型数据在计算机中不是精确数值,而是存在一定的有效位数。C语言规定 float 类型数据有 6 位有效数字,double 类型数据有 10 位有效数字。因此浮点数运算过程中会产生浮点数的舍入错误。浮点型数据计算过程中可能产生上溢或者下溢,其中上溢表述数据无穷大(inf 表示),下溢则表示计算过程中损失了末尾的有效数字。
3、
浮点型常量默认均为 double 类型,除非以 6.0f 的形式显示表示 float 类型的数据。
2.9e05 默认是 double 类型浮点数,其后的L, 2.9e05L 表示其是 long double 类型。
4、
012 中以 0 开头表示八进制数据,八进制和十六进制常量通常优先选择 unsigned int 类型,因此使用转换说明符 %#o 。同理,unsigned int 类型数据 0x44 需要使用 %#x 。
5、
‘\n’:换行符:将当前位置移到本行开头。又叫回车,对应键盘上的return键
‘\r’:回车字符:将当前位置移到下一行开头。又叫换行,newline。
这时候可能就有人陷入了思考中,在文本中回车不就相当于换行了吗?换行不就相当于到了下一行了吗?其实按道理说这样理解是没有问题的,但是在不同的操作系统中,换行是由不同的方式来表示的。
Linux中\n表示回车并换行;
Windows中\r\n表示回车并换行。
Mac中\r表示回车并换行。
以上这种表示方式的理解可以通过打开一个文本文件来进行理解,但是需要引入三个概念。CR、LF、CRLF。
三、CR、LF、CRLF
CR:Carriage Return,对应ASCII中转义字符**\r**,表示回车
LF:Linefeed,对应ASCII中转义字符**\n**,表示换行
CRLF:Carriage Return & Linefeed,\r\n,表示回车并换行
四、举例理解
随便编辑打开一个txt文件,然后选择菜单栏中的编辑----->档案格式转换---->转换为Windows格式
然后选择菜单栏中的视图---->显示符号---->显示行尾符
这样就可以看到行尾符了,可以看到每一行的末尾都有CRLF这就代表回车并换行
一、复习题
1、
a:int
b:float
c:char
d:int
2、
答:int 表示的整形容纳不下时,用 long int 类型。
3、
由于C语言中数据类型实际所占存储位数和精度和具体平台相关,C语言的规范并没有强制和详细的规定,因此C语言程序在移植过程中可能会出现不同平台数据类型不兼容的状况。为了解决这个问题,C语言在可移植类型 stdint.h 和 inttypes.h 中规定了精确宽度整数类型,以确保C语言的类型在各系统内功能相同。为了获得32位有符号整数,可以使用 int32_t 作为标准32位整形数据,使用 int_32least_t 获得至少32位整形数据,int_fast32_t 获得32位整形数据的最快计算速度。
4、
答:a:退格
b:int 整数1066
c:float 浮点数
d:int 十六进制整数
e:double 指数
5、
#include <stdio.h>
int main()
{
float g;h; //g 后面应该是 逗号
float tax, rate;
g = e21; //不能同时省略e前面的小数点和数值 //e 的前面应有数值
tax = rate * g; //rate 没有被赋值
return 0;
}
6、
浮点型常量默认均为 double 类型,除非以 6.0f 的形式显示表示 float 类型的数据。
12 int %d
0X3 错误答案:int %#d
正确答案unsigned int %#X
‘C’ char %c
2.34E07 double 错误答案:%f
正确答案:%e
‘\040’ 八进制int 错误答案:%d
正确答案:%c
7.0 错误答案:float %f
正确答案:double %f
6L long int %ld
6.0f float %f
0x5.b6p12 float 错误答案: %#a (C99才支持,P 计数法) 十六进制指数
正确答案:%a
7、
012 中以 0 开头表示八进制数据,八进制和十六进制常量通常优先选择 unsigned int 类型,因此使用转换说明符 %#o 。同理,unsigned int 类型数据 0x44 需要使用 %#x 。
2.9e05 默认是 double 类型浮点数,其后的L, 2.9e05L 表示其是 long double 类型。
012 错误答案:八进制int %d
正确答案:unsigned int %#o
2.9e05L long double %lf
正确答案:%Le
‘s’ char %c
100000 int %d
‘\n’ char %c
20.0f float %f
0x44 错误答案:十六进制int %#d
正确答案:unsigned int %#x
-40 int %d
8、
%d %ld
%f %c
9、
错误的代码:
#include <stdio.h>
int main()
{
char ch = 0;
ch = 10; //错误
printf("1%c1", ch);
ch = 012; //错误
printf("2%c2", ch);
ch = 0xa; //错误
printf("3%c3", ch);
ch = '\n'; //错误
printf("4%c4", ch);
return 0;
}
正确的代码:
#include <stdio.h>
int main()
{
char ch = 0;
printf("%d\n", '\r'); //回车字符
ch = 13;
printf("1%c1", ch);
ch = '\015'; //纠正
printf("2%c2", ch);
ch = '\xd'; //纠正
printf("3%c3", ch);
ch = '\r';
printf("4%c4", ch);
return 0;
}
‘\n’:换行符:将当前位置移到本行开头。又叫回车,对应键盘上的return键
‘\r’:回车字符:将当前位置移到下一行开头。又叫换行,newline。
这时候可能就有人陷入了思考中,在文本中回车不就相当于换行了吗?换行不就相当于到了下一行了吗?其实按道理说这样理解是没有问题的,但是在不同的操作系统中,换行是由不同的方式来表示的。
Linux中\n表示回车并换行;
Windows中\r\n表示回车并换行。
Mac中\r表示回车并换行。
以上这种表示方式的理解可以通过打开一个文本文件来进行理解,但是需要引入三个概念。CR、LF、CRLF。
三、CR、LF、CRLF
CR:Carriage Return,对应ASCII中转义字符**\r**,表示回车
LF:Linefeed,对应ASCII中转义字符**\n**,表示换行
CRLF:Carriage Return & Linefeed,\r\n,表示回车并换行
四、举例理解
随便编辑打开一个txt文件,然后选择菜单栏中的编辑----->档案格式转换---->转换为Windows格式
然后选择菜单栏中的视图---->显示符号---->显示行尾符
这样就可以看到行尾符了,可以看到每一行的末尾都有CRLF这就代表回车并换行
10、
#include <stdio.h>
int main(void)
{
int cows, legs;
printf("how many cow legs did you count?\n");
scanf("%d", &legs);
cows = legs / 4;
printf("that implies there are %d cows.\n", cows);
return 0;
}
11、
a:换行符
b:
c:“
d:水平制表符
二、编程练习
1、
我的答案:
#include <stdio.h>
int main()
{
printf("%zd\n", sizeof(int)); //4
printf("%zd\n", sizeof(float)); //4
printf("%zd\n", sizeof(double)); //8
//signed int max = 2147483647 // 7FFFFFFF
//unsigned int max = 4294967295 // FFFFFFFF
//整数上溢
unsigned int ua = 4294967295;
printf("ua = %u\n", ua); //ua = 4294967295
printf("ua+1 = %u\n", ua + 1); //ua + 1 = 0
printf("ua+2 = %u\n", ua + 2); //ua + 2 = 1
signed int a = 2147483647;
printf("a = %d\n", a); //a = 2147483647
printf("a+1 = %d\n", a + 1); //a + 1 = -2147483648
printf("a+2 = %d\n", a + 2); //a + 2 = -2147483647
//float max = 4294967295;
//浮点数上溢
float fup = 4294967295.0f;
printf("%f\n", fup + 1000.0); //4294968296.000000
//系统警告:显示已经算数溢出了 //并且计算结果错误
//浮点数下溢
float flow = 2.0e18f;
float flow_sum, flow_res;
flow_sum = flow + 1;
flow_res = flow_sum - flow;
printf("%f\n", flow_res); //0.000000
return 0;
}
标准答案:
c 语言在limit.h 和 float.h 头文件中,预先定义了常见数据类型的限制。
#include <stdio.h>
#include <float.h> //c 语言在limit.h 和 float.h 头文件中,预先定义了常见数据类型的限制。
#include <limits.h>
//INT_MAX
//FLT_MAX
int main(void)
{
int big_int = 2147483647;
//有符号整数数据最大值是 2 的 31 次方
float big_float = 3.402823466e+38F;
//浮点型数据的最大值一般为 3.4E38
float small_float = 10.0 / 3;
//浮点型数据的有效位数为 6 位
printf("the big int data is %d\n", big_int + 1);
//整形数据最大值 加1,会造成越界,结果为 -2147483648
printf("the big float data is %f\n", big_float * 10);
//浮点型最大数据乘以10造成越界,输出 inf。
//如果浮点型数据只 加1个 小数据,由于其精确度限制,不会造成越界。
printf("the big float data is %f\n", big_float + 1);
//340282346638528859811704183484516925440.000000
printf("the big float data is %f\n", small_float);
//打印 3.333333 ,精度损失
printf("the max float data is %f\n", FLT_MAX);
//340282346638528859811704183484516925440.000000
printf("the max int data is %d\n", INT_MAX);
//2147483647
return 0;
}
2、
#include <stdio.h>
int main()
{
int input = 0;
printf("请输入一个ACSII值:");
scanf("%d", &input);
printf("%c\n", input);
return 0;
}
3、
#include <stdio.h>
int main()
{
printf("\a");
printf("startled by the sudden sound,sally shouted,\n");
printf("\"by the great pumpkin,what was that!\"");
return 0;
}
4、
#include <stdio.h>
int main()
{
float input = 0;
printf("enter a floating-point value:");
scanf("%f", &input);
printf("fixed-point notation:%f\n", input);
printf("exponential notation:%e\n", input);
printf("p notation:%.2a\n", input);
return 0;
}
5、
#include <stdio.h>
#define YEAR_SEC 3.156e+07
int main()
{
int year = 0;
double sec = 0;
printf("请输入你的年龄:");
scanf("%d", &year);
sec = (double)year * YEAR_SEC;
printf("你的年龄:%d 对应的秒数:%f", year, sec);
return 0;
}
6、
#include <stdio.h>
#define MOLE 3.0e-23
#define QUART 950
int main()
{
float quart, quantity;
printf("请输入:");
scanf("%f", &quart);
quantity = quart * QUART / MOLE;
printf("%e\n", quantity);
return 0;
}
7、
#include <stdio.h>
#define INCH 2.54
int main()
{
float height = 0;
float cm = 0;
printf("请输入身高(英寸):");
scanf("%f", &height);
cm = height * INCH;
printf("厘米:%.2f", cm);
return 0;
}