15.02.07,C数据类型笔记03

来源:互联网 发布:天池大数据竞赛官网 编辑:程序博客网 时间:2024/04/30 06:21


一、  型数据舍入误差。

第二天·笔记·补充中·有说明·(其实就是精度问题)



二、字符型数据(这个楼主就不多说了,自己看吧)

字符型数据是用单引号括起来的一个字符。例如:
'a'、'b'、'='、'+'、'?'
都是合法字符型数据。

在C语言中,字符型数据有以下特点:
  • 字符型数据只能用单引号括起来,不能用双引号或其它括号。
  • 字符型数据只能是单个字符,不能是字符串。
  • 字符可以是字符集中任意字符。但数字被定义为字符型之后就不能参与数值运算。如'5'和5 是不同的。'5'是字符型数据,不能参与运算。

转义字符

转义字符是一种特殊的字符。转义字符以反斜线"\"开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。例如,在前面各示例中printf函数的格式串中用到的“\n”就是一个转义字符,其意义是“回车换行”。转义字符主要用来表示那些用一般字符不便于表示的控制代码。
常用的转义字符及其含义转义字符转义字符的意义ASCII代码\n回车换行10\t横向跳到下一制表位置9\b退格8\r回车13\f走纸换页12\\反斜线符"\"92\'单引号符39\”双引号符34\a鸣铃7\ddd1~3位八进制数所代表的字符
\xhh1~2位十六进制数所代表的字符

广义地讲,C语言字符集中的任何一个字符均可用转义字符来表示。表中的\ddd和\xhh正是为此而提出的。ddd和hh分别为八进制和十六进制的ASCII代码。如\101表示字母"A" ,\102表示字母"B",\134表示反斜线,\XOA表示换行等。

【例3-8】转义字符的使用。
  1. #include<stdio.h>
  2. int main(void){
  3. int a,b,c;
  4. a=5; b=6; c=7;
  5. printf(" ab c\tde\rf\n");
  6. printf("hijk\tL\bM\n");
  7. return 0;
  8. }

字符变量

字符变量的类型说明符是char。字符变量类型定义的格式和书写规则都与整型变量相同。例如:
char a,b;

字符变量在内存中的存储形式及使用方法

每个字符变量被分配一个字节的内存空间,因此只能存放一个字符。字符值是以ASCII码的形式存放在变量的内存单元之中的。

如x的十进制ASCII码是120,y的十进制ASCII码是121。对字符变量a、b赋予'x'和'y'值:
a='x';
b='y';
实际上是在a、b两个单元内存放120和121的二进制代码:

 
所以也可以把它们看成是整型量。C语言允许对整型变量赋以字符值,也允许对字符变量赋以整型值。在输出时,允许把字符变量按整型量输出,也允许把整型量按字符量输出。

整型量为二字节量,字符量为单字节量,当整型量按字符型量处理时,只有低八位字节参与处理。

【例3-9】向字符变量赋以整数。
  1. #include<stdio.h>
  2. int main(void){
  3. char a,b;
  4. a=120;
  5. b=121;
  6. printf("%c,%c\n",a,b);
  7. printf("%d,%d\n",a,b);
  8. return 0;
  9. }

本程序中定义a,b为字符型,但在赋值语句中赋以整型值。从结果看,a,b值的输出形式取决于printf函数格式串中的格式符,当格式符为"c"时,对应输出的变量值为字符,当格式符为"d"时,对应输出的变量值为整数。

【例3-10】
  1. #include<stdio.h>
  2. int main(void){
  3. char a,b;
  4. a='a';
  5. b='b';
  6. a=a-32;
  7. b=b-32;
  8. printf("%c,%c\n%d,%d\n",a,b,a,b);
  9. return 0;
  10. }

本例中,a,b被说明为字符变量并赋予字符值,C语言允许字符变量参与数值运算,即用字符的ASCII 码参与运算。由于大小写字母的ASCII 码相差32,因此运算后把小写字母换成大写字母。然后分别以整型和字符型输出。

