C语言精练教程:连载中

如何学好C语言?

学好C语言我觉得首要的方法就是练,初学的时候跟着书本的程序抄写,语法熟练后就是大量的练习了,拿着书本的习题全部敲出来,如果实在敲不出来也没有关系,看答案,看完答案后跟着敲,思考别人是怎么实现的,所以说如果一个人都不练习是无法学会C语言的。第二个方法就是调试,也称为debug,我们都是人就难免会出一点错误的地方,程序并没有按照我们的想法去执行,所以我们就需要debug了,debug是我们快速提升C语言能力的手段,以前遇到一些人C语言的理论知识学的很牛,但是真正写程序的时候就写不出来,然后一上机写程序就蒙圈了,这就是典型的只看不练。
总结来说学好C语言两步走,1、勤加练习,2、写完后调试程序。

大专生应不应该学编程

首先大专生的学历相对本科本来就低一些,如果你不好好学习一门技术你出去之后就知道什么叫社会的毒打,当程序员只要有一年经验的程序员平均来说就没有低于一万的,如果稍微做的好一点一年多一点的经验拿两万也不是不是不可能的。我举个例子深圳的平均工资是不到1万的,但是你知道么深圳10个人里面就有3个是有大专以上的学历的,平均工资1万元不是告诉你有一半的人都能拿到1万的,官方的数据我没有拿到,但是你想一想这个平均工资是那些人拉上去的?你和马化腾平均一下也是亿万富翁了。所以说如果你的收入大于两万,你已经打败了90%以上的人,所以说如果你学历低,你的学历是大专生,那你要不要学编程,你当然要学,特别是你家里就不是特别有钱的同学,能改变自己命运的只有自己,自己不努力谁都无法帮你。上面的经验同样适合学历低于大专的同学,学一门技术吧,学技术让你永远不会失业,千万不要听太多的鸡汤,什么腾讯程序员30岁失业,就算30岁失业人家也赚了大把的钱,而你的30岁还为下一顿饭在那里而奔波。
一个行业为啥工资会高?就是这个行业还不饱和,如果这个行业饱和了,工资就会降低到平均的工资,可能你会听了一些外部的新闻说程序行业辛苦,你想想那个行业不辛苦?在工厂上班一天还十几个小时,有些工厂还要早班晚班两班倒,这个就是拿自己的生命在赚钱。所以说大家都是成年人了,需要为自己未来考虑考虑了,现在互联网这么发达,学习真的太简单了,你看B站就是一个那么好的学习平台,如果在那么好的条件下你都无法清醒的话的确是没人叫的醒你。

学C语言还是学C++/JAVA

初学编程的同学可能都会有点疑问,我是该学C语言呢?还是学C++/JAVA。其实这个问题先要看自己的专业,如果你的专业就是电子信息技术的话,学习C语言肯定是分不开的,电子信息技术的同学以后一定会学一个叫单片机的东西,就是我们常说的C51/STM32这些单片机,这些单片机运行的程序都是使用C语言来编程的,电子专业学生以后就业的方向也是嵌入式软件或者硬件方向,所以学好C语言肯定是必不少的。那么如果我的专业是计算机呢?计算机专业现在有些学校是不开设C语言的课了,可能是直接就开设C++/JAVA这些课程,但是是不是C语言对于计算机行业的同学就没有用了呢?当然不是,首先C语言是比较接近计算机能识别的语言,其他的C++/JAVA这些语言最后都需要转换成C语言或者是在C语言开发的运行环境下执行,等于是说你学习了C语言就是学习了C++/JAVA这些语言的祖师爷,从而让你更加了解计算机是内部是怎么运行的。其实学习了C语言到后面你学习C++/JAVA/Pyhton这些语言都是非常容易的,学习C语言就像我们以前学习数学的九九乘法表一样,只要学会了基础的概念后面去学习更复杂的东西后就变的非常的简单了,如果你未来有志向去创造一门新语言的话,C语言那更是必不可少的。 所以说学习C语言就像买衣服的经典款虽然不是那么的时髦,但是永远不过时,你现在学习C语言,如果到你的孩子长大后如果还想学编程C语言应该还是要学的,这就是经典生生不息,代代相传,其他语言就真的不确定还能流行多久了。
总结:过多的纠结学习那个语言,那个语言比较高级根本就没有必要,用你纠结的这段时间,你都可以学到很多知识了,做人嘛还是不要眼高手低,能沉的下心来学习的人都是好样的,我知道能认真学习我这个课程的人可能也不多,但是如果你认真学习下去相信我,你毕业出去后一定能干掉一大片你身边的同学,可能他们碌碌无为工作好几年还是那个样子,你已经是月入至少在2万以上,我们都要为自己的未来负责,沉下心才是你现在最重要的事情。

