目录
变量
变量的创建
了解清楚了类型,我们使用类型做什么呢?类型是用来创建变量的。什么是变量呢?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)*。只要把*加在任
何占位符的百分号后面,该占位符就不会返回值,解析后将被丢弃。