字符串

字符串是由一对双引号括起的字符序列。例如: "CHINA" , “C program” , "$12.5" 等都是合法的字符串。字符串和字符不同,它们之间主要有以下区别:
  • 字符由单引号括起来,字符串由双引号括起来。
  • 字符只能是单个字符,字符串则可以含一个或多个字符。
  • 可以把一个字符型数据赋予一个字符变量,但不能把一个字符串赋予一个字符变量。在C语言中没有相应的字符串变量,也就是说不存在这样的关键字,将一个变量声明为字符串。但是可以用一个字符数组来存放一个字符串,这将在数组一章内予以介绍。
  • 字符占一个字节的内存空间。字符串占的内存字节数等于字符串中字节数加1。增加的一个字节中存放字符"\0" (ASCII码为0)。这是字符串结束的标志。

例如,字符串 "C program" 在内存中所占的字节为:


字符'a'和字符串"a"虽然都只有一个字符,但在内存中的情况是不同的。

'a'在内存中占一个字节,可表示为:


"a"在内存中占二个字节,可表示为:
北风网



补充:
1、二级考试考点

舍入误差例子:

1.0/3*3=1.000000 
1   /3*3=0.000000 

 3/2=0.000000

计算代码方:

<span style="font-size:24px;margin: 0px; padding: 0px; word-wrap: break-word;"><span style="margin: 0px; padding: 0px; word-wrap: break-word;">#include<stdio.h> int main(){printf("%f\n",3/2);    //其他的自己把3/2替换即可</span></span>
<span style="font-size:24px;margin: 0px; padding: 0px; word-wrap: break-word;"><span style="margin: 0px; padding: 0px; word-wrap: break-word;">} </span></span>


2、ASCII码表(对于这个,楼主表示不用全记,如视频说的那样记住A-Z和a-z,字符0-9)



第一部分:ASCII非打印控制字符表

ASCII表上的数字0–31分配给了控制字符,用于控制像打印机等一些外围设备。例如,12代表换页/新页功能。此命令指示打印机跳到下一页的开头。(参详ASCII码表中0-31)

第二部分:ASCII打印字符

数字 32–126 分配给了能在键盘上找到的字符,当您查看或打印文档时就会出现。数字127代表 DELETE 命令。(参详ASCII码表中32-127)

 ASCII码表0-127

BinDecHex缩写/字符解释00000000000NUL(null)空字符00000001101SOH(start of headling)标题开始00000010202STX (start of text)正文开始00000011303ETX (end of text)正文结束00000100404EOT (end of transmission)传输结束00000101505ENQ (enquiry)请求00000110606ACK (acknowledge)收到通知00000111707BEL (bell)响铃00001000808BS (backspace)退格00001001909HT (horizontal tab)水平制表符00001010100ALF (NL line feed, new line)换行键00001011110BVT (vertical tab)垂直制表符00001100120CFF (NP form feed, new page)换页键00001101130DCR (carriage return)回车键00001110140ESO (shift out)不用切换00001111150FSI (shift in)启用切换000100001610DLE (data link escape)数据链路转义000100011711DC1 (device control 1)设备控制1000100101812DC2 (device control 2)设备控制2000100111913DC3 (device control 3)设备控制3000101002014DC4 (device control 4)设备控制4000101012115NAK (negative acknowledge)拒绝接收000101102216SYN (synchronous idle)同步空闲000101112317ETB (end of trans. block)传输块结束000110002418CAN (cancel)取消000110012519EM (end of medium)介质中断00011010261ASUB (substitute)替补00011011271BESC (escape)溢出00011100281CFS (file separator)文件分割符00011101291DGS (group separator)分组符00011110301ERS (record separator)记录分离符00011111311FUS (unit separator)单元分隔符001000003220(space)空格001000013321! 001000103422" 001000113523# 001001003624$ 001001013725% 001001103826& 001001113927' 001010004028( 001010014129) 00101010422A* 00101011432B+ 00101100442C, 00101101452D- 00101110462E. 00101111472F/ 0011000048300 0011000149311 0011001050322 0011001151333 0011010052344 0011010153355 0011011054366 0011011155377 0011100056388 0011100157399 00111010583A: 00111011593B; 00111100603C< 00111101613D= 00111110623E> 00111111633F? 010000006440@ 010000016541A 010000106642B 010000116743C 010001006844D 010001016945E 010001107046F 010001117147G 010010007248H 010010017349I 01001010744AJ 01001011754BK 01001100764CL 01001101774DM 01001110784EN 01001111794FO 010100008050P 010100018151Q 010100108252R 010100118353S 010101008454T 010101018555U 010101108656V 010101118757W 010110008858X 010110018959Y 01011010905AZ 01011011915B[ 01011100925C\ 01011101935D] 01011110945E^ 01011111955F_ 011000009660` 011000019761a 011000109862b 011000119963c 0110010010064d 0110010110165e 0110011010266f 0110011110367g 0110100010468h 0110100110569i 011010101066Aj 011010111076Bk 011011001086Cl 011011011096Dm 011011101106En 011011111116Fo 0111000011270p 0111000111371q 0111001011472r 0111001111573s 0111010011674t 0111010111775u 0111011011876v 0111011111977w 0111100012078x 0111100112179y 011110101227Az 011110111237B{ 011111001247C| 011111011257D} 011111101267E~ 011111111277FDEL (delete)删除


