您的位置:首页 > 编程语言 > C语言/C++

C语言基础教程读书笔记2(第二章常量、变量、类型转换)

2013-03-19 09:32 357 查看
第二章常量、变量、类型转换
1常量
1) 数字常量:(包括整型常量(十/八/十六进制)、浮点型常量)
整型常量(八进制前缀加0;十六进制前缀加0x);
根据长度整型常量又可分为(长整型(后缀加L)、短整型、无符号型(后缀加u))
下面我们来看一下这个程序:
[align=left]#include <stdio.h>[/align]
[align=left]int main()[/align]
[align=left]{[/align]
[align=left]printf("%d\t%x\t%o\n",29,29,29);[/align]
[align=left]printf("%d\t%x\t%o\n",025,025,025);[/align]
[align=left]printf("%d\t%x\t%o\n",0x1a,0x1a,0x1a);[/align]
[align=left]printf("%u\t%1d\n",47675u,742611);[/align]
[align=left]getchar();[/align]
}
结果为:




我们来解释一下:\n表示换行;
%d表示按照十进制输出;
\t表示水平制表;
%x表示按照十六进制输出;
%o表示按照八进制输出;
%u表示按照无符号整数输出;
%1d表示按照长整数输出(1用于说明符d,o,x之前表示长整数;用于e,f,g之前表示双精度浮点数)。

浮点常量(实型常量)可表示为(十进制小数形式和指数形式)
十进制小数合法表示有(0.567 567.0 .567 567.)
指数表示形式(该表示形式必须包含字母E/e,在之母e前必须有数字,在字母e后得数字必须为整数(正负皆可))。格式如下:
{整数部分}.{小数部分}e{指数部分}(整数部分省略时,但小数点和小数部分必须有。有整数部分时,可以省略小数点和小数部分。)
我们来看这个程序:
[align=left]#include <stdio.h>[/align]
[align=left]int main()[/align]
[align=left]{[/align]
[align=left]printf("%f\t%e\t%g\n",12e3,12.3,12.3);[/align]
[align=left]printf("%f\t%e\t%g\n",12.3456,12.3456,12.3456);[/align]
[align=left]printf("%f\t%.2f\t%f\n",12.3,12.345,123);[/align]
[align=left]getchar();[/align]
}
结果为:



我们来解释一下:\n表示换行;
%f表示按照浮点数(小数型)输出;
\t表示水平制表;
%e表示按照浮点数(指数型)输出;
%g表示按照e和f中较短的一种输出;
%2f表示按照长整数输出(2用于说明符d,o,x之前表示长整数;用于e,f,g之前表示双精度浮点数)。

2) 字符常量(字符常量、字符串常量)
字符常量:由单引号括起来的一个字符组成。(字符常量是具有数值的,即ASCII码值。可参与加减运算。)
我们来看下面一个程序:
[align=left]#include <stdio.h>[/align]
[align=left]int main()[/align]
[align=left]{[/align]
[align=left]printf("%c,%d\n",67,'m');[/align]
[align=left]printf("%c,%c,%c\n",'a','\b','b');[/align]
[align=left]printf("%c,%c,%c\n",'a','\r','b');[/align]
[align=left]printf("%c%c",'\a','\007');[/align]
[align=left]getchar();[/align]
}
输出结果为:



很奇怪啊,应该输出四行啊。怎么只有三行?
我们来解释一下:
第一行
%c表示输出单个字符,大写c的ASCII码值为67所以输出C;
%d表示按照十进制输出,字符m的ASCII码值为109;
第二行
因为%c按照字符输出所以‘a’,‘b’就输出a,b
‘\b’表示退格,在输出退格后屏幕上输出a,接着输出b
第三行
‘\r’表示回车,在前面输出a,后,执行‘\r’光标移到该行首列,即a处,这时输出控制字符创的第二个逗号,将字符a改为逗号,在输出b。
第四行
‘\a’是机器的鸣铃,‘\007’还是鸣铃。
字符串常量(由“”括起来的字符序列。)
字符实际上是一个整型数,字符串实质上是个地址值



3) 符号常量(用一个标识符来代表一个常量)
符号常量在使用之前要先定义,格式如下:
#define {符号常量名}(常量)
符号常量名长用大写
举个例子:
[align=left]#include <stdio.h>[/align]
[align=left]#define PI 3.1415926[/align]
[align=left]#define R 2[/align]
[align=left]int main()[/align]
[align=left]{[/align]
[align=left]double zhouchang,area;[/align]
[align=left]zhouchang=2.0*PI*R;[/align]
[align=left]area=PI*R*R;[/align]
[align=left]printf("zhouchang=%1f,area=%1f\n",zhouchang,area);[/align]
[align=left]getchar();[/align]
}
结果如下:



