【参考课程:B站 BV1cq4y1U7sg BV1Vm4y1r7jY】
目录
1.选择语句(if语句)
#define _CRT_SECURE_NO_WARNINGS 1 //避免scanf函数报错
#include<stdio.h>
int main()
{
printf("要好好学习吗(1/0)?\n");
int input=0; //用于储存后续输入的值
scanf("%d",&input);
if (input == 1)
printf("牛气冲天\n"); //如果分支下有多行代码,则需要用{}括起来
else
printf("烤地瓜\n");
return 0;
}
2.循环语句(While语句)
#include<stdio.h>
int main()
{
int line = 0;
while(line < 30000)
{
printf("写第%d行代码\n", line);
line++; //自增运算
}
if (line == 30000)
printf("牛气冲天\n");
return 0;
}
*自增运算“++”:分为前缀自增和后缀自增,其效果均为自身变量值+1。
前缀自增例如“a=5;b=++a;”,则运行结果是“a=6,b=6”。
后缀自增例如“a=5;b=a++;”,则运行结果是“a=6,b=5”。
运行结果:
3.函数
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//主函数程序
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int c = ADD(a, b); //可直接使用定义的函数
printf("和为:%d", c);
return 0;
}
//定义ADD函数
//函数类型 函数名(函数参数) //函数类型由返回值决定
int ADD(int num1,int num2)
{
int sum = 0;
sum = num1 + num2;
return sum; //函数ADD的返回值
}
4.数组
数组:一组相同类型的元素的集合,一个数组最多放10个元素。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
//创建数组
//数组储存的元素类型 数组名称[储存元素个数]={元素,元素,...}
int arr1[5] = { 1,2,3,4,5 }; //元素由,分隔
//不完全初始化,剩余位默认填充0//vs2022填充(null)
char arr2[5] = { 'a','b','c' };
//访问数组--通过下标访问
//数组元素从左到右下标依次为0\1\2\3\4\5...
//printf("占位符",数组名[元素下标]);
printf("%d\n", arr1[0]); //输出1
//输出多个元素可通过循环语句实现
int i = 0;
while (i < 3) //输出前三个元素:123
{
printf("%d", arr1[i]);
i++;
}
return 0;
}
5.操作符
算数操作符
#include<stdio.h>
int main()
{
//算数操作符:+、-、*、/、%(取模\取余)
//对除法的特别说明:
int a = 9 / 2;
printf("%d\n", a); //执行整数除法//输出4
float b = 9 / 2;
printf("%f\n", b); //执行整数除法//输出4.000000
float c = 9.0 / 2;
printf("%f\n", c); //输出4.500000
//除号两端都是整数--执行整数除法;除号两端有一个数是小数即执行小数除法
int d = 9.0 / 2;
printf("%d\n", d); //执行小数除法,但输出为%d-整型//输出4
//取余\取模--%
int e = 9 % 2;
printf("%d\n", e); //9除2,商4余1//输出1
return 0;
移位操作符
#include<stdio.h>
int main()
{
//左移操作符<< //移动的是2进制位
//int占4byte,即4*8=32bit
int a = 2; //此时a的2进制应打印为32比特位即:00000000000000000000000000000010
int b = a << 1;//把a的2进制位向左移动1位,即:00000000000000000000000000000100
printf("%d\n", b); //转化输出十进制//输出4
//右移操作符<<//把2进制位向右移动1位
return 0;
}
单目操作符
#include<stdio.h>
int main()
{
//前置++ //先++,后赋值
int a = 10;
int b = ++a;
printf("%d\n", a); //先++→a+1=11//输出11
printf("%d\n", b); //后使用→b=a=11//输出11
//后置++ //先赋值,后++
int c = 10;
int d = c++;
printf("%d\n", d); //先赋值→d=c=10 //输出10
printf("%d\n", c); //后++→c+1=11 //输出11
return 0;
}
#include<stdio.h>
int main()
{
//强制类型转换
int a = (int)3.14; //把浮点型3.14强制转换为整型
printf("%d", a);
return 0;
}
条件操作符/三目操作符
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
//条件操作符 //可用于简化选择语句
//表达式1 ? 表达式2 : 表达式3
//1成立→运行2
//1不成立→运行3
int a = 0;
printf("是否要好好学习?(1/0)\n");
scanf("%d", &a);
a == 1 ? printf("牛气冲天\n") : printf("烤地瓜\n");
return 0;
}
逗号表达式
#include<stdio.h>
int main()
{
int a = 1; int b = 2; int c = 0;
int d = (a++, c = a + 3, b = a + c);
//(逗号表达式//从左向右依次计算)//整个表达式结果为最后一个表达式结果
printf("%d\n", d); //输出最后一个表达式结果 //输出7
return 0;
}
*补充-操作符详解
6.关键字
//C语言提供,不能自己创建
//变量名不能是关键字
1、基本数据类型: signed unsigned char int float double short long void
2、构造数据类型: struct union enum
3、数据存储类别: auto static extern register
4、数据优化: const volatile
5、9条基本语句: if else switch case break default while do for return continue goto
6、其它: typedef sizeof
————————————————
版权声明:本文为优快云博主「星河不见星月」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
#defind 定义常量和宏
//define定义常量
#define MAX 1000
//define定义宏
#define ADD(X,Y) X+Y
#define ADDc(X,Y) ((X)+(Y))
//注意定义宏时应该把X、Y当作表达式来考虑,使用()来保证它们的完整性
#include<stdio.h>
int main()
{
//define定义常量
printf("%d\n", MAX); //输出定义常量1000
//#define定义的宏在表达式中直接替换
printf("%d\n", ADD(2, 3)); //2+3//输出5
printf("%d\n", 4*ADD(2, 3)); //4*2+3//输出11
printf("%d\n", 4 * ADD(2 + 1, 3 + 1)); //4*2+1+3+1//输出13
printf("%d\n", 4 * ADDc(2, 3)); //4*(2+3)//输出20
printf("%d\n", 4 * ADDc(2+1, 3+1)); //4*((2+1)+(3+1))//输出28
return 0;
}
7.指针
内存--空间→编号管理
1.内存如何编号
32位--32根地址线--物理线--通电(1/0)
64位--64根地址线--物理线--通电(1/0)
....
--------------以32位为例--------------
电信号转换为数字信号--0/1构成的2进制序列: //2³²个序列--2³²个编号
00000000000000000000000000000000 →编号0→将编号称为内存单元的地址
00000000000000000000000000000001 →编号1
00000000000000000000000000000010 →编号2
...
2.一个内存单元是多大空间?
一个内存单元==1 byte
∴32位≈4GB
指针变量
//指针就是地址
#include<stdio.h>
int main()
{
int a = 10; //a在空间分配空间--4byte
//打印地址
//%p--专门用于打印地址 //&--取地址操作符
printf("%p\n", & a);//&a--取a的地址--a占4个连续地址→取地址输出a的第一个地址
//存放地址
int*pa = &a; //用于存放地址,在C语言中是【指针变量】
//*--说明pa是指针变量//int--说明pa指向的对象是int类型
//举一反三:
char ch = 'w';
char* pc = &ch;
return 0;
}
#include<stdio.h>
int main()
{
int a = 10;
int* pa = &a;
//通过地址修改a:
*pa = 20; //*--解引用操作符
//通过pa存放的地址,找到地址里存放的a
printf("%d\n", a); //输出a//输出20
printf("%d\n", *pa); //输出存放在地址pa里的内容(a)//输出20
return 0;
}
指针变量的大小
#include<stdio.h>
int main()
{
printf("%lld\n", sizeof(char*));
printf("%lld\n", sizeof(short*));
printf("%lld\n", sizeof(int*));
printf("%lld\n", sizeof(long*));
printf("%lld\n", sizeof(long long*));
printf("%lld\n", sizeof(float*));
printf("%lld\n", sizeof(double*));
//均输出8(64位)
return 0;
}
//指针大小相同--指针大小取决于地址储存需要多大空间
32位 32bit--4byte
64位 64bit--8byte
8.结构体
//用于描述复杂对象
#include<stdio.h>
//结构体可以让C语言创建新的类型出来
//创建一个学生
struct Stu //这个结构体命名为Stu
{
char name[20];
int age;
double score; //name\age\score为结构体的成员变量
};
int main()
{
struct Stu s = { "张三" ,20,95.5}; //创建一个Stu结构体的变量
printf("1:%s,%d,%lf\n", s.name, s.age, s.score); //输出 1:张三,20,95.500000
//结构体.成员变量名--找到成员 //.操作符
//使用指针,将变量s的地址储存在ps中:
struct Stu* ps = &s; //struct Stu-表示s的变量类型为结构体 //*-表示ps为指针变量
//通过指针变量从地址输出指针函数s:
printf("2:%s,%d,%lf\n", (*ps).name, (*ps).age, (*ps).score); //输出 2:张三,20,95.500000
//另一种写法:使用 -> 操作符 //结构体指针->成员变量名
printf("3:%s,%d,%lf\n", ps->name, ps->age, ps->score); //输出 3:张三,20,95.500000
return 0;
}