C语言基础板块

1、main函数是程序的入口,有且只能有一个

2、printf:输出   sizeof:以字节形式给出其操作数的存储大小   scanf:输入控制符(scanf("%d", &i);  //&i 表示变量 i 的地址,&是取地址符

3、数据类型:int(整型)、short (短整型)、 long(长整型)、char(字符类型)、long  long(更长的整型)、 float(单精度浮点数)、double(双精度浮点数)

4、  变量(局部变量、全局变量)

        变量的命名:只能有字母(大小写)、数字和下划线(_)组成;不能以数字开头;长度不能超过63个字符;变量名中区分大小写;不能以关键字命名;不能重复命名

        全局变量和局部变量同名的时候,先使用局部变量(局部优先)

        局部变量的作用域是变量所在的局部范围;全局变量的作用域是整个工程

        局部变量的生命周期是进入作用域生命周期开始,出作用域生命周期结束;全局变量的生命周期是整个程序的生命周期

5、常量

        字面常量、const修饰的常变量、#define定义的标识符常量、枚举常量

#include <stdio.h>
// 枚举常量,默认从0开始,依次向下递增1

enum SEX
{
    MAEE,
    FEMALE,
    SECRET
};

int  main()
{
//字面常量
    30;
    3.13;
    'w';   //字符
    "sac";  //字符串

//const 修饰的常量 const修饰的pai本质就是变量,不能直接修改,有常亮的属性,所以叫常变量!!
    const float pai = 3.14;   //不能直接修改!!

//#define的标识符常量
    #define  MAX 100

//枚举常量
    printf("%d\n",MAEE);
}

6、字符串

        由双引号引起来的一串字符。字符串的结束标志是一个\0的转义字符,在计算字符串长度的时候\0是结束标志,不算字符串内容。

#include <stdio.h>
#include <string.h>
int main()
{
    char arr1[] = "bit";  
    char arr2[] = {'b', 'i', 't'};
    char arr3[] = {'b', 'i', 't', '\0'};
    printf("%s\n", arr1);
    printf("%s\n", arr2);
    printf("%s\n", arr3);

    strlen(arr1);  // strlen 求字符串长度  头文件 string.h    输出3
    strlen(arr2);   // 不确定,除非一直识别到了\0  才停下计算
    return 0;
}

//后台监视
'b','i','t','\0'
'b', 'i', 't'
'b', 'i', 't', '\0'
//输出
bit
bit烫烫烫烫bit  ---> 相当于bit前后都存储了其他数据,这儿输出的时候 会将全部的bit识别出来
bit   --->  \0 结束标志

7、转义字符

转义字符释义
\?在书写连续多个问号时使用,防止被解析成三字字母
\'字符常量 '
\"表示一个字符串内部的双引号
\\表示一个反斜杠,防止被解释为一个转义序列符
\a警告字符
\b退格符
\f换页。将当前位置移到下一页的开头。
\n换行
\r

回车换行。将当前位置移到下一行的开头。

\t水平制表符。将当前位置移到下一个tab位置
\v垂直制表符
\dddddd表示1~3个八进制的数字
\xdddd表示2个十六进制数字

8、选择语句

#include <stdio.h>

int  main()
{

    int coding = 0;
    scanf("%d',&coding);
    if(coding == 1)
    {
        printf("hello");
    }else{
        printf("no");
    }    
    return 0;

}

9、循环语句

1、while语句循环
/***
while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。
1、程序先判断A是否为真,如果为真则执行循环体B
2、当执行完循环体后再回到第1步
3、当表达式A为假时结束循环
***/
#include <stdio.h>

int  main()
{

    int line = 0;
    while(line <= 20)
    {
        line++;
    }
}


2、for循环
/***
for(表达式1;表达式2;表达式3)   语句;
先执行"表达式1",并且程序只会执行1次"表达式1"。注:"表达式1"仅在第一次循环时执行,以后都不会再执行,可以认为这是一个初始化语句!
接着程序判断条件"表达式2"的结果是否为"真",为"真"时,程序就执行语句块的内容。注:"表达式2" 一般是一个关系表达式,决定了是否还要继续下次循环,称为"循环条件"。
语句块执行完的话,接下来会执行"表达式3"! 注:"表达式3" 很多情况下是一个带有自增或自减操作的表达式,以使循环条件逐渐变得"不成立"。
然后重复 第二步骤 和 第三步骤,直到 "表达式2" 判断条件不成立就退出循环
***/

int  main()
{
    for(int a = 0;a < 20;a = a + 1){
        printf('%d\n',a);
    }
    return 0;
}


3、do……while循环
/***
while 和 for 这两种循环都是先判断,条件如果满⾜就进⼊循环,执⾏循环语句,如果不满⾜就跳
出循环;
⽽ do while 循环则是先直接进⼊循环体,执⾏循环语句,然后再执⾏ while 后的判断表达式,表
达式为真,就会进⾏下⼀次,表达式为假,则不再继续循环。
所以在 do while 语句中循环体是⾄少执⾏⼀次的,这是 do while 循环⽐较特殊的地⽅
***/

int  main()
{
    int a = 10;
    do
    {
        printf("%d\n",a);
        a = a + 1;
    }while(a < 20);
    return 0;
}

10、函数

#include <stdio.h>

int main()
{
    int num1 = 0;
    int num2 = 0;
    int sum = 0;
    scanf("%d  %d ",&num1,&num2);
    sum = num1 + num2;
    printf("sum = %d\n",sum);
    return 0;
}


上述代码可以写成函数模式:简化代码,重复使用
int ADD(int x , int y)
{
    int z = x + y;
    return z;
}

// 也可以写成:
//int ADD(int x , int y){
//      return (x + y );
// }


int  main()
{
    int num1 = 0;
    int num2 = 0;
    int sum = 0;
    scanf("%d  %d ",&num1,&num2);
    sum = ADD(num1,num2);
    printf("sum = %d\n",sum);
    return 0;
}

11、数组 :一组相同类型元素的集合

int arrr[10] = {1,2,3,4,5,6,7,8,9,10} //定义一个整型数组,最多放10个元素
int arr[] = {1,2,3,4}  //如果不写有多少个,他就自动识别后面元素有多少个
/***
数组的下标:数组的每个元素都有一个下标,下标是从0开始的,可以通过下标来访问元素
***/

#include <stdio.h>

int main()
{
    int arr[10] = {1,2,3,4,5,6,7,8,9,10};
    for(int i = 0;i < 10;i++){
        printf("%d\n",arr[i]);
    }
    printf("\n");
    return 0;
}

            

   12、操作符

1、算数操作符(+ - * / %)

#include<stdio.h>
int main()
{
    int a = 2, b = 5, sum = 0;
    //a与b相加
    sum = a + b;

    //a与b相减
    sum = a - b;

    //a与b相乘
    sum = a * b;

    //a与b 相除  若'/'左边的数大于右边,则得出的结果是取商的那部分;若'/'左边的数小于右边,则得到的结果为0 ;两边都是整型,即使定义返回数类型为浮点数,计算输出也是一个整数
    sum = b / a  // 输出为2  5除以2 商2余1
    sum = a / b  //输出为0   
    //如果有一个操作数为浮点数,那结果输出是浮点数
    double sum = 5 / 2.0;   
    printf("%lf\n",sum);   //输出为2.5
    sum = 2 / 5.0 ;  //输出为0.4

    //  %取模操作符,取的是一个数除另外一个直至除不尽的余数,若取模对象刚好是自己的公约数,则结果为0。例如 5%1=0    5%2=3    5%3=2     5%4=1    5%5=0
    //注意:取模的对象不能为0,且不能为浮点型,必须为整数!!!!
    sum = b % a ;  //输出为 1

    return 0;
}
2、位移操作符(>>    <<)

#include<stdio.h>
int main()
{
    /***
    左移操作符可以将一个二进制数向左移动指定的位数,移动后在右侧补0。操作后不会让数据变化,需要用赋值操作符才能保存下来。

***/

	int a = 7;
	//7的二进制序列补码为       00000000000000000000000000000111
	//经过左移操作符移动一位得  00000000000000000000000000001110
	//将二进制转化为十进制可得结果为 14
 
	a << 1;
	printf("%d\n", a);  // 7
	int b = a << 1;   
	printf("%d\n", b);   //14
	printf("%d\n", a<<1);  //14


   /***
    右移操作符1、逻辑右移  左边用0填充,右边丢弃
              2、算数右移  左边用原该值的符号位填充,右边丢弃

***/

int a = -7;
	//-7的二进制序列原码为       10000000000000000000000000000111
	//-7的二进制序列反码为       11111111111111111111111111111000
	//-7的二进制序列补码为       11111111111111111111111111111001
	//经过右移操作符移动一位得   11111111111111111111111111111100
	//转化为原码可得			   10000000000000000000000000000100
	//将二进制转化为十进制可得结果为 -4
 
	a >> 1;
	printf("%d\n", a);   // -7
	int b = a >> 1;
	printf("%d\n", b);   //-4
	printf("%d\n", a >> 1);   //-4

	return 0;
}

3、位操作符 ( &  ^  | ~)
&       按位与        只要有0则为0,两个为1才为1
|       按位或        有1则为1
^       按位异或      相同为0,相异为1
~       按位取反      0取反1,1取反0
注意:他们的操作数必须是整数!!!!!!

#include<stdio.h>
int main()
{
	int a = 5;
	int b = -2;
	printf("a & b = %d \n", a & b);   //打印  1
	printf("a | b = %d \n", a | b);   //打印  5
	printf("a ^ b = %d \n", a ^ b);   //打印  4
    printf("%d\n", ~a);               //打印-6

	return 0;
}

5 的补码:00000000 00000000 00000000 00000101                                                                                                                            5的取反:11111111 11111111 11111111 11111010
-2 的原码:10000000 00000000 00000000 00000010
-2 的反码:11111111 11111111 11111111 11111101
-2 的补码:11111111 11111111 11111111 11111110

5 & -2 的补码:00000000 00000000 00000000 00000100                                                                                                                   5 &- 2 的原码:00000000 00000000 00000000 00000100

5 | -2 的补码:11111111 11111111 11111111 11111111                                                                                                                            5 | -2 的反码:11111111 11111111 11111111 11111110                                                                                                                            5 | -2 的原码:10000000 00000000 00000000 00000001

5 ^ -2 的补码:11111111 11111111 11111111 11111011                                                                                                                          5 ^ -2 的反码:11111111 11111111 11111111 11111010                                                                                                                          5 ^ -2 的原码:10000000 00000000 00000000 00000101

5取反后(补码):11111111 11111111 11111111 11111010                                                                                                                                     反码:11111111 11111111 11111111 11111001                                                                                                                                         原码:10000000 00000000 00000000 0000011

4、单目操作符(!-  + sizeof ~ --  ++ *)
!                   逻辑反操作
-                   负值
+                   正值
&                   取地址
sizeof              操作数的类型长度(以字节为单位)
~                   对一个数的二进制按位取反
--                  前置、后置--
++                  前置、后置++
*                   间接访问操作符(解引用操作符)


#include<stdio.h>
int main()
{
	int a = 1;
	int b = 0;
	if (a)
		printf("111\n");
	if (!a)    //把真变假
		printf("222\n");
	if (b)
		printf("333\n");
	if (!b)    //把假变真
		printf("444\n"); 

    printf(%d\n",-a);   //输出 -1

//&与 * 经常搭配使用,&用于取出想要变量的地址
    int c = 10;
	int*  p = &c; //c变量的地址
 
	//*p是对p进行解引用操作,*p是通过p中存放的地址,找到p指向的对象
	//*p其实是a
	*p += 1;
	printf("c = %d\n", c);  //  输出11

    
	return 0;
}


//前置++或 -- 都是先 +1或-1 再使用;后置 ++或 -- 都是使用,再+1或 -1。

#include<stdio.h>
int main()
{
	int a = 5;
	int b = 0;
 
	b = ++a; //前置++,先+1再使用,所以b=a=6
	printf("a = %d b = %d\n", a, b);
 
	b = a++; //后置++,先使用再+1,所以a=7,b=6
	printf("a = %d b = %d\n", a, b);
 
// --与++用法相同
	return 0;
}
5、关系操作符(>  >=  <  <=  !=  ==)
!=                用于测试“不相等”
==                用于测试“相等”


6、逻辑操作符(&&   || )
&&              逻辑与   操作符两端都为真才为真,当已经判断了一个条件为假,剩下的条件就不需要再继续判断了,整个式子的判断为假。
||              逻辑或   操作符两端有一为真则为真,当已经判断了一个条件为真,剩下的条件就不需要再继续判断了,整个式子的判断为真。



7、条件操作符(exp1 ? exp2:exp3 )
条件操作符,当表达式一判断为真,则输出表达式二的结果;当表达式一判断为假,则输出表达式三的结果。
#include<stdio.h>
int main()
{
	int a = 1;
	int b = 2;
	//可以用来判断两个数中的较大值
	printf("%d", a > b ? a : b);    //  2
 
	return 0;
}

8、逗号表达式(exp1 ,exp2,exp3,....expN)
逗号表达式,就是用逗号隔开的多个表达式。
逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。
#include<stdio.h>
int main()
{
	int a = 1;
	int b = 2;
	int c = (a > b, a += b, b += 1);
	//此时a等于多少? 3
	//b等于多少?     3
	//c等于多少?     3
	//a>b判断为假会影响后面的计算吗? 逗号表达式中判断为真或为假,不影响表达式的进行;表达式中进行的运算会对值产生影响;且整个表达式的值为最后一个表达式的值。
	printf("%d \n", c);  
	return 0;
}

    13、常见关键字

typeof 类型定义,类型重命名
continue是继续的意思,用于循环语句。

default用于switch语句中。

do用于do while循环语句中。

else用if选择语句中。

enum用于枚举关键字。

extern用于声明外部符号

for用于for语句的循环。

goto用于分支循环语句。

if用于分支循环语句。

register用于寄存器。

return返回值,函数中使用。

signed有符号的(一个数的正负之分)。

unsigned无符号的。

sizeof用来计算类型大小。

static静态的数据类型存储。

struct自定义数据类型的关键字----结构体。

typedef类型重命名。

union联合体(共用体)。

void无/空的意思。

volatile后面c++中Linux里介绍。

while用于while循环。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

v_w50

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值