学习C语言需要懂英语么?

我先回答一个结论,月薪2w以下的程序员,英语水平可以是小学英语水平,如果不相信你先跟我学。你看你会不会英语我能不能教会你,但是呢?你还是稍微认真的的学一下C语言的那几个关键字,关键字我会列出来,如果你不知道怎么读者几个单词也没有关系,死记硬背就行了。其实说个实话,我写了那么多年的程序,我的英语也很差,我高考的时候也英语也没有考的多少分,勉强上了个大学,但是英语完全没有影响我学习编程,如果当初我有犹豫那么多我就学不会编程了,最重要的是先学。从C语言到C++到JAVA,从51单片机到STM32单片机,到学习linux和Android系统,到看芯片的英文数据手册,英语不好的影响基本不大,为啥?因为你看的多了呀,看多了看几个关键词你就知道他们要说什么了,更何况在这个技术那么发达的年代我们用有道翻译也可以啊,所以说你学不会编程是因为你英语不好,我觉得就是你自己给自己找的理由好让自己不努力有个心安的理由了。

安装工具

在学习C语言的时候我们首要的事是安装编写C语言的工具,如果大家手上有C语言的书籍的话应该会发现推荐的工具可能是VC6.0,这个是微软推出的一个编写代码的工具,但是这个工具比较老了,虽然功能强大,但是对新手来说根本就用不着那么强大的功能,而且我觉得这个工具有点丑,哈哈,可能是工具太老了吧,所以跟全老师学习C语言我推荐一个又轻量又好用的工具C-free,重点是这个工具还是中国人自己出版的工具。
第二个工具是notepad++,对于电脑自带的记事本工具来说notepad++添加了很多实用的功能,而且界面也非常的好看,功能简单易懂,推荐大家都安装。
等大家写代码有一定精进后我们带领大家使用另一些在工作中非常长用的编写代码的工具,比如source insight,或者VS code,这些工具集成了代码补全功能、代码跳转功能,这些功能是上面的工具没有,这也是程序员最最常用的工具,很多刚出来实习的大学生都没有使用过这些工具,所以不用说就一定是没有怎么编写过代码的,或者编写代码都是纸上谈兵的,所以跟着我学习有很多好处就是一个老工程师一步一步告诉你怎学习,工作中常用的那些知识点,那些是比较重要的需要注意的,我们都是平常人,如果你能站在巨人的肩膀上可能走的会更快会更好。

编写第一个c语言程序

下面是我们编写的第一个程序,这个程序的功能为在终端中打印出“this is my first C programmer”,翻译成中文就是“这是我的第一个C语音程序”,大家可以先按照如下编写自己的第一个C语言程序,然后运行。

#include <stdio.h> 
     
//我是注释

void main(void) 
{                   
   printf("this is my first C programmer");
}  

第一个程序解析