第三部分:扩展ASCII打印字符

扩展的ASCII字符满足了对更多字符的需求。扩展的ASCII包含ASCII中已有的128个字符(数字0–32显示在下图中),又增加了128个字符,总共是256个。即使有了这些更多的字符,许多语言还是包含无法压缩到256个字符中的符号。因此,出现了一些ASCII的变体来囊括地区性字符和符号。例如,许多软件程序把ASCII表(又称作ISO8859-1)用于北美、西欧、澳大利亚和非洲的语言。






每天一点小知识:
程序查错:
当编译器报错时会提示在第几行,但实际错误往往在前一行!


一、  型数据舍入误差。

第二天·笔记·补充中·有说明·(其实就是精度问题)



二、字符型数据(这个楼主就不多说了,自己看吧)

字符型数据是用单引号括起来的一个字符。例如:
'a'、'b'、'='、'+'、'?'
都是合法字符型数据。

在C语言中,字符型数据有以下特点:
  • 字符型数据只能用单引号括起来,不能用双引号或其它括号。
  • 字符型数据只能是单个字符,不能是字符串。
  • 字符可以是字符集中任意字符。但数字被定义为字符型之后就不能参与数值运算。如'5'和5 是不同的。'5'是字符型数据,不能参与运算。

转义字符

转义字符是一种特殊的字符。转义字符以反斜线"\"开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。例如,在前面各示例中printf函数的格式串中用到的“\n”就是一个转义字符,其意义是“回车换行”。转义字符主要用来表示那些用一般字符不便于表示的控制代码。
常用的转义字符及其含义转义字符转义字符的意义ASCII代码\n回车换行10\t横向跳到下一制表位置9\b退格8\r回车13\f走纸换页12\\反斜线符"\"92\'单引号符39\”双引号符34\a鸣铃7\ddd1~3位八进制数所代表的字符
\xhh1~2位十六进制数所代表的字符

广义地讲,C语言字符集中的任何一个字符均可用转义字符来表示。表中的\ddd和\xhh正是为此而提出的。ddd和hh分别为八进制和十六进制的ASCII代码。如\101表示字母"A" ,\102表示字母"B",\134表示反斜线,\XOA表示换行等。

【例3-8】转义字符的使用。
  1. #include<stdio.h>
  2. int main(void){
  3. int a,b,c;
  4. a=5; b=6; c=7;
  5. printf(" ab c\tde\rf\n");
  6. printf("hijk\tL\bM\n");
  7. return 0;
  8. }

