三、选择语句、循环语句
C语言是“结构化”的程序设计语言
大致分为顺序、选择、循环结构三种
选择语句
If else
例(1):
#include <stdio.h>
int main()
{
int input = "桃子";
printf("喜欢苹果还是桃子\n");
scanf_s("%d", &input);
if (input == "苹果")
{
printf("哦\n");
}
else
{
printf("好耶我也喜欢\n");
}
return 0;
}
——————————————————————
例(2):
已知一个函数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_s("%d", &x);
if (x < 0)
y = 1;
else if (x == 0)
y = 0;
else
y = -1;
printf("y = %d\n", y);
return 0;
}
循环语句
while
#include <stdio.h>
int main()
{
int word = 0;
printf("学习单词:%d\n", word);
while (word < 20)
{
printf("继续学习:%d\n",word);
word++;
}
if (word >= 20)
{
printf("过四级\n");
}
else
{
printf("继续加油!");
}
return 0;
}
for 语句
do…while
四、函数
求两个任意整数的和
使用Add函数
#include <stdio.h>
int Add(int x, int y)//定义Add函数
{
return x + y; //计算结束后,返回一个结果
}
int main() //主函数
{
int n1 = 0, n2 = 0;
scanf_s("%d %d", &n1, &n2);
int sum = Add(n1, n2);
printf("%d\n", sum);
return 0;
}
———————————————————————————————————————
求两数之中较大值
int Max(int x, int y) //定义Max函数
{
if (x > y)
return x;
else
return y;
}
int main()//定义主函数
{
int a = 0;
int b = 0;
scanf_s("%d %d", &a, &b);
printf("%d", Max(a, b)); //使用Max函数
return 0;
}
五、数组
1、数组:一组相同类型元素的集合。
2、arr前为元素的类型,[ ]中为能存放元素的数量。
1)若不填写[ ],则数组默认初始化,数组大小与存放的元素数量相同。
例1:int arr[] = {2,3} //数组中有2,3两个元素
2)若填写[ ],则必须填写常数或常数表达式。
例2:int m = 2
int arr[m] = {1,2}————(错误)
(C99标准之后支持变长数组,此时允许数组大小是变量,但这种指定方式的数组不能初始化,即支持例(2),不支持例(1)——不同编译器所支持语法标准不同)
3)若填写[ ],且数组大小大于存放的元素数量,则出现不完全初始化,剩余空间默认初始化为0
例3:char arr[4] = {“m”,”o”,”b”}//数组中存放有m,o,b,0
4)若填写[ ],且用于存放字符串,则需要数组大小在原有基础上加1,用于存放\0(字符串结束的标志),否则计算机无法确定字符串何时结束,直到找到\0,此时计算字符串的长度是随机数。
3、数组会为集合中的元素从0开始从左到右排序,称为数组的下标,数组可以通过下标来访问
#include <stdio.h>
int main()
{
int arr[6] = {1,1,3,1,7,1};//存放6个有顺序的整型
printf("%d\n",arr[4]);//输出数组中下标为4的元素
return 0;
}
#include <stdio.h>
int main()
{
int arr[6] = {1,2,3,5,7,9};
int i = 0;
while (i <= 4)
{
printf("%d\n", arr[i]);
i = i + 1;
}
return 0;
}
六、操作符
算数操作符
+ - * / %
例:7÷2=3……1
/:取商,即7/2=3
(除号两端都是整数,执行整数除法,得到整数;若两端出现浮点数,则执行浮点数除法,即:7.0/2=3.5)
%:取模(余数),即7/2=1
(取模操作符两端只能取整数)
移位操作符
位操作符
赋值操作符
=(赋值)+= -= *= /= &= ^= |= >>= <<=
单目操作符
(只有一个操作数的操作符)
! | 逻辑反操作(例:!a为非a) |
- | 负值(-a) |
+ | 正值(+a=a) |
& | 取地址 |
sizeof | 操作数的类型长度(以字节为单位) (例: #include <stdio.h> int main() { int a = 10; printf("%d\n", sizeof(a)); //4 printf("%d\n", sizeof(int)); //4 printf("%d\n", sizeof a); //4 (计算名字时可取消括号,计算类型时不可以) int arr[4] = { 0 }; printf("%d\n", sizeof(arr)); //16(计算的是整个数组的大小) printf("%d\n", sizeof (arr[0])); //4(计算数组下标为0的元素的大小) return 0; } |
~ | 对一个数的二进制按位取反 |
++ | 前置++ int a = 10; int c = ++a;//前置++,先++,后使用 //a=a+1;c=a+1 //a=11;c=11 后置++ int b = a++;//后置++,先使用,后++ //int b = a; a = a + 1 //b=10;a=11 |
-- | 前置--、后置-- |
* | 间接访问操作符(解引用操作符) |
(类型) | 强制类型转化 例: #include <stdio.h> int main() { int a = (int)13.3;//强制取浮点数的整数部分,将浮点型转变为整型 printf("%d\n", a);//13 return 0; } |
关系操作符
> >= < <= !=(用于测试“不相等”) == (用于测试“相等”)
逻辑操作符
&&:逻辑与,并且
||:逻辑或,或者
(例:
#include <stdio.h>
int main()
{
int a = 0;
int b = 14;
if (a || b)
{
printf("haha\n");
}
return 0;
}
条件操作符
(三目操作符——有三个操作数)
exp1 ? exp2 : exp3
含义为:若exp1为真,则取exp2的值;反之,则取exp3的值
(例:
#include <stdio.h>
int main()
{
int a = 12;
int b = 14;
int r = a > b ? a : b;
printf("%d", r);
return 0;
}
逗号表达式
用逗号隔开的一串表达式
特点:从左向右以次计算,整个表达式的结果是最后一个表达式的结果
#include <stdio.h>
int main()
{
int a = 12;
int b = 14;
int c = (b = a + 3, a = b - 10, a + b);
printf("%d\n", c);
return 0;
}
下标引用、函数调用
下标引用
#include <stdio.h>
int main()
{
int arr[3] = { 1,2,3 };
arr[2] = 12; //[]就是下标引用操作符,arr和3就是[]的操作数
printf("%d\n", arr[0]);
printf("%d\n", arr[1]);
int n = 2;
printf("%d\n", arr[n]); //可使用变量
return 0;
}
函数调用
#include <stdio.h>
int Add(int x, int y)
{
return x + y;
}
int main()
{
int n1 = 0, n2 = 0;
scanf_s("%d %d", &n1, &n2);
int sum = Add(n1, n2); //()就是函数调用操作符,Add、n1、n2就是()的操作数
printf("%d\n", sum);
return 0;
}
七、常见关键字
(C语言本身内置,无法创建
大体介绍:
auto | 自动储存 |
break | 跳出当前循环 |
const | 常属性 |
extern | 声明外部符号 |
register | 寄存器 |
enum | 枚举 |
struct | 结构体 |
union | 联合体(共用体) |
signed | 有符号的 |
unsigned | 无符号的 |
static | 静态的 |
typedef | 类型重命名 |
void | 无(函数的返回类型、函数参数) |
sizeof | 计算大小(单位为字节) |
数据类型、特殊语句等关键字
具体介绍:
typedef
类型重命名
#include <stdio.h>
int main()
{
typedef unsigned int unit; //将unsigned int类型简化重命名为unit,更方便去声明变量类型
unit x = 90; //x类型为unsigned int
printf("%d", x);
return 0;
}
static
1、修饰局部变量
static 修饰局部变量时,局部变量出了作用域也不销毁;本质上,static修饰局部变量时,改变了变量的存储位置,改变了变量的生命周期,使生命周期变长,和程序的生命周期一样长。
#include <stdio.h>
void test()//void不需要返回
{
int a = 2;
a++;
printf("%d ", a);
}
int main()
{
int i = 1;
while (i < 10)
{
test();
i++;
}
return 0;
}
#include <stdio.h>
void test()
{
static int a = 2;//第二次及以后使用上一次a的值
a++;
printf("%d ", a);
}
int main()
{
int i = 1;
while (i < 10)
{
test();
i++;
}
return 0;
}
2、修饰全局变量
全局变量具有外部链接属性
static修饰全局变量时,将外部链接属性变为内部变量属性,使其他源文件无法使用。
3、修饰函数
函数具有外部链接属性
static修饰函数时,将外部链接属性变为内部变量属性,使其他源文件无法使用。
register
寄存器——建议将变量放入寄存器中
register int a = 0;