1、#include <stdio.h> 这里表示包含一个名字为stdio.h的头文件,可以理解为把stdio.h中的所有代码复制到这里,现在我们可以暂时理解为固定写法。
2、//我是注释 在C语言中我们可以使用//两个反斜杠来写一些注释,注释的作用就是为了给阅读你程序人的一些提示,比如你的程序是做什么功能的,然后就可以写一些说明来告诉阅读你程序的人,或者自己写的程序逻辑比较复杂的时候,未来自己在来看的时候,提示自己是怎么写这个程序的。 其中注释在程序中是不会运行的,只是为了起到提醒的作用,程序运行的时候会忽略你//后面的东西。 注释的东西只在//后面当行前的这一行有效,不能作用到下面一行中。
例如:

#include <stdio.h> 
     
//我是注释
我的注释不能写到下面这一行中,如果我们在这一行写注释程序会编译不过

void main(void) 
{                   
   printf("this is my first C programmer");
}  

注释的另一种写法,我们可以将我们要写的注释放到/* */中,这样的注释可以写多行,其中以/开始,以/结束。

#include <stdio.h> 
     
/* 我是注释
   我的注释能写到下面这一行中 */

void main(void) 
{                   
   printf("this is my first C programmer");
}  

3、void main(void) 主函数,第一个void表示程序运行结束后返回值的类型,大家可以理解为固定搭配,main表示程序的入口,在C语音中有且只有一个main,如果我们要阅读一个C语言程序首先找到main,因为程序的入口就在这里,程序是从这里最开始运行的,(void)表示为传入的参数,我们这里没有参数需要传入所以我们写成(void)。

{ } 括号里面的东西我们称为程序体,就是程序要运行的东西。我们定义一个主函数main,main函数里面的东西就需要使用大括号{}来括起来,大家可以先理解为固定写法。

4、printf(“this is my first C programmer”); 表示为程序语句或者说表达式,这里表示我们调用了一个printf函数,输出this is my first C programmer,大家可以尝试修改想打印出来的东西,比如可以打印出来hello world,可以修改为printf(“hello world”);然后编译运行一下

5、总结:第一个程序我们学习了很多新的概念和名词,比如头文件、返回值、主函数、参数、返回值、注释、函数体,大家可以多看几眼第一个程序是怎么构成的加深一下概念。

练习

按照上面的第一个程序模仿编写自己的第一个程序,需要注意的点,写分号的时候一定是英文输入法的分号,不要输入中文输入法的分号,中文输入法和英文输入法的分号是有区别的,;这个是英文输入法的分号,;这是中文输入法的分号。

bit、byte、Kbyte、M、G

在使用计算机的时候我们说一个文件有多大,其实就是问存储这个文件需要占多大的空间。比如占多少Kbyte、多少M、多少G,我相信大家都很熟悉了,但是bit、byte可能大家还不是特别熟悉,下面我们就讲一下什么是bit、byte、Kbyte、M、G。
bit:bit我们称为一个字节位,一个字节位要么是0,要么是1。所以说一个字节只能存储0或者1,在计算机中,计算机能识别的也只有0和1。
byte:byte我们称为字节,一个字节由8个bit组成,一个byte能存储的范围为0-255。
Kbyte:Kbyte是什么?也就是1千个byte。
M:M(兆)是什么?1M等于1000个kb。
G:G是什么?1G等于1000M。

类型 转换
bit(位) 最小存储单位存储0或者1
byte(字节) 1byte = 8bit
M(兆) 1M = 1000byte
G 1G = 1000M

二进制、十进制、十六进制

对于十进制我相信大家都很熟悉,我们在生活中常用的也是十进制,我们数数的时候数到9了,如果还要加一就会进一个位写成10。那什么是十六进制呢?首先我们先看一下0到15在十六进制中是怎么表示的,1、2、3、4、5、6、7、8、9、A、B、C、D、E、F,大家注意到了没有如果是十进制的10,在我们的十六进制中表示为A,十进制的11在十六进制中表示为B,同理的12表示为C,13表示为D,14表示为E,15表示为F。总结来说就是十进制就是数到9还继续加1就进一位,如果是十六进制就需要数到F,如果还加1才能进一位。在C语言中为了区分十进制和十六进制,我们如果表示的是十进制就和往常书写的是一样的,比如10就是我们长说的十,如果是十六进制我们就会在数字前面加上0x或者0X,例如0x10或者0X10.
二进制的原理也类似,就是二进制只有0或者1,如果数到1,在加一位就需要进一位了,举个例子,比如我们的十进制的2,对于二进制来说是这么表示的0b10(0b在这里只是单单的表示二进制的写法)。对于二进制来所个位只能存0或者1,所以说对于2就是需要进1了,就是0b10

