1. 函数
函数可以用以上图画进行表示,简单来说,其可以看作是一个有着特定功能的加工厂!
1.1 函数的写法
#include <stdio.h>
int main()
{
int num1 = 0;
int num2 = 0;
int sum = 0;
printf("输入两个操作数:>");
scanf("%d %d", &num1, &num2);
sum = num1 + num2;
printf("sum = %d\n", sum);
return 0;
}
以上两数相加程序的一般写法,将其改为函数如下所示。
#include <stdio.h>
int Add(int x, int y)//用两个形参x,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函数来计算num1+num2,并进行传参(实参)。
printf("sum = %d\n", sum);
return 0;
}
函数的特点就是简化代码,代码复用。
2. 数组
C语言中,数组是一组相同类型元素的集合。如果要写多个相同int 类型的数,一直重复int太麻烦,这时就可以用数组来写。
2.1 数组的定义
int arr[10]={1,2,3,4,5,6,7,8,9,10};//定义一个整形数组,最多放10个元素。
2.2 数组的下标
C语言规定:数组的每个元素都有一个下标,下标是从0开始的,并且数组可以通过下标来访问。
int arr[10]={1,2,3,4,5,6,7,8,9,10};//数组中一共10个元素,下标的范围则是0~9。
2.3 数组的使用
3. 操作符
3.1 算术操作符:+ - * / %
+、-:正常的加减法,不多讲。
/:除法得到的是商。
%:取模,得到的是余数,只能用于整形。
3.2 赋值操作符:= += -= *= /= &= ^= |= >>= <<=
// = 操作符:把右边操作数赋值为左边操作数
int a = 0;//将0赋值给a或将a初始化为0。
// += 操作符:把左边操作数加上右边操作数的结果赋值给左边操作数。
int a = 0;
a = a + 2;
a += 2;//与a = a + 2等同。
// -= 操作符:把左边操作数减去右边操作数的结果赋值给左边操作数。
int a = 3;
a = a - 2;
a -= 2;//与a = a - 2等同。
// *= 操作符:把左边操作数乘以右边操作数的结果赋值给左边操作数。
int a = 2;
a = a * 2;
a *= 2;//与a = a * 2等同。
// /= 操作符:把左边操作数除以右边操作数的结果赋值给左边操作数。
int a = 2;
a = a / 2;
a /= 2;//与a = a / 2等同。
// &= 操作符:按位与且赋值运算符。
int a = 2;
a = a&2;
a &= 2;//与a = a&2等同。
// ^= 操作符:按位异或且赋值运算符。
int a = 2;
a = a^2;
a ^= 2;//与a = a^2等同。
// |= 操作符:按位或且赋值运算符。
int a = 2;
a = a|2;
a |= 2;//与a = a|2等同。
// >>= 操作符:右移且赋值运算符。
int a = 2;
a = a>>2;
a >>= 2;//与a = a>>2等同。
// <<= 操作符:左移且赋值运算符。
int a = 2;
a = a<<=2;
a <<= 2;//与a = a<<2等同。
3.3 单目操作符:! - + & sizeof ~ – ++ *
3.3.1 ++,–操作符
#include <stdio.h>
int main()
{
//int a = 10;
//int b = a--;//后置--,先使用,再-1
//printf("a = %d, b = %d", a, b);
//int a = 10;
//int b = --a;//前置--,先-1,再使用
//printf("a = %d, b = %d", a, b);
//int a = 10;
//int b = a++;//后置++,先使用,再+1
//printf("a = %d, b = %d", a, b);
int a = 10;
int b = ++a;//前置++,先+1,再使用
printf("a = %d, b = %d", a, b);
return 0;
}
3.3.2 强制类型转换
#include <stdio.h>
int main()
{
int a = (int)3.14;//原本定义为整形,初始化为浮点型,但是还是想以整形使用
float f = (float)3.14;//与上一行是一样的理解
return 0;
}
使用强制转化时会产生越界输出,所以一般不建议使用。
3.4 关系操作符:> >= < <= != ==
3.5 条件操作符:exp1? exp2: exp3
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
int c = 0;
int d = 0;
int e = 0;
c = a + b;
d = a - b;
e = a > b ? c : d;
//如果如果a>b成立则执行a-b,e的值就是a-b的值;
//现在a>b不成立,则执行a+b,e的值就是a+b的值
printf("%d\n", e);
return 0;
}
3.6 逗号表达式:exp1, exp2, exp3, …expN
执行规则:从左至右依次执行expression,并将最后一个expression作为逗号表达式的结果。
int main()
{
int x, y;
x = (5, 3, 9);//5,3可直接忽略,最后会将9赋给x;
y = (x++, x + 2, x * 2);
//等价于
int x, y;
x = 9;
y = (x++, x + 2, x * 2);
//y的最后结果为20
//1.x++等价于x=x+1,所以这一步x变为10;
//2.x+2 执行结果为12,但并没有进行赋值操作,所以x还是为10;
//3.执行y=x*2;对于逗号表达式来说,只有最后一个子表达式才有赋值的操作
return 0;
}