Data types,Operators,Expressions
Open,free,share
以下笔记为广泛收集摘录所得,如果有侵犯之处,欢迎向我反馈,这种情况下将采取删除有关内容的措施
1,C99 standard guarantees uniqueness of 63 characters for internal names.
2,C99 standard guarantess uniqueness of 31_ characters for external names.
3, Variable names beginning with underscore is not encouraged.To avoid conflicts since library routines use such names.
4,All keywords in C are in LowerCase letters.
5,Variable name resolving (number of significant characters for uniqueness of variable) depends on Compiler and linker implementations.
6,Both %d and %i can be used as a format identifier for int data type.
7,%i和%d都是表示有符号十进制整数,但%i可以自动将输入的八进制或者十六进制转换为十进制而%d则不会进行转换。
8
整数类型的有关数据(第43页) | |||||
类型 | 比特(位)数 | 取值范围 | |||
[signed] int | 16 | -32768~32767 即 -2^15~(2^15-1) | |||
unsigned int | 16 | 0~65535 即 0~(2^16-1) | |||
[signed] short [int] | 16 | -32768~32676 即-2^15~(2^15-1) | |||
unsigned short [int] | 16 | 0~65535 即 0~(2^16-1) | |||
long [int] | 32 | -2147483648~2147483647 即 -2^31~(2^31-1) | |||
unsigned long [int) | 32 | 0~4294967295 即 0~(2^32-1) | |||
浮点型数据(第46页) | |||||
类型 | 比特(位)数 | 有效数字 | 取值范围 | ||
float(单精度) | 32 | 6~7 | -3.4×10^-38~3.4×10^38(精度为6~7位) | ||
double(双精度) | 64 | 15~16 | -1.7×10^-308~1.7×10^308(精度为15~16位) | ||
long double(长双精度) | 128 | 18~19 | -1.2×10^-4932~1.2×10^4932 | ||
转义字符及其作用(第48页) | |||||
字符型式 | 含义 | ASCII代码 | |||
\n | 换行,将当前位置移到下行开头 | 10 | |||
\t | 水平制表(跳到下一个Tab位置) | 9 | |||
\b | 退格,将当前位置移到前一列 | 8 | |||
\r | 回车,将当前位置移到本行开头 | 13 | |||
\f | 换页,将当前位置移到下页开头 | 12 | |||
\\ | 代表一个反斜杠字符”\” | 92 | |||
\’ | 代表一个单引号(撇号)字符 | 39 | |||
\” | 代表一个双引号字符 | 34 | |||
\ddd | 1到3位八进制数所代表的字符 | ||||
\xhh | 1到2位十六进制数所代表的字符 | ||||
printf格式字符(第81页) | |||||
格式字符 | 说明 | ||||
d,i | 以带符号的十进制开式输出整数(正数不输出负号) | ||||
o | 以八进制无符号型式输出整数(不输出前导符o) | ||||
x,X | 以十六进制无符号型式输出整数(不输出前导符ox),用x输出十六进制数的a~f时以小写形式输出。用X时,则以大写字母输出 | ||||
u | 以无符号十进制形式输出整数 | ||||
c | 以字符形式输出,只输出一个字符 | ||||
s | 输出字符串 | ||||
f | 以小数形式输出单、双精度数,隐含输出6位小数 | ||||
e,E | 以指数形式输出实数,用e时以“e”表示(如1.2e+02),用E时指数以“E”表示(如1.2E+02) | ||||
g,G | 选用%f或%e格式中输出宽度较短的一种格式,不输出无意义的0。用G时,若以指数形式输出,则指数以大写表示 | ||||
printf的附加格式说明字符(第81页) | |||||
字符 | 说明 | ||||
l,L | 用以长整型整数,可加在格式符d、o、x、u前面(比如说%Lf用于long double) | ||||
m(代表一个整数) | 数据最小宽度 | ||||
n(代表一个整数) | 对实数,表示输出n位小数;对字符串,表示截取的字符个数 | ||||
- | 输出的数字或字符在域内向左靠 | ||||
scanf格式字符(第83页) | |||||
格式字符 | 说明 | ||||
d,i | 用来输入有符号的十进制整数 | ||||
u | 用来输入无符号的十进制整数 | ||||
o | 用来输入无符号的八进制整数 | ||||
x,X | 用来输入无符号的十六进制整数(大小写作用相同) | ||||
c | 用来输入单个字符 | ||||
s | 用来输入字符串,将字符串送入一个字符数组中,在输入时以非空白字符开始,以第一个空白字符结束。字符串以串结束标志’\0’作为最后一个字符 | ||||
f | 用来输入实数,可以用小数形式或指数形式输入 | ||||
e,E,g,G | 与f作用相同,e与f、g可以互相替换(大小写作用相同) | ||||
scanf的附加格式说明字符(第83页) | |||||
字符 | 说明 | ||||
l | 用于输入长整型数据(可用%ld,%lo,%lx,%lu)以及double型数据(用%lf或%le) | ||||
h | 用于输入短整型数据(可用%hd,%ho,%hx) | ||||
域宽 | 指定输入数据所占宽度(列数),域宽应为正整数 | ||||
* | 表示本输入项在读入后不赋值给相应的变量 | ||||
逻辑运算的真值表(第94页) | |||||
a | b | !a | !b | a&&b | a||b |
非0 | 非0 | 0 | 0 | 1 | 1 |
非0 | 0 | 0 | 1 | 0 | 1 |
0 | 非0 | 1 | 0 | 0 | 1 |
0 | 0 | 1 | 1 | 0 | 0 |
9,typedef and struct are used to define user-defined data types.
10,The %s along with the Sanfoundry is not read as a format modifier while new line character prints the new line.
1. #include <stdio.h>
2. int main()
3. {
4. printf("C programming %s", "Class by\n%s Sanfoundry", "WOW");
5. }
11, format identifier 格式转换说明符
12,
/*************************************************************************
> File Name: mod.c
> Author: wayne
> Created Time: Mon 02 Jan 2017 08:55:10 AM CST
************************************************************************/
#include<stdio.h>
int main()
{
//结果的正负与百分号前面的数字正负相同
printf("%d %d\n",45%7,45/7); //3,6
printf("%d %d\n",(-45)%7,(-45)/7); //-3,-6
printf("%d %d\n",45%(-7),45/(-7)); //3,-6
printf("%d %d\n",(-45)%(-7),(-45)/(-7)); //-3,6
return 0;
}
13,int x = 5.3 % 2;
->Compile time error
14, x > y ? printf("%d", z) : return z;
->Compile time error; expected expression before ‘return’
15,
#include <stdio.h>
void main()
{
float x = 0.1;
if (x == 0.1)
printf("Sanfoundry");
else
printf("Advanced C Classes");//print Advanced C Classes
}
16,In this case,the output will be a junk value.(printf按整型的方式读取了前4个字节)
float x = 0.1;
printf("%d, ", x);
17,
18,就高不就低原则:不同数据类型的数比较大小时会进行隐式转换,将小数据范围的数据转换成大数据范围进行比较;
19,负数的补码就是对反码加1,而正数不变,正数的原码反码补码是一样的
20,求负整数的补码,将其对应正数二进制表示所有位取反包括符号位0变1,1变0后加1
21,++运算符只能用于变量
22,
bitwise exclusive OR operator 【计】 按位”异”算符
bitwise operator 【计】 按位算符
bitwise AND operator 【计】 按位”与”算符
23,What is the output of this C code?
1. #include <stdio.h>
2. void main()
3. {
4. int x = 97;
5. int y = sizeof(x++);
6. printf("x is %d", x);
7. }
a) x is 97
b) x is 98
c) x is 99
d) Run time error
View Answer
Answer:a
另,形如sizeof(void)
的使用并不合法,但使用printf
输出将得到1.
24,三元操作符只是一个操作符而已,不能把操作的对象变成一条语句来看待,(?后添加return非法,然而getchar合法)
25,return是语言级别的,它表示了调用堆栈的返回;而exit是系统调用级别的,它表示了一个进程的结束;
26,同一条语句中,使用逗号表达式将导致后自增运算符生效,如int i=1;int a=(i++,i)
,得到a为2.
27,Answer:a
28,What is the value of i and j in the below code?
1. #include <stdio.h>
2. int x = 0;
3. int main()
4. {
5. int i = (f() + g()) || g();
6. int j = g() || (f() + g());
7. }
8. int f()
9. {
10. if (x == 0)
11. return x + 1;
12. else
13. return x - 1;
14. }
15. int g()
16. {
17. return x++;
18. }
19.
a)i value is 1 and j value is 1
b)i value is 0 and j value is 0
c)i value is 1 and j value is undefined
d)i and j value are undefined
View Answer
Answer:d(Linux下C99i,j均为1)
29,Floating point Exception:除0错误或glibc版本过低