十进制和十六进制的转换

十进制的10,转换为十六进制是多少?
答案: 0xa或者0xA,在C语言中十六进制的大A和小a表示都是一样的,其他的B、C、D、E、F都是如此。
十六进制的0x10,转换为十进制是多少?
答案:16,前面我们已经说了的十六进制是遇到F(在十六进制中 F 等于十进制的 15)加1进1位,所以0x10就是F加上1,所以等于16。

练习进制间的转换

我们可以使用Windows电脑的计算器来快速的计算各种进制间的转换。
在这里插入图片描述

在图片中我们可以看到可以使用计算器功能来计算十进制的10转化为十六进制、二进制的结果。

在这里插入图片描述

进制 转换结果
十六进制 A
十进制 10
二进制 1010

变量

变量是什么?变量大家可以理解为是可以用来存储数据的盒子,在程序中我们有很多数据需要存储,所以我们要定义一些变量用来存储数据。假设我们有一个程序的功能是用来计算两个数相加,比如15 + 15 = 30,这时候计算出来的结果我们需要保存在变量当中。

//下面这个段程序的功能为定义一个变量my_is_value,并给变量赋值520,然后又赋值15
#include <stdio.h> 

void main(void) 
{

   int my_is_value;     //我是一个变量,我的名字叫my_is_value,我可以存储数据。
   
   my_is_value = 520;  //你给我写了一个数值520,我已经保存好了,我现在存储的数值为520。

   my_is_value = 15;   //你给为写了一个数值15,我已经保存好了,我现在的值为15;

   my_is_value = 15 + 15; //保存15 + 15 = 30的结果,所以my_is_value存储的数值为30;
}  

数据类型

在数学中我们有整数比如10、-10、11、-11,我们将存储整数的数据类型叫做整型。也有小数0.1,-0.1,0.2、-0.2,存储小数的数据类似叫做浮点型。
我们都知道数字有大有小,所以存储变量的范围也有大有小,所以我们定义变量的时候也需要根据变量需要存储的大小来分配变量的类型,常见的整型数据类型有char、unsigned char、short、unsigned short、int、unsigned int、long、unsigned long。大家仔细看看可以看到char的数据类型有char和unsigned char,多了一个unsigned是什么意思呢?就是char可以存储正数和负数,而unsigned char只能存储正数,如果强制存储负数系统会当成正数处理。
常见的浮点型有float、double。

数据类型 存储大小 值范围
char 1 字节 -128 到 127
unsigned char 1 字节 0 到 255
signed char 1 字节 -128 到 127
int 4 字节 -2,147,483,648 到 2,147,483,647
unsigned int 4 字节 0 到 4,294,967,295
short 2 字节 -32,768 到 32,767
unsigned short 2 字节 0 到 65,535
long 4 字节 -2,147,483,648 到 2,147,483,647
unsigned long 4 字节 0 到 4,294,967,295
float 4 字节 1.2E-38 到 3.4E+38 6 位有效位
double 8 字节 2.3E-308 到 1.7E+308 15 位有效位

备注:上面的表格初学者不需要死记硬背,只需要记住区分,整数和浮点数的数据类型,和这些数据类型占几个字节即可。
拓展知识点:
在计算机中浮点数计算的时候需要耗费的时间比较久,特别是在计算能力比较低的单片机中计算浮点非常的耗时间,所以大家尽量将浮点转换成整数计算。比如你要表示一个人的身高可以使用1.71米,也可以使用171厘米,如果我们使用171厘米计算的时候就是整数计算,你的程序运行起来效率就比较高。

