型别指的是资料的类型
因为电脑中的所有资料都是由1和0(二进位)表示,为了能表示不同种类的数值必须制定不同的规则,电脑必须知道资料的型别,才能以正确的规则储存资料
C语言的型别可以分成 整数(Integer) 和可以表示小数点的 浮点数(Floating point) 两大类,除了规定资料在电脑中(二进位)的表示方式,还规定能储存、表示的数值范围(也代表占用的容量),这边常用的型别有:
char
: -128~127的所有整数,常用於表示 字元(Character)
int
: -2147483648~2147483647的所有整数float
: 称为单精度浮点数,之後提到的浮点数通常是指它double
: 双精度浮点数,比 float
占用更多容量,但可以表示的范围更大,位数更多像是数学中的未知数,可以用一个代号或名称(变数名称)代表一笔资料,差别在变数的数值(变数值)是可变的,但数值的型别是不变的
可以把变数想成箱子,箱子上贴有标签(变数名称),我们可以透过标签找到箱子,并取得其中的内容(变数值),同一个箱子中的内容可以改变,但同一个箱子只能装一个类型的东西,且同个名称的箱子只能有一个
就像在数学里面要先 设未知数,变数要先 宣告 才能被使用
C语言宣告变数的语法是<型别> <名称>
如果要宣告一个叫 x
的整数变数,和一个叫 y
的浮点数变数
#include<stdio.h>
#include<stdlib.h>
int main(){
int x;
float y;
return 0;
}
在一行宣告多个同型别的变数,可以在变数名称之间加上逗号
#include<stdio.h>
#include<stdlib.h>
int main(){
int x, y;
return 0;
}
用等号 =
可以设定变数的值,意思是 先算出等号右边的值,再将此值指派给左边的变数
下面例子会把变数 x
的值设为 100
#include<stdio.h>
#include<stdlib.h>
int main(){
int x;
x=100;
return 0;
}
如果变数型别是 字元 时要用单引号标记,且只能有 一个文字或符号
#include<stdio.h>
#include<stdlib.h>
int main(){
char x;
x='a';
return 0;
}
也可以在宣告的同时指定值,有多个变数时可以用逗号隔开
#include<stdio.h>
#include<stdlib.h>
int main(){
int a=0;
int x=1, y=10, z=100;
return 0;
}
可以用多个等号把同一个值值指定给多个同型别的变数
#include<stdio.h>
#include<stdlib.h>
int main(){
int x=y=z=100;
return 0;
}
指派整数给浮点数变数时,小数点可以省略
#include<stdio.h>
#include<stdlib.h>
int main(){
float x=1.0;
float y=1;
return 0;
}
虽然没有硬性规定,但C语言中可以用 f
, F
标示数值是浮点数,整数时可以用 .
标示
#include<stdio.h>
#include<stdlib.h>
int main(){
float x=1.0F, y=1.12f, z=100.;
return 0;
}
目前提到的内容中,程序显示的文字都是固定的,如果要让程序显示不同的文字,就只能更改程序码
为了在不更动程序码的情况下,让程序显示不一样的内容,必须透过变数储存要显示的内容
格式化字串的目的,是把变数的值转换成字串,再合并到字串中,达到显示变数值的目的
代表在 字串中预留给变数的位置,格式化时变数的内容会转换成字串并依序填入
不同类型的资料使用的预留位置也不一样,整数用 %d
,浮点数用 %f
,字元用 %c
下面例子中,变数 a
, b
, c
的值会依照顺序填入字串中
#include<stdio.h>
#include<stdlib.h>
int main(){
int a=10, b=20, c=30;
printf("%d %d %d", a, b, c);
return 0;
}
不同型别可以同时出现在同一个字串
#include<stdio.h>
#include<stdlib.h>
int main(){
int x=10;
float y=0.5;
printf("%d %f", x, y);
return 0;
}
除了变数,字串中也可以加入其他文字及符号
#include<stdio.h>
#include<stdlib.h>
int main(){
int age=18;
printf("I am %d years old.", age);
return 0;
}
名称 | 范围 | 预留位置 |
---|---|---|
char |
-2^7~2^7-1 | %c (表示字元时)、%hd |
short |
-2^15~2^15-1 | %hd |
int (long ) |
-2^31~2^31-1 | %d (%ld ) |
long long |
-2^63~2^63-1 | %lld |
加上 unsigned
,会变成只能表示正数和0,但范围 大小 不变
名称 | 范围 | 预留位置 |
---|---|---|
unsigned char |
0~2^8 | %hu |
unsigned short |
0~2^16 | %hu |
unsigned int (unsignedlong ) |
0~2^32 | %u (%lu ) |
unsigned long long |
0~2^64 | %llu |
%d
, %f
, %c
等符号代表的是 要用哪种方式将二进位资料转换成人看得懂的资料,所以同一笔资料可以用任一种符号在格式化字串中显示,但显示的结果对人来说代表不同的数值
#include<stdio.h>
#include<stdlib.h>
int main(){
int a=75;
printf("%d %c %f", a, a, a);
return 0;
}
%hd
, %d
, %lld
都是将资料转换成整数,差异是能处理的位数(可以转换的数值范围) %hd
< %d
< %lld
下面例子中三个符号都能正确显示出 75
#include<stdio.h>
#include<stdlib.h>
int main(){
long long a=75;
printf("%hd %d %lld", a, a, a);
return 0;
}
数值超过 short
的范围,显示的结果错误
#include<stdio.h>
#include<stdlib.h>
int main(){
long long a=45000;
printf("%hd %d %lld", a, a, a);
return 0;
}
数值超过 int
的范围
#include<stdio.h>
#include<stdlib.h>
int main(){
long long a=3000000000;
printf("%hd %d %lld", a, a, a);
return 0;
}
挖坑清单:
main()
前面的 int
,和最後一行的 return 0;
\0
在字串、字元中的意思
>>: [DAY 6] _stm32f103c8t6_暂存器查找方法
上篇我们在单一元件内使用 axios 发送 API,但如果专案规模愈来愈大,需要同时管理多个功能的 ...
前言 各位早安,书接上回我们安装好python跟Visual Studio Code,完成了开发环境...
常见的故事 ... 客户 : 系统出错了 , 可以帮忙修一下吗 【・ヘ・?】 工程师 : 我这边看起...
前言 履历如果写不好,可能会糟蹋我们的专业能力,履历还能看出一个人的个性、细心程度,可以说是在面试之...
远端仓库 打RPG的时候,队友的占位与分配是很重要的! 後排玩家是要对准BOSS的弱点来个会心一击,...