C语言基础——分分钟带你学会C语言

一、编程规范

词法符号

1) 关键字

  • 具有特殊意义的字符串(32个关键字)
    数据类型: char   short  int  long  double  float   enum   void
    存储类型 : auto  static  register  extern  const  volatile (修饰符)
    结构体、共用体   struc  union
    控制语句: if  else  switch case default  while  for  do  goto
    求字节长度 : sizeof
    符号: signed  unsigned
    取别名: typedef
    辅助控制语句: return break continue

2) 标识符

  • 程序中不能出现仅靠大小写区分的相似的标识符
  • 所有宏定义、枚举常数、常量(只读变量)全用大写字母命名,用下划线分割单词

3) 运算符

  • 算术运算符(+、-、/、%)
  • 赋值运算符
  • 关系运算符(比较运算符)
  • 逻辑运算符
  • 位运算符(&按位与 |按位或 ^按位异或)
  • 三元运算符(表达式?表达式1:表达式2)

4) 标点符号

变量、常量命名规则

变量

  • 在整个程序的运行过程中,没有变化且不能变化的,我们称之为常量。
  • 在程序运行期间,可以改变并且有可能会改变的,我们称之为变量。
  • 局部变量 : 在函数内部定义的变量 ; 局部变量没有初始化的时候,值为随机值 ;
    作用域 : 只作用于当前模块 ;
  • 全局变量 : 在函数外部定义的变量 ; 全局变量没有初始化初值为0 ;作用域为全局
  • 程序运行时,变量会由数据类型决定占据的存储空间大小
  • 一般形式:<存储类型><数据类型><变量名>;

    存储类型:

    auto : 自动存储,一般都默认为自动存储,可以省略不写 ;
    static : 静态存储作用 :
             1. 修饰局部变量延长生命周期;
             2. 修饰未被初始化的局部变量初值为 0
             3. 限制作用域:修饰全局变量或者函数的时候只允许本文件访问 ;
    register : 寄存器存储,运行速率快,但是寄存器数量有限
    extern : 外部存储,一般用作外部说明 ;
  • 变量名命名规则:

        1) 变量名的开头必须是字母或下划线,不能是数字。实际编程中最常用的是以字母开头,而以下划线开头的变量名是系统专用的。
        2) 变量名中的字母是区分大小写的。
        3) 变量名不能为C语言的关键字!
        4) 变量名中不能有空格。(变量名是字母、数字、下划线的组合)

常量

  • 整型常量 :23        023        0x23
  • 字符/字符串常量:一个字符由单引号,多个用双引号( ‘A’ 、‘3’、“ABC”、“123”)
  • 浮点常量:2.5        2.6
  • 指数常量:234.56 == 2.3456e+2          0.000023 == 2.3e-5
  • 标识常量:宏定义、宏替换(一般用大写表示)

                        #define MAX 200

二、运算符的使用

算术运算符

  • +        -        *        /        %(取余数)        ++(自增)        --(自减)

关系运算符

  • >        <        ==        >=        <=        !=
  • a >10 && a < 100  :表示10-100这个范围

逻辑运算符

  • &&(与)        ||(或)        !(非)
  • 短路法则:如果有多个表达式,第一个为真,后面的表达式就不再判断
  • 逻辑运算的结果只有 真 和 假(0为假,非0为真)

位运算

  • ~ :对位进行取反
  • & :位与(有0出0)
  • |  :位或(有1出1)
  • ^ :异或(不同出1)
  • << :左移位(值相当于乘2)
  • >> :右移位(值相当于除2)

赋值运算符

  • +=        -=        *=        /=        %=        |=        ^=        >>=        <<=
  • eg :a += b    =====    a = a+b

条件运算符

  • 表达式1 ?表达式2 :表达式3
  • 1成立,则执行2,否则执行3

逗号运算符

  • (表达式1,表达式2,表达式3........,表达式n)
  • 结果为表达式n的值,但是前面的表达式会执行

三、输入输出函数

格式输出printf

int printf(const char *format, ...);
                格式控制串      输出表
