C语言基础学习(1)

 

C语言:

ANSI C 共32关键字

auto

break

case

char

const

continue

default

do

double

else

enum

extern

float

for

goto

if

int

long

register

return

short

signed

static

sizof

struct

switch

typedef

union

unsigned

void

volatile

while

程序书写区分大小写。

 

C语言很难做到面向对象,C++可面向对象,C++可用面向对象将问题空间直接映射到程序空间。

 

每个C语言源程序都必须有一个主函数,即从主函数开始(内部可能包含多个子函数等等).

#include是文件包含命令 .h的文件是头文件

头文件。

通常包含在stdio.h的一些函数,可以不加stdio.h头文件。例如printf,scanf。

C语言规定源程序规定的所有用到的变量必须先说明,后使用。即变量,常量需先定义。

scanf即scan funtion 输入

scanf("%d%d",&x,&y);

printf即print function 输出

printf("maxmum=%d",z);

 

简单比较数字的函数

 

main()

{

  int x,y,z;

  int max(int a,int b);

  printf("input two numbers:\n");

  scanf("%d%d",&x,&y);

  z=max(x,y);

  printf("maxmum=%d",z);

}

int max(int a,int b)

{

 if(a>b) return a;

 else return b;

}

C源程序结构特点

(1)C语言源程序可由一个或多个源文件组成

(2)每个源文件可由一个或多个函数组成

(3)一个源程序必须只能由仅一个main函数开始

(4)预处理命令(include的部分也算)应放在源文件或源程序的前面

(5)每个说明,每个语句必须以分号结尾,但预处理命令,函数头,和花括号}后不能加分号;

(6)标识符,关键字必须至少加一个空格以示间隔。

 

书写规则

(1)1个说明或一个语句占一行

(2)用{}括起来的部分的层次结构第一个字母对齐。

 

C语言字符

小写字母,大写字母 a-z,A-Z 共52个

数字 0-9 共10个

空白符 空格,制表,换行等。

标点和特殊字符

 

C语言词汇

标识符:用于做变量名,函数名,标号等,只能是首字母为字母或下划线的以字母,数字,下划线组成的字符串。

关键字:(ANSI C共32,前面已列举)

(1)类型说明符 例如int double

<1>数据类型

基本数据类型:整形    字符型,浮点型(单精度  双精度),枚举型。

整形:十进制整常数以1-9的数字开头数字使用0-9.八进制整常数必须0做为开头前缀,数字使用0-7.十六进制整常数前缀0X或0x,数值0-9,A-F或a-f。

无符号整常数范围0-2的机器位长次幂-1,有符号则是-2的机器位长的二分之一次幂到2的机器位长二分之一次幂-1.机器现在位长32位,64位等。

八进制16位无符号范围0-0177777,那十六进制是0x0-0xFFFF。

长整形是整形位长2倍。即32位的,长整形是64位。158L和158数值上没区别,只是158L在32位系统中被分配64位空间。无符号也可后缀表示用u或U。

 

如果超过上面范围,则用长整数后缀L或l。

整形变量 数值是以补码形式存在,正数补码和源码相同,负数补码是绝对值的二进制取反加1.

int 基本型 内存中占有1个机器位长

short int 短整 2个字节 简写short

long int 长整,内存中占2个机器位长 简写short

unsigned int  无符号整

unsigned short 无符号短整

unsigned long  无符号长整

 

无符号取值范围从0-2的bite位数次幂-1。有符号数为-2的bite位数/2次幂到2的bite位数/2次幂-1.

整形数据的溢出例如int a=32767;b=a+1;b通过%d显示则为-32768。因为32767为0后面15个1,加1编程1后面15个0,刚好是负数

最小值-32768.基本整形长整形+长整形计算为长整形,int b,b用来显示长整形的话会减掉高位16个字节。

 

浮点型(实型)(1)C语言中只采用十进制由数码0-9和小数点组成 (2)指数形式:由十进制数加阶码标志e或E以及阶码组成。

