一、数据类型
二、运算符、表达式和语句
1.算数运算符
2.表达式
用算术运算符和圆括号将操作数链接起来的,符合C语法规则的式子成为算数表达式。操作数可以是常量,变量,函数等。
例如:x+y 2.3-3.4 (x*2)/y
(1)加减乘除和取余运算
(2)自增和自减运算
单独使用自增运算符、在表达式中使用自增运算符
·逻辑运算真值表
3.C语言的语句
表达式语句:由表达式末尾加上分号构成。
函数调用语句:由西数调用表达式加上分号构成
空语句: ;
选择结构语句:if语句 ,switch 语句
福环语句:for 语句,while 语句,do while语句
复合语句:用花括号{ }将以上仁意语例括起来构成一条复合语句。
·基本结构
void main()
{ 声明部分:用来定义变量和声明自定义附数的原型,需以";"结尾,如 int x
执行语句部分:第六点里介绍的各种语句,如x=3; printf.%d",x); }
main 函数外可写自定义函数。如
int max()
{
return O;
}
三、循环
1.for循环语句
for(表达式 1; 表达式2; 表达式3)循环体语句
语句执行过程:
(1)计算表达式 1
(2)判断表达式2的值是否为0,若为0,语句执行结束,若不为0,进入(3)
(3)执行循环体语句(需注意的是循环体语句只能有一个语句,若要包舍多个语句要用一对{}括号来,构成一条复合语句,此处也不要随便加上";",因一个";"可构成一条空语句,这会使得后面真正的循环体语句不属于for 循环语句的部分)进入(4)
(4)计算表达式3,然后重新进入(2)
例如:
#include <stdio.h>
int main(void)
{
int sun,s;
int i;
sum= 0 ;
for(i=1;i<52;i++)
{
if(i%2==0)
{
s = -1;
}
else
{
s = 1;
}
sum += (2*i-1)*s;
}
printf("sum of (1-3+5-7+...-99+101) is: %d\n",sum);
return 0;
}
2.while语句、do while语句
·while循环体语句
执行过程:
(1)判断表达式的值是否为非0,若是进入(2),否则结束语句执行。
(2)执行循环体语句,重新回到 (1)
·do循环体语句while(表达式)
执行过程:
(1)执行循环体语句,进入(2)
(2)判断表达式的值是否为非0,若是重新回到(1),否则结束语句执行。
*这里要注意的地方跟for 语句一样,即循环体语句只能有一个语句,若要包含多个语句要用一对{}括起来,构成一条复合语句,此处也不要随便加上";",因一个";"可构成一条空语句,这会使得后面真正的循环体语句不属于while循环语句的部分,另外do while循环的while(表达式)后是要加";"的。
3.break语句
放在循环体内实现的功能是结束其所在的那层循环的执行。
四、分支和转跳
1. if (表达式)语句1 else 语句2
如果if语句的圆括号内的表达式值为非0,则执行语句 1,值为0则执行语句2。
表达式可为任意表达式,if计语句执行的实质是判断表达式的值是否为0来决定执行语句1还是语句2。
语句1和语句2都只能是一个语句,若要跟多条语句,切记用一对{}括起来,构成复合语句;也不要随便在圆括号后加";",
因";"构成一条空语句,这会使后面跟的语句1不再属于 if语句的组成部分。
·if语句的三种结构
(1)单边:if(表达式)语句
(2)双边:if(表达式)语句1clse 语句2 (3)多层(重点掌握):
if(表达式1)语句 1
else if(表达式2)语句 2
else if(表达式3)语句 3 ...
eise 语句 n
•条件运算符 表达式 1?表达式2:表达式3
若表达式1的值非0,则取表达式2的值做为整个表达式的值,否则取表达式3的值为整个表达式的值。如 3>4?1:2 该表达式的值为2
2.switch语句
switch(表达式)
{
case 表达式1:语句
case 表达式2:语句
...
case 表达式n:语句
default:语句
}
语句执行过程:先计算表达式的值,然后判断该值与表达式1到表达式n中的哪个相等,若与表达式i的值相等,则执行表达式i后的所有语句,当遇到break;语句时结束整个switch 语句的执行。表达式1到表达式n的值都不相等的情況下执行 default 后跟的语句。每个case后可跟多条语句。
五 、函数
函数类型 函数名(形式参数列表)
{ 内部变量定义和声明部分
执行语句 }
int max (int x,int y)
{ int z;
z=x>y?x:y;
return (z) ;
}
注意点
(1)函数类型是指返回值的类型,即要与return语句后跟的表达式的值的类型一致。若函数类型为void则说明该函数无返回值,即函数体里可以不出现return语句
(2)形式参数列表里定义的变量要记得给它们指定类型,而且如果同时要定义多个,应在每个前面都分别指定类型名,而不能写成 int x,y;
(3)函数体里能写的语句跟main函数一样,在开头可定义所需要的变量,后面跟上一堆执行语句。
·函数调用流程
以上面的函数为例,在main 函数进行调用:
void main()
{ int a,b,c;
scanf("%d%d",&a,&b);
printf ( "%d",max(a,b));或c=max(a,b);printf("%d" ,c) }以上两种方法
都会在屏幕中打印出a,b间的较大值。
六、数组
1.一维数组
类型名 数组名1[exp],数组名2[exp], ... 其中:exp为常量表达式
如: int A[10],b[5]; char c[8];
float X[20],y[4*M+1],w[5];(M为符号常量)
注意:
1)数组名命名规则和简单变量名相同;
2)数组名后只能是方括号括起来的常量装达式(常量和符号常量)
3) 常量表达式的值确定数组元素的个数。
·一维数组的初始化
2.二维数组
二维数组可以看作一种特殊的一维数组:
它的元素又是一个一维数组。
如:int a[3][4];
可将a数组看作是一个一维数组,它有3个元素:a[0]、a[1]、a[2],每个元素又是一个包含4个元素的一维数组。
二维数组的输入输出
七、结构体、联合体
1.结构体
结构体类型的定义及变量的定义
struct 结构体名
{ 类型 成员1;
类型 成员2; ...
类型 成员n;
}变量名;
如
struct student
{ long num;
char name[10];
int score[4];
}
定义类型时同时定义变量
struct student 定义类型后,用类型名定义变量
还有一种
struct
{ long num;
char name [1];
int score[4];
}
不给类型名,直接定义变量
2.共用体
共用体类型的定义及变量的定义
union 共用体名
{ 类型成员名1; ...
类型 成员名n; }
变量的定义与结构体类似,也有三种方法。
union data
{
int i;
char ch;
float f;
}dl;定义类型时同时定义变量
union data d2;定义类型后,用类型名定义变量
union
{
int i;
char ch;
float f; i
}d3;不给类型名,直接定义变量
·共用体变量所占字节数:各成员所占字节数的最大值,如上d1,d2,d3 所占字节数皆为4
·共用体变量成员的访问
1.共用体变量名 成员名如dl.i
2.使用共用体类型的指针:
(共用体指针名).成员 或 共用体指针名->成员名
union data *dd; dd=&d1; dd->i 或(*dd).i
八、指针
若指针变量存入的是数组元素的地址,则其加一减一得到的是那个数组元素下一个或前一个元素的地址。
int a[ 10]; p=&a[3];
*p得到的是a[3]的值。
若p++;此时p存放的是a[4]的地址&a[4];*p得到的就是 a[4]的值.
或p--;此时p存放的是a[2]的地址&a[2];*p得到的就是a[2]的值.
通过指针变量访问整型变量
九、宏定义
1.无参宏定义
#define 标识符 值 定义后,出现所定义的标识符的地方都将以定义时指定的值来代替。
#define M 2+3
main()
{ int x;
x=M*M;则x的值为 2+3*2+3=11 若想得到的结果是(2+3)*(2+3)则定义时也写成这样 #define M (2+3)
}
注意#define、标识符、值之间都要用空格隔开,且宏定义结尾不需加分号。
2.带参宏定义
#define 标识符(参数表)值
#define S(x,y) x*y
main()
{ int a=3,b=4,c=5,d=6;
printf("a*b=%d\n",S(a,b));//此时会打印出 a*b=12
printf("a+b*c+d=%d\n”,S(atb,c+d));//此时会打印出 a+b*c+d=29
}
带参宏定义执行时是将a+b这样一个表达式代替x,c+d这样一个表达式代替y,所以 S(a+b.c+d)进行的是a+b*c+d 的运算,而不是将a+b 的值给x,c+d 的值给 y然后再做 x*y,这点跟函数调用传递参数是不一样的。