回顾上一章 利用上一张所学写出c语言表达式
问题分析——计算圆面积
假设圆的半径用radius表示,若半径的值为10,利用公式,计算圆面积。
圆的面积公式:S=πr2
#include "stdio.h"
#define PI 3.14
void main()
{
int radius;//半径为整数
double S;//求面积
printf("请输入一个半径(限定半径为整数):");
scanf("%d",&radius);//%是引导符,d是整数型 %d是占位符
S=PI*(radius*radius);//圆的面积公式
printf("%lf\n",S);输出“\n”代表空格
}
常量与变量
任何程序都涉及到待处理的数据,数据可以是常量和变量。
C语言可处理的数据类型有很多,可分为基本类型,构造类型,指针类型和空类型。按图所示:
常量定义:在C语言中其值不能被改变的量叫常量。
常量类型:整数常量,实型常量,字符常量,字符串常量,符号常量等等 即使是整型常量也有基本型,短整型,长整型……之分
变量定义:只在程序运行过程中其值可以被改变的量。
类型名:常量名1,常量名2,…变量名n 其中变量名必须遵循用户标识符的规则
- 必须由英文字母、数字、下划线组成,开头用英文字母或下划线开头
- 不能把C语言关键字作为用户标识符
- 区分大小写
- 限制八位
整型常量三种表示形式:
(1)十进制表示形式,如日常见到的10、35、128、1561等
(2)八进制表示形式:以0开头的八进制数,如023 即八进制数的23
首先知道 bit:音译为“比特”,指二进制位,由0、1组成。二进制是专门为计算机研究的,计算机的bit0=1
bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
计算35的二进制 如图:
(3)十六进制数表示形式:以0x开头作为十六进制数。如0x23,即十六进制数的23
十六进制为0 1 2 3 4 5 6 7 8 9 a b c d e f
十六进制只需要把每位数变成二进制的四位数,
比如1=0001…a=1010、b=1011、c=1100、…f=1000
比如十六进制数:cf03转换二进制为1100 1000 0000 0011
整型变量:
整型变量的基本类型符为int。可以根据数值的范围将变量定义为基本整型,短整型和长整型等等
常见整型:
- 基本整型:int
- 短整型:short[int]
- 长整型:long[int]
整型变量应用:
int a,b;//定义a,b为整型常量
短整型举例:
#include <stdio.h>
void main()
{
short int a,b;
a=32767;
b=a+1;
printf("a=%d,b=%d\n",a,b);
}
实型常量:
十进制形式:它由整型部分,小数点和小数三部分组成。当整数部分或小数点部分为0时,0可以省略,但小数点不可以省略。
例如:12.1、12.2、10.18、10.8、0.0等
实型变量:
实型变量又称浮点型变量,又分单精度(float型),双精度(double型),长双精度(long double型)。
float a,b;//(定义a b为单精度)
double c,f;//(定义a b为双精度)
long double z;//(定义a b为长双精度)
题目:假设银行定期存款的年利率是3.25%,并已知存款期限为n年,存款本金为x元,编写程序计算n年后得到的本利之和是多少。利用公式“”计算n年后的本利之和。定义变量x和n分别保存本金和存款年限。
#include "stdio.h"
void main()
{
int x,n;
double sum;
printf("请输入存款多少年(整数):");
scanf("%d",&n);//""字符串
sum=(10000*(3.25*0.01)*n)+10000;//假如存款为10000元
printf("可以得到%lf元",sum);
}
运算结果如下图:
字符型数据:
字符常量:c语言用单引号括起来的单个字符,成为字符常量。
例如:’a’、’A’、’1’等,其中’a’和’A’是两个不同的字符常量
一个常量对应着一个编码值,在ASCII字符中,字符常量’0′-’9‘的编码值是ASCII的48~57,显然,0与’0’是不用的。C语言中还有一种特殊的字符常量,即转义字符常量。常用与”\“开头的特殊字符如下图所示:
字符变量:字符变量是用来存放字符常量的,并且只能存放一个字符,而不是一个字符串。类型关键字用“char”来表示,占用 1 字节的内存单元。
//例如
char=ch1,ch2;//定义两个字符变量c1,c2
c1=‘a’,c2='b'//给字符变量赋值
//将一个字符常量储存到字符变量当中,实际上是将该字符的ASCII值储存到单元格中
#include "stdio.h"
void main()
{
char c1,c2;
c1='a';c2='A';
c1=c1-32;c2=c2+32;
printf("c1=%c,c2=%c\n",c1,c2);
printf("c1=%d,c2=%d\n",c1,c2);
}
字符串常量定义:
- 字符串常量是用一对双引号括起来的字符序列。
- 字符串中的字符个数成为字符串长度。
- 长度称为0的字符串长度为空串,表示为““。
字符串的储存:
C语言规定:在储存字符串常量时,由系统在字符串的末尾自动加一个”\0“作为字符串的结束标志。
如果有一个字符串为”CHINA“,它在内存储存:
C | H | I | N | A | \n |
两者不同之处:定界不同 字符串是”“,字符是‘’。
长度不同:字符常量的长度固定为1,而字符串长度常量的长度可以是0,也可以是某个整数。
字符要求不同:字符常量储存的字符是ASCII码值,而字符串常量除了要储存有效的字符外,还要储存一个字符‘\0’。
运算符是某种操作的符号,在C语言中,除控制语句,输入输出函数外,其他所有基本操作都作为运算符处理。C语言运算符可分为以下几类:
- (1)算术运算符:+ – * / % ++ —
- (2)关系运算符:> >= < <= == !=
- (3)逻辑运算符:&& || !
- (4)赋值运算符:= += -+ *= /= %= &= |= ^= <<= >>=
- (5)条件运算符:? :
- (6)逗号运算符:,
- (7)位运算符:& | ^ ~ << >>
- (8)指针运算符:* &
- (9)求字节数运算符:sizeof
- (10)强制类型转换运算符:(类型标识符)
- (11)分量运算符:. ->
- (12)下标运算符:[ ]
- (13)圆括号:( )
算数运算符和算术表达式
1.基本算数运算符有:
(+)加法运算符或取正值运算符,如1+2,+2
(-)减法运算符或取负值运算符,如2-1,-2
(*)乘法运算符,如1*2
(/)除法运算符,如5/2
(%)求余运算符,或称模运算符,如7%5的值为2
注意:
C语言规定:
两个整数相除,其商为整数,小数部分被舍弃。例如,5 / 2=2
如果操作数中有负数,取整通常采取”向零取整“的方法。例如,5 / -3=-1
求余运算符的两边要求是整数,否则出错。如:9%5,结果为4。
如9.5%5,结果出错。
算术表达式和运算符的优先级与结合性:
C语言规定了运算符的优先级和结合性。在表达式求值时,先按运算符的优先级别高低执行,比如先算乘除后加减。
如运算符两侧优先级相同,从”左”自“右”运算。
#include "stdio.h"
void main()
{ int x=0;
float y=0.0;
printf("\ninput an integer x(x<2 or x>2):");
scanf("%d",&x); /*从键盘输入一个整数值,赋值给变量x */
y=(float)(x*x-5*x+3)/(x-2); /*计算表达式*/
printf("\nx=%d,y=%f\n",x,y); /*输出x和y的值 */
}
//这段代码(float)限定y最后的输出为双精度格式。
自增,自减运算符:
前置运算:运算符放在变量前:++变量,–变量
前置运算,先增减后运算
例如:j=++i,其中i=2,先计算i=++i=2+1=3,再计算j=3
后置运算,先运算后增减
例如:j=i++,其中i=2,先计算j=i=2,在计算i=i++=2+1=3
–i,i–同上理。
#include <stdio.h>
void main()
{ int x=1, y;
printf("x=%d\n",x);/*输出x的初值*/
y=++x;/*前置运算*/
printf("x=%d, y=%d\n",x,y);
y=x--;/*后置运算*/
printf("x=%d, y=%d\n", x, y);
}
//此公式是按照顺序运算
最后结果为:x=2 y=2;x=1 y=2;
赋值运算符和赋值表达式:
赋值运算符:”=“,将右面的值赋给左边的变量。
a=5/*将5赋给变量a*/
x=(a+3)*5/2/*将表达式(a+3)*5/2的值赋给变量x*/
复合赋值运算符:在赋值运算符“=”加上一个其他的运算符
i+=1;//运算方式为:i=i+1
a*=n-2;运算方式为:a=a*(n-2)
r%=3;运算方式为:r=r%3 %是求余数的。比如r=5,计算结果为2
赋值表达式一般格式为:<变量><赋值表达式><表达式>
赋值表达式的值就是被赋值变量的值
例如x=5这个赋值表达式的值为5(变量为5)
计算a+=a-=a*a,设a=5,求a的值
a-=a*a
a=a-(a*a)=-20
a+=a
a=a+a=-40
//最后结果为-40
使用赋值表达式还可能遇到以下问题:
a=(b=1)
因为()优先级最高a= b=1
赋值表达式还可以包含复合赋值运算符,比如运算下列:
a+=a-=a*=a 假设a=2,a=a*a=4; a=a-a=0 ; a=a+a=0
最后结尾为0。
#include "stdio.h"
#include "math.h"
void main()
{
float a,b,c,x1,x2;//这里a b c得用flaoat定义
printf("请输入三个数:");
scanf("%f,%f,%f",&a,&b,&c);
x1=(-b+sqrt(b*b-4*a*c))/(2*a);
x2=(-b-sqrt(b*b-4*a*c))/(2*a);
printf("x1=%f,x2=%f",x1,x2);
}
关系运算符和关系表达式:
关系运算符:<(小于) <= (小于等于)>= (大于等于)==(等于) !=(不等于)
前四种运算符优先后两种运算符
关系表达式:真为”1“,假为”0“
假设n1=3 n2=4 n3=5
- n1>n2的值为0(n1>n2)!=n3的值为1 n1>n2=0 ; 0!=n3
- n1<n2<n3的值为1 n1<n2=0 ; 0<n3=1
- (n1<n2)<n3的值为1 (n1<n2)=1 ; 1<n3=0
逻辑运算符和逻辑表达式:
逻辑运算符:逻辑与(&&)//同时 逻辑或(||)//或者 逻辑非(!)//否定。其中没有”()“。
逻辑运算规则:&&两个都为真为真,||两个有一个为真为真,!当运算量的值为真,运算结果为假。
逻辑运算符的优先级:!(逻辑非)—>&&(逻辑与)—||(逻辑或)
逻辑表达式:(a>b)&&(x>y)||(a<=b)
逻辑量判断真假关系:假为0,非0为真
逗号表达式和逗号运算符:
1.逗号运算符在C语言中优先级是最低的
2.逗号表达式一般为:表达式1,表达式2,…表达式n
位运算符:
B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
3 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
9 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 |
”按位或“运算符:x|y:当对应的两个二进制有一个为1时,例如3|9=11
“异或”运算符:x^y,当对应的两个二进制相异时结果为1,相同时结为0,例如3^9=10
”取反”运算符:~x,即二进位数0变1,1变0 例如~14=1 b0=1
“左移”运算符:二进制运算符向左拉至若干位,低位补0。例如5<<2=24
”右移“运算符:二进制运算符向右拉直若干位,低位补0。例如20>>2=5
数据类型转换:
一般格式为:(类型名)(表达式)
举例:(double)a等价于(double)(a),将a的值转换为double类型
举例 (float)(5/2) 将5/2转化为实型,5/2=2
(float)5/2 将5转化为实型,5/2=2.5