您的位置:首页 > 职场人生

黑马程序员——数据类型、printf函数与scanf函数

2015-12-05 11:39 405 查看
 ------  Java培训、Android培训、iOS培训、.Net培训期待与您交流! ------
                    http://www.itheima.com
一、C语言数据类型;

 1分类:基本类型、构造类型、指针类型、空类型。

1.1基本数据类型又分为:整型(短整型、整型、长整型)、实型(单精度型、双精度型)、字符型、枚举型。

1.2构造类型又分为:数组类型、结构体类型、共用体类型。

2.数据类型决定了数据在内存中占用的字节数以及取值范围。

二、常量与变量

1.常量:值不能被改变的量(常数)。

1.1.分类:整型常量(2,-2)、实型常量(2.2,-2.31)、字符常量(‘a’)、字符串常量“abc”、符号常量。

1.1.1符号常量:用标识符代表的常量,一般用大写字母表示,例如在宏定义时的应用。#define PI 3.14 其中PI就是一个符号常量。

2.标识符:所谓标识符就是在程序中定义的一些名称,例如变量名、函数名、数组名、符号常量名、文件名等。

2.1分类:关键字、预定义标识符、用户标识符。

2.2命名规则:由字母、数字、下划线、美元符号$组成;首字母不能是数字;不能与关键字同名;严格区分大小写。

2.3规范内容:起一个有意义的名称,见名知义;如果一个标示符有多个单词组成,第一单词的首字母小写,其他单词的首字母都大写,或者所有的单词的首字母都大写。

3.变量:值可以改变的量。

注意点:

严格遵守标识符的命名规范,变量名不能同名;
变量名和变量值的区别:我们定义变量时会在内存中开辟一个空间,变量名实为该空间一个符号地址,变量值存储在该空间内;
变量定义以后,是有值的,为了防止变量的原来的值对我们的程序产生影响,我们要初始化也就是给变量赋初值;
变量使用:等号的左侧必须是一个变量,一定不能写一个常量,等号的右侧可以是变量、常量、表达式;
作用域:变量作用域可以理解为变量可以使用的范围,变量按照作用域分为局部变量和全局变量;在函数的内部或者代码块的内部定义的变量,称为局部变量,其作用域从局部变量定义的位置开始,到它所在的代码块或者函数体的“}”为止,在代码块的内部可以定义和块外部同名的变量,此时块内部的变量会暂时屏蔽块外部的变量的作用域;在函数的外部定义的变量是全局变量,从定义的位置开始,到文件末尾,在不同的函数中都可以使用。

三、printf函数:标准的库函数,使用时要包含头文件:#include <stdio.h>

格式控制符:

%d 输出十进制的整
%f 输出实型的数
%c 输出字符
%s 输出字符串
%o 以八进制的形式输出
%x 以十六进制的形式输出
%p 输出地址
域宽问题(md%):

m 可为正,也可为负。
如果要输出的数的位数 > 域宽m ,则按照数据的实际位数输出。
如果要输出的数的位数 < 域宽m 要补空格:m > 0 从左侧开始补空格,m < 0 从右侧开始补空格。
%0md表示 不足部分补0,例如有输出01、02、03等格式要求时使用。

%f输出精度问题:

float类型的变量,%f打印出来的精度:有效数字是7位,默认小数点后6位,如果小数部分不足6位,补零。
double类型的变量,%f打印出来的精度:有效数字是15位,默认小数点后6位,如果小数部分不足6位,补零。
%m.nf,m表示总的列数(包括小数点所占的列),n表示小数点后的位数,通常我么会以%.nf的形式来控制输出小数的位数。

四、scanf函数:标准的库函数,使用时要包含头文件:#include <stdio.h>

注意点:

格式控制符不允许写%m.nf,但是可以写成%mf,一般我们直接使用%f的控制格式进行输入。
以%d的格式输入时,在输入值之前,如果输入了空格、回车、 tab都会被忽略。
scanf运行的原理:用户输入的内容会被存放到scanf的输入缓冲区中,然后scanf函数会根据格式控制符的要求,从输入缓冲区依次选取,如果取得的内容和我们的格式要求一致,则把值存放到变量中,如果格式不一致,则不修改变量的值。另外如果scanf缓冲区中有内容,则scanf不会提示我们再次输入。                                                                      

    int a =-1,b=-1;

    char ch='a';

    scanf("%d",&a);

    scanf("%c",&ch);

    scanf("%d",&b);

    printf("%d,%c,%d",a,ch,b);

   对于此段代码如果我们输入:13 回车 a 回车12,输出结果将会是13,   ,-1 原因就是scanf从输入缓冲区依次读取到的是13  \n  a 再结合scanf运行的原理自然会得到13, ,-1的输出结果。  针对这个问题我们可以在char ch='a';后面加上 scanf("%c",&ch);来吸收13后面的\n,从而打印出我们期望的结果:13,a,12 
                  

如果整型和字符型混合输入的时候,建议使用加上逗号的形式,例如scanf("%d,%c,%d",&a,&ch,&b); 。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: