目录
1.选择语句
选择语句if-else语句
if(表达式)
{
语句一
}
else
{
语句二
}
例:输入一个年龄,判断是否成年人
2.循环语句
2.1.while语句
while(表达式)
{
循环语句
}
例:据说智商140以上者称为天才,KiKi想知道他自己是不是天才,请帮他编程判断。输入一个整数表示一个人的智商,如果大于等于140,则表明他是一个天才,输出“Genius”。多组输入,每行输入包括一个整数表示的智商。
输出描述:
针对每行输入,输出“Genius”。
#define _CRT_SECURE_NO_WARNINGS//防止弹出scanf警告
#include<stdio.h>
int main()
{
int iq = 0;//定义一个整型变量iq,并赋值为0
while (scanf("%d", &iq) != EOF)//当输入读取正确时,可以进行多组输入
{
if (iq >= 140)
{
printf("Genius\n");
}
else
{
printf("\n");
}
}
return 0;
}
2.2.for语句
for(表达式1;表达式2;表达式3)
{
循环语句
}
表达式1:初始化部分,用于初始化循环变量
表达式2:条件判断部分,,用于判断循环终止
表达式3:调整部分,用于循环条件的调整
2.3.do while语句
do
{
循环语句
}while(表达式);
注:循环至少执行一次
3.函数
例:求和函数
4.数组
定义:用来存放一组相同类型的元素
例:int arr[100] = {1};//不完全初始化,其余为0
注:数组下标从0开始;数组的输入与打印使用循环
5.操作符
算数操作符 | + - * / % |
移位操作符 | << >> |
位操作符 | &(按位与),^(按位异或),|(按位或) |
赋值操作符 | = += -= /= ....... |
单目操作符 | ! - + & sizeof ~ ++/-- (类型) * |
关系操作符 | ==(用于测试相等),!=(用于测试不相等),>= ........ |
逻辑操作符 | ||(逻辑或),&&(逻辑与) |
条件操作符 | exp1 ? exp2 : exp3 |
逗号表达式 | 例:int d=(a,b,c) |
下表引用操作符 | 例:arr[5] |
函数调用 | 例:get_max(3,5) |
结构成员 | ——> |
6.常见关键字
- auto(自动):(auto)int a = 0;一般情况下auto省略
- register(寄存器变量)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int num2 = 10;
register int num2 = 20;//建议把20放在寄存器中
return 0;
}
- static修饰变量和函数
1.修饰局部变量:static修饰局部变量时,局部变量就变成了静态的局部变量,出了局部的范围,不会销毁,下一次进入函数依然存在,因为static修饰的局部变量是存在静态区的。static修饰局部变量时,实际改变的是变量的存储位置,本来一个局部变量放在栈区,static修饰后放在了静态区,从而出了作用域不销毁生命周期没有结束,但作用域不发生变化,静态区中的数据的生命周期与程序共存亡。
注: text函数中,a是一个由static修饰的局部变量,当程序第一次运行至进入text函数时,a首先被赋值为5,然后a++,a的值变为6,打印的值为6;当程序第二次运行至进入text函数时,因为a被static修饰,所以a=6并未销毁,a++,a的值变为7,打印7......直到循环执行10次。
2.修饰全局变量:对一个工程中的俩个.c文件,一个全局变量,本来具有外部链接属性,被static修饰后,外部链接属性就变成了内部连接属性,只能在自己所在的源文件内部使用
3.修饰函数:对一个工程中的俩个.c文件,一个函数本来具有外部链接属性,被static修饰后,外部链接属性就变成了内部连接属性,这时函数只能在自己所在的源文件内部使用,其他文件无法使用。
- struct:结构体关键字
- typedef:类型重命名
#include<stdio.h>
int main()
{
unsigned int num = 10;
typedef unsigned int unit;//把unsigned int重命名为unit
unit num2 = 20;
return 0;
}
- union:联合体/共同体
- void:无/空
7.#define定义的常量和宏
#define定义的宏
8.指针
一个内存单元是一个字节
以32位为例,32根地址线/数据线,地址线——电线——通电——电信号——数字信号1/0
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000001
...... ......
11111111 11111111 11111111 11111111
总共2^32个地址,总共管理2^32(二进制)个字节
内存单元有编号,编号就是内存单元的地址,我们把这个地址也叫指针
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int a = 10;//4byte
char ch = 'w';
printf("%p\n", &a);//%p用于地址的打印
int* pa = &a;//pa用来存放地址,所以把pa叫指针变量
char* pc = &ch;
printf("%d\n", sizeof(pa));//4
printf("%d\n", sizeof(pc));//4
//*解引用操作符,通过pa中存放的地址,找到pa所指向的内容
*pa = 20;//把a的值改为20
return 0;
}
注:int*pa=&a中,*告诉我们pa是一个指针变量,int告诉我们pa指向的对象是int类型
sizeof(pa)= sizeof(pc)=4
32位平台下,指针的大小是4个字节;64位平台下,指针的大小是8个字节
指针变量的大小取决于地址的大小,与它所指向的类型大小无关
9.结构体
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//结构体
struct Stu
{
char name[20];//名字,字符串
int age;//年龄,整数
char sex[5];//性别,字符串
char id[20];//学号,字符串
};
void Print(struct Stu* ps)
{
//printf("%s %d %s %s", (*ps).name, (*ps).age, (*ps).sex, (*ps).id);
printf("%s %d %s %s\n", ps->name, ps->age, ps->sex, ps->id);//结构体指针->结构体成员
}
int main()
{
//结构体变量
struct Stu s1 = { "张三",18,"男","06203023" };//学生1
struct Stu s2 = { "李四",19,"女","06203024" };//学生2
printf("%s %d %s %s\n", s1.name, s1.age, s1.sex, s1.id);//直接打印,结构体变量->结构体成员
Print(&s2);//使用函数打印
return 0;
}
程序运行结果