什么是变量
- 变量是一个有名称和特定数据类型的存数单元,它用来存放数据。
- 变量的值在程序运行过程中是可以被改变的。
- 变量具有三要素:类型、名字、值。
- 变量的类型决定了变量存储占用的空间,编译时也可以根据类型检查该变量所进行的运算是否合法。
- C语言中的基本数据类型包括整型,浮点型和字符型。
数据类型
整型数据
整型数据分为整型(int)、短整型(short)、长整型(long long)。
整型变量只能存储整数,可以是负数不能是小数。
类型 | 数值范围 |
---|---|
short 16位(2字节) | -32768~32767 |
int 32位(4字节) | -2147483648~2147483647 |
long long 64位(8字节) | -9223372036854775808~9223372036854775807 |
关于长整型
在C语言教材中经常看到使用 long 或 long int来介绍长整型,long int可以简写成long。所以 long int 和 long类型相同。但是long类型占32位(4字节)
数值范围与int类型相同。因此在使用超过2147483647的数值时要使用 long long 而不是long。
整型变量还有无符号整型
unsigned short、unsigned int、unsigned long long 数据范围是0~类型最大值的2倍+1。这三种类型基本不使用。
在程序中定义整形变量
定义变量的基本语法为:
数据类型 变量名(变量名要符合标识符命名规范);
一次定义多个变量,变量之间要用多个逗号隔开。
#include"stdio.h"
int main()
{
short a;
int b;
long long c;
//也可以在定义时直接赋值(也叫初始化)
//short a=2;
//int b=3;
//long long c=4;
return 0;
}
这里定义了3个变量,分别是短整型变量a、整型变量b、长整型变量c。
定义变量后系统为该变量分配相应的存储单元,变量存数的数值不能超过最大取值范围,否则就会造成溢出错误,你将到一个不确定的值。
short、int、long long都是带符号整数类型,在计算中存储时,其机器码第一位为符号位。
例如:
int类型占4字节也就是32位,而int类型的数值范围是-2147483648~2147483647,2147483647转换成2进制数是31个1,加上符号位是32位。
(机器码就是二进制码,全部由0和1组成,机器只能识别二进制码,我们写的代码都要先编译成二进制码才能被机器运行)
浮点型数据
当我们要存数一个带小数点的数时,整形变量无法满足,这是要使用浮点型数据。
float: 单精度浮点数
double: 双精度浮点数
类型 | 取值范围与有效位数 |
---|---|
float 32位(4字节) | 3.4E-38~3.4E+38 6位有效数字 |
double 64位(8字节) | 1.7E-308~1.7E+308 16位有效数字 |
定义浮点型变量
#include"stdio.h"
int main()
{
float a;
double b;
//float a=3.1;
//fouble b=8.5;
return 0;
}
字符型数据
字符是一个用单引号引起来的单个字符 ‘A’,‘a’,‘0’,'$'等称为字符类型数据。
C语言字符类型数据标识符用char表示,如:
#include"stdio.h"
int main()
{
char a;
//char a='A';
return 0;
}
字符类型的数据在内存中以相应的ASCII码存放。(字符变量中存的不是字符本身,而是字符的ASCII码,ASCII码值的范围0~127)例如
char a=‘A’;
字符变量a存储的是A的ASCII码值,A的ASCII码值为65。
字符变量中存的是ASCII码值,所以字符变量可以参加运算,比如:
a=a+2;
这时,a中的ASCII码值为67,C的ASCII码值为67,所以字符变量a中的字符变成了C。
#include"stdio.h"
int main()
{
char a='A';//A的ASCII码为65,B的ASCII码为66 C的ASCII码是67
printf("a存的字符为:%c\na存的ASCII码为:%d\n",a,a);
a+=2;
printf("a存的字符为:%c\na存的ASCII码为:%d\n",a,a);
return 0;
}
键盘输入输入
scanf输入函数
使用标准库函数scanf(“”)可以将键盘输入的数据赋值给变量。
输入时一般用空格、tab分隔输入的多个数,回车作为输入的结束。
- scanf(“”)是一格式化输入函数,使用这个函数也要使用stdio.h头文件。
- scanf(“”)中是格式符(%d、%lf、%c等),键盘输入的内容格式符接收,按照格式存入变量的地址(接收数据赋值给变量)。
- 赋值的变量写在双引号后面,用逗号隔开(接收输入的变量被称为参数)。
- 由于scanf()的参数是按地址传递,所以变量前要加&符。
整型变量的输入输出
#include"stdio.h"
int main()
{
short a;
int b;
long long c;
printf("输入a的值:");
scanf("%d",&a);
printf("输入b的值:");
scanf("%d",&b);
printf("输入c的值:");
scanf("%lld",&c);
printf("a的值为:%d\n",a);
printf("b的值为:%d\n",b);
printf("c的值为:%lld\n",c);
return 0;
}
- 在scanf中双引号中内容就是你要输入的内容,scanf可以接收键盘输入的字符,数字。
- 双引号中的%d是十进制格式符,表示输入的数是按10进制输入,%lld表示输入的数是十进制长整型。(对于short、int类型数据使用%d,long long类型数据使用%lld)
- &a表示变量a的地址,定义变量后计算机为变量分配内存地址用来存储数据,这时a的内存地址没有值,这里&a表示输入的内容存到变量a的地址中。(因为scanf这个函数要求的参数传递的是地址)
- 一个是 scanf 输入多个数据时,接收数据的参数要用逗号隔开。
- 接收键盘输入内容的部分和参数部分也要用逗号隔开。
scanf(“%d %d”,&a,&b)中多个格式符中间的空格可有可无,如果两个格式符中间时逗号scanf(“%d,%d”,&a,&b),那么输入时也要输入逗号。
printf中双引号的内容是要输出的内容,%d表示参数按10进制输出。
#include"stdio.h"
int main()
{
int a,b;
scanf("%d %d",&a,&b);
printf("变量a的值=%d\n变量b的值=%d",a,b);
return 0;
}
- printf的参数类型不是地址,所以可以直接使用变量名,不需要加&符。
- \n是转义字符(相当一个回车),printf函数读到\n时会打印一个回车。
关于整型数据
scanf和printf输入输出数据不但能按%d十进制输入输出,还可以按8进制(%o)和16进制(%x)格式输入输出。(按10进制接收的数可以转换成8进制或16进制输出)
#include"stdio.h"
int main()
{
int a,b,c;
scanf("%d",&a);
printf("十进制:%d\n八进制:%o\n十六进制:%x\n",a,a,a);
return 0;
}
浮点型变量输入输出
浮点型的格式符分别是%f(float)和%lf(double),用法相同。
#include"stdio.h"
int main()
{
float a;
double b;
scanf("%f %lf",&a,&b);
printf("变量a的值=%f\n变量b的值=%lf",a,b);
return 0;
}
输入时不但可以输入小数也可以输入整数,但是输出时会在后面自动补0,因为输入的数是按浮点型存储。
float和double默认保留6位小数,float和double的区别是double精度比float高所以我们使用double。
对于浮点型变量的输入输出一定要用浮点型的格式符。
如果你对保留的小数位数有需求那么可以在格式符的%后加 .x ,x是一个具体的数字,表示保留几位小数。
#include"stdio.h"
int main()
{
double a,b;
scanf("%lf %lf",&a,&b);
printf("保留3位小数:%.3lf\n保留8位小数:%.8lf",a,b);
return 0;
}
字符型变量
字符变量的格式符是%c,注意:%c可以接收回车、空格等字符。
#include"stdio.h"
int main()
{
char a;
scanf("%c",&a);
printf("%c\n",a);
return 0;
}
%c将接收的字符转成ASCII码值存入为char类型变量开辟的地址中,输出时%c将ASCII码值转换成对应的字符。
如果变量是一个int类型的数据,也可以用%c转换成ASCII对应的字符(整个int类型的数据必须在ASCII码值的范围之间)
#include"stdio.h"
int main()
{
int a=70;
printf("a=%d\na按ASCII码转换成对应的字符是:%c\n",a,a);
return 0;
}
一次输入多个字符
#include"stdio.h"
int main()
{
char a,b,c;
scanf("%c %c %c",&a,&b,&c);
printf("输出a:%c 输出b:%c 输出c:%c\n",a,b,c);
return 0;
}
输入时3个%c之间由空格如果没有空格那么3个变量接收的是a,空格,b。
#include"stdio.h"
int main()
{
char a,b,c;
scanf("%c%c%c",&a,&b,&c);
printf("输出a:%c 输出b:%c 输出c:%c\n",a,b,c);
return 0;
}
原因就是%c读取了空格,将空格当成了一个字符。
getchar()和putchar()
对于字符的输入输出我们还可以用getchar和putchar进行输入输出。
getchar()的作用是接收一个字符。(无论输入多少个字符,按回车后只接收第一个字符)
putchar()的作用是输出一个字符。
#include"stdio.h"
int main()
{
char a;
a=getchar();//接收一个字符赋值给a
putchar(a);//输出a中的字符
return 0;
}