在代码中定义数据类型

#include <stdio.h> 

void main(void) 
{

   char   my_is_char_value;   //我是char型变量,我占用1个字节内存,我能存储的范围为-128 到 127
   short  my_is_short_value;  //我是short型变量,我占用2个字节内存,我能存储的范围为-32768 到 32767
   int    my_is_int_value;    //我是int型变量,我占用4个字节内存,我能存储的范围为-32768 到 32767

   unsignde char   my_is_unsignde_char_value;   //我是unsignde char型变量,我占用1个字节内存,我能存储的范围为0 到 255
   unsignde short  my_is_unsignde_short_value;  //我是unsignde short型变量,我占用2个字节内存,我能存储的范围为0 到 65535
   unsignde int    my_is_unsignde_int_value;    //我是unsignde int型变量,我占用4个字节内存,我能存储的范围为0 到 4294967295

}  

在代码中定义浮点类型

#include <stdio.h> 

void main(void) 
{

    float  my_is_float_value;   //我是float型变量,我占用4个字节内存,我能存储的范围为1.2E-38 到 3.4E+38,小数后6位有效位
    double my_is_double_value;  //我是float型变量,我占用8个字节内存,我能存储的范围为2.3E-308 到 1.7E+308,小数后15位有效位 

}

函数

函数这个名字听着好高深好复杂的样子,函数其实就是英文function直译过来的,其实一点都不高深一点都复杂。现实当中我们是不是经常将一些袜子、短袖、冬装分别放在不同的箱子里面,我们要使用就直接拿就好了。函数就是把一些特定功能的代码打包成一个我们方便调用的东西,如果我们在别的地方需要使用的时候就直接调用即可。举个例子,我们的程序中经常需要计算一个两个变量的和,我们是不是就可以写个函数add,如果我们想要计算两个变量的和的时候就可以直接调用这个函数就可以了。

#include <stdio.h> 

/*
   编写一个函数add,在我们程序任何想要计算两个变量相加的时候都可以直接调用add,
   省去我们重复编写程序的工作量。
*/
int add(int data1,int data2) 
{
    return data1 + data2;
}

int main(void) 
{
    int a = 2;
    int b = 3;
    int c;
    
    //先计算a + b的值,我们可以调用函数add计算出结果然后赋值给c。
    c = add(a,b);
    //然后又想计算c+b的值,我们可以调用add进行计算然后赋值给a。
    a = add(c,b); 
    
    return 0;  
}

练习

按照上面的程序写出相乘的函数multip,然后调用测试一下。

#include <stdio.h> 

int multip(int data1,int data2) 
{
    return data1 * data2;
}

int main(void)
{
    int a = 2;
    int b = 3;
    int c;
    
    c = multip(a,b);

    a = multip(c,b); 
    
    return 0;  
}

函数带参数,函数有返回值

函数我们已经知道了是什么东西了,下面我们详细的讲一下函数的定义和使用。

定义:
返回值 函数名(传入的参数)
例子1:
void function1(void)
返回值的类型就是void就是没有返回值,函数的名字就是function1,传入的参数是void就是没有参数需要传入函数。
例子2:
int function2(int data)
返回值的类型int,函数的名字就是function2,传入一个参数为int类型的参数名字叫data。
例子2:
int function3(int data1,char data2)
返回值的类型int,函数的名字就是function3,传入参数为两个,分别是int类型的参数data1和char类型的data2。
总结:函数的定义属于固定格式:返回值 函数名(传入的参数),其中返回值只能为一个,传入的参数可以为多个,多个参数的中间可以使用","分开。函数调用的时候可以获取返回值,可以不获取忽略。

#include <stdio.h> 


int add(int data1,int data2) 
{
    int temp;

    temp = data1 + data2;

    /* 
       return是C语言的关键词,在函数的结尾返回函数的返回值。 
       在这里表示data1的值加上data2的值,然后返回两个值的和。
    */
    return temp;  
}

