C语言简单介绍

  1. 计算机中的单位
    bit 比特位,计算机中最小的单位,计算机中存储0、1
    byte 字节,大小为8个比特位,1byte=8bit
    kb 1024个字节
    mb 1024个kb
    tb 1024个mb
    pb 1024个tb

char 一个字节
int 4个字节,拥有32个比特位,能够表示的数字范围为 2的32次方减去一
short 短整型,拥有2个字节,16为的比特位,表示范围是2的16次方减去一,也就是65535;因此可以选择合适的字符类型,节省内存空间。
2. float 在给单精度 赋值时,会默认小数为双精度浮点数,可在小数后面加f,例如float pai=3.14f;
3. 变量:
全局变量:定义在代码块({})之外的变量;
局部变量:定义在代码块({})之内的变量:

     #include <stdio.h>
     int a=100;
     int main()
     {
         int b=100;
         return 0;
     }

其中a 为全局变量,b为局部变量;当全局变量和局部变量名字相同时,局部变量优先

#include <stdio.h>
 int main()
 {
  {
      int a=100}
  printf("%d\n",a);
  return 0;
 }

此时a为局部变量,不能在代码块以外引用,程序无法运行。
4. 当使用scanf、strcpy、strlen等函数时,VS编译器会认为这种函数不安全,可使用另一种函数,但不推荐,因为VS编译器提供的函数不具有跨平台性;推荐增加
#define _CRT_SECURE_NO_WARNINGS一行代码在前面即可。
5. 常量

//const修饰的常变量
const int num=4;
printf("%d\n",num);
num=8;
printf("%d\n",num);
//#define 定义的标识符常量;在后面给num赋值后,num的值不会改变
#define MAX 10
//枚举常量
//枚举关键-enum
enum Sex
{
    MALE,
    FEMALE,
    SECRET
};
  1. 字符串类型
    '\0’字符串的结束标志;在字符串中\0是结束标志,不作为字符串内容;
    转义字符:\t 水平制表符;\n 换行;
    打印字符串用%s,打印字符用%c;当想要打印’或者"时可使用printf("%c\n",'\'');或者printf("%s\n","\"");
    \ddd 中ddd表示1~3个八进制的数字,如:\130 ;
    \xdd dd表示两个16进制数字,如:\x30 ;

  2. 算术操作符
    / 取商 %取余数
    移位操作符
    <<左移 >>右移;移动二进制位;向左移动后,空出的位置由0补上

#include<stdio.h>
int main()
{
int a=1;
int b=a<<2;
printf("%d\n",b);
}

最终b的输出结果为4;

位操作
& 按位 | 按位 ^ 按位异或,对应的二进制位相同则为0,不同则为1

int a=5;
int b=3;
//a=0101
//b=0011
printf("%d\n",a&b);
//a和b对应位数上有0则结果位数上为0
 
//a和b对应位数上有1则结果相应位数上为1
//因此结果分别为1 和 7

复合赋值符
+= -= &= |= ^= <<= >>= /= *=等等都是;例如a>>=2也就是a=a>>2.

单目操作符
! 逻辑反操作
-负值 + 正值
& 取地址
sizeof 计算的是变量或者类型所占空间的大小,单位是字节(byte)
~ 对一个二进制数按位取反
++
(类型) 强制转换类型int a=(int)3.14;

逻辑操作符 && 逻辑与 ||逻辑或

双目操作符
三目操作符
条件操作符 exp1?exp2:exp3;exp1表达式的值如果为真,则整个表达式的结果exp2的结果;若exp1表达式的值为假,则整个表达式的结果为exp3的值。
逗号表达式 exp1,exp2,exp3
下标引用 函数调用

补码、原码和反码

在存储中都是二进制的补码

  1. 正数的原码、补码和反码均相同
  2. 负数:原码直接写,反码的符号位不变,其他位按位取反得到,补码由反码加一得到

关键字

  1. typedef 类型重命名
 typedef unsigned int u_int;
 u_int num=20;
 //与 int num=20;完全一样

2.static 修饰局部变量,使局部变量生命周期变长
static修饰全局变量,改变变量的作用域;让静态的全局变量只能在自己所在的源文件内部使用;
static 修饰函数,也会改变函数的作用域,static会改变函数的连接属性,将外部连接属性变为内部连接属性。
3define 定义标识符常量;也可以定义宏;

