上篇我们讲解了变量、常量、字符串、转义字符、注释。那么我们继续来学习C语言的一些基本知识,同样,知识也是点到为止,不会很深入,后面我会发布更深层次的知识。(注:本篇的内容稍稍有点多,大家可以分批学习)
在C语言中有时有多种分支,我们就需要用到选择语句
在C语言中有两种常见的选择语句:if语句、switch语句,本篇先来学习if语句
语法结构
if(//表达式1)
{
//语句1;
}
else if(//表达式2)
{
//语句2;
}
else
//语句3;
我们这里要注意,如果if、else if、else后面有多条语句就得加上{},如果只有一条语句可以不用加{},另外else if可以使用多次用来进行多个选择
我们来写一串代码来实现选择语句:
#include
int main()
{
int input = 0;
//进行选择
printf("你要学好C语言吗?(1 or 0)\n");
//输入
scanf("%d", &input);
//选择语句
if (input == 1) //要注意这里使用的是==,意思是如果input等于1则执行下面的语句
{
//输出
printf("你可以得到好offer\n");
}
else //这里是input不等于1的情况,则执行下面的语句
{
//输出
printf("另寻出路吧!\n");
}
return 0;
}
if语句里面的表达式如果要判断相不相等一定要使用==
如果if、else后面有多条语句得加上{}
如果要判断多个条件可以使用多次else if
循环很好理解,就比如我们日复一日的学习,老师日复一日的讲课...等等
那在C语言中怎么样实现循环呢?
在C语言中的循环语句有while循环;for循环,do while循环
本篇我们先来介绍while循环
语法结构
while(//表达式)
{
//循环语句;
}
我们用代码来表示一下:
比如:跟着我学C语言,每天都要敲代码,当你敲了20000行有效代码时,你将会有一个好的offer
#include
int main()
{
printf("跟着我学习C语言\n");
int line = 0;
//设置循环:当line小于20000时进入这个循环
while (line < 20000)
{
printf("敲代码:%d\n",line);
line++; //这里的意思表示line每次进来之后都会+1
}
if (line >= 20000) //当line大于等于20000之后跳出上面的循环进入这个选择语句中
printf("你将会得到一个好offer\n");
return 0;
}
函数能够使用一个独立的功能
我们在初识C语言(2)里面在讲注释的时候使用了一串代码就是使用函数来求两个数的和
不用函数来写两个数的求和:
#include
int main()
{
int a = 0;
int b = 0;
int sum = 0;
//输入
printf("请输入两个整数\n");
scanf("%d %d", &a, &b);
//计算
sum = a + b;
//输出
printf("sum=%d\n", sum);
return 0;
}
当我们在一个工程里写很多加法运算的时候,如果每次使用这种写法会很麻烦,这时候就要使用函数
用函数写两个数的求和:
#include
//这里设置这个用来求和的函数Add
int Add(int x, int y) //由于输入的是整形,所以函数类型也应该为整形
{ //在函数里面设置两个整形x,y来接收a,b
int z = x + y; //这里用z来表示两个数的和
return z; //这里返回值是z,是因为当我们计算出a,b的和将它存放在z里面,将它返回
} //我们的sum,从而打印输出
int main()
{
int a = 0;
int b = 0;
int sum = 0;
printf("请输入两个整数\n");
//输入
scanf("%d %d", &a, &b);
//求和
sum = Add(a, b); //这里使用一个函数Add,将输入的a,b放进函数Add中 //然后设置一个sum变量来存放计算出的值
//输出
printf("sum=%d\n", sum);
return 0;
}
函数的特点就是简化代码,代码复用
说到这里还有老铁不理解的话我们来画一个图来展示一下:
函数的功能就好比一个工厂,我们只需要把原材料给工厂,然后通过工厂的加工来得到我们需要的东西
由上面的函数求和的例子来说明函数的一些基本组成
要存储1~10的数字,该怎么储存呢?
数组从简单方面理解就是一堆数字组合起来,但是C语言中有明确定义
数组:一组相同类型元素的集合
int arr[10] = {1,2,3,4,5,6,7,8,9,10};//定义一个整形数组,最多放10个元素
C语言规定:数组的每个元素都有一个下标,下标是从0开始的
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
//下标 0 1 2 3 4 5 6 7 8 9
//假设n是元素个数,那么它的下标的范围是0~n-1
使用下标的方式访问元素
arr [//下标];
假设一个数组里面有10个元素,我们需要找到下标为5的元素
#include
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
printf("%d\n", arr[5]);
return 0;
}
我们可以很直观的看到,我们打印下标为5的元素就可以得到6
当我们给定了一组数组,我们需要把这组数全部打印出来,我们需要如何做呢?
按照我们以前的方法,我们可以使用查找下标的方法依次将他们打印,但是非常麻烦
但是我们可以使用我们前面学过的while循环,我们可以先找元素下标为0的元素,然后依次下标+1,从而循环打印出整个数组
#include
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int i = 0; //这里设置一个循环变量
while (i < 10) //while循环开始:当i<10时,循环开始
{
printf("%d ", arr[i]); //在这里刚刚进来的i是0,所以打印的下标为0的元素
i++; //在这里i+1,每次进来都会加1,直到加到10
//则不满足whiel循环的条件则会跳出循环
}
return 0;
}
关于操作符在初识C语言里只是简单介绍,后面的文章会详细介绍
+ |
- |
* |
/ |
% |
//a+b a-b a*b a/b a%b
关于算数操作符,有几点要注意:
%:这个是取模(取余)
当使用A%B时要注意,%两边都得是整数
//5%2=1
当使用A/B时要注意,如果两边都为整数,则计算出的结果是整数,如果两边有一个是小数,则计算出的结果是小数
//5/2 = 2
//5.0/2 = 2.5
//5.0/2.0 = 2.5
>> |
<< |
后面会发布文章介绍
& |
^ |
| |
后面会发布文章介绍
= |
+= |
-= |
/= |
*= |
&= |
|= |
<<= |
>>= |
这里我们只讲前面五个
= :这里是赋值的意思,就比如a=5,是把5赋值给a
+= :a += 5 这里的意思是给a加上5再赋值给a,比如原本a = 0,那么a+ =5之后a=5
-= 、*=、/=都是同样的道理
单目指的就是操作符两边只有一个操作数
! |
逻辑反操作 |
- |
负值 |
+ |
正值 |
& |
取地址 |
sizeof |
操作数的类型长度(以字节位单位) |
~ |
对一个数的二进制位按位取反 |
-- |
分为前置、后置 |
++ |
分为前置、后置 |
* |
间接访问操作符(解引用操作符) |
(类型) |
强制转换类型 |
在C语言中0表示假,非0表示真
在这里我们讲一下sizeof和--、++
sizeof:可以用来计算变量、类型所占空间的大小(以字节为单位)
#include
int main()
{
int a=10;
printf("%d\n",sizeof(a));
printf("%d\n",sizeof(int));
return 0;
}
计算出的结果都是4个字节
了解到这里我们可以计算出一个字符串里面有多少个字符
#include
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
printf("%d\n", sizeof(arr)); //计算的是整个字符串的总的大小 40个字节
printf("%d\n", sizeof(arr[0])); //计算的是一个字符的大小
int sz = sizeof(arr) / sizeof(arr[0]); //计算出这个字符串里面有多少个字符
printf("%d\n", sz);
return 0;
}
我们再来了解一个前面提到过的知识:strlen
strlen是一个计算字符串长度的函数,使用时要包含头文件#include
#include
#include
int main()
{
char arr[] = "abcdef";
printf("%d\n", strlen(arr)); //?
printf("%d\n", sizeof(arr)); //?
return 0;
}
那这里打印出来为什么是6、7呢?
是因为:
sizeof计算的是所占内存空间的大小,不在乎内存里面放的是什么,单位是字节
strlen统计的是\0之前的字符的个数,所以不包含\0
在这个字符串里面有abcdef\0这7个字符,所以用strlen来统计时是6,不统计\0,而用sizeof来计算时,它不管这个字符串里面放的是什么,统统都计算,所以计算出来的大小是7.
++、--可以分为两类:前置和后置
先来了解后置++:
后置++的意思就是先使用,后++
#include
int main()
{
int a = 2; //这里简单解读一下
int c = 0;
c = a++; //c=a;a=a++;
printf("c=%d a=%d\n", c, a);
return 0;
}
这里的a++类似于我们前面见到过的line++,就是在a的基础上+1再赋值给a,这里的后置++就是先把a的值使用赋值给c,然后a再++赋值给a,所以c=2,a=3.
前置++:先++,再使用
#include
int main()
{
int a = 2;
int c = 0;
c = ++a; //c=a++,a=a++
printf("c=%d a=%d\n", c, a);
return 0;
}
前置++,先++,再使用,意思就是:先给a++,然后使用赋值给c,所以c=3,a=3.
前置++和前置--意思一致,后置++和后置--意思也一致。
> |
用于测试“大于” |
>= |
用于测试“大于等于” |
< |
用于测试“小于” |
<= |
用于测试“小于等于” |
== |
用于测试“相等” |
!= |
用于测试“不相等” |
注:要注意区分“==”和“=”,前者是相等,后者是赋值
&& |
逻辑与(并且) |
|| |
逻辑或(或者) |
我们定义0~18岁为未成年,18~28岁为青年,28~45岁为中年,45岁以上为老年
我们可以用代码来表示一下:
#include
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 0 && age <= 18) //逻辑与操作符:两边的条件同时满足才可以执行
{
printf("未成年\n");
}
else if (age > 18 && age <= 28)
printf("青年\n");
else if (age > 28 && age <= 45)
printf("中年\n");
else
printf("老年\n");
return 0;
}
逻辑与操作符类似于并且,A并且B
#include
int main()
{
int num = 0;
scanf("%d", &num);
if (num == 5 || num == 10) //逻辑或操作符:只要满足两边任何一个条件便可以执行
printf("hehe\n");
else
printf("haha\n");
return 0;
}
逻辑或操作符类似于或者,A或者B
exp1 ? exp2: exp3 |
简单介绍这个操作符的意思:exp1成立吗?,如果成立,则执行exp2,如果不成立,则执行exp3
这个也叫三目操作符
使用三目操作符来比较两个数的大小:
#include
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b); //在输入的时候两个数中间要有空格
printf("MAX= %d", a > b ? a : b); //如果a>b成立,则执行a,如果不成立,则执行b
return 0;
}
exp1, exp2, exp3, ..... expn |
逗号表达式会从左向右依次计算,整个表达式的结果是最后一个表达式的结果
代码演示:
#include
int main()
{
int a = 3;
int b = 5;
int c = 0;
int d = (a += 3, b -= a, c - 2);
printf("%d\n", d);
return 0;
}
我们来分析一下这个代码:a+=3的意思是给a+3再赋值给a,所以a=3+3=6。b-=a的意思是给b-a再赋值给b,所以b=5-6=-1。c-2=-2,所以打印出的结果就是-2。
因为逗号表达式最后打印的是最后一个表达式的结果,那么我们是不是不用管前面的表达式,直接去计算最后一个表达式呢?
可不敢这样去想,如果前面有一个表达式改变了最后一个表达式的值,那么还这样计算就出现bug,我们来看一个代码:
#include
int main()
{
int a = 3;
int b = 5;
int c = 0;
int d = (a += 3, b -= a, c = a + b, c - 2);
printf("%d\n", d);
return 0;
}
如果我们只计算最后一个表达式的结果:c-2的出的结果是-2,那可就错了,因为前面有一个表达式改变了c的值,所以可不敢贸然去计算,如果从左向右依次计算:a+=3,所以a=6。b-=a,所以b=-1。c=a+b,所以c=5。c-2,所以最终结果c=3,这样就对了。
[ ] |
( ) |
. |
-> |
我们这里只讲前两个
下标引用操作符在前面的数组的下标中提到过,我们在使用元素下标可以找到该元素时就采用的"[ ]"
#include
int main()
{
char arr[10] = { 1,2,3,4,5,6,7,8 };//不完全初始化:设置的字符串里面一共有10个元素
//但是我只写了8个元素,剩下的元素默认初始化都是0
printf("%d", arr[5]); //下标引用,找下标为5的元素
return 0;
}
在使用函数时需要用到"( )"
#include //包含头文件可不敢忘记
#include
int main()
{
int len = 0;
len = strlen("abcd");
printf("%d\n", len);
return 0;
}
可以看到我们在使用strlen函数求这个字符串的长度时使用了“()”,在使用其他函数时也是同样的道理。
本篇的分享到此为止,大家可以慢慢学习,最后感谢大家阅览,如果有什么不足和疑问可以私信我或者打在品论区,感谢大家!