c语言基础

C语言中的符号
运算符的种类C语言的运算符可分为以下几类:
1.算术运算符★用于各类数值运算(共七种)
加 +   减 -   乘 *   除 /   求余(或称模运算)%   自增 ++   自减 --
+= :加赋值运算符。如a+=3+1,  等价于 a=a+(3+1)。  -= :减赋值运算符。如a-=3+1,  等价于 a=a-(3+1)。  *= :乘赋值运算符。如a*=3+1,  等价于 a=a*(3+1)。 /=  :除赋值运算符。如a/=3+1,  等价于 a=a/(3+1)。 %= :取余赋值运算符。如a%=3+1, 等价于 a=a%(3+1)。
复合赋值运算符的作用是先将复合运算符右边表达式的结果与左边的变量进行算术运算,然后再将最终结果赋予左边的变量。所以复合运算要注意:  一、是复合运算符左边必须是变量;  二、是复合运算符右边的表达式计算完成后才参与复合赋值运算。  复合运算符常用于某个变量自身的变化,尤其当左边的变量名很长时,使用复合运算符书写更方便。 
Eg 1:赋值运算符的演示:
#include <stdio.h> 
void main() 
{  
int nA=10;
int nB=10;   
printf("%d\t",nA+=nA-=nA*nA);  
printf("%d ",nB+=nB-=nB*=nB);
}
运行结果: -180  0  
(在C语言中,运算符“+”、“-”、“*”和“/”的用法与大多数计算机语言的相同,几乎可用于所有C语言内定义的数据类型。当“/”被用于整数或字符时,结果取整。例如,在整数除法中,10/3=3。
一元减法的实际效果等于用-1乘单个操作数,即任何数值前放置减号将改变其符号。模运算符“%”在C语言中也同它在其它语言中的用法相同。切记,模运算取整数除法的余数,所以“%”不能用于float和double类型。) 
自增运算符和自减运算符
自增和自减运算符是C++语言所特有的,主要用于给一个变量加1或减1。自增和自减运算符及其功能如下: + +:自增运算符。如a++; ++a;都等价于a=a+1。  - -:自减运算符。如a- -;  - -a;都等价于a=a-1。   自增运算符和自减运算符可以放到变量前面(前置方式)或者后面(后置方式),这两种方式同样实现了变量的自增或自减运算。但是当变量的自增运算或者自减运算同其它运算符配合构成一个表达式时,前置运算时变量先做自增或自减运算,再将变化后的变量值参加表达式中的其它运算。后置运算时变量在参加表达式中的其它运算之后,再做自增或自减运算。
Eg 2:前置与后置运算符的区别:  
 #include <stdio.h>