aEn表示为a*10的n次幂。E字母钱必须有数字。例如-2.8E-2即是-2.8的10的-2次幂。

printf("%f\n",356f);这里的%f是输出浮点数,356f后缀为f或F表示为浮点数即356.和356f是等价的。

 

实型变量 一般占4个字节内存中存放形式是高位第一个位为数符(+,-).再是小数部分和指数,指数位数越多,表示数值范围越大。

float 浮点型  数符1位,尾数部分23位,指数位8位(-128到127)。2^23 = 8388608,一共七位即最多有7位有效数字(即实数的整数部分最多7位),浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的。精度为6-7位有效数字。

double float 双精度浮点型 数符1位,尾数部分52位,指数位11位(-1024到1023)。double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。

long double float 长双精度浮点型不太清楚

其中负指数决定了浮点数所能表达的绝对值最小的非零数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。

  float的范围为-2^128 ~ +2^128(小数部分表示是2的n次方),也即-3.40E+38 ~ +3.40E+38;double的范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。

 

DEVC++里这些信息

#include <stdio.h>

int main()

{

printf("%d\n",sizeof(int));

printf("%d\n",sizeof(short int));

printf("%d\n",sizeof(long int));

printf("%d\n",sizeof(unsigned int));

printf("%d\n",sizeof(unsigned short int));

printf("%d\n",sizeof(unsigned long int));

printf("%d\n",sizeof(float));

printf("%d\n",sizeof(double));//double equals to double float

printf("%d\n",sizeof(long double));//long and double are enough,don‘t need float attached

printf("%d\n",sizeof(char));

}

以上的值分别为4,2,4,4,2,4,4,8,12,1.

 

构造数据类型:数组    结构体  共用体 。

指针类型:

空类型:void,即函数不会返回一个具有数据类型的函数值。

<2>存储类型

(2)语句定义符 例如if,else

(3)预处理命令字  例如include

 

运算符:例如+,-,*,/.

分隔符: C语言中分割符只有逗号和空格两种。逗号常用语分割各个变量。

常量:

数字常量,字符常量,字符串常量,符号常量,转义字符等。

符号常量在C语言中被使用前必须#define 标识符 符号常量来定义,称为宏定义。即例如#define PRICE 30,即PRICE就代表30,其值在作用域内部能再改变,不能再被赋值。

 

字符常量:用单括号引起来的一个字,不能参与运算。

转移字符:常用的如下

\n 回车换行( ASCII码10)   \t横向跳到下一制表符位置(9)    \b 退格(8)

\r 回车(13)  \f 换页(12)   \\ 反斜线(92)   \' 单引号(39)  \"双引号(34)

\a 鸣铃  \ddd 1-3位八进制所代表的字符   \xhh 1-2位十六进制代表的字符。

 

字符串常量:双括号括起来的字符序列。字符串常量所占的内存字节数等于字符串中字符所占字节数+1,单个字符占字节为1.增加的那个字节用来存放'\0'(ASCII码0(十进制))表示字符串结束标志。

 

 

变量:

字符变量:char 为说明符

内存空间为1个字节,即0-255(十进制)的ASCII码。例如int a=120,%c 来输出a的时候是'x',char a=120;%d 来输出a则是120。

还可参数整数运算即相当于用0-255的十进制ASCII码来运算。

 

注释符:以/*开头*/结尾

各类数值型数据间的混合运算规则:

变量的数据类型是可以转换的。有两种方法自动转换和强制转换。自动转换是非人为强加,混合运算中由编译系统自动完成,遵循规则如下,(1)参与运算变量的类型不同,先转换为同一类型,然后再运算 (2)转换按数据长度增加的方向进行,保证精度不降低。(3)所有浮点运算都以双精度进行,即使含float单精度运算的表达式,也先转为double型。(4)char和short参与运算时必须先转换为int型(5)赋值运算中,赋值号两边数据类型不同时,赋值号右边的类型将转换为左边变量的类型。(6)转换优先级

