分支语句
int main()
{
int input = 0;
printf("加入比特\n");
printf("你要好好学习吗?(1/0)>: ");
scanf("%d", &input);//1/0
if (input == 1)
printf("好offer\n");
else
printf("卖红薯\n");
return 0;
}
循环语句
C语言中如何实现循环呢?
- while语句
- for语句
- do…while语句
int main()
{
int line = 0;
printf("加入比特\n");
while (line < 20000)
{
printf("敲一行代码:%d\n",line);
line++;
}
if(line>=20000)
printf("好offer\n");
return 0;
}
函数
//1.自定义函数
Add(int x, int y)
{
return x + y;
}
int main()
{
int num1 = 10;
int num2 = 20;
int sum = 0;
int a = 100;
int b = 200;
//sum = num1 + num2;
sum = Add(num1, num2);
//sum = a + b;
sum = Add(a, b);
sum = Add(2, 3);
printf("sum=%d\n", sum);
return 0;
}
2.库函数
数组
C语言中数组定义:一组相同类型元素的集合。
注意:数组的下标从0开始
int main()
{
//int a = 1;
//int b = 2;
//int c = 3;
//int d = 4;
int arr[10] = {1,2,3,4,5,6,7,8,9,10};//定义一个存放10个整数数字的数组
//数组的类型 -> int[10] - 可以把数组和数组中的元素之间的关系想象成文件夹与文件的关系
for (int i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
//printf("%d\n", arr[4]); //下标的方式访问元素 - arr[下标]
//char ch[20];
//float arr2[5];
return 0;
}
操作符
//int main()
//{
// int a = 10;
// int b = 20;
// //条件操作符
// int max = (a > b ? a : b);
// //int max=0;
// //if (a > b)
// // max = a;
// //else
// // max = b;
// return 0;
//}
//int main()
//{
// //真 - 非0
// //假- 0
// //&& - 逻辑与
// //|| - 逻辑或
// int a = 0;
// int b = 5;
// //int c = a && b;
// int c = a || b;
// printf("%d\n", c);
// return 0;
//}
//int main()
//{
// //强制类型转换
// int a = (int)3.14;
// return 0;
//}
//int main()
//{
// int a = 10;
// //int b = a++;//后置++,先使用,再++
// //int b = ++a;//前置++,先++,再使用
// //int b = a--;//后置--,先使用,再--
// int b = --a;//前置--,先--,再使用
// printf("a = %d b = %d\n", a, b);
// return 0;
//}
//int main()
//{
// int a = 0; //一个字节,32bit位
// int b = ~a;
// //~ - 按位(二进制)取反
// //00000000 00000000 00000000 00000000
// //11111111 11111111 11111111 11111111
// //原码、反码、补码
// //负数在内存中存储的时候,存储的是二进制的补码
// //11111111 11111111 11111111 11111111
// //11111111 11111111 11111111 11111110
// //10000000 00000000 00000000 00000001
// printf("%d\n", b);//所以这里打印的是这个数的原码
// //原码
// //11111111 11111111 11111111 11111111
// //10000000 00000000 00000000 000000000
// //1*2^32-1
// return 0;
//}
//int main()
//{
// //字符串的结束标志:'\0'
// //"abcdef"
// //'\0' - 转义字符 - ASCII为 0
// //'0' - 数字 - ASCII为 48
//
// //EOF - end of file - 文件结束标志 - 值为-1
//}
int main()
{
int arr[10] = { 0 };//10个整型元素的数组
int sz = 0;
//10*sizeof(int) = 40
printf("%d\n", sizeof (arr));
//计算数组的元素个数
//个数 = 数组总大小 / 每个元素的大小
sz = sizeof(arr) / sizeof(arr[0]);
printf("sz = %d\n", sz);
//int a = 10;
sizeof 计算的是变量/类型所占空间的大小,单位是字节
//printf("%d\n", sizeof(a));//4
//printf("%d\n", sizeof(int)); //4
//printf("%d\n", sizeof a);//4
return 0;
}
单目操作符
双目操作符
三目操作符
//int main()
//{
// //int a = 10;
// //int b = 20;
// //a + b; //+ 双目操作符
// //C语言中我们表示真假
// //0 - 假
// //非0 - 真
// int a = 10;
// printf("%d\n", a);
// printf("%d\n", !a);
// return 0;
//}
//int main()
//{
// //复合赋值符
// //+= -= *= /= %= >>= <<= &= |= ^=
// int a = 10;
// a = 20; // = 赋值 == 判断相等
// a = a + 10;
// a += 10;
// a = a - 20;
// a -= 20;
// a = a & 2;
// a &= 2;
// return 0;
//}
//int main()
//{
// //(二进制)位操作
// //& 按位与
// //| 按位或
// //^ 按位异或
// //异或计算规律:
// //对应的二进制位相同,则为0
// //对应的二进制位相异,则为1
// int a = 3;
// int b = 5;
// int c = a ^ b;
// //011
// //101
// //& 001
// //| 111
// //^ 110
// printf("%d\n", c);
// return 0;
//}
//int main()
//{
// //移位操作符
// //<< 左移
// //>> 右移
// int a = 1;
// //整型1占4个字节 - 32bit位
// // 00000000 00000000 00000000 00000001
// int b = a << 1;
// // 00000000 00000000 00000000 00000010
// printf("%d\n", b); //2
// return 0;
//}
//int main()
//{
// //除法
// //int a = 5 / 2; //2
// //取模
// int a = 5 % 2; //1
// printf("%d\n", a);
// return 0;
//}
关键字
//1.static 修饰局部变量
//局部变量的生命周期变长
//2.static 修饰全局变量
//改变了变量的作用域 - 让静态的局部变量只能在自己所在的源文件内部使用
//出了源文件就没法再使用了
//3.static 修饰函数
//也是改变了函数的作用域 - 不准确
//static修饰函数改变了函数的链接属性
//外部链接属性 -> 内部链接属性
//声明外部函数
extern int Add(int, int);
int main()
{
int a = 10;
int b = 20;
int sum = Add(a, b);
printf("%d\n", sum);
return 0;
}
//int main()
//{
// //extern - 声明外部符号的
// extern int g_val;
// printf("g_val = %d\n", g_val);
// return 0;
//}
//void test()
//{
// static int a = 1; // a 是一个静态的局部变量
// a++;
// printf("a = %d\n", a); //2 3 4 5 6
//}
//
//int main()
//{
// int i = 0;
// while (i < 5)
// {
// test();
// i++;
// }
// return 0;
//}
//int main()
//{
// //int float;//error
// //typedef - 原类型 - 重定义类型
// typedef unsigned int u_int;
// unsigned int num = 20;
// //张三 - 小三
// u_int num2 = 20;
// return 0;
//}
//int main()
//{
// //register int a = 10;//建议把a定义成寄存器变量
// int a = 10;
// a = -2;
// //int 定义的变量是有符号的
// //signed int;
// unsigned int num = 1;
// //struct - 结构体关键字
// //union - 联合体/共用体
// return 0;
//}
//int main()
//{
// auto int a = 10;//局部变量-自动变量
// return 0;
//}
#define 定义常量和宏
//#define 定义标识符常量
//#define MAX 100;
//#define 定义宏 - 带参数
//函数的实现
Max(int x, int y)
{
return x > y ? x : y;
}
//宏的定义
#define MAX(X,Y) (X>Y?X:Y)
int main()
{
//int a = MAX;
int a = 10;
int b = 20;
//函数
int max = Max(a, b);
printf("max = %d\n", max);
//宏的方式
max = MAX(a, b);
//max=(a>b?a:b);
printf("max = %d\n", max);
return 0;
}
指针
int main()
{
printf("%d\n", sizeof(char*)); //8 - 8byte
printf("%d\n", sizeof(short*)); //8
printf("%d\n", sizeof(int*)); //8
printf("%d\n", sizeof(double*)); //8
//double d = 3.14;
//double* pd = &d;
//printf("%d\n", sizeof(pd));//32-4 64-8
/**pd = 5.5;
printf("%lf\n", d);
printf("%lf\n", *pd);*/
//int a = 10; //向内存申请了4个字节的空间
printf("%p\n", &a);
//int* p = &a; //p是一个变量 - 指针变量
printf("%p\n", p);
//*p = 20;//* - 解引用操作符/间接访问操作符
//printf("a = %d\n", a);
return 0;
}
指针原理图:
结构体类型
#include<stdio.h>
#include<string.h>
//结构体
//char int double...
//人 = 3.14
//书 - 复杂对象
//书名+作者+出版社+定价+书号...
//名字+身高+年龄+身份证号...
//复杂对象 - 结构体 - 我们自己创造出来的一种类型
//
//创建一个结构体类型
struct Book
{
char name[20]; //C语言程序设计
short price; //55
};
int main()
{
//利用结构体类型创建一个该类型的结构体变量
struct Book b1 = { "C语言程序设计",55 };
strcpy(b1.name,"C++");//string copy - 字符串拷贝
printf("%s\n", b1.name);
//b1.price = 15;
//struct Book* pb = &b1;
//利用pb打印书名和价格
//. 结构体变量.成员
//-> 结构体指针->成员
//printf("%s\n", pb->name);
//printf("%d\n", pb->price);
//printf("%s\n", (*pb).name);
//printf("%d\n", (*pb).price);
//printf("书名:%s\n", b1.name);
//printf("价格:%d元\n", b1.price);
//b1.price = 15;
//printf("修改后的价格:%d元\n", b1.price);
return 0;
}