编译预处理
作用
简单来说,编译预处理的作用就是将代码变得不像人话。之后才能被编译器编译成汇编进而生成机器码
基本类型
#include<XXXXX.h> 引用头文件
#define XXX AAA 将代码中的XXX 全部替换为 AAA
#ifndef 判断之前有没有define过(多用在头文件中)
#endif 头文件结束标志
变量
定义一个变量,可以理解为申请了一个存储空间,这块存储空间内可以存放数据。
int a;
就是定义了一个int型变量,不同类型变量存储空间大小不同。不过实质上都是一个个基本存储空间堆起来的。
flaot a[10];
int b[] = {1,2,3,4,5};
a[5] = 0 ;
数组也可以这么理解,a[10] 为一个由10个float型变量堆起来的空间,可以通过 a[i] 对 a[10] 中的第 i 个 float型变量操作(i = 0~9)。需要注意的是,i是从0 ~ n-1。a[0]是第一个以此类推。变量声明之后存储空间的大小将不再变化,所以[]中不可以用变量。 在声明同时赋值的情况下可以不写。
函数
函数基本结构
int F??kTimes (int night){
int times = 0;
times = night*7;
return times;
}
逐行分析
第一行: int F??kTimes (int night)
int 为函数类型与返回值return XXX有关,int 返回 int型变量,float返回float型,以此类推。void为无返回值函数。
F??kTimes 为函数名(两个??代表消音,我是个有素质的人),函数命名规则百度即可,一般用英语单词就。(int night)为传入参数。
第二行:int times;
定义一个名为times的int型变量并赋初值,变量类型也又float 等不同类型。变量命名规则百度即可,一般也用单词。且不能为关键字如if、else。
第三行:times = night*7;
将night×7的值赋给times
第四行:return times;
返回return值,一般将返回值赋给变量如 a = F**kTimes; 则a的值变为times的值。
主函数
主函数函数名为 main 是程序的开始,不可或缺所有子函数,语句都必须再主函数中。主函数结束,程序即结束。
子函数
用来实现各种子功能,比如上面代码块,功能是求一夜几次。
运算符
加 a+b
减 a-b
乘 a*b
除 a/b
求余数 a%b
加减乘除取余运算后结果都等与一个数一般用来赋值给变量,如 c = a+b;
大于 a>b , 大于等于 a>=b
小于 a<b , 小于等于 a<=b
等于 a==b , 不等 a != b
关系运算符用来比较,如果是对的为“真”即值为1,否则为“假”值为0。
与 && , a && b ,当 a 和 b 都为1时 ,此表达式结果才为1
或 | | , a | | b ,当 a 和 b 有至少一个为1时 ,此表达式结果才为1
非 ! , !a , 当a 为1 时,!a 为0
(),这个东西用法就和数学中的()一样。
赋值 a=b
将 b 的值复制给 a ,如b等于520,a=b之后 a也变成520,b 值不变。
运算符可运算变量与变量如 a+b 也可运算变量与常数 如 a + 7。
运算符还有很多,但是会以上基本可以应付简单程序。
关键字
if(表达式){
程序段
}
if功能为:如果表达式为1 执行程序段,否则跳过这段。if可以单独存在。
if(表达式){
程序段1
}
else{
程序段2
}
else依赖于if而存在,如果if中的表达式为1,执行if {}中的程序段1。否则执行else {} 中的程序段2。
if(表达式1){
程序段1
}
else if (表达式2){
程序段2
} ...(省略n句 else if)...
else{
程序段n+1
}
else if 主要功能就是把非表达式1的情况细分。
while(1){
程序段
}
while判断()中的表达式,为真会开始或继续循环,否则跳出循环。上面的while(1)为死循环,除非程序段中有跳出循环语句否则将会执行到宇宙死,或者机器死。下面的例子就是输出100句“fuc* you”
int i = 0 ;
while(i < 100){
i ++ ;
printf("fu*k you \n")
}
for(语句1;表达式;语句2){
程序段
}
for会先执行语句1(可以为空),之后判断表达式,如果为真,执行{}内程序段,之后执行语句2,否则跳过。
常用的关键字就这些,剩下还有 do{…}while()、swich(){ case : } 、 break 、 continue 等等,掌握常用的,剩下的会在实践中一点点积累出来。
常用函数/头文件
#include<stdio.h>
#include<math.h>
int main(){
int a = 0 ;
scanf("%d",&a);
a = pow(a,a);
printf("%d",a);
return 0 ;
}
scanf("%d",&a); 将输入的变量值赋给送到 a 的地址,如果输入为5 则 a等于5,a==5 值为1.
printf("%d",a); 将a的值输出到屏幕。
pow(a,a); 返回a的a次方,a = pow(a,a); 将返回值赋给a。
#include <stdio.h>是基本输入输出头文件,用的最多,scanf、printf都在stdio.h里。math.h是数学运算头文件。pow这种函数一般在这里面。
include"fu*k.h"
#include " XXXX"这种 " " 里的头文件一般是自己写的。
指针
指针这玩意很秀,本人经常别人的代码里指针的用法秀到。乱七八糟,我也不想梳理了,建议看书。
代码实操
下面是一段简单的求输入的数是不是素数的代码,本人一般在Linux下写C++,于是贴一段大一写的练习题,为了加深理解,将代码改的比较冗长。 “//” 这个为单行注释,//之后的只是给人看的,经过预编译之后就没了,/* 。。。。。。/可以将从“/” 到 “*/”之间所有行注释掉。很happy。
#include <stdio.h>
void output( int flag ){
if(flag == 1){
printf("是");
}
else{
printf("不是")
}
}
int main()
{
int a,b,c,d=0; // 定义 a b c d ,并给赋初值0
scanf("%d",&a); //输入一个数
for(b=2;b<a;b++) //循环从2到这个数次数
{
if(a%b==0) //如果有一个数可以整除,d加一然后跳出
{
d++;
break;
}
}
if(d>0) //如果有d加一了,两个以上数能整除a不是
{
c = 0;
output(c);
}
else //否则是
{
c = 1;
output(c);
}
return 0;
}
结语
先有汇编后有C,但是C是目前系统学编程的第一步(少儿编程不算,那是给小孩子玩的)。想玩好C并不容易,但是,大胆和尝试,会让你进步神速。忘了说,一定要把输入法切到英文,否则编译器不认识,会出error。
本人对C的理解只是比小白高点,如有哪里不对,望大佬指正。