格式控制串:
        %[修饰符]格式符 控制输出的格式
        普通字符: 原样的输出
    格式符:
            %d ---> 十进制整数
            %o ---> 八进制
            %x ---> 十六进制
            %u ---> 无符号的十进制
            %c ---> 单个字符
            %s ---> 字符串
            %f ---> 浮点数
            %e ---> 指数
            %g ---> %f 和 %e 较短的一种
            %% --->输出%
    修饰符:
            m: 输出的域宽,数据长度 < m ,左边补空格,否则实际输出;
           .n:
               实数: 小数点的位数
               字符串:实际输出的位数
            -: 左对齐
            +: 在指定有符号前面显示正号
            l:
               ld \ lu \ lx \ lo 精度为long
               lf \ le \ lg 精度为double

格式输入scanf

int scanf(const char *format, ...);
功能:从终端读取
参数: 格式控制串 和地址表
返回值:成功返回输入的个数;
在输入字符的时候会产生垃圾字符;
处理垃圾字符:    
        1、加空格
            eg:
                scanf("%c %c", &ch1, &ch2);
                scanf("%c ", &ch1);
                scanf("%c", %ch2);
        2、抑制符
            eg:
                scanf("%c%*c", &ch1);
                scanf("%c", %ch2);
                输入: A B --》正常得到结果;
        3、getchar()
                scanf("%c", &ch1);
                getchar(); //将一个空格或者回车获取掉
                scanf("%c", %ch2);
eg:
scanf("%4d%2d%2d", &year, &mon, &day);
输入:
20230712
结果:year = 2023 mon = 07 day = 12

 字符输入输出getchar        putchar

函数原型:
int getchar(void);
功能:从终端读取一个字符;
返回值:返回读取到的字符

函数原型:
int putchar(int c);
功能:将一个字符输出到终端;
参数:要输出的子字符
返回值:返回输出的字符

字符串输入输出gets        puts

char *gets(char *s);
{
功能:读取一个字符串,将字符串读取到s指向的空间;
参数: s为一个指针变量,指向一片空间的首地址
返回值:返回s
注意:输入的字符串长度应该小于s指向的空间大小;
}

函数原型:
int puts(const char *s);
功能:
将s指向的字符串输出到终端
返回值:输出的字符个数
puts自带换行功能;
换行:
printf("\n");
putchar('\n');
puts("");
puts("hello")
char buf[32] = "hello";
puts(buf);

四、控制语句

if....else

if(表达式)
{
    语句块;
}
表示:表达式成立就执行语句块;
//--------------------------------------------------
if(表达式)
{
    语句块1;
}
else
{
    语句块2;
}
表示: 如果表达式成立就执行语句块1,否则就执行语句块2;
else 总是与最近的一个if相结合;
//--------------------------------------------------
if(表达式1){
    语句块1;
}else if(表达式2){
    语句块2;
}else if(表达式3){
    语句块3;
}
....
else{
语句块n; //以上都不成立执行语句块n;
}
//------------------------------------------------
if(表达式1){
    if(表达式2){
        .....
         if(表达式n){
            语句块n; //所有表达式都成立
         }else{
            语句块n-1; //表达式n不成立,其他表达式都成立
         }
    }else{
      语句块2;//表达式1成立,表达式2不成立;
    }
}else{
    语句块1;//表达式1不成立
}

switch

switch(表达式){
    case 常量表达式1:
             语句块1;
              break;
    case 常量表达式2:
            语句块2;
                break;
                ......
    case 常量表达式n:
            语句块n;
                break;
    default://表达式和以上常量表达式都不相等执行下面语句
            语句块 n+1;
}

goto

eg:
AA:
语句块;
......
goto AA;

while

while(表达式){
    循环体;
}
表达式成立,执行循环体;

do.....while

do{
    循环体;
}while(表达式);
先执行循环体,再判断表达式;

for

for(表达1;表达式2; 表达式3)
{
    循环体;
}
for循环顺序:
    执行表达式1;
        判断表达式2;
        表达式2成立 执行循环体,不成立结束;
    执行表达式三;
        判断表达式2 ,成立执行循环体,不成立结束;
    for循环中的表达式可以省略,但是 ';'不能省略;
    如果表达式2省略,相当于死循环;

辅助控制语句

break: 跳出当前循环(用在switch中跳出switch)
continue:结束本次循环继续下一次循环
return:结束当前函数,也作为函数的返回值;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值