char,short-->int --->unsigned int-->long-->double.

 

强制类型转换为(类型说明符) (表达式).表达式可以是数值常量。

 

算术运算符:基本+,-,*,/,求余数(%),自增++,自减--。

关系运算符:>,<,=,>=,<=,!=

逻辑运算符:与&&,或||,非!

位操作运算符:位与&,位或|,位非~,位异或^,左移<<,右移>>.

条件运算符:条件求值(?:),三目运算符即b?x:y里b为true则结果为计算x的值,否则结果为计算y的值。

逗号运算符:用于把若干表达式组合成一个表达式(,).例如a1=(++b,c--,d+3);取值为最后一个表达式的值即d+3的值。

指针运算符:取内容*,取地址&,与位与区别在于&放在变量前面。

求字节数符:sizeof

特殊运算符:括号(),下标[],成员(->,.)等几种。

 

运算符结合性:左结合性(从左至右),右结合性(从右至左).

自增,自减运算 右结合性。

++i i 自增1后再参与其他运算

--i i 自减1后再参与其他运算

i++ i 参与运算后,i值再自增1.

i-- i 参与运算后,i值再自减1.

-i-- 计算是i=i-1;-i(原来的i)。即-i--.例如i=120,先让i=119,-i即是-120.

-i++ 计算先i=i+1;-i(原先的i).如果i=119了,那么结果是-119.

 

运算符的结合性 

优先级  运算符  含义  运算类型 结合性 

P1  自左向右

  () 圆括号、函数参数表 单目运算符     

   [] 数组元素下标  双目运算符

   -> 指向结枸体成员  双目运算符

   . 引用结构体成员  双目运算符 

 

P2   单目运算符  自右向左

    ! 逻辑非

     ~ 按位取反

    ++  -- 增1 、减1

    - 求负 

    * 指针间接引用运算符

    &  取地址运算符

    (类型表示符)  强制类型转换运算符

    sizeof 取占内存大小运算符

P3

    *  /  % 乘、除、整数求余  双目算术运算符 自左向右

P4 

    +  - 加、减 双目算术运算符自左向右

P5 

    <<  >> 左移、右移 双目位运算符 自左向右    

P6  双目关系运算符 自左向右

    <  <= 小于、小于等于

    >  >= 大于、大于等于   

P7  ==  != 等于、不等于双目关系运算符 自左向右

P8  & 按位与 双目位运算符 自左向右

P9  ^ 按位异或 双目位运算符 自左向右

P10  | 按位或 双目位运算符 自左向右

P11  && 逻辑与 双目逻辑运算符 自左向右

P12  || 逻辑或 双目逻辑运算符 自左向右

P13  ?: 条件运算符 三目运算符 自右向左 

P14 

     =  赋值运算符

     += -=  *=  /=  %= 

     &=  ^=  |=

     <<=  >>=   复合赋值运算符   双目运算符  自右向左 

P15  ,  逗号运算符  顺序求值运算 自左向右

 

运算符的结合性

说明:

(1) 运算符的结合性只对相同优先级的运算符有效,也就是说,只有表达式中相同优先

级的运算符连用时,才按照运算符的结合性所规定的顺序运算。而不同优先级的运

算符连用时,先操作优先级高的运算。

(2) 对于上表所罗列的优先级关系可按照如下方法记忆:

首先记两边,初等运算符()、[]、->、. 的优先级最高,逗号运算符最低,赋值运算符

和复合赋值运算符次低。其次,单目运算符的优先级高于双目运算符,双目运算符的优

先级高于三目运算符。最后,算术运算符优先级高于其他双目运算符,移位运算符高于

关系运算符,关系运算符高于除移位之外的位运算符,位运算符高于逻辑运算符。

(3)同一优先级的运算符,运算次序由结合方向所决定。

简单记就是:! > 算术运算符> 关系运算符> && > || > 赋值运算符

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值