C语言预备知识 C语言标准函数 编译过程 变量 IEE754 运算 解一元二次方程练习



预处理(Preprocessing):用于将所有的#include头文件以及宏定义替换成真正的内容。gcc的预处理是预处理器cpp来完成的。
编译(Compilation):将经过预处理之后的程序转换成特定汇编代码(assembly code)的过程。
汇编(Assemble): 将上一步的汇编代码转换成机器码(machine code)产生目标文件
链接(Linking):链接过程将多个目标文以及所需的库文件链接成最终的可执行文件(executable file)

%d表示十进制输出
%x或%X表示以十六进制输出
%o表示以八进制输出
float x = 3.2 ;//传统写法float x = 3.2e3 ;//科学计数法3200float x = 123.45e-2; //科学计数法 1.2345 (后者默认double)
单个字符使用单引号括起来'A'
字符串用双引号括起来:“A” 表示 ‘A’和‘\0’的组合
int main(){const int a = 1; //a的值不允许修改}
***#define***#define SIZE 10


sizeof运算符: 用于获取数据类型或者表达式的长度
sizeof(变量名)sizeof(数据类型名)sizeof 变量名
sizeof(结构体) :理论上结构体各个成员在内存中是连续存放的,和数组非常类似,但是,结构体占用的总大小不一定等于全部成员变量占用内存大小之和。在编译过程中,为了提高内存寻址的效率,各个成员之间可能会存在缝隙,用sizeof可以得到结构体在内存中的总大小,sizeof(结构体名)或sizeof(结构体变量名)都可以。
不要对void使用sizeof: void是无值型或空类型,不知道存储空间大小的类型,编译器也不能确定它的大小。
不要在子函数中对字符指针用sizeof:如果在子函数中用sizeof(pstr),得到的不是字符串占用内存的字节数,而是字符指针占用内存的字节数(8字节)
不要在子函数中对结构体指针用sizeof :同字符指针
signed :第一位代表正负,剩余代表大小 signed int范围-128~127,默认情况
unsigned:无符号,所有位都为大小,没有符号 unsigned int 范围0~255

int main(){char ch;scanf("m%c", &ch); //输入ma //m为非输入控制符printf("%d\n", ch);return 0;}//输出97
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>int main(){int a , b;char ch;//存放脏数据scanf("%d", &a);printf("%d\n", a);避免第一次输入的脏数据影响第二次读入如果第一次后面存在脏数据将其读入while ((ch = getchar()) != '\n'){continue;}scanf("%d", &b);printf("%d\n", b);return 0;}
取余%的运算对象必须是整数,结果是整除后的余数,其余数的符号与被除数相同。
C语言没有“之间”,“中间”,“之内”的关系运算符,只能使用与或操作进行替换
变量名++;// 表示在本次使用变量后再自增;++变量名; 表示在本次使用变量前自增;变量名–-;// 表示在本次使用变量后再自增;–-变量名; 表示在本次使用变量前自减;
#include <stdio.h>int main(){3, 4, 5;//这是一条语句//把上面这条语句的值赋值给变量aint a = (3, 4, 5);printf("a=%d\n", a);}//输出结果:a=5// 因为a的值是整条语句的值,而整条语句的值是最后那个逗号后面的值
#include <stdio.h>int main(){int a=3, b=4, c=5;int x=0;int y=(x=a+b),(b+c); // 使用逗号隔开,使得y=x=a+bprintf("第一个y=%d\n", y);y=((x=a+b),(b+c));// 如果用逗号二开,返回值就会变成最后那个表达式额值printf("第二个y=%d\n", y);}// 输出结果:// 第一个y=7// 第一个y=9
表达式1?表达式2:表达式3;
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include <math.h>//一元二次方程int main(){int a; //二次项系数int b; //一次项系数int c; //常数项printf("请分别输入二次项系数,一次项系数,常数(中间空格隔开)\n");scanf("%d %d %d", &a, &b, &c);float judge; //根据b的平方-4ac来判断是否有解及解的个数judge = b * b - 4 * a * c;printf("%f\n", judge);float x1, x2; // 方程的解if (judge < 0){printf("此方程无解\n");}else if (judge > 0){printf("此方程有两个不同的解\n解为:\n");x1 = (-b + sqrt(judge)) / 2 * a;x2 = (-b - sqrt(judge)) / 2 * a;printf(" X1:%f\n X2: %f\n", x1, x2);}else if(judge == 0){printf("此方程有两个相同的解\n");x1 = (-b - sqrt(judge)) / 2 * a;x2 = (-b + sqrt(judge)) / 2 * a;printf(" X1=X2: %f", x1);}return 0;}