指针

	int main()
	{
	    int a=10;
	    int*p=&a;//取地址
	    printf("%p\n",&a);
	    printf("%p\n",p);
	    *p=20;//*-解引用操作符;通过*p找到a并将a的值改为20;
	    printf("%d\n",a);
	    printf("%d\n",p);//指针的大小
	    return 0;
	    
	
	}

指针变量的大小:指针大小在32位平台是4个字节,在64位平台是8个字节。

结构体

#include<stdio.h>
#include<string.h>
struct Book
{
    char name[20];
    char writter[10];
    short price;
    
};
int main()
{
    struct Book b1={"C语言程序设计","xtc",55};
    struct Book* pb=&b1;//利用pb打印
    printf("name:%s\n", (*pb).name);
    printf("name:%s\n", (*pb).writter);
    printf("price:%d\n", (*pb).price);
    strcpy(b1.name,"C++");//strcpy--字符串拷贝,需要库函数 string.h
    printf("name:%s\n", pb->name);
    //. 结构体变量.成员
    //-> 结构体指针->成员
    b1.price=35;
    //price为变量,因此可以直接通过赋值的方式改变值,但是name和writter为字符串,不能直接赋值更改
    printf("name:%s\n",b1.name);
    printf("writter:%s\n",b1.writter);
    printf("price:%d\n",b1.price);
      return 0;
}

分支与循环

  1. IF
    if语句和else语句条件成立时要执行多条语句,则应该使用代码块{}
    当拥有多个if时,else会和最近的if进行匹配
    当if中的表达式为时,则执行if后面的语句
    不为真,则执行else后的语句
#include<stdio.h>
int main()
{
	int age=18;
	if(age<18)
		printf("未成年\n");
	else if(age>=18&&age<28)
		printf("青年\n");
	return 0;
}

switch语句

switch允许嵌套使用

switch(整形表达式)
{
	case 整形常量表达式1:表达式;break;
	//不能使用浮点型,变量,
	//当执行完1时,会直接跳出代码块,如果没有break;则继续执行下面语句,不需匹配结果直接执行
	case 整形常量表达式2:表达式;break;
	case 整形常量表达式3:表达式;break;
	default:
		printf("输入错误");
		break;
	//default 与case执行没有顺序要求,放在前后均可,但推荐放在最后
	//在表达式中,可以出现if语句,但是不能用continue
	
}

while循环

当表达式为时,则执行循环语句
while(表达式)
循环语句;

#include<stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (5 == i)
			continue;
		printf("%d ", i);
		i++;
	}
	return 0;
}

当循环内部有continue时,并且执行到continue,则continue之后的语句不再执行,直接跳过,并判断是否执行下次循环;break则是永久终止循环;

#include<stdio.h>
int main()
{
	int ch=0;
	while((ch=getchar())!=EOF)
	{
		putchar(ch);
		//程序是停不下来的
		//此时输入EOF也不会停下,因为在输入E、0、F时getchar就已经分别打印,不会与EOF相等
		//可在输出框输入ctrl+z结束
		//EOF是end of File,值为-1;
	}
}

输入缓冲
当输入密码123456时,需要回车才能被scanf函数读取,而scanf函数只读取\n之前的符号,因此留下了符号’\n’,在利用getchar给ret赋值时,在输入缓冲区读取到留下的字符’\n’;从而打不到想要的结果
可在ret=getchar();前再加一个输入语句:getchar();

在这里插入图片描述
可以使用while循环语句;一直读取直到读取到’\n’ 而循环内部不做任何;
在这里插入图片描述

FOR循环

初始化、判断、调整集中在一个位置

  1. 语法:for(表达式1;表达式2;表达式3)
    循环语句;
    在这里插入图片描述
  2. 建议不可在for循环内修改循环变量,防止for循环失去控制
    for语句的循环控制变量取值采用“前闭后开”区间写法
  3. for循环的初始化、判断、调整均可省略;当判断被省略时,则判断条件恒为真

do-while 循环

  1. 语法
    do
    循环语句;
    while(表达式);
  2. 流程在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值