字符变量

字符变量的类型说明符是char。字符变量类型定义的格式和书写规则都与整型变量相同。例如:
char a,b;

字符变量在内存中的存储形式及使用方法

每个字符变量被分配一个字节的内存空间,因此只能存放一个字符。字符值是以ASCII码的形式存放在变量的内存单元之中的。

如x的十进制ASCII码是120,y的十进制ASCII码是121。对字符变量a、b赋予'x'和'y'值:
a='x';
b='y';
实际上是在a、b两个单元内存放120和121的二进制代码:

 
所以也可以把它们看成是整型量。C语言允许对整型变量赋以字符值,也允许对字符变量赋以整型值。在输出时,允许把字符变量按整型量输出,也允许把整型量按字符量输出。

整型量为二字节量,字符量为单字节量,当整型量按字符型量处理时,只有低八位字节参与处理。

【例3-9】向字符变量赋以整数。
  1. #include<stdio.h>
  2. int main(void){
  3. char a,b;
  4. a=120;
  5. b=121;
  6. printf("%c,%c\n",a,b);
  7. printf("%d,%d\n",a,b);
  8. return 0;
  9. }

本程序中定义a,b为字符型,但在赋值语句中赋以整型值。从结果看,a,b值的输出形式取决于printf函数格式串中的格式符,当格式符为"c"时,对应输出的变量值为字符,当格式符为"d"时,对应输出的变量值为整数。

【例3-10】
  1. #include<stdio.h>
  2. int main(void){
  3. char a,b;
  4. a='a';
  5. b='b';
  6. a=a-32;
  7. b=b-32;
  8. printf("%c,%c\n%d,%d\n",a,b,a,b);
  9. return 0;
  10. }

本例中,a,b被说明为字符变量并赋予字符值,C语言允许字符变量参与数值运算,即用字符的ASCII 码参与运算。由于大小写字母的ASCII 码相差32,因此运算后把小写字母换成大写字母。然后分别以整型和字符型输出。

字符串

字符串是由一对双引号括起的字符序列。例如: "CHINA" , “C program” , "$12.5" 等都是合法的字符串。字符串和字符不同,它们之间主要有以下区别:
  • 字符由单引号括起来,字符串由双引号括起来。
  • 字符只能是单个字符,字符串则可以含一个或多个字符。
  • 可以把一个字符型数据赋予一个字符变量,但不能把一个字符串赋予一个字符变量。在C语言中没有相应的字符串变量,也就是说不存在这样的关键字,将一个变量声明为字符串。但是可以用一个字符数组来存放一个字符串,这将在数组一章内予以介绍。
  • 字符占一个字节的内存空间。字符串占的内存字节数等于字符串中字节数加1。增加的一个字节中存放字符"\0" (ASCII码为0)。这是字符串结束的标志。

例如,字符串 "C program" 在内存中所占的字节为:


字符'a'和字符串"a"虽然都只有一个字符,但在内存中的情况是不同的。

'a'在内存中占一个字节,可表示为:


"a"在内存中占二个字节,可表示为:
北风网



补充:
1、二级考试考点

舍入误差例子:

1.0/3*3=1.000000 
1   /3*3=0.000000 

 3/2=0.000000

计算代码方:

<span style="font-size:24px;margin: 0px; padding: 0px; word-wrap: break-word;"><strong style="margin: 0px; padding: 0px; word-wrap: break-word;">#include<stdio.h> int main(){printf("%f\n",3/2);    //其他的自己把3/2替换即可</strong></span>
<span style="font-size:24px;margin: 0px; padding: 0px; word-wrap: break-word;"><strong style="margin: 0px; padding: 0px; word-wrap: break-word;">} </strong></span>


2、ASCII码表(对于这个,楼主表示不用全记,如视频说的那样记住A-Z和a-z,字符0-9)



第一部分:ASCII非打印控制字符表

