第2章 C程序设计的初步知识[视频讲解]

2.1 C语言的一个简单实例

视频二维码(扫码观看)

#include<stdio.h>/* 命令行*/
main()
{
  double a,b,area;/* 定义部分*/
  a=1.2;
  b=3.6;/* 执行部分*/
  area=a*b;
  printf("a=%f, b=%f, area=%f\n", a, b, area);
}

【说明】

main()是程序执行的入口,()不能省略。

main()有且只能有一个。

每个语句必须用“;”号结束。

命令行“#”号开头,且行尾不能加“;”。

注释必须放在“/*”和“*/”之间,且注释之间不可以再嵌套“/*”和“*/”。

2.2 标识符

视频二维码(扫码观看)

1标识符

用来标识常量、变量、函数、标号等。

(1)命名规则

由字母或下划线开头,字母、下划线和数字组成。

【注意】

第一个字符必须是字母或下划线。

中间不能有空格。

大小写敏感。

area、PI、_ini、a_array、_s12、546P、cade&1、w.w

(2)C语言的标识符分类

关键字(共32个)

如:int、double、if、else

预定义标识符

如:define、printf

用户标识符

如:red、green、number

2常量

在程序运行过程中,其值不能被改变的量。

(1)整型常量:不带小数点的数字,如12、-1、0

(2)实型常量:带小数点的数字,如3.14、-2.7、0.0

(3)字符常量:如'a'、'A'

(4)字符串常量:如"Nice"、"Beijing"

3符号常量

在程序中特别指定的一个符号名来代表的一个常量,一般用大写字母表示。如:#define PI 3.14159

4变量

在程序运行过程中,其值可以被改变的量,必须先定义后使用。在定义的同时说明其类型,编译时系统根据类型分配相应的存储空间。

2.3 数据类型

视频二维码(扫码观看)

1整型数据的分类

默认为有符号型(signed)。

基本型:int。

短整型:short int或short。

长整型:long int或long。

无符号:无符号型的整数必须是正数或零。

无符号整型:unsigned int。

无符号短整型:unsigned short。

无符号长整型:unsigned long。

长整型数据后加l或L,如123l,0L。

无符号数据后加u或U,如200u,12U。

定义的整型数所占字节数和数制范围。

【注意】一个字节在内存中占8bit。

2整数在内存中的存储形式

一个字节中的最右边称为最低位,最左边称为最高位。对于有符号的整数,最高位用来存放符号,称为符号位。若为正数,最高位放0,若为负数,最高位放1。

(1)正整数在内存中以“原码”形式存放。

如:short int a=5; 0000 0000 0000 0101

short类型的最大整数0111 1111 1111 1111 = 32767

(2)负整数以“补码”形式存放。

如short int a=-5;二进制数1000000000000101

求原码的反码。1111111111111010

将反码加1,即为补码。1111111111111011

(3)将内存中以补码形式存放的二进制转化为十进制。

如,内存中存放1111 1111 1111 1011

将符号位之外的位取反。1000 0000 0000 0100

所得二进制转换为十进制。-4

对所得数减1,即-5。

3实型数据

(1)实型常量(实数或者浮点数)

小数形式:0.123、.23、0.0。

指数形式:2.3026 = 23.026*10-1 = 2.3026*100 = 0.23026*101可表示成23.026E-1,2.3026E0,0.23026E1。

E3,5E3.6,.E3,E是非法的指数形式。

(2)实型变量

单精度型:float a,b,c; //4个字节。

双精度型:double x,y,z; //8个字节。

默认为double型,在实型常量后加字母f或F,认为它是float型。

【注意】

整型变量不能存放实数,实型变量不能存放整数。

在运算中所有float型数据自动转换为double型数据。

程序中实数可以用小数或指数表示,但内存中以指数形式存放。

由于实型数值范围较大,存放时存在误差。

2.4 运算符和表达式

视频二维码(扫码观看)

1算术运算符

+加、-减、*乘、/除、%求余、++自加、--自减

(1)运算符需要两个运算对象的,双目运算符。如:1.2*3.2。

(2)运算符需要一个运算对象的,单目运算符。如:++i。

(3)%求余运算符的对象只能是整型。如:5%2。

(4)若双目运算符两边的类型一致,则结果类型与运算数类型一致。如:1.0/2.0,1/2。

(5)若双目运算符两边类型不一致,系统自动类型转换一致后运算。如:

(6)所有实数都以双精度类型double运算。如:

系统自动转换规则:

← 表示必定的转换

↑ 表示运算对象不同类型时的转换

强制转换:(<类型名>)<表达式>

例如:(float) i,(int)(f1-f2)

【说明】如i是整型,则(float)i是float型,但i仍保留为整型。

(7)自加运算符++和自减运算符--。

++i, --i:在使用i之前,i=i+1或i=i-1。

i++, i--:在使用i之后,i=i+1或i=i-1。

【注意】++、--运算符只能用于变量,而不能用于常量或表达式。

2关系运算符

>、>=、<、<=、==、!=

优先级低于算术运算符。若关系成立,则表达式值为非零(真),若不成立,则表达式值为零(假)。

如:i>5,ch<='z',i==count,time!=p+q。

3逻辑运算符

&&:逻辑与

||:逻辑或

!:逻辑非

(1)a&&b,a||b,!a

(2)C语言中,&&和||是短路运算符号。

如:a++&&b++

4赋值运算符

=

赋值表达式:<变量> = <表达式>

优先级只高于逗号运算符,自右向左结合。

(1)复合赋值运算符

在=之前加某些特定运算符:+=,-=,*=,/=,%=。

例如:i += j+8等价于I = i+(j+8);x *= 3等价于x = x*3;p %= 2等价于p = p%2。

【例】已知a=9,计算a+=a-=a+a。

自右向左结合:a+=a-=(a+a),表达式变为计算a+=a-=18;

自右向左结合:a+=(a=a-18),这时a=9-18=-9,表达式变为计算a+=-9;

a+=-9,即为a=a+(-9),这时a=-9-9=-18。

(2)条件表达式:

<表达式1> ? <表达式2> : <表达式3>

【说明】首先计算<表达式1>的值,若为非零,则表达式的值为<表达式2>,否则表达式的值为<表达式3>。

例如:max = (a>b)?a:b /* 将a、b两数中的较大值送给max*/

5逗号运算符

,

逗号表达式:<表达式1>, <表达式2>, … , <表达式n>

优先级最低,自左向右运算,最后一个表达式的值。

如:

a=3*8,a+2

i=3,i++,++i,i+5

2.5 习题解析

1以下选项中不合法的用户标识符是(  )

A._123

B.printf

C.A $

2若x为double型变量,请写出运算x=3.2,++x后表达式的值______和变量x的值______

3C语言中的标识符可分为______、______和预定义标识符三类。

4若变量已正确定义并赋值,符合C语言语法的表达式是(  )

A.a=a+7;

B.a=7+b+c,a++

C.int(12.3%4)

D.a=a+7=c+b

5请指出以下C程序的错误所在:

main /*main function*/
{
  float a,b,c,v; /*a,b,c are sides, v is volume of cube*/
  a=2.0;
  b=3.0;
  c=4.0 v=a*b*c;
  printf("%f\n",v)
}