void main() 
{  
int nNum1,nNum2;  
nNum1=nNum2 = 5;  
printf("\nPost Pre");   
printf("\n%d %d",nNum1--,--nNum2);  
printf("\n%d %d",nNum1--,--nNum2);  
printf("\n%d %d",nNum1--,--nNum2);  
printf("\n%d %d",nNum1--,--nNum2);  
printf("\n%d %d\n",nNum1--,--nNum2);  
}
运行结果: Post Pre 
5 4 
4 3 
3 2 
2 1 
1 0  
C语言中有两个很有用的运算符,通常在其它计算机语言中是找不到它们的—自增和自减运算符,++和--。运算符“++”是操作数加1,而“--”是操作数减1,换句话说:x=x+1;同++x;x=x-1;同--x;
自增和自减运算符可用在操作数之前,也可放在其后,例如:x=x+1;可写成++x;或x++;但在表达式中这两种用法是有区别的。自增或自减运算符在操作数之前,C语言在引用操作数之前就先执行加1或减1操作;运算符在操作数之后,C语言就先引用操作数的值,而后再进行加1或减1操作。请看下例:
x=10;
;y=++x;
此时,y=11。如果程序改为:
x=10;y=x++;
则y=10。在这两种情况下,x都被置为11,但区别在于设置的时刻,这种对自增和自减发生时刻的控制是非常有用的。在大多数C编译程序中,为自增和自减操作生成的程序代码比等价的赋值语句生成的代码
要快得多,所以尽可能采用加1或减1运算符是一种好的选择。
。下面是算术运算符的优先级:
:最高++、-
--
-(一元减)
*、/、%最低+、-编译程序对同级运算符按从左到右的顺序进行计算。当然,括号可改变计算顺序。C语言
处理括号的方法与几乎所有的计算机语言相同:强迫某个运算或某组运算的优先级升高。
顺序程序设计举例    
使用计算机解决问题,首先要求把问题描述清楚,需要作什么工作,先作什么,再作什么,达到什么条件后,就表示完成;然后,再把这些步骤编程成计算程序,让计算机来实现。问题的解决步骤叫作算法,算法这一词最早主要是指解决纯数学计算问题,现在可以指解决有关信息处理一切问题的方法与步骤。  
当然,对于计算机用户而言最关心的是程序的输入和输出,算法是程序员要操心的。  
每一个固定的算法有满足两个要求:  
第一,有序性,算法是一组有序的操作步骤的组合,不同的执行顺序会有不同的结果。  
第二,有穷性,一个算法只能有一个输入,一个输出,输入的条件经过有穷的步骤的后,可以得到一个输出结果,不可能无穷无尽的作个没完。  
依据算法,可用计算机语言编写相对应的程序,如果算法中的每一步都是“直线”的执行,没有分支,那么这样编写的程序就是顺序结构的程序,顺序程序是最简单程序结构,也是一些程序的基础。
应用举例  
已知三角形三边,求三角形面积。
#include <stdio.h> 
#include <math.h> 
void main() 
{
  double dbA = 3.0; 
double dbB = 4.0; 
double dbC = 5.0; 
  double dbS = (dbA + dbB + dbC ) / 2;
  double dbArea = sqrt(dbS*(dbS–dbA)*(dbS–dbB)*(dbS– dbC));
printf(―三角形的面积是:%lf\n‖,dbArea); 
}
2.关系运算符(六种)
用于比较运算
大于 >   小于 <   等于 ==   大于等于 >=   小于等于 <=   不等于 !=
3.逻辑运算符
用于逻辑运算(三种)
逻辑与 &&   逻辑或 ||   逻辑非 !
关系运算符中的“关系”二字指的是一个值与另一个值之间的关系,逻辑运算符中的“逻辑”二字指的是连接关系的方式。因为关系和逻辑运算符常在一起使用,所以将它们放在一起讨论。关系和逻辑运算符概念中的关键是True(真)和Flase(假)。C语言中,非0为True,0为Flase。使用关系或逻辑运算符的表达式对Flase和Ture分别返回值0或1
关系和逻辑运算符的优先级比算术运算符低,即像表达式10>1+12的计算可以假定是对表达式10>(1+12)的计算,当然,该表达式的结果为Flase。在一个表达式中允许运算的组合。例如:
10>5&&!(10<9)||3<=4
这一表达式的结果为True。
。下表给出了关系和逻辑运算符的相对优先级:
:最高!

>= <=
=== !=
=&&
最低||同算术表达式一样,在关系或逻辑表达式中也使用括号来修改原计算顺序。切记,所有关系和逻辑表达式产生的结果不是0就是1,所以下面的程序段不仅正确而且
将在屏幕上打印数值1。
int x;
;x=100;
;printf("%d",x>10);
4.位操作运算符★参与运算的量,按二进制位进行运算(六种)
位与 &   位或 |   位非 ~   位异或 ^   左移 <<   右移 >>  。
与其它语言不同,C语言支持全部的位操作符(BitwiseOperators)。因为C语言的设计目的是取代汇编语言,所以它必须支持汇编语言所具有的运算能力。位操作是对字节或字中的位(bit)进行测试、置位或移位处理,这里字节或字是针对C标准中的char和int数据类型而言的。位操作不能用于float、double、longdouble、void或其它复杂类型。位操作中的AND、OR和NOT(1的补码)的真值表与逻辑运算等价,唯一不同的是位操作是逐位进行运算的。
 
位操作通常用于设备驱动程序,例如调制解调器程序、磁盘文件管理程序和打印机驱动程序。这是因为位操作可屏蔽掉某些位,如奇偶校验位(奇偶校验位用于确保字节中的其它位不会发生错误通常奇偶校验位是字节的最高位)。


通常我们可把位操作AND作为关闭位的手段,这就是说两个操作数中任一为0的位,其结果中对应位置为0。例如,下面的函数通过调用函数read_modem(),从调制解调器端口读入一个字符,并将奇偶校验位置成0。
 
字节的位8是奇偶位,将该字节与一个位1到位7为1、位8为0的字节进行与操作,可将该字节的奇偶校验位置成0。表达式ch&127正是将ch中每一位同127数字的对应位进行与操作,结果ch的位8被置成了0。在下面的例子中,假定ch接收到字符"A"并且奇偶位已经被置位。
 
