C语言补习(西安华清远见)第二天

今天早晨没有带雨伞,怀着迫切的心情冒雨来上课。

对于有符号数或者无符号数,超出范围,用回环。

类型转换:

强制类型转换 将浮点型转换为整型等

#include<stdio.h>

int main()

{

        float a=3.453332;

        int b=(int)a;

        printf("%d",b);

        return 0;

}

隐式类型转换

发生在数据运算的内部,自动发生类型转换

#include<stdio.h>

int main()

{

        int a=20;

        float b=30;

        printf("%f",a+b);

        return 0;

}

有符号向无符号转换

#include<stdio.h>

int main()

{

        int a=-10;

        unsigned int b=-100

        printf("%u",a+b);

        return 0;

}

#include<stdio.h>

int main()

{

        int a=-10;

        unsigned int b=-100;

        printf("%d",a+b);        //        -100

        return 0;

}

输入输出

#include<stdio.h>

int main()

{

        int a;

        scanf("%d",&a);

        printf("%d",a);

        return 0;

}

为啥scanf要用取地址?把数字放到存储空间中,但内存中可能存在相同名字的空间,因此要把数据准确放到我想要的空间,即知道空间的地址。

格式控制符:

%d int类型

%m.nd m控制对齐的方式 %-m.nd(左对齐) %m.nd(右对齐)

#include<stdio.h>

int main()

{

        int a=10;

        printf("%-5.4d",a);        //        有效数字为4

        printf("%5.4d,"a);

        return 0;

}

%c 字符格式控制符

#include<stdio.h>

int main()

{

        char a;

        char b;

        scanf("%c%*c%c",&a,&b);

        // scanf("%c%c\t",&a,&b);

        printf("%c,%c",a,b);

        //  printf("%c,%c\t",a,b);

        return 0;

}

%*c的作用是抑制一个字符生效,该字符可为任意字符

%t是转义字符,代表一个TAB

%c是转义字符,代表一个换行

%s

#include<stdio.h>

int main()

{

        char a[]={‘\0’};

        scanf("%c",a);

        printf("%c\t",a);

        return 0;

}

%f 打印浮点型数据

#include<stdio.h>

int main()

{

        float a=3.1415926;

        printf("%4.2f",a);

        //        printf("%-4.6f",a);

        return 0;

}

%m.nf 当m或n是正数或者负数,只是控制域宽,不需要对齐

当n小于m的时候,跟着域宽的大小走

当n大于m的时候,跟着n的大小走

%o 打印八进制

%x 打印十六进制

#include<stdio.h>

int main()

{

        int a=100;

        printf("%#o,%#x",a,a);

        return 0;

}

字符输入

getchar 获得字符

putchar/putc 输出字符

gets 获得字符串 输入不定量的字符,容易造成段错误

puts 从标准输出上显示字符串

#include<stdio.h>

int main()

{

        char a;

        a=getchar();

        putchar(a);

        return 0;

}

常量的值在程序运行过程中不能发生改变

整型常量:

十进制:97

八进制:076

十六进制:0xab

字符常量:

用单引号包裹起来的量:'a' '*' '1' '5'

字符串常量:

用双引号包裹起来的量:"abcd" "*&A"

小数型常量:

浮点型:3.14

指数型:2e+7

宏常量:

当宏是数字的时候,只是一个简单的名字

当宏是表达式的时候,是一个带参数的名字

#define PI 3.1415

#include<stdio.h>

#define PI 3.1415

// define add(x,y) x+y

define add(x,y) (x+y)

int main(int argc,const char *argv)

{

        double a=10000;

        double b=a*a*PI;  

        double c=add(e+f)*add(e+f);  

        double e=3.0;

        double f=4.0;

        printf("%f",b);

        printf("%f",c);

        return 0;

}

变量

存储类型 数据类型 变量名

存储类型:需要在内存的什么地方开辟空间

数据类型:开辟多大的空间

堆区:程序员自己开辟malloc和释放free空间的区

栈区:存放局部变量和局部参数

数据段:存放的是未被初始化过的全局变量

存储类型的四个关键字

auto:修饰的是局部变量,可以省略,为默认的存储类型

register:被修饰的变量叫寄存器变量,放在寄存器当中

static:被修饰的变量叫做静态变量

extern:引用外部变量

变量又可以分为全局变量和局部变量

局部变量:在main函数内部定义的变量。对于局部变量来说,不进行初始化和赋值,出现的结果是随机数

全局变量:在main函数外部定义的变量

初始化:在定义变量的时候就已经给好值 int a=10

赋值:先定义,再给值 int a;a=10

对于全局变量

#include<stdio.h>

int a;

int main()

{

        printf("%d",a);

        return 0;

}

对于全局变量来说,不进行初始化和赋值,结果就是0

对于局部变量来说,不进行初始化和赋值,结果是随机数

#include<stdio.h>

int main()

{

        int i=0;

        for(i=0;i<5;i++)

        {

                int sum=1;

                sum=sum+i;

                printf("sum=%d",sum);

        }

        return 0;

}

0 1 2 3 4

1 1 1 1 1

#include<stdio.h>

int main()

{

        int i=0;

        for(i=0;i<5;i++)

        {

                static sum=1;

                sum=sum+i;

                printf("sum=%d",sum);

        }

return 0;

}

0 1 2 3 4

1 1 2 4 11

被static修饰的局部变量,相当于延长了局部变量的生命周期

现在下课休息,玩了会《战争游戏 红龙》,这样做叫做劳逸结合!

现在开始上课了

认真听课!

static修饰的全局变量,从定义的变量开始,到整段程序结束

#include<stdio.h>

int a=10;

// static int a=10;

int b=20;

#include<stdio.h>

extern int a;

extern int b;

int main()

{

        int c=a+b;

        printf("%d",c);

        return 0;

}

用static修饰的全局变量,无法被引用,用static修饰的全局变量缩小了作用域(用extern引用的外部变量)

生命周期:离变量最近的上面的前括号开始,到跟这个前括号匹配的到后括号结束

作用域:在那个文件内有效

被static修饰的局部变量,延长了生命周期

被static修饰的全局变量,缩小了作用域

全局变量和局部变量是否可以重名?

可以,重名的时候优先使用局部变量,当局部变量生效的时候,再使用全局变量

运算符

算术运算符:+ - * / %(只能用于整型)

逻辑运算符:

&&(全真则真,当两个条件前面为假时,直接截断,整个表达式的值为0)

||(只要有一个为真,就为真)

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

三步运算符:c=a>b?a:b

逗号运算符:将最后一个表达式的值作为整个表达式的值

在a=1时,经过一次++a之后要进行两步运算,先给a自加a=a+1,然后再将a的值整体赋值给++a

在a=1时,经过一次a++之后要进行两步运算,先把a的值赋值给++a,再给a的值加1

备注:Linux终端的命令行模式 vsp zzzz.c 新打开一个文件

                                                                                                                                           2022年9月20日

                                                                                                                                                   徐子宸

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值