语法
输入输出函数
输出:printf("%d,%d\n",i,c);
输入: scanf("%d%d",&a,&b);
整形(指没有小数部分的数据):%d
单个字符输出:%c
整个字符串输出(自带\0):%s
浮点型输出:%f
常量
定义:程序中不会被修改的值,程序中的固定值。
整型常量: 0、-3
实型常量: 4.6、-1.23
字符常量: ‘a’、‘b’
字符串常量:“abc”
定义常量(通过宏命令的方式,凡是a都代表30):#define a 30
变量
整型变量
短整型
short int a=0;
基本整型
int a=0;
长整型
long int a=0;
字符型变量
char a='r';
注:char类型统一只占一个字节。
浮点型变量
单精度
float a=0.0;
双精度
double a=0.0;
长双精度
long double a=0.0;
变量名合法性
注:字符只能有大小写、英文字母、数字和下划线。且必须以字母或下划线开头,并且不能是C语言的关键字。
数值常量:+001、0xabcd、2e2(表示10^2)
非数值常量:'\'、0f
运算符
优先级
初等运行符——>单目运算符——>算术运算符——>关系运算符——>逻辑运算符——>条件运算符——>赋值运算符——>逗号运算符
初等运算符:数组下标“[]”、括号“()”、成员或对象选择“.”、指针“->”
单目运算符:运算对象为一个变量的运算符。
算术运算符:“+”、“-”、“*”、“/”、“%”、“++”、“--”
关系运算符:“<”、“<=”、“==”、”>”、“>=”、“!=”
逻辑运算符:与或非
条件运算符:“?:”
赋值运算符:“=”
条件运算符
max = a>b ? a:b
注:如果a>b,将a赋值给max;如果a<b,将b赋值给max。
逗号运算符
a=3*5 , a*4
注:先求解表达式1,再求解表达式2,整个逗号表达式值取表达式2。
这样做的意义:为了在只能写一条表达式的地方写多条表达式而设计的。
for (int i = 0, j = SIZE - 1; i < j; ++ i, -- j)
{
b=1,c=2;
printf("%d\n",b>c?b++:c++); //最后值是2
}
强制类型转换
float a;
b=(int)a;
注: 只不过是赋值到b的数据的类型为int,a本身的类型不变的。
switch判断
switch (a){
case 1:printf("Monday\n");
case 2:printf("Tuesday\n");
case 3:printf("Wednesday\n");
case 4:printf("Thursday\n");
case 5:printf("Friday\n");
case 6:printf("Saturday\n");
case 7:printf("Sunday\n");
default:printf("error\n");
}
注:比较变量a与所有case,如果与任意case的值相等,执行该case及其后的所有语句;如果a与所有case值不相同,执行default;如果想实现当a与case值相等时,执行case后语句跳出switch,可在对应case后添加break跳出判断。case后的值可以是整形、字符型、浮点型等各个类型。
三种循环结构
do while循环
注:do while不同于其它循环,是先执行循环体,再进行判定条件。
do
{
printf("%d\n",i);
}
while(i<0);
while循环
注:先判定条件,再执行循环体。
for循环
注:先判定条件,再执行循环体。
continue
跳过本次循环:continue
数组
整型数组
1行1列:int a[2]={0,1,2};
3列4行:int a[4][3]={{1,2,3},{4,5,6},{7,8,9},{7,8,9}};
字符数组
系统自动后面加\0,所以算3个字符:char c[3]="ab";
这种情况系统不会后面追加\0 :char c[2]={'a','b'};
将两个字符串连接
<string.h>
strcat(str1,str2);
复制字符串
<string.h>
strcpy(str1,str2); //将str2覆盖到str1
strcpy(str1,str2,2); //将str2最前面2个字符覆盖到str1
比较字符串是否相等
strcmp(str1,str2); //比较两个字符串是否相同,如果相同则返回0
测试字符串长度,不包括\0
strlen(str1); //直接返回str1长度
指针
&p
:指针也是一个变量,此代表编译器为变量p分配的地址,故实际上该变量就是地址。
p
:代表指针p指向的一个地址,故实际上该变量就是地址。
*p
:代表指针p指向的一个地址的值,故实际上该变量就是指针所指向地址里存的变量。
int **p
:二级指针,代表p指向的地址里存放一个int类型指针。
*(&c)='a'
:表示将‘a’赋给&c所指向的变量,指针就是地址。
函数指针
/*声明*/
int max(int a,int b);
int (*pf)(int,int);
pf=max; //将max函数的入口地址发送给pf
(*pf)(x,y); //相当于调用max函数
数组指针
char *str[5]={"a","b","c","d","e"}; //定义5个char类型指针分别指向5个字符串
for(int i=0;i<5;i++)
{
printf("%s\n",*(str+i)); //每次输出1个字符串,后指针地址+1
}
枚举
enum DAY
{
MON=1, TUE, WED, THU, FRI, SAT, SUN
};
/*如果THU=1,则后面FRI、SAT、SUN分别为2、3、4*/
取余
0%2=0
1%5=1
2%5=2
3%5=3
位运算符
与:&
或:|
异或:^
取反:~
流程图
起止框:椭圆
输入输出框:四边形
判断框:棱形
处理框:长方形
算法
排序——升序(从小到大)
要求:7个元素按从小到大排序。
选择排序
思路:
第1次从7个元素中选择值最小元素,将其与数组中第1个元素交换;
第2次从第2个元素起的7-1个元素中选择值最小的元素,将其与第2个元素交换;
依次类推......
int str[7]={1,5,2,3,2,4,5},min=0;
for(int i=0;i<6;i++)
{
for(int j=i+1;j<7;j++)
{
if(str[i]>str[j])
{
min=str[i];
str[i]=str[j];
str[j]=min;
}
}
}
/*外层循环遍历长度-1,内层循环遍历全部从第二个元素开始,判断条件进行交换*/
冒泡排序
思路:
比较相邻数字的大小,若第一个数比第二个数大,则相互交换;
针对所有数(除了最后一个)重复上述步骤,直到没有任何一对数字需要比较为止。
int str[7]={1,5,2,3,2,4,5};
int min=0;
for(int i=0;i<7;i++)
{
for(int j=0;j<7-i-1;j++)
{
if(str[j]>str[j+1]) //如果相邻的数大于,则交换位置
{
min=str[j];
str[j]=str[j+1];
str[j+1]=min;
}
}
}
查找
折半查找
思路:
折半查找只能在升序状态的数组才能进行查找
/*折半查找*/
int cos=0,sin=0;
while(cos<=7-1)
{
sin=(cos+7-1)/2;
if(str[sin]>1)
{
cos--;
}
else if(str[sin]<1)
{
cos++;
}
else
{
printf("已找到!值为:%d,下标为:%d",str[sin],sin);
printf("\n");
break;
}
}
评论区