前言
书接上回,本文将继续了解C语言的基础知识,主要内容有:
- 函数
- 数组
- 操作符
8. 函数
我们在数学中经常提到函数这个概念,例如: y = f ( x ) y = f (x) y=f(x)。针对定义域中不同的x,都有与之一一对应的y。
举个例子:已知一个函数y=f(x),当x < 0时,y = 1;当x = 0时,y = 0;当x > 0时,y = -1。
#include <stdio.h>
int main()
{
int x = 0;
int y = 0;
scanf("%d", &x);
if (x < 0)
{
y = 1;
}
else if (x == 0)
{
y = 0;
}
else
{
y = -1;
}
printf("%d\n", y);
return 0;
}
函数的特点就是简化代码,代码复用。
举个例子:构造函数求两个整数之和
#include <stdio.h>
int Add(int x, int y)
{
//int z = 0;
//z = x + y;
//return z;
return (x + y);
}
int main()
{
int num1 = 0;
int num2 = 0;
int sum = 0;
//输入
scanf("%d %d", &num1, &num2);
//求和
sum = Add(num1, num2);
//输出
printf("%d\n", sum);
return 0;
}
9. 数组
如果要存储1~10的数字,可以用数组,数组中可以存放一组相同类型的元素。数组是一组相同类型元素的集合。
1). 数组的创建和初始化
//数组的创建和初始化
int arr1[10] = {1,2,3,4,5,6,7,8,9,10};//完全初始化
int arr2[10] = { 1,2,3,4,5};//不完全初始化,剩余的默认初始化为0(整型数组)
char ch[5] = { 'a', 'b', 'c' };//不完全初始化,剩余默认初始化为\0(字符数组)
2). 数组的下标
数组的每个元素都有一个下标,下标是从0开始的。数组可以通过下标来访问其中的元素。
//如果数组有10个元素,其下标的范围是0~9
int arr[10] = { 0 };
我们可以用循环来产生下标。
#include <stdio.h>
int main()
{
//数组通过下标来访问元素
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };//[10] -- 指定数组大小
int i = 0;
//while (i<10)
//{
// printf("%d ", arr[i]);
// i = i + 1;
//}
for (i = 0; i < 10; i++)
{
printf("%d ", arr[i]);//i -- 下标
}//打印结果为:1,2,3,4,5,6,7,8,9,10
return 0;
}
10. 操作符
C语言提供了非常丰富的操作符,使得C语言非常的灵活。
printf函数打印的格式控制符:
%d//十进制的整型
%c//字符
%s//字符串
%f//打印float类型的浮点数
%lf//打印double类型的浮点数
1). 算术操作符
+ //加
- //减
* //乘
/ //除
% //取模(余)
重点:
- ‘/’ --(除)
#include <stdio.h>
int main()
{
//除号'/'的两端如果都是整数,执行的是整数除法
float a = 10 / 4;
printf("%f\n", a);//打印结果为;2.000000
//除号'/'的两端至少有一个数是浮点数,才能执行浮点数的除法
float b = 10.0 / 4;
printf("%f\n", b);//打印结果为:2.500000
return 0;
}
- ‘%’ – 取模(余)
#include <stdio.h>
int main()
{
//% 取模(取余), % 操作的两个操作数必须都是整数
float n = 13 % 4;
printf("%f\n", n);//打印结果为:1.000000
return 0;
}
2). 移位操作符
>> //左移
<< //右移
3). 位操作符
& //按位与
^ //按位异或
| //按位或
4). 赋值操作符
= //赋值
+= //加等 -- (此行及以下)复合赋值
-= //减等
*= //乘等
/= //除等
%= //(取)模等
&= //按位与等
^= //按位异或等
|= //按位或等
>>= //左移等
<<= //右移等
举个例子:赋值、加等、乘等
#include <stdio.h>
int main()
{
int a = 0;//初始化,创建变量的同时给一个值,这叫初始化
a = 20;//赋值
a += 5;//加等 -- 复合赋值//a = a + 5;
printf("%d\n", a);//打印结果为:25
a *= 10;//乘等 -- 复合赋值//a = a * 10;
printf("%d\n", a);//打印结果为:250
return 0;
}
5). 单目操作符
! //逻辑反操作
- //负值
+ //正值
& //取地址
sizeof //操作数的类型长度(以字节为单位)
~ //对一个数的二进制按位取反
-- //前置、后置--
++ //前置、后置++
* //间接访问操作符(解引用操作符)
(类型) //强制类型转换
C语言中,0表示假,非0表示真。
- ‘!’ – 逻辑反操作 – 真非假,假非真
#include <stdio.h>
int main()
{
int flag = 5;
//flag的值是5,为真,打印hehe
if (flag)
{
printf("hehe\n");
}
//!flag -- 真非假,if语句的条件表达式为假,不打印haha
if (!flag)
{
printf("haha\n");
}
return 0;
}
- 负值’-‘和正值’+’
#include <stdio.h>
int main()
{
int a = +(-10);//'+' -- 正值
int b = -a;//'-' -- 负值
printf("%d\n", b);//打印结果为:10
return 0;
}
- sizeof是操作符,是计算变量所占内存空间的大小,单位是字节
#include <stdio.h>
int main()
{
int a = 10;
float f = 5.5f;
printf("%d\n", sizeof(a));//打印结果为:4
printf("%d\n", sizeof(int));//4
printf("%d\n", sizeof(f));//4
printf("%d\n", sizeof(float));//4
return 0;
}
- 前(后)置++和–
#include <stdio.h>
int main()
{
int a = 100;
//后置++,先使用,后++
int b = (a++);//等价于b = a, a = a + 1;//此时b = 100, a = 101
//前置++,先++,后使用
b = ++a;//等价于a = a + 1, b = a;//此时a = 102, b = 102
//后置--,先使用,后--
b = a--;//等价于b = a, a = a - 1;//此时b = 102, a = 101
//前置--,先--,再使用
b = --a;//等价于a = a - 1, b = a;//此时a = 100, b = 100
printf("a=%d b=%d\n", a, b);//打印结果为:a=100 b=100
return 0;
}
- 强制类型转换
#include <stdio.h>
int main()
{
//(类型) - 强制类型转换
int a = (int)3.14;//这里只取整数部分
printf("%d\n", a);//打印结果为:3
return 0;
}
6). 关系操作符
> //大于
>= //大于或等于
< //小于
<= //小于或等于
!= //不等于
== //等于
'==‘是用来判断相等的,’='是用来赋值的。
#include <stdio.h>
int main()
{
int a = 3;
if (a == 5)//如果a等于5,打印hehe
//if (a = 5)//err//如不小心少打个=,则是将5赋值给a,a非0为真,打印hehe,逻辑错误!
{
printf("hehe\n");
}
return 0;
}
7). 逻辑操作符
&& //逻辑与 -- 并且
|| //逻辑或 -- 或者
&& || 只关注真假:有真或为真,两真与才真。&& 两边同时为真,才为真;|| 两边同时为假,才为假。
#include <stdio.h>
int main()
{
int a = 1;//a为真
int b = 0;//b为假
if (a || b)//a || b为真,打印haha
{
printf("haha\n");
}
if (a && b)//a && b为假,不打印hehe
{
printf("hehe\n");
}
return 0;
}
应用:假设x为变量,a和b为常量且a<b;表达式a <= x<= b
应写成 x >= a && x <= b
。
#include <stdio.h>
int main()
{
//年龄18~36 青年
int age = 2;
//18 <= 2为假,C语言中0表示假,0 <= 36为真,逻辑错误!
//if (18 <= age <= 36)//err
if (age >= 18 && age <= 36)
{
printf("青年\n");
}
return 0;
}
8). 条件操作符
exp1 ? exp2 : exp3 // " ? : "是条件操作符
条件操作符等价于if_else语句:如果满足exp1(exp1为真)执行exp2;否则(exp1为假)执行exp3。
#include <stdio.h>
int get_max(int x, int y)
{
//if (x > y)
//{
// return x;
//}
//else
//{
// return y;
//}
//条件操作符,等价于上面的if_else语句
return (x > y ? x : y);
}
int main()
{
int a = 0;
int b = 0;
printf("请输入两个整数:");
scanf("%d %d", &a, &b);//举个例子:输入 3 5
int max = get_max(a, b);
printf("max = %d\n", max);//打印结果为:max = 5
return 0;
}
9). 逗号表达式
exp1, exp2, exp3, …expN
10). 下标引用、函数调用和结构成员
[] //下标引用操作符 -- 数组
() //函数调用操作符 -- 函数
. //结构成员访问操作符 -- 结构体
-> //结构成员访问操作符 -- 结构体
- [] – 下标引用操作符 – 数组通过下标来访问元素
#include <stdio.h>
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
//[] -- 下标引用操作符 -- arr[4]是数组arr中下标为4的元素
printf("%d\n", arr[4]);//打印结果为:5
return 0;
}
- 函数名后面的括号’()’ – 函数调用操作符
#include <stdio.h>
int Add(int x, int y)
{
return (x + y);
}
int main()
{
int num1 = 0;
int num2 = 0;
int sum = 0;
//输入
scanf("%d %d", &num1, &num2);
//求和
sum = Add(num1, num2);//() - 函数调用操作符
//输出
printf("%d\n", sum);
return 0;
}
总结
- 简单了解函数,函数的特点:简化代码,代码复用;
- 数组的创建、初始化和下标
- 操作符:算数、移位、位、赋值、单目、关系、逻辑、条件、逗号表达式、下标引用、函数调用和结构成员访问。
以上拙见,欢迎大家指正和交流。