回顾上一章 利用上一张所学写出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

bit7bit6bit5bit4bit3bit2bit1bit0
87654321
八进制、十进制和十六进制转换二进制 除以2 反向取余数,直到商为0结束

计算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值储存到单元格中
字母进行大、小写转换,并输出转换结果和字母的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“,它在内存储存:

CHINA\n
注意:字符常量’a’和字符串常量”a”是两回事。

两者不同之处:定界不同 字符串是”“,字符是‘’。

长度不同:字符常量的长度固定为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

位运算符:

B7B6B5B4B3B2B1B0
87654321
————————————————————————————————————————–
300000011
900001001
“按位与”运算符:x&y:二位进制都为1,结果才位1,例如3&9=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

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注