一般来说,位的AND、OR和XOR操作通过对操作数运算,直接对结果变量的每一位分别处理。正是因为这一原因(还有其它一些原因),位操作通常不像关系和逻辑运算符那样用在条件语句中,我们可以用例子说明这一点:假定X=7,那么x&&8为Ture(1),而x&8却为Flase(0)。
记住,关系和逻辑操作符结果不是0就是1。而相似的位操作通过相应处理,结果可为任意值。换言之,位操作可以有0或1以外的其它值,而逻辑运算符的计算结果总是0或1。
移位操作符>>和<<将变量的各位按要求向或向左移动。右移语句通常形式是:
variable>>右移位数
左移语句是:
variable<<左移位数
当某位从一端移出时,另一端移入0(某些计算机是送1,详细内容请查阅相应C编译程序用户手册)。切记:移位不同于循环,从一端移出的位并不送回到另一端去,移去的位永远丢失了,同时在另一端补0。
移位操作可对外部设备(如D/A转换器)的输入和状态信息进行译码,移位操作还可用于整数的快速乘除运算。(假定移位时补0),左移一位等效于乘2,而右移一位等效于除以2。
 
每左移一位乘2,注意x<<2后,原x的信息已经丢失了,因为一位已经从一端出,每右移一位相当于被2除,注意,乘后再除时,除操作并不带回乘法时已经丢掉的高位。反码操作符为~。~的作用是将特定变量的各位状态取反,即将所有的1位置成0,所有的0位置成1。位操作符经常用在加密程序中,例如,若想生成一个不可读磁盘文件时,可以在文件上做一些位操作。最简单的方法是用下述方法,通过1的反码运算,将每个字节的每一位取反。
原字节 00101100
第一次取反码 11010011
第二次取反码 00101100
注意,对同一行进行连续的两次求反,总是得到原来的数字,所以第一次求反表示了字
节的编码,第二次求反进行译码又得到了原来的值。可以用下面的函数encode()对字符进行编码。
C语言提供了一个可以代替某些if-then-else语句的简便易用的操作符?。该操作符是三元的,其一般形式为:
EXP1?EXE2:EXP3
3
EXP1,EXP2和EXP3是表达式,注意冒号的用法和位置。
操作符“?”作用是这样的,在计算EXP1之后,如果数值为True,则计算EXP2,并将结果作为整个表达式的数值;如果EXP1的值为Flase,则计算EXP3,并以它的结果作为整个表达式的值,请看下例:
x=10;
;y=x>9?100:200;
例中,赋给y的数值是100,如果x被赋给比9小的值,y的值将为200,若用if-else语句改写,有下面的等价程序:
x=10;if(x>9)y=100;
;elsey=200;
;5.赋值运算符★用于赋值运算(三类共十一种)
简单赋值 =
复合算术赋值  
复合算术赋值       举例
+= 
-= 
*=  
/=  
%= 


   在赋值表达式中,如果表达式左边的变量重复出现在表达式的右边,如:
 i = i+2  
则可以将这种表达式缩写为下列形式: 
i += 2  
其中的运算符+=称为赋值运算符。  
大多数二元运算符(即有左、右两个操作数的运算符,比如+)都有一个相应的赋值运算 符op=,其中,op可以是下面这些运算符之一:
 + - * / % << >> & ^ | 
如果expr1和expr2是表达式,那么 
expr1 op= expr2  
等价于:  
expr1 = (expr1) op (expr2) 
 它们的区别在于,前一种形式expr1只计算一次。注意,在第二种形式中,expr2两边的圆 括号是必不可少的,例如, 
x *= y + 1 的含义是: 
x = x * (y + 1) 而不是  
x = x * y + 1  
我们这里举例说明。
下面的函数bitcount统计其整型参数的值为1的二进制位的个数。 
/* bitcount: count 1 bits in x */
 int bitcount(unsigned x)
 {  
int b; 
for (b = 0; x != 0; x >>= 1)
if (x & 01) 
b++; 
return b;
}  这里将x 声明为无符号类型是为了保证将x 右移时,无论该程序在什么机器上运行,左边空  
出的位都用0(而不是符号位)填补。 
 除了简洁外,赋值运算符还有一个优点:表示方式与人们的思维习惯比较接近。我们通 常会说“把2 加到i 上”或“把i 增加2”,而不会说“取i 的值,加上2,再把结果放回到  i中”,因此,表达式i += 2比i = i + 2更自然,另外,对于复杂的表达式,例如: 
