基本数据类型
整型数据
C语言中的整型数据类型用于存储整数,包括:
- char:1字节,存储字符或小整数(-128~127)
- short int:2字节,短整型(-32768~32767)
- int:4字节(32位系统),默认整数类型(-2147483648~2147483647)
- long int:4或8字节,长整型
- long long int:8字节,更长的整型(C99标准新增)
整型常量可以用十进制、八进制(以0开头)和十六进制(以0x或0X开头)表示。
示例:
int decimal = 100; // 十进制
int octal = 0144; // 八进制,等于十进制的100
int hexadecimal = 0x64; // 十六进制,等于十进制的100
浮点型数据
浮点型用于存储小数或科学计数法表示的数字:
- float:4字节,单精度浮点型(6-7位有效数字)
- double:8字节,双精度浮点型(15-16位有效数字)
- long double:8或12字节,更高精度的浮点型
浮点型常量可以用小数形式(3.14)或指数形式(1.2e3)表示。
示例:
float pi = 3.14f; // 单精度浮点数
double distance = 1.5e11; // 科学计数法,表示1.5×10¹¹
long double precise = 3.1415926535L; // 长双精度浮点数
字符型数据
字符型用于存储单个字符:
- char极>:1字节,存储ASCII字符(-128~127)
字符常量用单引号括起来('A'),字符串用双引号括起来("ABC")。C语言没有专门的字符串类型,而是使用字符数组存储字符串。
示例:
char grade = 'A';
char newline = '\n'; // 转义字符,表示换行
char message[] = "Hello"; // 字符数组存储字符串
整型数据类型练习题
1. 以下哪个选项正确定义了一个长整型变量并初始化?
正确答案:B
解析:长整型变量应使用long int或long声明,初始化值后加L后缀表示长整型常量。
2. 以下代码的输出是什么?
#include <stdio.h>
int main() {
short a = 32767;
printf("%d", a + 1);
return 0;
}
正确答案:B
解析:short类型范围是-32768~32767。32767+1超出了最大值,发生溢出,结果为-32768。
3. 以下哪个是有效的八进制整型常量?
正确答案:C
解析:八进制数以0开头,只能包含0-7的数字。A选项包含8,无效;B是十六进制;D是十进制。
4. 以下代码的输出是什么?
#include <stdio.h>
int main() {
int a = 10;
int b = 3;
float c = a / b;
printf("%.2f", c);
return 0;
}
正确答案:B
解析:整数除法a/b结果是3(整数),然后赋值给float变量c,所以是3.00。
5. 以下哪个是有效的字符常量?
正确答案:C
解析:字符常量用单引号括起来,只能包含一个字符。A是字符串;B包含两个字符;D缺少引号。C是八进制转义字符,表示'A'。
常量
常量的概念与分类
常量是在程序运行过程中值不能改变的量:
- 字面常量:直接使用的数值,如10、3.14、'A'
- 符号常量:使用#define定义的常量,如#define PI 3.14159
- 整型常量:如100、0123(八进制)、0x1A(十六进制)
- 浮点型常量:如3.14、1.2e3
- 字符常量:如'A'、'\n'(转义字符)
- 字符串常量:如"Hello World"
字符串常量以'\0'结尾,所以字符数组长度要比实际字符数多1。
示例:
#define MAX_SIZE 100 // 符号常量
#define PI 3.14159
int main() {
int count = 10; // 10是字面常量
char letter = 'B'; // 'B'是字符常量
char name[] = "Tom"; // "Tom"是字符串常量(实际存储'T','o','m','\0')
// ...
}
const关键字
使用const关键字可以定义只读变量(常量):
const int MAX = 100; // MAX是只读的整型常量
const float PI = 3.14159; // PI是只读的浮点型常量
const常量在定义时必须初始化,之后不能再修改它的值。
常量练习题
1. 以下定义符号常量的方式哪个是正确的?
正确答案:C
解析:#define指令定义符号常量时不需要等号和分号,格式为#define 常量名 值。
2. 以下选项中可作为C语言合法常量的是?
正确答案:A
解析:B选项-080是八进制,但八进制不能出现8;C选项-8e1.0的指数部分不能为小数;D选项-80.0e缺少指数部分。
3. 以下哪种方式可以正确存储字符串"Hello"?
正确答案:B
解析:字符串"Hello"需要6个字符空间(5个字符+1个结束符'\0')。A选项空间不足;C选项缺少结束符;D选项空间不足。
4. 以下关于const关键字的说法,错误的是?
正确答案:C
解析:尝试通过指针修改const变量是未定义行为,可能导致程序崩溃或不可预测的结果。
5. 以下代码的输出是什么?
#include <stdio.h>
#define PI 3.14
int main() {
const double pi = 3.1415926;
printf("%.2f %.4f", PI, pi);
return 0;
}
正确答案:A
解析:符号常量PI值为3.14,const常量pi值为3.1415926,%.2f输出3.14,%.4f输出3.1416(四舍五入)。
变量
变量的定义与使用
变量是程序运行期间值可以改变的量:
- 定义格式:数据类型 变量名; 如:int count;
- 命名规则:由字母、数字、下划线组成,且第一个字符必须是字母或下划线
- 重要规则:C语言区分大小写,必须先定义后使用
- 初始化:定义变量时可以同时赋值,如int count = 10;
变量名不能使用C语言的关键字(如int、for、while等)。
示例:
int age; // 定义整型变量
float salary; // 定义浮点型变量
char grade = 'A'; // 定义并初始化字符变量
age = 20; // 赋值
salary = 3500.50; // 赋值
变量的作用域
根据变量的定义位置,有不同的作用域:
- 局部变量:在函数或复合语句内部定义,只能在该函数或复合语句内使用
- 全局变量:在函数外部定义,可以被程序中所有函数使用
不同函数中可以使用相同名字的局部变量,它们互不影响。
示例:
int global = 10; // 全局变量
void func1() {
int local = 20; // 局部变量
// ...
}
void func2() {
int local = 30; // 另一个局部变量,与func1中的local互不影响
// ...
}
变量练习题
1. 以下哪个是有效的变量名?
正确答案:B
解析:变量名只能包含字母、数字和下划线,不能以数字开头,不能使用关键字。A以数字开头;C是关键字;D包含连字符。
2. 以下代码的输出是什么?
#include <stdio.h>
int global = 5;
void func() {
int local = 10;
global = global + 1;
printf("%d %d ", global, local);
}
int main() {
int local = 20;
func();
printf("%d", local);
return 0;
}
正确答案:A
解析:func()中修改了全局变量global为6,输出6和局部变量local=10;main()中输出自己的局部变量local=20。
3. 以下代码的输出是什么?
#include <stdio.h>
int main() {
int a = 5, b = 10;
{
int a = 20;
b = b + a;
printf("%d ", a);
}
printf("%d %d", a, b);
return 0;
}
正确答案:A
解析:复合语句内a=20,输出20;复合语句外a恢复为5,b=10+20=30,输出5和30。
4. 以下关于变量初始化的说法,正确的是?
正确答案:C
解析:全局变量和静态局部变量不初始化时值为0;普通局部变量不初始化时值为随机值。
5. 以下代码的输出是什么?
#include <stdio.h>
int main() {
int x = 10;
int y = x++ + ++x;
printf("x=%d, y=%d", x, y);
return 0;
}
正确答案:A
解析:x++返回10(x变为11),++x返回12(x变为12),y=10+12=22。