在终端输入字符时并非输入一个字符就会返回,而是在遇到回车换行前,所有输入的字符都会缓冲在键盘缓冲器中,直到回车换行一次性将所有字符按序依次赋给相应的变量,在这里一定要注意最后一个字符即'\n',该字符也会赋给一个相应的变量(当然这要你定义的用来接收字符的变量数比你输入的可见字符多一才可以)。1.定义字符型变量a存放当前字符,b存放a前面一个字符。c 语言中字符串一一位数组的形式存放在内存中,因此’a’和“a”所表达的意义不同,‘a’是单字符常量,在内存中只占1个字节,存放字符a的ascii码,“a”是字符串常量,在内存中共占2个字节,其中一个字节存放a字符的ascii码,另一个字节自动存放字符串结束标记“\0” 。
C 语言中用关键字 char 定义字符型变量。例如:char ch;ch='A';字符型数据在内存中是以二进制 ASCII 码的形式存储的,长度为一个字节。3.字符型数据与整型数据的混合运算为了便于字符型数据的处理,C 语言规定,字符型数据可以与整型数据进行混合运算。【例2.6】 字符变量赋以整数。#include <stdio.h>main(){ 16第 2 章 基本的数据与运算char ch;ch=97;printf("%c\n",ch);printf("%d\n",ch);}运行结果为a97此程序中的 ch 为字符型变量,当将整数 97 赋给 ch 时,ch 中存储的就是 ASCII 码值是 97 的 字符'a' (实际上是字符'a'的二进制 ASCII 码)。故以“%c”格式符输出时,将输出字符 a ;而以“%d” 格式符输出时,将输出其 ASCII 码值 97。【例2.7】 大小写字母的转换。#include <stdio.h>main(){char c1,c2;c1='A';c2='f';c1=c1+32;c2=c2-32;printf("%c,%c\n",c1,c2);}运行结果为a,F当执行语句 c1=c1+32;时,实质上就是将字符'A'的 ASCII 码值 65 与 32 相加得 97 ,再存入到 变量 c1 中,则变量 c1 中存储的就是 ASCII 码值为 97 的字符'a'。
可见,利用字符型数据可以与整型数据混合运算的特点,能够很方便地实现字母的大小写转 换。4.无符号字符型变量与有符号字符型变量由于字符型数据可以与整型数据进行混合运算,故有的 C 语言编译系统将字符型数据又分为 两种。无符号字符型 unsigned char ,取值范围为0 到 255。有符号字符型[signed] char ,取值范围为−128 到 127。5.字符串常量C 语言除了可以处理单个字符之外,也可以处理一串字符,即字符串常量。字符串常量是用 一对双引号括起来的字符(可以包括汉字等字符)序列。如"How are you" ,"中国" ,"a"等都是合法的字符串常量。不含任何字符的字符串称为空字符串,即""。2.3 算术运算符和算术表达式C语言具有非常丰富的运算符,这里先介绍其中最常用的基本算术运算符。17C 语言程序设计——从入门到进阶2.3.1 基本算术运算符基本算术运算符包括以下几种。加法运算符:+减法运算符:−乘法运算符:*除法运算符:/求余数运算符:%取正运算符:+取负运算符:−其中前五种属于双目运算符(二元运算符,有两个运算对象),后面两种属于单目运算符(一元运算符,只有一个运算对象)。
在 C 语言中,下列运算符的用法与数学中有所不同,使用时要注意区分。(1 )两个整数相除的结果也是一个整数。先来看一个具体的例子。【例2.8】 已知球体的半径为 10 ,编程序求其体积。源程序:#include <stdio.h>#define PI 3.14159main(){float r,v;r=10;v=4/3 PI r r r;* * * *printf("v=%f\n",v);}运行结果为v=3141.590000结果显然不正确,原因何在呢?这是因为 C 语言中规定:二元运算中结果的类型与参与运算的运算对象的类型相同。故两个整数相除的结果还是一个整数,因此 4/3 的结果为 1。这种取整方法称为截断取整(或向零取整),即直接截取数学运算结果的整数部分。故相应语句应改为:v=4.0/3.0 PI r r r;* * * *或者v=4.0/3 PI r r r;* * * *也可以改为 v=PI*r*r*r*4/3; ,因为此处PI*r*r*r*4 的结果是实数,故除以整数 3 之后的结果仍是一个实数。(2 )求余数运算只能用于两个整型数据之间,且余数总是与被除数同号。
因此,若m、n 为整型数据,则有 m%n=m-m/n*n。例如: 18第 2 章 基本的数据与运算5%3=2-5%3=-25%-3=2-5%-3=-2【例2.9】 从键盘输入一个四位正整数,分离出它的各位上的数字并输出。问题分析:根据 C 语言中整除运算和求余数运算的特点,即可分离出正整数各位上的数字。源程序:#include <stdio.h>main(){int n,d4,d3,d2,d1;scanf("%d",&n);d4=n/1000; /*千位*/d3=n/100; /*百位*/d2=n/10; /*十位*/d1=n;/*个位*/printf("千位=%d, 百位=%d, 十位=%d, 个位=%d\n",d4,d3,d2,d1);}从变量n 中分离出各位数的一般方法为:个位数为n ,十位数为n0/10 (或n/10 ),百位数为 n00/100 (或n/100 ),千位数为 n000/1000(或n/1000 ),依此类推。2.3.2 算术表达式用算术运算符将运算对象连接起来所形成的符合 C 语言语法规则的算式,称为算术表达式。
其中的运算对象可以是常量、变量和函数调用。例如:a*b/c-1.5+'a'C语言中表达式的写法与数学中的代数式有所不同,使用时要注意以下几点。(1 )表达式中的乘号不能省略。例如,a*b*c。(2 )求乘方运算要调用库函数pow(x,y) 。例如,23 应表示为 pow(2,3) 。在调用该函数时,应 在程序开头添加下列文件包含命令:#include <math.h>(3 )在表达式中用括号改变运算符的运算次序时,一律使用圆括号。例如:(-b+sqrt(b*b-4*a*c))/(2*a)2.3.3 运算符的优先级运算符的优先级即运算符运算的先后优先次序。例如,在基本算术运算中,取正和取负运算 符的优先级最高,乘法、除法和求余数运算符的优先级次之,加法和减法运算符的优先级最低。有关运算符优先级的详细情况可以查看本书的附录。2.3.4 运算符的结合性当一个运算对象两侧的运算符优先级相同时,若先对左侧运算符进行运算,则称之为左结合 性;若先对右侧运算符进行运算,则称之为右结合性。19C 语言程序设计——从入门到进阶例如,在表达式 10/5*2 中,“*”和“/”均为左结合性的运算符。有关运算符结合性的详细情况可以查看本书的附录。2.4 拓展:整型数据与实型数据的内存格式2.4.1 整型数据在内存中的表示形式在表 2.1
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-106816-4.html
肯定有反制措施