yyval[yypv[p3+p4] + yypv[p1+p2]] += 2  
赋值运算符使程序代码更易于理解,代码的阅读者不必煞费苦心地去检查两个长表达式 是否完全一样,也无须为两者为什么不一样而疑惑不解,并且,赋值运算符还有助于编译器 产生高效代码。  
从上述例子中我们可以看出,赋值语句具有值,且可以用在表达式中。下面是最常见的一个 例子:      
while ((c = getchar()) !=EOF)  
其它赋值运算符(如+=、-=等)也可以用在表达式中,尽管这种用法比较少见。  在所有的这类表达式中,赋值表达式的类型是它的左操作数的类型,其值是赋值操作完 成后的值,  
复合位运算赋值
复合位运算赋值         举例
&=            a&=0*11等价于a&0*11
 |= 
 ^=            a^=0*11等价于a=a^0*11
 >>=           a>>=0*11等价于a=a>>0*11
 <<=           a<<=0*11等价于a=a<<0*11
6.条件运算符★这是一个三目运算符,用于条件求值
     ?:
7.逗号运算符★用于把若干表达式组合成一个表达式

作为一个操作符,逗号把几个表达式串在一起。逗号操作符的左侧总是作为void(无值),这意味着其右边表达式的值变为以逗号分开的整个表达式的值。例如:
x=(y=3,y+1);
这行将3赋给y,然后将4赋给x,因为逗号操作符的优先级比赋值操作符优先级低,所以必须使用括号。实际上,逗号表示操作顺序。当它在赋值语句右边使用时,所赋的值是逗号分隔开的表中最后那个表达式的值。例如,
y=10;x=(y=y-5,25/y);
执行后,x的值是5,因为y的起始值是10,减去5之后结果再除以25,得到最终结果。
。在某种意义上可以认为,逗号操作符和标准英语的and是同义词。
8.指针运算符★二种运算
取内容 *    取地址 &
9.求字节数运算符★用于计算数据类型所占的字节数
sizeof
10.特殊运算符
括号 ()   下标 []   成员-> 


C语言符号意义大全  
  32个关键字及其含义: 
auto :声明自动变量 一般不使用 可以显式的声明变量为自动变量只要不是声明在所有函数文前的变量即使没有加auto关键字也默认为自动变量。并且只在声明它的函数内有效。而且当使用完毕后它的值会自动还原为最初所赋的值。自动变量使用时要先赋值因为其中包含的是未知的值例如
:auto int name=1


double :声明双精度变量或函数  它的范围为8个字节14位为小数位。也可使用更高精度的long double.它的范围则更大达到10字节。例
 double name


int: 声明整型变量或函数int为整数型。注意在16位和32位系统中它的范围是不用的。16位中占用2个字节32位中占用4个字节。还可以显式的声明为无符号或有符号unsigned int signed int.有符号和无符号的区别就是把符号也当作数字位来存储也可以用short和long来声明为短整型或长整行例int mum


struct:声明结构体变量或函数  结构体可以包含各种不类型的量。比如可以把整型字符型等类型的变量声明在同一个结构体种使用的时候使用结构体变量直接可以调用。例
 struct some{
 int a=1;
 float b=1.1
 double=1.1234567
 }KKK; 
这样就可以使用KKK.a来使结构体中的成员变量了。也可以显式的用struct 
some aaa,bbb;来声明多个结构变量。


break:跳出当前循环  用来表示中断。一般用来循环中判断是否满足条件然后中断当前循环。例
break;


else :条件语句否定分支  常用来配合if一起使用例
 if a==b
 k=n
 else
 k=s
  
long :声明长整型变量或函数    比如long int long double.
   
switch :用于开关语句   条件选择语句常用来判断用户选择的条件来执行特定语句。例
 switch(name)
 {
 case ok:
 printf(&quot;yes,ok!&quot;);
 break;
 case no:
 printf(&quot;oh,no!&quot;)
 default:
 printf(&quot;error..!&quot;)
 break;
 }
case:开关语句分支   配合switch一起使用例子同上。 
enum :声明枚举类型  用来声明枚举变量例如
 enum day{one,two,three,four,five,six,seven};
    
register:声明寄存器变量   也为局部变量只在声明它的函数内有效。它是保存寄存器中的速度要快很多。对于需要频繁使用的变量使用它来声明会提高程序运行速度。例register int name=1
  
typedef:用以给数据类型取别名(当然还有其他作用)类型重定义可以重定义类型例
 typedef unsigned int u_int;//将无符号整数定义为u_int.
