变量与常量的基本定义
生活中,有些值是可变的(比如年龄、体重等等),有些值是不变的(比如圆周率、血型等等)。
不变的值,在C语言中用 常量 来表示,变的值用 变量 来表示。
如何定义变量
//比如
int age = 19; //定义一个年龄变量,类型是int
float weight = 49.8f; //定义一个体重变量,类型是float
char ch = 'g'; //定义一个字符变量,类型是char
变量的分类
·全局变量
·局部变量
#include<stdio.h>
int global = 2009; //全局变量
int main(){
int local = 2008; //局部变量
//下面定义的global会不会有问题?
int global = 2010; //局部变量
printf("global = %d\n", global);
return 0;
}
上面的局部变量global的定义并无问题!
当局部变量和全局变量同名的时候,局部变量优先使用(当然,前提是在该局部变量所在作用域内。)
变量的使用(输入与输出)
//这里介绍一下,C语言中的输入、输出函数
//scanf()-----输入函数 //注意,在2010年版本之后,VS编译器中scanf被认为是不安全的,要想使用,可以在代码的第一行加#define _CRT_SECURE_NO_WARNINGS
//printf()-----输出函数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
int num1 = 0;
int num2 = 0;
int sum = 0;
printf("输入两个操作数:");
scanf("%d %d", &num1, &num2); //&为取地址符
sum = num1 + num2;
printf("sum = %d\n", sum);
return 0;
}
输入输出格式控制符(全)
1.%d------输出十进制整数
printf("%d\n", 123); // 输出:123
2.%nd------按指定位数输出整数
printf("%2d\n",1234); //指定位数小于实际位数,按照实际位数输出
//输出:1234
printf("%5d\n",1234); //指定位数大于实际位数,默认右对齐,缺的位数用空格补齐
//输出: 1234
3.%0nd------按指定位数输出整数,缺的用0补齐
printf("%5d\n",1234); //输出:01234
4.%u------输出无符号十进制整数
printf("%u\n", 123); // 输出:123
5. %o------输出八进制整数
printf("%o\n", 123); // 输出:173
6. %x, %X------输出十六进制整数,%x使用小写字母,%X使用大写字母
printf("%x\n", 123); // 输出:7b
printf("%X\n", 123); // 输出:7B
7.%e, %E------输出科学计数法表示的数,%e用小写字母e,%E用大写字母E
double num = 123.456789;
printf("%e\n", num); // 输出:1.234567e+02
printf("%E\n", num); // 输出:1.234567E+02
8. %f------输出小数,可以指定小数点后的位数,默认是6位
double num = 123.456789;
printf("%f\n", num); // 输出:123.4567899.%.nf-------指定小数点后保留n位小数
double num = 123.456789;
printf("%.2f\n", num); //指定位数小于实际位数,默认四舍五入
// 输出: 123.46
printf("%.2f\n", 1.2); //指定位数大于实际位数,默认用0补齐
// 输出: 1.20
10.%n.nf------//先看小数点后的n,输出规则同上;小数点后的n+小数点所占的1位+所输出数的整数部分的位数,与小数点前面的n比较,规则与%nd相同,另外,两个n前面都可加0
printf("%1.2f\n",123.456); //输出:123.46
printf("%9.4f\n",123.456); //输出: 123.4560
printf("%8.4f\n",123.456); //输出:123.4560
11. %g,%G------输出浮点数的最简形式,%g选择%f或%e格式中较短的一种,%G选择%f或%e格式中较短的一种
double num = 123.456789;
printf("%g\n", num); // 输出:123.456789
printf("%G\n", num); // 输出:123.456789
12.%c------输出单个字符
printf("%c\n", 'A'); // 输出:A
13. %s------输出字符串
char str[] = "Hello, World!";
printf("%s\n", str); // 输出:Hello, World!printf("%s\n", "Hello, World!"); // 输出:Hello, World!
14. %%------输出一个百分号
printf("%%\n"); // 输出:%
15. %p------输出指针地址或使用&的目标地址
int *ptr = NULL;
int a =10;
printf("%p%p", ptr,&a); // 输出:(nil) 或者 0x0
16.%n------将直到现在为止打印出来的字符数存入某个变量中(输入输出中均可使用)
int count;
printf("Hello, World!\n%n", &count); // 输出:Hello, World!
printf("Character count: %d\n", count); // 输出:Character count: 13 //思考:这里为什么输出的是13?//提示:!占两个字节
scanf("Hello\n%n",&count);
printf("Character count: %d\n", count); // 输出:Character count: 5
17.%[]------输入字符串,输出与字符集合匹配的字符串中的字符(只允许在输入中使用)
char str[100] = {0};
scanf("%[a-d]",str); //只允许输入a到d的字符,其余字符留在输入缓冲区内
printf("%s\n",str); //输入:abdef 输出:abd
[a-d]也可写成[d-a]或[abcd],或者[]里可以写任意字符,如[12.。?gh]
scanf("%[12.。?gh]", str); //输入:12.。fi》》?gh 输出:12.。?gh
18. %*------忽略输出一个参数
printf("%d %*d %d\n", 1, 2, 3, 4); // 输出:1 3 4
变量的作用域和生命周期
作用域
作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用 的,而限定这个名字的可用性的代码范围就是这个名字的作用域。
1. 局部变量的作用域是变量所在的局部范围。
2. 全局变量的作用域是整个工程。
生命周期
变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段。
1. 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
2. 全局变量的生命周期是:整个程序的生命周期。
常量
C语言中常量的定义和变量的定义形式有所差异。
C语言中常量分为以下几种:
字面常量
int main(){
3.14; //字面常量
1000; //字面常量
}
const 修饰的常变量
//const 修饰的常变量
const float pi = 3.14f; //这里的pai是const修饰的常变量
pi = 3.14; //是不能直接修改的!
注: 上面例子中的 pi 被称为 const 修饰的常变量,const 修饰的常变量在C语言中只是在语法层面限制了 变量 pi 不能直接被改变,但是 pi 本质上还是一个变量的,所以叫常变量。
#define 定义的标识符常量
#define MAX 100
int main(){
printf("max = %d\n", MAX); //输出:100
}
枚举常量
enum gender
{
male,
female,
secret //最后一个没有逗号
}; //括号结尾加分号
//括号中的male,female,secret是枚举常量
int main() {
printf("%d\n", male); //输出:0
printf("%d\n", female); //输出:1
printf("%d\n", secret); //输出:2
//注:枚举常量默认是从0开始,并依次向下递增1
}