C语言3数据类型和变量(基础篇)

目录

变量

变量的创建

变量的分类

全局变量:

局部变量:

运算符

/

自加自减

强制类型转换

printf 和scanf

printf

限定宽度

限定小数位数

输出部分字符串

scanf

基本用法

scan的的返回值

占位符

赋值忽略符


变量


变量的创建


了解清楚了类型,我们使用类型做什么呢?类型是用来创建变量的。什么是变量呢?C语言中把经常变化的值称为变量,不变的值称为常量。变量创建的语法形式是这样的:

变量的分类


全局变量:

在大括号外部定义的变量就是全局变量。全局变量的使用范围更广,整个工程中想使用,都是有办法使用的。

局部变量:

在大括号内部定义的变量就是局部变量。局部变量的使用范围是比较局限,只能在自己所在的局部范围内使用的。


能使用局部变量,尽量使用局部变量必须使用全局变量的时候,再使用全局变量。


其实当局部变量和全局变量同名的时候,局部变量优先使用。

一个局部变量不初始化的时候,它的值是随机值

全局变量没有初始化的时候,默认是0

运算符

/

除号的两端都是整数的时候,是按照整数运算的方式计算的,得的到的是商

除号的两端如果有小数,执行的是小数除法,得到的是小数

//%f -- 打印float 类型的小数
//%lf -- 打印double类型的小数
//默认情况下小数点后打印6位小数

#include <stdio.h>
int main()
{
    int score = 5;
    score = (score / 20.0) * 100;
    printf("%d\n", score);

    return 0;
}

自加自减

前置++,还是后置++都是+1的操作
a++、++a 都会让a自增1
++a
--a
//int b= a++;//后置++:先使用,再+1

//int b = ++a;//前置++:先+1,后使用

强制类型转换

int main()
{
    //int a = 30;
    //int   double
    //int a = (int)3.14;//直接写出的字面值浮点数,编译器会默认识别为double类型

    double r = 6 / (double)4;
    printf("%lf\n", r);

    return 0;
}

printf 和scanf

printf

printf-- print + format 按照指定的格式在屏幕上打印数据

#include<stdio.h〉引入头文件,标准输入输出

printf()参数与占位符是-一对应关系,如果有n个占位符,printf()的参数就应该有 n +如果参数个数少于对应的占位符,printf()可能会输出内存中的任意值。

限定宽度

printf("%s says it is %d o'clock\n", "lisi");//err

printf("%5d",a);//     123;

printf("%-5d",a);//123     ;

限定小数位数

输出小数时,有时希望限定小数的位数。举例来说,希望小数点后面只保留两位,占位符可以写成 %.2f。

int main()
{
    printf("%*.*f\n", 12, 2, 12.347);//通过变量来给格式化穿入参数
    printf("%12.2f\n",  12.347);//总宽度12位,不够加空格,小数点后两位,四舍五入
    return 0;
}

输出部分字符串

%s 占位符用来输出字符串,默认是全部输出。如果只想输出开头的部分,可以用 %.[m]s 指定输出的长度,其中[m]代表一个数字,表示所要输出的长度。

int main()
{
    printf("%.7s\n", "hello world");
    return 0;
}

scanf

基本用法

scanf("%d", &i);//& 取地址操作符

变量前面必须加上&运算符(指针变量除外),因为scanf()传递的不是值,而是地址,即将变量i的地址指向用户输入的值。
如果这里的变量是指针变量(比如字符串变量),那就不用加 & 运算符。

scanf()处理用户输入的原理是,用户的输入先放入缓存,等到按下回车键后,按照占位符对缓存进行解读解读用户输入时,会从上一次解读遗留的第一个字符开始,直到读完缓存,或者遇到第一个不符合条件的字符为止。

int main()
{
    int x;
    float y;
    // 用户输入 "    -13.45e12# 0"
    scanf("%d%f", &x, &y);

    printf("%d\n", x);//系统匹配到整数-13
    printf("%f\n", y);读到了.45e12
    return 0;
}

scan的的返回值

scanf()的返回值是一个整数,表示成功读取的变量个数。

如果没有读取任何项,或者匹配失败,则返回0。

如果在成功读取任何数据之前,发生了读取错误或者遇到读取到文件结尾,则返回常量 EOF(-1)。EOF-end of file 文件结束标志

占位符

%[]:在方括号中指定一组匹配的字符(比如 %[0-9]),遇到不在集合之中的字符,匹配将会停止。

%c不忽略空白字符,总是返回当前第一个字符,无论该字符是否为空格。

int main()
{
    char a = 0;
    scanf("%c", &a);
    printf("a = -----%c-----\n", a);
    scanf("%c", &a);
    printf("a = -----%c-----\n", a);

    return 0;
}

如果要强制跳过字符前的空白字符,可以写成 scanf("%c",&ch),即 %c 前加上一个空格,表示跳过零个或多个空白字符。

int main()
{
    char a = 0;
    scanf(" %c", &a);
    printf("a = -----%c-----\n", a);
     return 0;
}

%s

遇到空格结束,不适合字符串里面带空格的输入

int main()
{
    char name[11];
    scanf("%5s", name);
    printf("%s\n", name);
    return 0;
}

只读取输入的前5个字符,后面的丢弃

赋值忽略符

int main()
{
    int year = 0;
    int month = 0;
    int day = 0;
    //2024-7-16
    //2024 7 16
    //2024/7/16

    scanf("%d%*c%d%*c%d", &year, &month, &day);
    printf("%d-%d-%d\n", year, month, day);

    return 0;
}

scanf()提供了一个赋值忽略符(assignment suppressioncharacter)*。只要把*加在任
何占位符的百分号后面,该占位符就不会返回值,解析后将被丢弃。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值