char :声明字符型变量或函数  。它的范围通常为1个字节。它在内存中是以ASC||玛来表示运算。也可使用无符号或有符号来定义。signed char unsigned char.例
 char C
extern:声明变量是在其他文件正声明(也可以看做是引用变量)用时声明在main函数之前的变量也叫全局变量。它可以在程序任何地方使用。程序运行期间它一直存在的。全局变量也会初始化为0例extern int name
    
return :子程序返回语句(可以带参数,也看不带参数)  返回语句。可以返回一个值。当我们定义一个函数为有返回值的时候则必须返回一个值  
union:声明联合数据类型   定义联共体。用法与struct
相同。不同的是共同的是共用体所有成员共享存储空间例
 unio kkk{
 int a;
 float b;
 }kka;
const :声明只读变量   定义为常量例const int a;//变量a的值不能被改变。
21)unsigned:定义为无符号的变量默认变量都为有符号的除非显示的声明
为unsigned的。
float:声明浮点型变量或函数  。float浮点型也叫实型。它的范围固定为4个字节。其中6位小数位其他为整数位。例float name


short :声明短整型变量或函数  用于声明一个短整型变量例
short int a;
unsigned:声明无符号类型变量或函数   
continue:结束当前循环,开始下一轮循环  用来表示跳过其后面的语句继续下一次循环。例continue;
for:循环语句。可以指定程序循环多少次例
 for (int i=0;i&lt;5;i++)
 {
 printf (&quot;程序将输出5次这段话&quot;);
 }
        
signed:将变量声明为有符号型默认变量就为signed型。一般
可省略。
void :声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用)   default:开关语句中的“其他”分支  空间型一般用于声明函数为无返回值或无参数。 
goto:无条件循环语句例
 
int i=1;
 w_go;
 i++
 if (i&lt;5)
 goto w_go
 else
 printf(&quot;%d&quot;;i);      
sizeof:用来获取变量的存储空间大小例
 int a,b;
 b=sizeof(a);
volatile:说明变量在程序执行中可被隐含地改变   定义为volatile的变量是说这个变量可能会被意想不到地改变,这样编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。
volatile变量主要用在以下几个方面:
(1)并行设备的硬件寄存器(如状态寄存器);
(2)一个中断服务子程序中会访问到的非自动变量;
(3)多线程应用中被几个任务共享的变量
do :循环语句的循环体  一与while语句配合使用构成的形式如
do while或while do;例见while语句。
while :循环语句的循环条件  循环控制语句。计算机的一种基本循环模式。当满足条件时进入循环,不满足跳出。
只要表达式为真就一直循环例
 do
 int a=1
 while (a&gt;1)
 printf (&quot;a&gt;1&quot;);
static :声明静态变量  可以显式的声明量为静态变量。也为局部变量。只在声明它的函数内有效。它的生命周期从程序开始起一直到程序结束。而且即
使使用完毕后它的值仍不还原。即使没有给静态变量赋值它也会自动初始化为0例static int name=1
if:条件语句   判断语句用来判断语句是否满足条件例
if a==b
 k=n
default:用于在switch语句中。定义默认的处理用法见switch.


   
二、C语言中的9中控制语句    
 goto语句:无条件转向;  
