常量与变量
1.常量:
在程序运行过程中,其值不能被改变的量(千万不能反过来说:值不能修改就是常量)
- 整型: 100,125,-100,0
- 实型:3.14,0.125,-3.748
- 字符型:'a','b','2'
- 字符串:"a","ab","1232"
使用的场合:
一般出现在表达式或者赋值语句中
例如:
a = 100 +b;//100整型常量
c = 12.5;//实型常量
2.变量:
系统根据变量的类型开辟对应的空间 其值可以被修改
变量名 代表的是 空间的内容(重要)
操作变量 就是 对空间内容的操作
变量名的命名规则:由数字、字母、下划线组成,不能以数字开头,建议:小写英文单词+“_”线构成
A:num_1 B:_num1 C:1_num (错误) D:num
整型数据
1.整型常量(按进制分)
知识点 :【八进制、十进制、十六进制】
十进制:0~9
八进制:0~7
十六进制:0~9 a~f
八进制、十进制、十六进制 都是整型的输出形式
void test01()
{
int num = 100;
//十进制输出 %d %u %ld %lu
printf("十进制:num = %#d\n",num);
//八进制输出 %o 以0开头
printf("八进制:num = %#o\n",num);
//十六进制输出 %x 以0x开头
printf("十六进制:num =%#x\n",num);
//不同的进制 仅仅是数据的表现形式 不会修改数据本身
//%x中添加为 %#x就可以显示禁止专属的前缀
}
int main(int argc,char *argv[])
{
test01();
return 0;
}
2.整型变量
有/无符号短整型(un/signed) short(int) 2字节
有/无符号基本整型(un/signed) int 4字节
有/无符号长整形(un/signed) long(int) 4字节
(32位处理器)
#include<stdio.h>
void test02()
{
int num1 = 0;
unsigned int num2 = 0;
long num3 = 0;
unsigned long num4 = 0;
short num5 = 0;
unsigned short num6 = 0;
//%d 有符号int数据输出
printf("num1 = %d\n",num1);
//%u 无符号int数据输出
printf("num2 = %u\n",num2);
//%ld 有符号long数据输出
printf("num3 = %ld\n",num3);
//%lu 无符号long数据输出
printf("num4 = %lu\n",num4);
//long long 用 %lld或%llu
//%hd 有符号short数据输出
printf("num5 = %hd\n",num5);
//%hu 无符号short数据输出
printf("num6 = %hu\n",num6);
}
int main(int argc,char *argv[])
{
test02();
return 0;
}
输入和输出格式一样:
unsigned short num6 = 0;
scanf("%hu",&num6);
知识点【整型变量的操作:读(取值)、写(赋值)】
#include<stdio.h>
void test01()
{
//局部变量不初始化 内容随机
//int num;
int num = 0;
int data = 0;
printf("num = %d\n",num);//读 取值
num = 100;//写 赋值
printf("num = %d\n",num);
data = num; //num读,data写
printf("data = %d\n",data);
//获取键盘输入
printf("请输入一个int数据:");
scanf("%d",&data);//&data代表是data对应空间的起始地址
printf("data = %d\n",data);
}
int main(int argc,char *argv[])
{
test01();
return 0;
}
运行结果:
num = 0
num = 100
data = 100
请输入一个int数据:784055837
data = 784055837
Press any key to continue
实型数据(浮点型)
1.实型常量
实型常量也成为实数或者浮点数
十进制形式:由数字和小数点组成:0.0、0.12、5.0
指数形式:123e3代表123*10的三次方
不以f结尾的常量是double类型
以f结尾的常量(如3.14f)是flaot类型
2.实型变量
单精度(float)和双精度(double)
float型:占用4字节,7位有效数字,指数-37到38
double:占用8字节,16位有效数字,指数-307到308
代码案例:
#include<stdio.h>
void test03()
{
//赋值语句 = 两遍的类型 尽量保证一致
//警告内容:main.c(55) : warning C4305: 'initializing' : truncation from 'const double ' to 'float '
float f = 3.14f;//3.14为double类型 f是flaot类型 ,存在溢出的可能,正确的应该写3.14f,确保类型相同
double d = 3.14;
//不以f结尾的 实型 为double类型
printf("sizeof(3.14) = %d\n",sizeof(3.14));//8字节
//以f结尾的 实型 是float类型
printf("sizeof(3.14f) = %d\n",sizeof(3.14f));//4字节
//%f 输出float数据
printf("f = %f\n",f);
//%lf 输出double数据
printf("d = %lf\n",d);
scanf("%f",&f);
scanf("%lf",&d);
}
int main(int argc,char *argv[])
{
test03();
return 0;
}
数据类型
字符常量:
直接常量:用单引号括起来,如'a'、'b'等。
转义字符: 以反斜杠“\”开头,后跟一个或几个字符、如'\n','\t'等,分别代表换行、横向跳格。
#include<stdio.h>
void test04()
{
//%c 输出的字符
//printf("%c\n",'a');
//字符变量
//ch 存储的是 'a'的ASCII值
char ch = 'a';
printf("%c\n",ch);
//%d 输出的字符的ASCII值
printf("%d\n",ch);
//'a'单引号 表示的取 字符的ASCII
//'a' == 97 是完全等价
ch = 97;
printf("%c\n",ch);
printf("%d\n",ch);
ch = ch + 1;
printf("%c\n",ch);
printf("%d\n",ch);
}
int main(int argc,char *argv[])
{
test04();
return 0;
}
总结:
- 'a'单引号 表示取a的ASCII值
- 字符在计算机中储存的是ASCII
- 'a' == 97
#include<stdio.h>
void test05()
{
char ch = 'a';
printf("%d\n",sizeof('a')); //4字节,取的ASCII值所以是整型
printf("%d\n",sizeof(ch)); //1字节
printf("%d\n",sizeof(char));//1字节
}
int main(int argc,char *argv[])
{
test05();
return 0;
}
获取键盘输入:
#include<stdio.h>
void test06()
{
char ch;
printf("请输入一个字符:");
//scanf的%c只能提取一个字符
//scanf("%c",&ch);
ch = getchar(); //获取一个字符
printf("ch = %c\n",ch);
printf("ch = %d\n",ch);
}
int main(int argc,char *argv[])
{
test06();
return 0;
}
运行结果:
请输入一个字符:asd
ch = a
ch = 97
Press any key to continue
案例提高:键盘输入"abc" 只取'a'和'b'
#include<stdio.h>
void test07()
{
char ch1,ch2;
printf("请输入abc:");
//提取a
ch1 = getchar();
getchar();//丢弃一个字符
//提取c
ch2 = getchar();
printf("ch1 = %d\n",ch1);
printf("ch2 = %d\n",ch2);
}
int main(int argc,char *argv[])
{
test07();
return 0;
}
输出内容:
请输入abc:abc
ch1 = 97
ch2 = 99
Press any key to continue
知识点:转义字符
#include<stdio.h>
void test08()
{
//'\n'换行 '\t' tab
printf("##%c##\n",'\\');//两个'\\'输出一个'\'
printf("##%%##\n");
printf("A:%d\n",'0');//字符'0'的ASCII是48
printf("B:%d\n",'\0');//'\0' 是空字符,ASCII 值是 0
printf("C:%d\n",0);//整数0
printf("D:%d\n","0");//字符串0,实际上是字符串'0'的地址
}
int main(int argc,char *argv[])
{
test08();
return 0;
}
知识点:字符串常量 ""双引号作用
#include<stdio.h>
void test09()
{
//%s 就是输出字符串
//''取的是字符的ASCII值,""取的是字符串的首元素的地址
//%s 从字符串的首元素 逐个字符输出 直到遇到'\0'
printf("%s\n","hello");
//系统会在字符串末尾自动添加一个结束字符'\0'
printf("%d\n",sizeof("hello"));
printf("%s\n","hello world");
printf("%s\n","hello\0world");
printf("##%s##\n","\0hello\0world");//第一个就是\0,所以不会显示出hello world
}
int main(int argc,char *argv[])
{
test09();
return 0;
}
输出内容:
请描述:'a'和"a"的区别?
'a' 1字节 字符
"a" 2字节 字符串
(需要了解)
格式化输出字符:
%d 十进制有符号整数
%x 以十六进制表示的整数
%f float型浮点数
%e 指数形式的浮点数
%c 单个字符
%u 十进制无符号整数
%o 以八进制表示的整数
%lf double型浮点数
%s 字符串
%p 指针的值
特殊应用:
%3d
%03d
%-3d
%5.2f
#include<stdio.h>
void test10()
{
printf("#########\n");
//%5d 表示占5个终端位宽 右对齐
printf("##%5d##\n",123);
//%-5d 表示占5个终端位宽 左对齐
printf("##%-5d##\n",123);
//%05d 占5个终端位宽 用0补齐 右对齐
printf("##%05d##\n",123);
//千万不能写 %-05d
//printf("##%-05d##\n",123);
//%5.2f 5表示总位宽为5,.2表示小数位保留两位
printf("##%5.2f##\n",3.14f);
}
int main(int argc,char *argv[])
{
test10();
return 0;
}
知识点:typedef 类型重定义
为已有的类型重新取个别名
1、用已有的类型定义一个变量
2、用别名 替换 变量名
3、在整个表达式的前方加上 typedef
案例一:
int INT32 ;
typedef int INT32;
案例二:给int arr[5] 取个别名 ARR
typedef int ARR[5];
ARR arr;//arr就是一个拥有5个int元素的数组
|