2变量(程序中值发生变化的量)(三要素:名称,类型,值。)
名称:变量必须先定义后使用,定义或说明变量时,要给出该变量的名字(大小写字母都行,应考虑变量的含义和使用目的)。
类型:(编译时系统根据变量类型分配相应的内存单元。)
1) 基本数据类型(整型(整型,长整型,短整型),浮点型(单精度浮点型,双精度浮点型),字符型)如:



基本数据类型定义格式如下:
int a,b,c;
2) 构造数据类型(由若干个相同或不同的基本数据类型变量按照不同规律组合成的。)
如数组,结构,联合,枚举。
3) 存储类(自动存储,寄存器存储,外部存储,静态存储)。

值:(变量要被赋值,或赋初值才能被使用。)
1) 赋值:将一个数值赋给变量,直到下次再被赋值为止。
2) 赋初值:在定义或说明变量时,将一个数值送给变量的。



float占4个字节,double占8个字节。
3数组(数目固定,类型相同的若干变量的有序集合)
1)数组定义格式如下:
{类型说明符}{数组名}【{常量表达式1}】【{常量表达式2}】。。。。
数组元素的表示如下:
{数组名}【{下标1}】【{下标2}】。。。(数组下标从0开始。
举个例子:
int a[3] 表示a数组中有3个元素:a[0],a[1],a[2]。
3) 数组的赋值
赋初值格式如下:
Static int a[5]={5,4,3,2,1} 其中(a[0]=5,a[1]=4,a[2]=3,a[3]=2,a[4]=1)
赋值格式如下:
int a[5],b[1][2];
a[0]=a[1]=a[2]=1;
a[3]=a[4]=0;
b[0][0]=3;
b[0][1]=2;
b[1][0]=9;
b[1][1]=8;
b[1][2]=4;
是不是有点麻烦?
其实还可以采用循环复制的方法:
for(i=0;i<6;i++)
a[i]=i+1;
这表示对a的6个元素分别赋值1,2,3,4,5,6。
注意!一下赋值方式是错误的:
int a[5];
a={1,2,3,4,5};
下面我们来看一个二维数组的赋值(这个比较常用)
[align=left]#include <stdio.h>[/align]
[align=left]int main()[/align]
[align=left]{[/align]
[align=left]int i,s=0;[/align]
[align=left]static int b[3][3]={{6},{7,8}};[/align]
[align=left]for(i=0;i<3;i++)[/align]
[align=left]b[2][i]=i+1;[/align]
[align=left]for(i=0;i<3;i++)[/align]
[align=left]s+=b[i][i];[/align]
[align=left]printf("%d\n",s);[/align]
[align=left]getchar();[/align]
}
输出结果如下:



我们来分析一下:
首先我们把b[3][3]每个元素都列出来:
(b[3][3]={{6},{7,8}}其实就是b[3][3]={{6,0,0},{7,8,0},{0,0,0}}
b[0][0]=6,b[0][1]=0,b[0][2]=0
b[1][0]=7,b[1][1]=8,b[1][2]=0
b[2][0]=0,b[2][1]=0,b[2][2]=0)
for(i=0;i<3;i++) #执行三次循环赋值;
b[2][0]=1,b[2][1]=2,b[2][2]=3

for(i=0;i<3;i++)
s+=b[i][i]; #把b[0][0]+b[1][1]+[2][2]的值赋给s
s=0+6+8+3=17)

数组除了有数字数组外,还有字符数组(数组内各元素是char类型的),定义和数字数组定义相同。
格式如下:
static char m[5]={‘a’,’b’,’c’,’d’,’\0’};等价于static char m[]=”abcd”;
我们来看下面两条语句:
Static char x[3]={‘a’,’b’,’\0’};
Static char y[3]={‘a’,’b’,’c’};
数组x中存放的是一个字符串“ab“,而数组y中存放的不是字符串,而是三个字符a,b,c
因为数组y的三个元素中没有结束符’\0’。
(如果将一个字符创常量在定义数组时赋初值给该数组,则该数组将存放所赋予的字符串,这时系统将自动给数组加一个’\0’作为结束符。
注意字符串有效数字加1后小于等于字符数组的元素个数。

总结一下:
1) 字符串的输入方法可以单个字符输入;
2) 字符串的输出方法可以单个字符输出,使用格式符%c,最终形成字符串形式,也可以使用%s一次输出字符串;
3) 使用格式符%c输出字符时,对应参数是数组元素名,使用格式符%s输出一个字符串时,对应参数是数组名,实际上是一个地址值;
4) 在使用格式符%s输出字符串时,实际上是从给定的地址开始逐一输出其存放的字符直到遇到’\0’为止。
4类型转换(自动转换,强制转换)
1)自动转换是根据规则自动进行转换的。
char和short转换成int
float转换成double
int->unsigned->long->double
2)强制转换
格式如下:
({类型说明符})(表达式)
(double)(a+5)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