if语句:判断语句;  
while循环语句;   
do-while语句:先执行循环体,然后判断循环条件是否成立. 之后继续循环;  
for语句:循环,可替代
while语句; 只是用法不同;   
break语句跳出本层的循环;(只跳出包含此语句的循环)   
continue语句:继续(一般放到循环语句里,不在执行它下面的语句,直接跳到判断语句例:for语句,就直接跳到第二个分号处,while语句,就直接跳到while()的括号里;  
switch语句:多相选择;  
return语句:返回;  


C语言符号控制命令表
编译指令  
 
编译指令 说明     
#include 包含另一个文件     
#define 定义一个宏(macro)或是常量   
#undef 取消一个宏常量的定义     
#asm和#endasm 在程序中加入汇编语言的程序   
#ifdef、#ifndef、#else、#endif 用于条件式的编译     
注解://—单行注解;/*多行注解*/    




基本数据类型 (int,float,double,char,void)  
 
数据类型 类型说明 长度(位) 数据长度     
bit 1 0,1     
char 字符 8 —128~127   
unsigned char 无符号字符 8 0~255     
signed char 有符号字符 8 —128~127   
int 整型 16 —32768~32767   
short int 短整型 16 —32768~32767   
unsigned int 无符号整型 16 0~65535     
signed int 有符号整型 16 —32768~32767   
 long int 长整型 32 —2147483648~2147483647   
unsigned long int 无符号长整型 32 0~4294967295     
signed long int 有符号长整形 32 —2147483648~2147483647   
float 浮点数(实数) 32 0.175e-38~0.402e38   
double 双精度浮点 32 0.175e-38~0.402e38   
void 0 没任何数据    


用户自定义数据类型格式 
 typedef struct{  
数据类型      变量序列1;  
数据类型      变量序列1; 
... 
 }自定义数据类型的名称;  
保留字  _at_,alien,bdata,break,bit,case,char,code,compact,const,continue,data,  default,do,double,far,else,enum,extern,float,for,goto,if,funcused,idata,int, inline,interrupt,large,long,pdata,_priority_,reentrant,return,sbit,sfr,sfr16, short,sigend,sizeof,small,static,struct,switchc_task_,typedef,using,union, unsigned,void,volatile,while,xdata  
C的数据类型
分为:基本类型   构造类型   指针类型   空类型


基本类型的分类及特点
 
类型说明符 字节 数值范围   
字符型char 1 C字符集   
基本整型int 2 -3276832767   
短整型short int 2 -32768~32767   
长整型 long int 4 -214783648~214783647   
无符号型 unsigned 2 0~65535   
无符号长整型 unsigned long 4 0~4294967295   
单精度实型 float 4 3/4E-38~3/4E+38   
双精度实型 double 8 1/7E-308~1/7E+308  




常量后缀
L或l 长整型
U或u 无符号数
F或f 浮点数
常量类型
整数  长整数  无符号数  浮点数  字符  字符串  符号常数  转义字符












数据类型转换
·自动转换
在不同类型数据的混合运算中,由系统自动实现转换, 由少字节类型向多字节类型转换。 不同类型的量相互赋值时也由系统自动进行转换,把赋值号右边的类型转换为左边的类型。
·强制转换
由强制转换运算符完成转换。


运算符优先级和结合性
一般而言,单目运算符优先级较高,赋值运算符优先级低。 算术运算符优先级较高,关系和逻辑运算符优先级较低。 多数运算符具有左结合性,单目运算符、三目运算符、 赋值


表达式
表达式是由运算符连接常量、变量、函数所组成的式子。 每个表达式都有一个值和类型。 表达式求值按运算符的优先级和结合性所规定的顺序进行。




 
表示输出类型的格式字符 格式字符意义   
d 以十进制形式输出带符号整数(正数不输出符号)   
o 以八进制形式输出无符号整数(不输出前缀O)   
x 以十六进制形式输出无符号整数(不输出前缀OX)   
u 以十进制形式输出无符号整数   
f 以小数形式输出单、双精度实数   
e 以指数形式输出单、双精度实数   
g 以%f%e中较短的输出宽度输出单、双精度实数   
c 输出单个字符   
s 输出字符串  






标志字符为-、+、#、空格四种,其意义下表所示:
 
标志格式字符 标 志 意 义   
- 结果左对齐,右边填空格   
+
输出符号(正号或负号)空格输出值为正时冠以空格,为负时冠以负
  
#


对c,s,d,u类无影响;对o类, 在输出时加前缀o       
对x类,在输出时加前缀0x;对e,g,f 类当结果有小数时才给出
小数点  




格式字符串


格式字符串的一般形式为:
 %[*][输入数据宽度][长度]类型 其中有方括号[]的项为任选项。各项的意义如下:
类型
表示输入数据的类型,其格式符和意义下表所示。
 
格式 字符意义   
d 输入十进制整数   
o 输入八进制整数   
x 输入十六进制整数   
u 输入无符号十进制整数   
f或e 输入实型数(用小数形式或指数形式)   
c 输入单个字符   
s 输入字符串  






转义字符
转义字符是一种特殊的字符常量。转义字符以反斜线”\”开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。例如,在前面各例题printf函数的格式串中用到的“\n”就是一个转义字符,其意义是“回车换行”。转义字符主要用来表示那些用一般字符不便于表示的控制代码。
常用的转义字符及其含义
 
转义字符 转义字符的意义   
\n 回车换行   
\t 横向跳到下一制表位置   
\v 竖向跳格   
\b 退格   
\r 回车   
\f 走纸换页   
\\ 反斜线符”\”   
\’ 单引号符   
\a 鸣铃   
\ddd 1~3位八进制数所代表的字符   
\xhh 1~2位十六进制数所代表的字符  
广义地讲,C语言字符集中的任何一个字符均可用转义字符来表示。表2.2中的\ddd和\xhh正是为此而提出的。ddd和hh分别为八进制和十六进制的ASCII代码。如\101表示字?quot;A” ,\102表示字母”B”,\134表示反斜线,\XOA表示换行等。转义字符的使用
在C语言中,对变量的存储类型说明有以下四种:
auto     自动变量
register   寄存器变量
extern    外部变量
static    静态变量
  自动变量和寄存器变量属于动态存储方式, 外部变量和静态变量属于静态存储方式。在介绍了变量的存储类型之后, 可以知道对一个变量的说明不仅应说明其数据类型,还应说明其存储类型。 因此变量说明的完整形式应为: 存储类型说明符 数据类型说明符 变量名,变量名…; 例如:
static int a,b;           说明a,b为静态类型变量
auto char c1,c2;          说明c1,c2为自动字符变量
static int a[5]={1,2,3,4,5};    说明a为静整型数组
extern int x,y;           说明x,y为外部整型变量
与指针有关的各种说明和意义见下表。
int *p;     p为指向整型量的指针变量
int *p[n];   p为指针数组,由n个指向整型量的指针元素组成。
int (*p)[n];  p为指向整型二维数组的指针变量,二维数组的列数为n
int *p()    p为返回指针值的函数,该指针指向整型量
int (*p)()   p为指向函数的指针,该函数返回整型量
int **p     p为一个指向另一指针的指针变量,该指针指向一个整型量。


指针变量的赋值
p可以有以下两种方式:
(1)指针变量初始化的方法 int a;
int *p=&a;
(2)赋值语句的方法 int a;
int *p;
p=&a;


(1)取地址运算符&
(2)取内容运算符*






C语言符号控制命令表 
 常量表示法 
 
 常数 规则 范例     
十进制 一般十进制格式 1234567890   
二进制 开头加上0b 0b00001110   
八进制 开头加上O O0123   
十六进制 开头加上0x 0xFF45   
无符号整数常量 结尾加上U 30000U   
长整数常量 结尾加上L 299L   
无符号长整数常量 结尾加上UL 327800UL   
浮点数的常量 结尾加上F 4.234F   
字符常量 以单引号括起来 „a‟   
字符串常量 以双引号括起来 “hello”  


运算符
-------------------算术运算----------------------------------------------  
 
运算符 说明 范例 执行结果     
+ c=a+b; c 等于10   
- d=a—b; d 等于6   
* e=a*b; e 等于16   
/ f=a/b; f 等于4   
% 取余数 g=a%b; g 等于0   
++ 加1 c++;相当于c=c+1; c 等于11     
-- 减1 d——; 相当于d=d—1; d 等于5   
= 等于 a=8; 设置a等于8   
+= 先相加在等于 e+=5;相当于e=e+5; e 等于21   
-= 先相减在等于 f—=5;相当于f=f—5; f 等于—1   
*= 先相乘在等于 b*=5;相当于b=b*5; b 等于0   
/= 先相除在等于 a/=5;相当于a=a/5; a 等于1     
%= 先取余数在等于 a%=5;相当于a=a%5; a 等于3    
假设a等于8,b等于2  










比较运算  
 
运算符 说明 范例 执行结果     
== 等于 a==5 F   
!= 不等于 a!=5 T   
< 小于 a<5 F   
> 大于 a>5 T   
<= 小于等于 a<=5 F   
>= 大于等于 a>=5 T    
※比较运算结果是个布尔值既TRUE(真值)或FALSE(假值)。假设a等于8
C语言符号控制命令表  
------------------逻辑运算-----------------------------------------  
 
运算符 说明 范例 执行结果     
&& AND (a>5)&&(a<10) T   
|| OR (a<5)||(a>10) F   
! NOT !(a>10) T  
※逻辑运算结果是个布尔值既TRUE(真值)或FALSE(假值)。假设a等于8  


位逻辑运算 


 
 
运算符 说明 范 例 执行结果     
& AND a&0x01 a等于1     
| OR a|0x80 a等于0x85   
~ NOT ~a a等于0xFA   
^ XOR a^0xFF a等于0xFA   
<< 左移 a<<1 a等于0x0A   
>> 右移 a>>1 a等于0x0A    
假设a等于5
if语句  
if(条件)   语句1;    
else     语句2;  
例:if(d==4) d=0;       //如果d等于4就设置d等于0 
else d++;              //否则就将d加1     
if(ticks==0) {           //如果ticks等于0  
ticks=1000;            //ticks 设置成1000 
counter[0]++;          //counter[0]加1    
 }    


嵌套if语句  
例:if(counter[0]==10) {  
counter[1]++; 
counter[0]=0;  
if(counter[1]==10) {   
counter[2]++;   
counter[1]=0; 

}    


switch语句  
switch (变量) {      
case 常量1:语句1; break;    
case 常量2:语句2; break;    
case 常量3:语句3; break;    
......     
default ; 语句n;
 }


C语言符号控制命令表  
for循环  
for (初值,条件,变化值) 语句;  
例:for(i=0;i<10;i++) x=x+i;   
    for(i=1;i<10,i++)  
for(j=1;j<10,j++)    
printf(“%d %d”,i,j); 
无穷循环: 
for( ; ; );   




while循环   
while (条件) 语句;  
例:while (ch!=!‟A‟) ch=getche();    
无穷循环:    
while(1);   


do/while循环 
do { 
语句; 
...  
} while(条件);  
例:do {     
ch=getche();  
} while (ch!=”A”);   


goto语句  
loop1:  
x++;  
if(x<100) goto loop1;  
指针和函数
指针的定义  
数据类型     *指针变量的名字;  例: char     *p;  
int      *x;    
指针与数组  
例: char                   filename[80];  
char                        *p;  
p=filename;           //指针p存放filename的开始地址   
int                      x[5]={1,2,3,4,5};  
int                        *p,sum,i;  
p=x;                     //指针p存放数组x的开始地址 for(i=0;i<5;i++)     
sum=sum+p[i];               //p[i]相当于x[i]   
 C语言符号控制命令表
指针的运算  
1.针变量前面加上*号就是取得指针所指向位置的内容。 
例:int              x[5]={1,2,3,4,5};  
int              *p;  
p=x;            //指针p存放数组x的开始地址 
*p=10;           //相当于设置x[0]等于10 
2.变量前面加上&符号,可以取得一个变量的位置。 
例:int           x,y;      
int                *p;      
p=&x;     //指针p存放x的地址,相当于p是指向x 的指针     
*p=1;           //相当于设置x等于1 
3.&符号也可以加在数组的前面 
例:int                x[5];      
int                  *p;      
p=&x[2];        //指针p存放x[2]的地址,相当于p是指向x[2]的指针     
*p=50;             //相当于设置x[2]等于50  
函数  
函数类型    函数名称(参数序列); 
参数说明 
{          
函数的主体 
}  
例:void delay (void) {               //不返回任何数据的函数  
unsigned char i,j;             //没有任何参数的函数   for(i=0,i<255,i++)      
for(j=0,j<255,j++);
 }  
main() 
{  
...    
delay();                   //调用函数  
}  
例:unsigned char sum(unsigned chat a,unsigned chat b)  
{    
unsigned chat x;    
check_GLCD_busyflag();     //函数中可以调用另一个函数   x=a+b;    
return x;                 //return会返回x的数据  
}  
中断服务函数  
void 中断服务程序的名称(void) interrupt 中断号码 using 寄存器组号码 
{  
中断服务子程序主体 
}    
 C语言符号控制命令表  
中断号码  
#define IE0_VECTOR          0         //0x03
#define TF0_VECTOR         1          //0x0B 
#define IE1_VECTOR          2          //0x13 
#define TF1_VECTOR          3          //0x1B 
#define SIO_VECTOR          4           //0x23 
对于S51有定时器2  
#define TF2_VECTOR    5   //0x2B  
例:static void xint0_isr(void) interrupt IE0_VECTOR(或0) using 1  
{   
 unsigned char i,j=0xFF;   
for(i=0,i<16,i++)      
{
        j++; 
       P1=j;        //将数值输出到P1口
       delay_4isr(); 

 } 
----------------------------汇编语言-------------------------------------------------- 
 在C中加入汇编语言 
 例:void delay100us()
  { 
  #pragma asm
          mov   r7,#1
  more:   mov   r3,#48
         djnz   r3,$
         djnz   r7,more
  #pragma endasm } 
-----------------------------宏(macro)----------------------------------------------  
宏的定义  
%*define (macro名称) (macro的指令)
  例:%*define (write_1) (
  setb DI 
serb SK 
clr  SK
 ) 
   #define 宏的名称 宏的指令
  例:#define uchar unsigned char
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值