int main(void) 
{
    int a = 2;
    int b = 3;
    int c;
    
    c = add(a,b);  //保存函数add的返回值。

    add(c,b);    //不保存返回值,不获取忽略。
    
    return 0;  
}

算数运算

赋值

赋值学到这里大家应该都知道了,是将一个数值复制到一个变量当中,比如有两个变量A和B,我们在代码中写成A = B;就是将B的值赋值给A,A的值这时候就和B相等。

加减乘除

C语言中的加减乘除和我们小学、初中学习的一样,所以这里不过多描述,下面是在C语言中加减乘除的使用方法。

表示符号 使用方法 备注
+ a = b + c; a等于b加上c
- a = b - c; a等于b减去c
* a = b * c; a等于b乘上c
/ a = b / c; a等于b除以c
多运算 a = b / (c + d); a等于b除以c加上d

备注:在实际使用中我们可能会使用到a等于b除以c加上d,因为c+d的运算优先级比除法低,所以必须使用括号括上(c+d),否则在C语言中就会先计算b除c然后在加上d,就和我们想要结果不符合了。在C语言中我们有很多的运算优先级,比如乘法和除法的运算优先级就比加法和减法高,如果不知道运算优先级怎么办?其实很简单你就加上括号,括号里面的运算优先级就是最高的,和我们学习的初中数学是一个道理。

//a等于b除以c+d的结果
a = b / (c + d);

//a等于b除以c然后在加上d的结果
a = b / c + d;

取余

取余就非常的有意思了,可能大家不学数学很久了就已经忘记了什么叫余数了,下面我们来复习一下小学数学的知识。比如3对2求余的余数等于1。所以余数就是除到最后除不尽了剩下的数。在C语言中,求余的意思就是求余数。

#include <stdio.h> 

int main(void) 
{
    int a = 2;
    int b = 3;
    int c;
    /* 在C语言中求余计算可以使用 “ % ” 这个符号 */
    c = 3 % 2;  //这里就是求3除以2的余数,所以c的值为1;
    
    c = 5 % 5;  //这里就是求5除以5的余数,因为5除上5能够整除,所以c的值为0;

    return 0;  
}

i++、i–、++i、–i

i++在这里表示一个变量i自增1,等同于i = i + 1,i–的作用类似表示i自减去1。 那么i++和++i有什么区别呢?

#include <stdio.h> 

int main(void)
{
    int i = 10;
    int a;

    a = i++;  //大家猜一下a等于多少?答案是a = 10。
    
    i = 10;
    
    a = ++i;  //大家猜现在a等于多少?答案是a = 11。

    return 0;  
}
/*
  总结:i++和i--有什么区别为,i++优先级比较低,在赋值操作中,先把i的值先赋给a,然后再自增1,所以我们可以看到 a = i++;a的值为10。而++i是优先先自增1,然后再赋值给a,所以 a = ++i;a的值为11。
*/  
 

关系运算符:大于、小于、等于、大于或等于、小于或等于

在数学中我们也有大于、小于、等于、大于或等于、小于或等于这些计算,在C语言中同样存在,这些关系运算符一般来说常见与if等判断语句一起出现,比如判断两个变量的大小,然后执行不同的程序运算,判断语句if我们后面再来说明,下面的表格是这些关系运算符的总结。

关系运算符 符号 使用方法
大于 > a > b
小于 < a < b
等于 = a = b
大于或等于 >= a >= b
小于或等于 <= a <= b

逻辑运算符:与、或、非

逻辑运算符 符号
&&
||
!

什么是与(&&)?与就是两个以上条件全部都成立我们认为是真,否者就为假。在现实生活中我们经常使用到与的方法,比如如果明天我能买到高铁票且天气好,我就出门旅游,否则我就在家里看电视,在这里买到高铁票是一个条件,天气好是另一个条件,如果两个条件成立则为真,如果有一个条件不成立则为假。C语言也一样,如果所有条件成立则为真(1),否者则为假(0),这就是与(&&)运算。