ASCII表上的数字0–31分配给了控制字符,用于控制像打印机等一些外围设备。例如,12代表换页/新页功能。此命令指示打印机跳到下一页的开头。(参详ASCII码表中0-31)

第二部分:ASCII打印字符

数字 32–126 分配给了能在键盘上找到的字符,当您查看或打印文档时就会出现。数字127代表 DELETE 命令。(参详ASCII码表中32-127)

 ASCII码表0-127

BinDecHex缩写/字符解释00000000000NUL(null)空字符00000001101SOH(start of headling)标题开始00000010202STX (start of text)正文开始00000011303ETX (end of text)正文结束00000100404EOT (end of transmission)传输结束00000101505ENQ (enquiry)请求00000110606ACK (acknowledge)收到通知00000111707BEL (bell)响铃00001000808BS (backspace)退格00001001909HT (horizontal tab)水平制表符00001010100ALF (NL line feed, new line)换行键00001011110BVT (vertical tab)垂直制表符00001100120CFF (NP form feed, new page)换页键00001101130DCR (carriage return)回车键00001110140ESO (shift out)不用切换00001111150FSI (shift in)启用切换000100001610DLE (data link escape)数据链路转义000100011711DC1 (device control 1)设备控制1000100101812DC2 (device control 2)设备控制2000100111913DC3 (device control 3)设备控制3000101002014DC4 (device control 4)设备控制4000101012115NAK (negative acknowledge)拒绝接收000101102216SYN (synchronous idle)同步空闲000101112317ETB (end of trans. block)传输块结束000110002418CAN (cancel)取消000110012519EM (end of medium)介质中断00011010261ASUB (substitute)替补00011011271BESC (escape)溢出00011100281CFS (file separator)文件分割符00011101291DGS (group separator)分组符00011110301ERS (record separator)记录分离符00011111311FUS (unit separator)单元分隔符001000003220(space)空格001000013321! 001000103422" 001000113523# 001001003624$ 001001013725% 001001103826& 001001113927' 001010004028( 001010014129) 00101010422A* 00101011432B+ 00101100442C, 00101101452D- 00101110462E. 00101111472F/ 0011000048300 0011000149311 0011001050322 0011001151333 0011010052344 0011010153355 0011011054366 0011011155377 0011100056388 0011100157399 00111010583A: 00111011593B; 00111100603C< 00111101613D= 00111110623E> 00111111633F? 010000006440@ 010000016541A 010000106642B 010000116743C 010001006844D 010001016945E 010001107046F 010001117147G 010010007248H 010010017349I 01001010744AJ 01001011754BK 01001100764CL 01001101774DM 01001110784EN 01001111794FO 010100008050P 010100018151Q 010100108252R 010100118353S 010101008454T 010101018555U 010101108656V 010101118757W 010110008858X 010110018959Y 01011010905AZ 01011011915B[ 01011100925C\ 01011101935D] 01011110945E^ 01011111955F_ 011000009660` 011000019761a 011000109862b 011000119963c 0110010010064d 0110010110165e 0110011010266f 0110011110367g 0110100010468h 0110100110569i 011010101066Aj 011010111076Bk 011011001086Cl 011011011096Dm 011011101106En 011011111116Fo 0111000011270p 0111000111371q 0111001011472r 0111001111573s 0111010011674t 0111010111775u 0111011011876v 0111011111977w 0111100012078x 0111100112179y 011110101227Az 011110111237B{ 011111001247C| 011111011257D} 011111101267E~ 011111111277FDEL (delete)删除


第三部分:扩展ASCII打印字符

扩展的ASCII字符满足了对更多字符的需求。扩展的ASCII包含ASCII中已有的128个字符(数字0–32显示在下图中),又增加了128个字符,总共是256个。即使有了这些更多的字符,许多语言还是包含无法压缩到256个字符中的符号。因此,出现了一些ASCII的变体来囊括地区性字符和符号。例如,许多软件程序把ASCII表(又称作ISO8859-1)用于北美、西欧、澳大利亚和非洲的语言。





0 0
原创粉丝点击