二.基本数据类型
C 语言包含的数据类型如下图所示:
这张图大家肯定在很多教材中都见过,它包含了C语言中涉及的全部数据类型
1.编译器要处理数据 那么就需要知道数据的存储大小和存储方式(即数据类型)
注:可用 sizeof()是操作符 sizeof测量的实体大小为编译期间就已确定 获取
windows操作系统,32位机中:
- char: 1个字节
- short: 2个字节
- int: 4个字节
- long: 4个字节
- float: 4个字节
- double: 8个字节
windows操作系统,64位机中:
- char: 1个字节
- short: 2个字节
- int: 4个字节
- long: 8个字节
- float: 4个字节
- double: 8个字节
2.变量的定义
2.1定义变量的格式是 类型 变量名
short a = 1;
long a = 10;
float a = 4.5f;
double a = 4.5;
string str = "ABCDEF";
int a;//定义一个整型变量a
定义变量的时候可以用给他赋值
char ch=‘A’; //字符要加单引号’ ‘
//或者先定义然后赋值
char ch;
ch=65; //字符类型可以直接使用ASCII码(这个是数字 不要加单引号)
2.2变量的输入输出
#include<stdio.h>
int main()
{
/********整型*********/
int y; //准备变量
printf("请输入一个整型");
scanf("%d", &y); // 注意 scanf 要取地址 &
printf("用户输入的内容是%d\n", y);
/********字符型********/
char ch; //准备变量
printf("请输入一个字符");
scanf("%c", &ch); // 注意 scanf 要取地址 &
printf("用户输入的内容是%c\n", ch);
/********单精度浮点型*********/
float a; //准备变量
printf("请输入一个float型");
scanf("%f", &a); // 注意 scanf 要取地址 &
printf("用户输入的内容是%f\n", a);
/********双精度浮点型*********/
double b; //准备变量
printf("请输入一个double型");
scanf("%lf", &b); // 注意 scanf 要取地址 &
printf("用户输入的内容是%lf\n", y);
return 0;
}
- 输入控制
scanf 获取用户输入的数据 将数据存放在某个地址 既&变量
比较严格 %f %lf 不能混用 - 输出控制
除了基本的输出之外,printf还提供了一系列输出控制,以便使输出的内容更加整齐正式
完整的printf 格式 %[标志] [宽度] [.精度]type
格式字符
格式字符用以指定输出项的数据类型和输出格式。
①d格式:用来输出十进制整数。有以下几种用法:
%d:按整型数据的实际长度输出。
%md:m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。
%ld:输出长整型数据。
②o格式:以无符号八进制形式输出整数。对长整型可以用"%lo"格式输出。同样也可以指定字段宽度用“%mo”格式输出。
例:
main()
{ int a = -1;
printf("%d, %o", a, a);
}
运行结果:-1,177777
程序解析:-1在内存单元中(以补码形式存放)为(1111111111111111)2,转换为八进制数为(177777)8。
③x格式:以无符号十六进制形式输出整数。对长整型可以用"%lx"格式输出。同样也可以指定字段宽度用"%mx"格式输出。
④u格式:以无符号十进制形式输出整数。对长整型可以用"%lu"格式输出。同样也可以指定字段宽度用“%mu”格式输出。
⑤c格式:输出一个字符。
⑥s格式:用来输出一个串。有几中用法
%s:例如:printf("%s", "CHINA")输出"CHINA"字符串(不包括双引号)。
%ms:输出的字符串占m列,如字符串本身长度大于m,则突破获m的限制,将字符串全部输出。若串长小于m,则左补空格。
%-ms:如果串长小于m,则在m列范围内,字符串向左靠,右补空格。
%m.ns:输出占m列,但只取字符串中左端n个字符。这n个字符输出在m列的右侧,左补空格。
%-m.ns:其中m、n含义同上,n个字符输出在m列范围的左侧,右补空格。如果n>m,则自动取n值,即保证n个字符正常输出。
⑦f格式:用来输出实数(包括单、双精度),以小数形式输出。有以下几种用法:
%f:不指定宽度,整数部分全部输出并输出6位小数。
%m.nf:输出共占m列,其中有n位小数,如数值宽度小于m左端补空格。
%-m.nf:输出共占n列,其中有n位小数,如数值宽度小于m右端补空格。
⑧e格式:以指数形式输出实数。可用以下形式:
%e:数字部分(又称尾数)输出6位小数,指数部分占5位或4位。
%m.ne和%-m.ne:m、n和”-”字符含义与前相同。此处n指数据的数字部分的小数位数,m表示整个输出数据所占的宽度。
⑨g格式:自动选f格式或e格式中较短的一种输出,且不输出无意义的零。
%hd short
%ld long
%lld long long
%x 16进制整型
%o 8进制整型
%u 无符号整型
%s 字符串
%p 地址
3.赋值
定义了变量之后,要给变量赋值。没有被赋值的变量是不能被使用的,这是C语言的一个重要规定。
int a;//定义变量
a = 5;//赋值
int a = 5;//一步到位
4.变量的命名规则
真正的软件开发中,变量命名是一个非常重要的内容。在团队开发、项目传承的过程中,代码的可读性起着重要的作用。因此要养成好的变量命名习惯。
4.1 命名要能望文生义
要便于记忆和阅读。标识符最好采用英文单词或其组合,不允许使用拼音。程序中的英文单词一般不要太复杂,用词应当准确。C语言开发中有一个比较著名的命名规则叫“匈牙利命名法”,有兴趣可以学习一下。
无论什么样的命名规则,都有它的利弊所在,真正的项目中也会有具体的命名规则要求。重点是,每个人自己写的代码要自己有一个统一的规则,这样无论是别人还是自己都更容易读懂和维护。不要过一段时间连自己写的代码都看不懂了,这是最基本的要求。
其实大学计算机等级考试中,很多题目都是符合这条的,这给考生很多空子可钻。记得有个题目是这样的。
int a, b, sum;
a = 5;
b = 1;
sum = XXXXX(a, b);
printf("%d", sum);
请问屏幕打印出的数字是多少?
这道题主要考的是XXXX函数的问题,也许你根本没看懂这个函数是啥意思,但一看变量“sum”你就知道最终输出的肯定是一个和,所以答案是6。
4.2 要用最短的命名表达最多的意思
虽然现在对命名长度的限制越来越小,但过长的命名还是影响代码的可读性。
4.3 尽量不要出现数字
Value1,Value2 这样的变量还是少用为好
4.4 不要靠大小写区分的相似的标识符
int a, A; // 绝对不允许
反正容易混淆的就尽量别用
好了,今天就先说到这里。下一篇我们开始讲常量与变量。