什么是或(||)?或就是两个以上条件中的任意一个条件成立我们就认为真,否者我们就认为假。我们还是举现实当中的例子,如果我能买到出门旅游的高铁票或者买到汽车票我就出门旅游,否者我就在家里看电视。在这里买到高铁票是一个条件,买到汽车票是一个条件,如果说这里任意一个条件满足我们就认为为真(1),否者我们就认为为假(0), C语言也一样,如果任意一个条件成立则为真(1),如果都不成立则为假(0),这就是或(||)运算。

什么是非(!)运算?非就是对真的取反,如果条件为真经过非运算后就为假,如果条件为假经过非运算后就为真。

#include <stdio.h> 

int main(void) 
{
    
    int a = 1;
    int b = 0;
    int c;  
    
    /*
      在程序中 a = 1,所以a为真,b = 0,所以b为假,在 && 计算中必须要两个条件都为真的时候,
      计算出来的结果才是真,所以 a && b 的结果为假,所以c的值为0。
    */
    c = a && b;

	 /*
	  在程序中 a = 1,所以a为真,b = 0,所以b为假,在 || 计算中只要有一个条件为真,
	  计算出来的结果就是真,所以 a || b 的结果为真,所以c的值为1。
	*/
    c = a || b;
    /*
     在程序中 a = 1,所以a为真,在非(!)计算中,真则是假,所以c的值为0。
    */
    c = !a; 
    /*
     在程序中b = 0,所以b为假,在非(!)计算中,假则是真,所以c的值为1。
    */
    c = !b; 

    return 0;  
}

判断语法: if else

什么是判断语法?顾名思义就是用来判断条件语法是否成立的语句,如果条件为真则执行if下面的语句,如果不成立则执行else下面的语句。在现实生活中我们经常需要作出判断,比如如果我口袋钱大于200块钱我就吃火锅,否者如果大于100块钱我就去吃肯德基,不然我就只能去吃泡面了。

if使用方法:

  if(条件为真) {
     //执行这里面的程序
  }

  if(条件为真) {
     //条件为真,执行这里面的程序
  } 
  else {
     //条件不为真,执行这里面的程序
  }

  //先判断我口袋钱是否大于200块钱,条件为真,我就吃火锅
  if(我口袋钱大于200块钱) {
     //程序执行吃火锅
  } 
  else if(如果大于100块钱) {  //然后判断,如果口袋大于100块钱,条件为真,我就肯德基
     //程序执行吃肯地基
  }
  else { //口袋的钱小于或者等于100块钱,只能吃泡面了
     //程序执行吃泡面
  }

判断语法:switch

switch的语法的功能和if else也是类型的都是判断条件符合那一个分支,如果条件满足分支1就走分支1,如果符合分支2就走分支2。

switch的标准格式:

switch(条件)    
{
    case 条件1:        //"条件1"只能是常量不能是变量
      //程序执行分支1
      break;          //break的作用,结束switch的程序,如果没有break将继续执行分支2下面的程序。
    case 条件2:
      //程序执行分支2
      break;          
    default:
      //如果条件1和条件2都不满足,执行默认分支。
      break;
}
#include <stdio.h> 

int main(void) 
{
    int money;

    printf("你口袋有多少钱?");
    printf("如果你口袋大于或等于200块钱请输入1 \n");
    printf("如果你口袋钱小于200块钱且大于等于100块钱请输入2 \n");
    printf("如果你的口袋的钱小于100块钱请输入其他数值 \n");
    scanf("%d",&money);

    //我们用1代表口袋大于200块钱,用2代表口袋大于100块钱,其他数值都代表小于100块钱  
    switch(money)
    {
       case 1:
         printf("程序执行吃火锅\n");
         break;
       case 2:
         printf("程序执行吃肯地基\n");
         break;
       default:
         printf("程序执行吃泡面\n");
         break;       
	}    
}

