从头学习c语言的第二篇文章,接着第一遍的内容,介绍一些基本的c语言的知识的,会通过例子来解释,基础不牢地动山摇,所以公主王子请学习!
1、选择语句
生活中存在着各种选择,当然c语言也一样
c语言的选择语句主要有
- If else语句
- switch语句
下面主要介绍 If else 语句
举个例子
如果你认真学习了 --- >就会找到一份好工作(一个好offer)
假如你不学习 --->就会回家耕田
这就是一个选择,在c语言怎么实现呢?If 就是如果的意思 else就是剩下的意思
很明显这个选择非他既我(不是第一个就是第二个)
代码如下(注意看注释):
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int t = 0;//定义变量t,等于1表示认真学习,等于0表示不学习
printf("你会学习吗?");
scanf("%d", &t);//输入整数,做出选择
//下面判断你的选择是1还是0
if (t == 1)
{
printf("你好好学习了,拿到了好offer,走上人生巅峰");
}
else
{
printf("不好好学习,只能回家耕田");
}
return 0;
}
2、循环语句
生活中也充满许多着循环的事情,比如你每天都去耕田,每天都需要浇水等等一样的工作,这就是一种循环,c语言的循环语句也相当的重要
c语言中实现循环主要有以下的语句
- while
- for语句(后面会讲)
- do...while语句(后面会讲)
现在用一个例子实现while语句循环,比如,刚说了你一直认真学习就能拿到好offer,但这也需要一个过程,比如你日复一日的一直循环敲代码,直到你的有效代码量达到20000行时,你拿到了一份好offer,这就是一个循环的例子,现在我们用while循环实现:
#include <stdio.h>
int main()
{
printf("好好学习\n");
int line = 0;
while(line<=20000)
{
line++;
printf("我要努力敲代码%d\n",line);
}
if(line>20000)
{
printf("收到好offer\n");
}
return 0;
}
3、函数
通俗来讲,函数相当于一个工具,比如一个加法函数就等于一个加法器,把数据输入进去,就能在函数里面自己计算,然后输出一个结果,函数的作用就是简化代码,实现代码复用,当你需要实现加法时,不用每次都要重新写程序,直接引用函数就可以输出结果。
下面举个例子:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
\\定义一个加法函数
int Add(int x, int y)
{
int z = x+y;
return z;
}
int main()
{
int num1 =0;
int num2 =0;
int sum =0;
printf("输入两个操作数:");
scanf("%d %d",&num1,&num2);
sum = Add(num1,num2);//把Add函数的返回值赋值给sum,这里就是运用了函数的返回值(加法结果)
printf("sum=%d\n",sum);
return 0;
}
4、数组
如果要储存一串数据,该怎么储存呢?
C语言中给了数组的定义:一组相同类型元素的集合
4.1数组的定义
举个例子,假如你要储存1-10的数字
int arr[10] = {1,2,3,4,5,6,7,8,9,10};//定义一个整型数组,最多放10个元素
4.2 数组的下标
c语言中,规定数组的每个元素都有一个下标,相当于给每个元素(数据)编号,像房子的门牌号一样,如果我要访问某个数据的时候,直接找到对应的下标(门牌号)就可以了。
注意:下标是从0开始的。
比如
Int arr [10] = {1,3,5,7,9,2,4,6,8,10};//如果数组10个元素,下标的范围是0-9
int arr[10 ] | 1 | 3 | 5 | 7 | 9 | 2 | 4 | 6 | 8 | 10 |
下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
目录
4.3 数组的使用
#include <stdio.h>
int main()
{
int i =0;
int arr[10] = {1,3,5,7,9,2,4,6,8,10};
for(i=0; i<10; i++)
{
printf("%d\n",arr[i]);
}
printf("\n");
return 0;
}
4.4 数组定义时的注意
1、C99标准之前,数组的大小都是用常量或者常量表达式来指定的
Int arr[10]={0};//ok
Int arr[4+6]={1,2,3,4}//ok;
- 2、C99标准之后,支持了变长数组,这个时候允许数组大小是变量,但是这种指定方式的数组是不能初始化的
Int m = 100;
Int arr[m];//ok
Int arr[m]={0};//mistake,错误
注意:上述初始化不支持,但应用是支持的例子如4.3数组的使用 所示
5、操作符
5.1常见的操作符
- 算术操作符
+ - * / %
上面分别为c语言中的加、减、乘、除、取余。
加减乘除大家都知道,下面解释以下取余,其实取余就是取余数的意思
就是输出除法结果中的余数(既是小数位),比如:7/2取余就是5,在c语言中的语句为7/2%=5;
特别注意:
- 1、c语言中除法的两端都是整数的时候,执行的是整数除法,如果两端只有一个浮点数就执行浮点数的除法
- 2、取模操作符 % (取模操作符的两个操作数只能是整数)
#include <stdio.h>
int main()
{
int a = 7 / 2;//除法取整数
//取模操作符的两个操作数只能是整数
int b = 7 % 2;//取模
//除法的两端都是整数的时候,执行的是整数除法,如果两端只有一个浮点数就执行浮点数的除法
float c = 7 / 2.0;
printf("%d\n",a);
printf("%d\n",b);
printf("%.2f\n",c);//%f表示打印数据类型为浮点数,%.2f表示两位小数的浮点数
printf("%.3f\n", c);//同理,%。2f表示三位小数的浮点数
return 0;
}
- 移位操作符
>> <<
这个是关于2进制运算,后面再补充
- 位操作符
& ^ |
这个也是关于2进制运算,后面再补充
- 赋值操作符
= += -= *= /= &= ^= |= >>= <<=
c语言中规定,=是赋值操作符,==才是数学上的等于,比如
int a =10;
int b =20;
int c=b;//将变量b的值赋给c,既c=b=20;
//下面是用if语句判断c是否等于20
if(c==20)
{
printf("hehe\n");
}
+=操作符
a+=1;//与下面表达的意思一样
a=a+1;
b-=3;
b=b-3;
*= /= &= 等 操作符同理
- 关系操作符
> 大于
>= 大于等于
< 小于
<= 小于等于
!= 不等于
== 等于
5.2单目操作符
! | 逻辑反操作 |
- | 负值 |
+ | 正值 |
& | 取地址 |
sizeof | 操作数的类型长度(以字节为单位) |
~ | 对一个数的二进制按位取反 |
-- | 前置--、后置-- |
++ | 前置++、后置++ |
* | 间接访问操作符(解引用操作符) |
(类型) | 强制类型转换 |
-
!逻辑反操作
#include <stdio.h>
int main()
{
int flag = 0;
if (!flag)//!为取反,将0和1翻转(对调)
{
printf("xixi\n");
}
return 0;
}
-
-负值(+正值同理)
#include <stdio.h>
int main()
{
int a = -10;
int b = -a;//取负值,负负得正
printf("%d\n",b);
return 0;
}
-
sizeof计算操作数长度
#include <stdio.h>
int main()
{
int a = 10;
printf("%d\n",sizeof(a));
printf("%d\n",sizeof(int));
printf("%d\n"sizeof a);
//注意:printf("%d\n",sizeof int);是不允许的
return 0;
}
特别的,还可以用sizeof()计算数组的长度,单位为字节
int main()
{
int arr[10] = {0};
printf("%d\n",sizeof(arr));//计算的是整个数组的大小(4x10),单位是字节
printf("%d\n",sizeof(arr[0]));//计算的是这个数组的0位的大小,就是一个int的大小,为4个字节
printf("%d\n",sizeof(arr)/sizeof(arr[0]));//10 - 数组的元素个数
return 0;
}
-
前置++和后置++的区别
#include <stdio.h>
int main()
{
int a = 10;
int b = a++;//后置++,先使用,后++(运算)
//先赋值 b=a; 后 a=a+1;
int c = ++a;//前置++。先++,后赋值
//先a=a+1; 后赋值 c =a;
printf("%d\n",a);
printf("%d\n",b);
printf("%d\n",c);
return 0;
}
-
前置--和后置--的区别
#include <stdio.h>
int main()
{
int a = 10;
int b = a--;//后置--,先赋值,后--(后运算)
printf("%d\n", a);//9
printf("%d\n",b);
int c = 10;
int d = --c;//前置--,先运算,后赋值
printf("%d\n",c);
printf("%d\n", d);
return 0;
}
-
(类型)强制类型转换
顾名思义强制类型转换就是用来转换数据的类型的。
#include <stdio.h>
int main()
{
int a = (int)3.14;
//3.14是字面浮点数,编译器默认理解为double类型
//(int)作为强制转换 格式为(类型)
printf("%d\n",a);
}
注意:int a = int (3.14);//这种表达是错误的
5.3逻辑操作符
&& 逻辑与(生活中的并且)
|| 逻辑或(生活中的或者)
-
&&与运算(逻辑与)
参与运算的两个变量都为真时,结果才为真,否则为假
-
||或运算(逻辑或)
参与运算的两个变量只要有一个为真,结果就为真
例子(注意看里面的注释)
#include <stdio.h>
int main()
{
//&&逻辑与 -并且
//||逻辑或 -或者
int a = 10;
int b = 0;
//(&& 并且)双个数都非零才为真,所以(a&&b)为假
if (a && b)
{
printf("xixi\n");
}
//(|| 或者)双个数至少一个为真即为真,所以(a&&b)为真
if (a || b)
{
printf("hehe\n");
}
return 0;
}
5.4 条件操作符(三目运算符)
表达式1 ? 表达式2:表达式3
exp1 ? exp2 : exp3
先判断表达式1的值是否为真,如果为真的就执行表达式2,如果表达式1为假就执行表达式3
举例:
#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
int max = a>b?a:b;//如果a>b 则max=a(条件一);如果a不大于b,则max=b(条件二)
printf("%d\n",max);
return 0;
}
5.5 逗号表达式
exp1, exp2, exp3, exp4, .......
逗号表达式就是逗号隔开的一串表达式
逗号表达式的特点是:从左到右依次计算,整个表达式的结果的最后一个表达式的结果
举例:
#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
int c = 0;
// c =8 a=28 5
int d = (c=a-2,a=b+c,c-3);//逗号表达式的结果为最后一的式子的结果 既为5
printf("%d\n",d);
return 0;
}
5.6下标引用、函数调用和结构成员
- 下标引用
arr[3]=20; //[ ]就是下标引用操作符 arr和3就是[]的操作数
- 函数调用
int sum = Add(2, 3);//其中()就是函数调用操作符,Add,2,3都是()的操作数
- 结构成员
. ->
以后再补充