循环语法 for、while

当我们的程序需要多次循环执行的时候我们就需要使用了循环语法。

for循环

for循环语法结构

for(表达式1;表达式2;表达式3) 
{
    //表达式2的值为真,将循环执行这里面的程序,直到表示式2的为假
}

表达式1,表达式2,表达式3的执行顺序为,先执行表达式1,表达式1只执行一次,
然后判断表达式2是否为真,如果表达式2为真则执行两个{}里面的程序,执行一轮
后执行表达式3,然后又判断表达式2是不是为真,如果为真又循环执行一次{}里面
的程序,然后又执行一次表达式3,如此反复直到表达式的值为假,结束循环。
#include <stdio.h>

int main(void)
{
	int i;
    int sum = 0;    //赋初始值sum为0
   
    for(i = 0; i < 5; i++)   //程序循环执行5次
    {
       sum = sum + i;       //循环计算5次累加i的值
       printf("i = %d  sum = %d \n",i,sum);  //循环打印出i的值和sum每一次累加的值
	}
}
程序执行结果:
i = 0  sum = 0
i = 1  sum = 1
i = 2  sum = 3
i = 3  sum = 6
= 6
i = 4  sum = 10

上面的程序的执行的步骤为首先赋值sum = 0,然后在执行for循环的表达式1,i = 0,表达式1执行的是给i赋值为0。然后执行for循环的表达式2,i < 5,这个表达式是判断语句,第一次判断的时候 i的值为0,所以i小于5,结果为真,执行for循环下面{}的语句,执行完{}里面的语句后执行for循环的表达式3,i++,这时候i的值为1,然后又执行判断语句,i < 5,这时候i的值为1,所以还是小于5的,所以结果为真,继续循环执行for循环下面{}的语句,直到i的值加加到了5的时候,i的值为5并不小于5,所以表达式2判断不成立,循环结束。

while循环

while循环常见写法

while(表达式)
{
   语句;        //如果表达式为真,则执行{}里面的语句;,直到表达式的值变成假退出循环。
}
#include <stdio.h>

int main(void)
{
	int i;
    int sum = 0;    //赋初始值sum为0
   
    i = 0;         //给i的值赋值初始值为0
    while(i < 5)  //判断i的值是否小于5,如果小于5则为真
    {
       sum = sum + i;       //循环计算5次累加i的值                       
       printf("i = %d  sum = %d \n",i,sum);  //循环打印出i的值和sum每一次累加的值
       
       i++;   //i的值增加1
	}
}
程序执行结果:
i = 0  sum = 0
i = 1  sum = 1
i = 2  sum = 3
i = 3  sum = 6
i = 4  sum = 10

从结果上我们可以看到我们可以使用while循环语句实现for循环语句全部的功能,程序的执行流程也是和上面一样的,先给i赋值为0,然后判断i是否小于5,第一次的时候i的值为0,所以小于5,条件为真,执行while循环里面的语句,在循环语句里面i的值增加1,然后再判断是否小于5,条件满足,继续循环执行,直到i的值增加为5,不满足小于5,结束循环。

位操作运算

位操作运算:左移<<、右移>>

位操作运算:按位与

位操作运算:按位或

位操作运算:按位异或

位操作运算:按位取反

ASCII码

字符串

C语言中将字符串转换为数字的方法

下列函数可以将字符串转换为数字:

函数名 作 用
atof() 将字符串转换为双精度浮点型值
atoi() 将字符串转换为整型值
atol() 将字符串转换为长整型值
strtod() 将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字
strtol() 将字符串转换为长整值,并报告不能被转换的所有剩余数字
strtoul() 将字符串转换为无符号长整型值,并报告不能被转换的所有剩余数字

数组

指针

自己编写一个头文件

#define

#if #else #endif

#ifndef #endif

你不了解的 <stdio.h>

Guess you like

Origin blog.csdn.net/qq_27809619/article/details/121320202