C语言 ---顺序程序设计训练

""概述:C语言总共分为9个模块""

1.顺序程序设计训练

2.分支程序设计训练

3.循坏程序设计训练

4.数组应用训练

5.模块化程序设计训练

6.构造数据类型应用训练

7.指针应用训练

8.文件操作训练

9.位操作训练

(#注意:若是甘肃专升本小伙伴只需学到第六章构造数据类型应用训练)

今天,小编先带大家认识模块一:顺序程序设计训练

先引用一个程序:

#include<stdio.h>
void main(){
    printf("Hello World!") /* 输出语句 "Hello World! "*/
}

这是完整的一个c语言程序 “/* “与” */”及其之间的内容是对程序的注释说明,对程序运行没有任何影响。

main()是主函数,“{"与"}”之间的语句是main()函数的内容,是程序的主体,也称函数体。所有的c语言程序都必须包含有一个main函数。程序从main()函数的第一行语句开始执行,到最后一条语句结束。

printf()函数式C语言标准输出的函数

“\n”是换行控制符,表示该符号之前的内容输出完毕后换行显示

0.1C语言程序概述

eg0-1:键盘输入两个数,比较大小,并输出两个数中的最大值

#include<stdio.h>
int max(int x,int y);
void main(){
    int a,b,m;
    scanf("%d%d",&a,&b);
    m=max(a,b);
    printf("a=%d,b=%d,m=%d",a,b,m);
}
int max(int x,int y){
    int m;
    if(x>y)
        m=x;
    else
        m=y;
    return m;
}

C语言程序特点:

1.每条语句后面都已 “;”作为终止符,他是C语句结束符。

2.每个程序必须有一个且只能有一个主函数,程序从主函数开始执行你。一个程序可以包含多个源程序文件,每个源程序文件又可以包含多个用户自定义函数。函数之间是相互独立、相互平行。源程序最基本组成单位是函数。

3.在C语言中,大小写字母是有区别的。

4.程序中可以加注释,注释可分为块注释和行注释两种。“/* ...... */

为块注释,可注释多行。“//”行注释,只注释一行。

C语言函数分两类:系统本身提供的库函数和用户自定义函数

C语言的书写格式

  1. 程序中每行可写一条语句,也可写多条语句,一般一行写一条语句

  2. 程序的书写要注意适当缩进,使程序清晰易读

  3. 程序中的花括号必须成对出现

  4. 写程序时,要习惯使用注释

0.1.1程序构成

注:其中f1~fn代表用户自定义函数

编译预处理行

全局变量说明

void main(){

局部变量说明

程序段

}

返回数据类型f1(形式参数说明){

局部变量说明

程序段

}

返回数据类型f2(形式参数说明){

局部变量说明

程序段

}

......

返回数据类型fn(形式参数说明){

局部变量说明

程序段

}

说明:

(1)C语言的变量在使用之前必须先定义其数据类型,未经定义的变量不能使用,且定义变量的语句必须放在可执行语句前面;

(2)程序段通常由多条语句组成;

(3)形式参数说明用于传值,参见后面的函数调用部分内容;

(4)局部变量、全局变量的用法含义,参见模块五的内容;

(5)花括号内的内容统称为函数体;

(6)用户定义的函数名由用户命名(命名应符合标识符的命名规则);

(7)用户自定义函数可置于主函数之前,也可置于主函数之后。若用户自定义函数 在主函数之后,且要在主函数中调用时,要在主函数之前对被调用函数进行函数声明。

0.1.2特殊字符

1.关键字

关键字是C语言编译程序本身所使用的专用词,具有特定的含义,例如int用来定义整数类型。关键字一般都是用小写字母来表示的。C语言的关键字有: auto、break.long、register、 return、short、 signed、 sizeof、 static、 struct、 switch、 typedef、 union、 unsigned. void、volatile、while。

2.标识符

C语言中,变量、函数都需要有一-个名称,即标识符。[0- 1]中的max就是标识符。用户自定义的标识符要符合C语言标识符的命名规则。

C语言标识符命名规则

(1)标识符由字母(AZ,az)、下划线(. )或数字(0~9)组成。

(2)标识符必须以字母(AZ,az)或下划线(_ )开头。

(3) C语言中标识符严格区分字母大小写。例如aB12、Ab12、AB12、ab12是不同的标识符。

(4)标识符不能使用C语言的关键字。例如char、do.for.if、int等。

例如:

这些是合法的标识符: A123、a 23、123、a_ b。

这些是不合法的标识符: 5abc 、aa - bb、a&b. M. H. Thatcher.a#、ab$。

标识符的长度不要太长,建议在8个字符以内。

定义标识符时尽量做到“见名知意”。如:name表示姓名,age表示年龄,或汉语拼音的首字母xm表示姓名,nl表示年龄。

3.分隔符

分隔符用来使编译器确认代码在何处分隔,C语言中分隔符包括注释符、空白符及普通分隔符。

(1)注释符。

(2)空白符。空白符包括空格、回车、换行和制表符(Tab键),用来分隔程序的各基本成分。一个或多个空白符的作用完全一样。

(3)普通分隔符。普通分隔符的作用也是用来分隔程序的各成分,在程序中有特定

的含义,不能省略。普通分隔符见表0- 1。

表0-1C语言的普通分隔符

普通分隔符名称用途
{}大括号/花括号定义复合语句、函数体及数组的初始化
[]方括号定义数组类型及引用数组元素
()小括号区分函数名及其参数,表达式中限定运算顺序
;分号语句结束标志
:冒号标号
.圆点区分复合类型变量与其成员变量
,逗号构成逗号表达式
?问号构成问号表达式

0.2C语言程序开发过程

编辑 编译 连接 执行

源程序 .C文件

目标程序.obj文件

可执行文件.exe文件

1.编辑程序

用户将C语言的源程序输人计算机,以文本文件的形式存放在磁盘上。其文件标识为:“文件名.c”。其中,“文件名”是用户指定的、符合操作系统规定的任意字符组合,扩展名是“.c”,表示该文件是C语言程序。

2.编译程序

编译是把C语言源程序翻译成用二进制指令表示的目标程序。编译过程由C编译系统提供的编译程序完成。目标程序的文件标识是:“文件名. obj"。

3.程序连接

用系统提供的连接程序将目标程序、库函数或其他目标程序连接装配成可执行的程序。可执行程序的文件标识为:“文件名. exe"。

4.运行程序

将可执行程序投人运行,以获取编程处理的结果。与编译、连接不同的是,运行程序可以脱离语言编译环境。

对于不同的C语言上机环境,编译系统支持性能各异,上述步骤有些可以再分解,有些也可以集成进行批处理,但逻辑上是基本相同的。

0.3基本数据类型

 

 

0.3.1整型数据

1.整型常量

C语言中的整型常量有三种表示形式:

(1)十进制整数。例如2、- 983。

(2)八进制整数。八进制整数以0开头,由0~7构成。例如012表示八进制整数12,即(12)8。

(3)十六进制整数。十六进制整数以0x开头,由09和AF或a~f构成。例如0x12A,表示十六进制整数12A,即(12A)16。

整型常量不必使用强制类型说明就可以直接使用,当遇到整型常量时,编译器会自动

根据其值将该常量认定为相应的类型,保证其按适当的类型参与运算。

一个整型常量,其值在一32 768~ 32 767之间时,默认是int型,可以把它赋值给int 型、short型或long型变量;而在- 2147 483 648~2 147 483 647范围之间时,则默认是长整型,可以把它赋值给long型变量。

一个整型常量后有U或u后缀时,被认为是unsigned类型,在内存中按unsigned规定的方式存放;而一个整型常量有加l或L后缀时,则被认为是long类型,在内存中按long规定的位数存放。

2.整型变量

在C语言中,整型类型标识符为int。根据整型变量的取值范围又可以将整型变量定义为以下6种整型类型:

有符号基本整型[signed] int
无符号基本整型unsigned [int]
有符号短整型[ signed] short [int]
无符号短整型unsigned short [int]
有符号长整型[signed] long [int ]
无符号长整型unsigned long [int]

在存储有符号数时,存储单元的最高位代表符号位,0为正,1为负。而存储无符号数时,存储单元全部用作存放数本身,一个无符号整型变量只能存放不带符号的整数。

在定义变量时,方括号内的部分是可以省略不写的,一般省略方括号中的标识符,如:

short data;

uns igned data2 = 9887;

0.3.2实型数据

实行数据又称为浮点型数据,实数类型也交浮点类型,实型数据在内存中按指数形式存储

eg:0-2编一个程序,给定三角形的边长,计算三角形的面积

#include"math.h"
#include <stdio.h>
void mian(){
    float a=3.0f,b=4.0f,c=5.0f,s,area; //定义实型数据类型变量
    s=1.0f/2.0f*(a+b+c);
    area=(float)(sqrt(s*(s-a)*(s-b)*(s-c)));
    printf("a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2f\n",a,b,c,s);
    printf("area=%7.2f\n",area);       //以实数型类对实型变量输出数据
}

在C语言中,实型变量分为单精度实型(float) 、双精度和长双精度实型(long double)

(2)实型常量。实型常量有两种表示形式:

①十进制小数形式:由数字和小数点组成。如:“. 67”、“5.2”、“9.”等都是合法的十进制小数形式。

②指数形式:由尾数、e(或E)以及指数三个部分组成。

字母e(或E)之前必须有数字,并且小数点左边有且只有一位非零数字,指数部分则必须为整数。 例如,1.e1代表1.0X10' ,9. 8E0代表9.8X10 0 ,8.997e- 12代表8.997X10 -12 ,-5.43E4代表-5.43X104,这些都是合法的指数形式的实型数据;而5.4E..E、e-6、3e3.1则都是不合法的指数形式的实型数据。

KEN=k*10 n

0.3.3 字符型数据

字符数据是计算机信息处理的重要组成部分,通常以ASCII码形式 输入和输出

eg:0-3编程实现字符的输出

#inlude<stdio.h>
void main(){
printf("%c\n",'\a');
printf("%c\n",'\141');
printf("%c",98);
}

1.字符型常量

字符型常量是用单引号引起来的-一个字符,如' A','x','%'等。另外还有一种特殊的字符常量称为转义字符,是以一个反斜杠“\”开头的字符序列。C语言规定:以反斜杠开头,后跟-一个字母代表- - 个控制字符;“\”后跟13位八进制数字,代表ASCII码为该八进制数的字符;在“\x”后跟12位十六进制数字,代表ASCII码为该十六进制数的字符。

如果要输出ASCII码值在0x00~0xFF之间的字符,可以用反斜杠和特定字符组合表示。

C语言中的转义字符如表0-3所示

字符形式ASCII码功能
\00x00NULL
\a0x07响铃
\b0x08退格
\t0x09水平制表(Tab)
\f0x0c走纸换页
字符形式ASCII码功能
\n0x0a回车换行
\v0x0b垂直制表
\r0x0d回车不换行
\ \0x5c反斜杠
\'0x27单引号
\"0x22双引号
\?0x3f问号
\ddd0ddd1~3位八进制数所代表的字符
\xhh0xhh1~2位十六进制数所代表的字符

利用上述转义字符“\ddd”和“\xhh" ,可以输出各种字符。

由于字符型数据在内存中是以字符的ASCII码值形式来存放的,所以字符型数据和整型数据是可以互相通用,并可进行算术运算的。一个字符型数据既可以以字符形式输出,也可以以整数形式(ASCII码值)输出。当字符型数据参加算术运算时,实际上是用其

ASCII码值参加运算的。

eg:0-4 编程检验 ASCII码值与字符的对应关系。

#include<stdio.h>
void mian(){
char c1,c2;
c1=97;c2=98;
printf("%c,%c\n",c1,c2);
print("%d,%d\n",c1,c2);
}

2.字符型变量

字符型类型标识符为char,一个字符型变量的值只能是-一个单字符。不同的编译系数据可以分为有符号字符型( [signed] char) 和无符号字符型(unsigned char)两类。

字符型变量的定义形式为:[signed] char的取值范围是- 128~ 127 ,而unsigned char的取值范围是0~255。

char变量名表;

例如:

char char1, char2='&';

3.字符串常量

字符串常量是由一对双引号引起来的一一个字符序列。例如:"How are you!"是-个字符串常量。在程序中,不能把一个字符串常量赋给一个 字符型变量,例如下面的语句是非法的。

char char1="y"; //

字符串常量和字符常量在存储单元中有不同的存储形式。注意:'a'与"a"表示的含义是不同的,a'表示一个字符常量,"a"表示一个字符串常量。它们的存储形式是不同的,a'占一个字节,而"a"要占两个字节,在存储"a"时,系统会在字符串的结尾加上一个字符串结束标志\0'(ASCII码为0)。如下图0 - 3所示。

字符常量‘a’

01100001

字符串常量"a"

0110000100000000

在C语言中没有字符串这种数据类型。因此没有专门的字符串变量来存放字符串常量,只能使用字符数组来存放一- 个字符串。

0.3.4数据类 型转换

在C语言中,字符型数据与整型数据可以通用,整型、单精度型和双精度型数据也可以混合运算。运算时,一个表达式中不同的数据类型首先要转换成同一种类型,再进行运算。当然,数据类型转换需要遵循一定的规则。

(1)当运算对象数据类型不相同时,字节短的数据类型自动转换成字节长的数据类型。char字符型数据转换成int整数,shortint型数据转换成int型,float型数据转换成double型。

(2)当运算对象类型不同时,如果int型与unsigned型进行运算,就将int型转换成unsigned型,运算结果为unsigned型;如果int与double型进行运算,就将int 型直接转换成double型,运算结果为double型;如果int型与long型进行运算,就将int型转换成long型,运算结果为long型。这些转换图0-4数据类型转换图都是系统自动完成的。

3.类型转换也可强制进行

int a = 4555

char b;

b = (char)a;

eg:0-5 试分析下面程在进行混合运算时的数据转换过程

#include<stdio.h>
void mian(){
char a='x';
int b=3,f=2;
float c=2.5678f;
double d=5.2345;
long e=32L;
printf("%f\n",a-b+d/c-e*f);
}

0.4运算符和运算表达式

程序设计中用来表示各种运算的符号称为运算符,参与运算的数据称为运算对象,或称为运算量、操作数。运算符用于控制运算对象,用运算符将运算对象连接起来的式子称为运算表达式。运算表达式的种类有很多,如算术表达式、逻辑表达式、关系表达式等。

在C语言中,除了控制语句和输入输出之外,几乎所有的基本操作都被当作运算来处理。

在C语言中,运算符包括:单目运算符(如负号运算符,地址运算符&),只允许有一个运算对象;双目运算符,运算时有两个运算对象参加运算(如: +,-, * ,/);三目运算符(条件运算符)。

一个运算表达式中有多个运算符时,表达式中运算符被处理的先后次序称为运算符的优先级。当一个运算对象两侧的运算符的优先级相同时.则按照C语言规定的结合方向先后来进行计算,这就是运算符的结合性6单目运算符的优先级高于双目运算符

这里主要介绍算术运算符、关系运算符、逻辑运算符、赋值运算符、条件运算符和逗号运算符,以及相应的运算表达式。其他运算符及其表达式将在以后的学习内容中介绍。

0.4.1算术运 算符和算术表达式

算术运算符包括基本算术运算符(+,- ,* ,/,%)和自增运算符(++)、自减运算符(-- )两类。基本算术运算符中除了取正负值运算符+ (取正值)和- (取负值)外,其他都是双目运算符。取正负值运算符以及自增运算符、自减运算符都只对一个操作数进行运算,因此都是单目运算符。

C语言中提供的算术运算符如表0-4所示。用算术运算符和括号将运算对象连接起来的符合C语言语法规则的式子称为算术表

 

1.基本算术运算符

加法运算符 、正值运算符。例如表达式“x+y”表示求x与y的和,“+y”表示取y的正值。

减法运算符、负值运算符。如表达式“x-y” 表示求x与y的差,“-y”表示取y的负值。

乘法运算符。如表达式“x*y”表示求x与y的积。

除法运算符。如表达式“x/y”表示求x 与y的商。在除法运算中,两个整型数据相除的结果仍然是整型数据,不能被整除时结果中的小数部分被舍去。当除数和被除数中有一个负整数时,其结果随机器而定,多数机器采取“向零取整”的原则,即向零靠近取整。如“8/5”"的结果为1,“8/( - 5)”的结果为- 1。

%模运算符(求余运算符)。 如表达式“x%y”表示求x除以y的余数。在模运算(求余运算)中,%两侧的运算量必须都是整型,其结果是两数相除所得的余数。在多数机器上,所得的余数与被除数符号相同。如“8%( - 5)”的结果为3,而“( - 8)%5”的结果为-3。

如果参加运算(+.-.*./)的两个数中有--个是实型数据,其结果将是double型数据。

2.自增、自减运算符

自增、自减运算符用来对一个操作数进行加1或减1运算,其结果仍然赋值给该操作数,而且参加运算的操作数必须是变量,而不能是常量或表达式。

自增运算符:如“x++"表示在使用x之后,使x的值加1,即“x=x+1”。

“++x"表示在使用x之前, 先使x的值加1,即“x=x+1”。

自减运算符:如“x--”表示在使用x之后,使X的值减1,即“x=x-1”。

“--x”X '表示在使用x之前,先使X的值减I,即“x

“++x”和“--x”都把运算符用在了操作数之前,称为前缀运算;前缀运算是变量首先加1或减1,然后再使用变量的值。“x++ ”和“x--”,则为后缀运算。而后缀运算则是使用变量的值后,再执行变量加1或减1。

eg0-6:变量自加运算

#incude<stdio.h>
void mian(){
int x,y,z1,z2;
x=7;
y=8;
z1=y-(x++);
z2=y-(++x);
printf("x=%d\ty=%d\ny-(x++)=%d\ny-(++x)=%d",x,y,z1,z2);
}

3.算术表达式

算术表达式中运算对象可以是常量、变量或函数等。例如,“a%5/2 -(b+ 2)"就是一个合法的算术表达式。

C语言规定了运算符的优先级和结合性(见附录D),在算术表达式求值时,按照优先级别的高低和结合方向来依次运算。例如在计算表达式“a-bc”时,b的左侧为减号,右侧为乘号,而乘号优先于减号,因此,相当于“a-(bc)”。如果在一个运算对象两侧的运算符的优先级别相同,例如“a- b+ c”,则按规定的结合方向处理。

C语言中表达式要按照规定的语法来写。例如,一个表达式应该写在- -行,表达式中不允许使用方括号和花括号,表达式中也不允许省略运算符等。

0.4.2赋值运算符 和赋值表达式

赋值运算符有基本赋值运算符(= )以及复合赋值运算符,也称扩展赋值运算符(*=, +=等)两类。赋值运算符“二”,可将一个表达式或数据的值赋值给一个变量。由赋值运算符将一个变量与- - 个表达式连接起来的式子称为赋值表达式。

1.基本赋值运算符

赋值的含义是将赋值运算符右边表达式的值,存人左边以变量名为标识的存储单元中。例如“x= 5”的作用是将常量5存放到以x为标识的存储单元中。

2.复合赋值运算符

为了使程序简练并提高编译效率,C语言允许将双目运算符加在“=”的前面构成复合赋值运算符。其形式为:

<双目运算符>=

例如:“x+=3"等价于“x=x+3”。复合赋值运算符总共有十种: +=、-=、*=、/=、%=.>>=、<<=、&=、^=、|=。

前五种是算术复合赋值运算符;后五种是位复合赋值运算符,在后面的学习内容中将介绍。

3.赋值表达式

赋值表达式的一般形式为:

<变量> <赋值运算符><表达式>

其中,表达式可以是常量.变量.函数或由它们组成的表达式,也可以是赋值表达式,赋值表达式的值为赋值号右边表达式的值。

在进行赋值运算时,如果赋值运算符两边的数据类型不同,系统将会自动进行类型转换,即将赋值运算符右边的数据类型转换成左边的变量类型。当左边是整型而右边是实型时,将去掉小数部分并截取该整型对应的有效位数。当左边是单精度而右边是双精度实型时,系统将进行四舍五人处理并截取相应的有效位数。

当赋值运算符是复合赋值运算符时,赋值表达式等价于

<变量>=<变量><双目运算符><表达式>

即将变量的当前值取出,与表达式进行由双目运算符确定的运算,最后将所得的结果再赋值给该变量。例如,“y/=x+9”实际 上等价于“y=y/(x+9)”。注意:将复合赋值运算符右侧的表达式看成一个整体。

当赋值运算符右边的表达式为赋值表达式时,根据赋值运算符的结合性来处理运算,赋值运算符的结合方向为右结合。

例如:设a的初值为5,对表达式“y=a *=6+(a+= 1)”进行求值。在求值时,首先计算“(a+= 1)”,得到“a=6" ;再进行“a =6+6"的运算,相当于“a=a(6+6)”,得到a的值为“6* (6+6)= 72”;最后再执行“y=a”运算,得到y的值为72。

0.4.3关系运算符和关系表达式

关系运算是对两个运算对象进行大小比较的运算。C语言中的关系运算符及其优先级别如表0- 5所示。关系运算符的优先级低于算术运算符,高于赋值运算符。

关系表达式是用关系运算符将两个表达式连接起来的式子,称为关系表达式。关系表达式的一般形式为:

<表达式><关系运算符><表达式>

其中,表达式可以是算术表达式,逻辑表达式,赋值表达式或字符表达式,也可以是关系表达式。

 

关系表达式的值非真即假。当关系表达式成立时,关系表达式的值为1(真);当关系表达式不成立时,其值为0(假)。例如,“a=(b>= 3)”在运算时,根据优先级别首先做关系运算“b>3",如果6等于5,则"5> 3”的结果为1;然后再进行赋值运算,得到结果a等于1。

0.4.4逻辑运算符和逻辑表达式

C语言有三种逻辑运算符,分别是逻辑与(&&)、逻辑或(|)、逻辑非(!),逻辑运算符

 

逻辑运算符“!”是单目运算符,而“&&”和“I"是双目运算符。

逻辑运算符比关系运算符优先级低,比赋值运算符优先级高。

用逻辑运算符将运算对象连接起来的式子称为逻辑表达式。例如: a>b&&c>d。

关系表达式和逻辑表达式主要在判断是否满足指定条件时使用。和关系表达式一样,逻辑表达式的值只有“真”和“假”,当逻辑关系成立时,逻辑表达式的值为1(真),当逻辑关系不成立时,逻辑表达式的值为0(假)。当a、b的值为不同的组合时,逻辑运算“!a”、“a&& b”和“a I b”的真值情况如表0-7所示。

 

C语言规定,当运算对象为0时,即判定其为假,当运算对象为非0的任何值(包括负值),即判定其为真。例如: a=2,b=0,则“!a”等于0,“!b”等于1,“a&&b”等于0,“a|| b”等于1。

C语言在逻辑表达式求解时,不- -定要执行完逻辑表达式中所有的逻辑运算符,只要能判断出表达式的值,就不再执行下去。例如:

对于表达式“a&&b&&c",只要有一个运算对象为假,则结果为假,因此当a为假时,则可得出该表达式的值为假,不需要判断b和c的值;只有当a为真时,才需要判断b;只有a和b都为真时,才需要判断C。

对于表达式“a |I b lI c”,只要有一个表达式的值为真,其结果就为真,因此当a的值为真时,可得出表达式的值为真,程序不再对b.c进行判断;只有a的值为假,才需判断b;只有当a、b都为假时,才需进- - 步判断c的值。

0.4.5逗号运算符和逗号表达式

“,”为逗号运算符,又称为顺序求值运算符。用逗号运算符可以将若干个表达式连接起来构成一一个逗号表达式。逗号表达式的一般形式为:

表达式1,表达式2,.,,表达式n

逗号运算符在所有的运算符中的优先级别最低,其结合性为左结合性,即从左到右顺序求值。先求解表达式1,再求解表达式2,..,最后求解表达式n,而表达式n的值即为整个逗号表达式的值。

用逗号运算符连接的表达式也可以是赋值表达式。例如“a=2*3,a =4,a-6"。在处理时首先按照优先级别和结合性首先计算“a=2 3”,得到“a=6",再处理“a =4",即“a=a4" ,将“a=6"代人,得到“a=24”,最后再将a值代入“a-6”,得到18。此逗号表达式的最终结果为18,而a的值为24。

另外,并不是在任何地方出现的逗号都是作为逗号运算符,多数情况下逗号只作为分隔符使用,比如函数参数之间、定义变量时各个变量名之间都是用逗号作为分隔符的。

0.4.6条件运算符和条件表达式

C语言中的条件运算符由问号(?)和冒号(:)组成。它是C语言中唯-一的一个三目运算符。要求3个运算对象同时参加运算。由条件运算符构成的条件表达式的一般形式如下:

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

运算规则:如果表达式1为“真”,则求解表达式2的值,并将其作为整个条件表达式的值;否则就求解表达式3的值,并将其作为整个条件表达式的值。例如:,

sum= (a>=b+ 3)? 5:a;

当a=3、b=5时,sum=3;而当a=3、b=0时,sum= 5。

(1)条件运算符仅比赋值运算符优先级高,低于逻辑运算符、关系运算符和算术运算符。

例如,“x=ab !=0? a+ 1:b/2”相当于“x=(ab !=0)? (a+ 1):(b/2)”。首先

计算“a * b" ,并与0比较,如果其值不等于0,即表达式“a*b!=0”为真,则计算“a+ 1”,并将所得结果赋值给x;否则计算“b/2" ,并将所得结果赋值给x。

(2)条件运算符的结合方向为右结合。

例如:“x=ab !=0? a+1:b>2? 3:b/2"相当于“x=(ab !=0)? (a+ 1):((b>

2)? 3:(b/2))”, 按照先右后左的顺序,首先计算右边的条件表达式“b>2? 3:b/2”,然后代人求得的值,再求解左边的条件表达式。

(3) C语言会将条件表达式的值的数据类型自动转换为表达式2和表达式3中较高级的数据类型,原则上表达式2和表达式3的值的数据类型相同。例如: x= (a>b)? 'a':1.2

如果a小于等于b,则将条件表达式的值1.2赋给x;如果a大于b,则将条件表达式的值a'的ASCII码(即97)赋给x,但由于1.2是实型,因此结果97将被转换为实型后再赋给x。

这几种运算符的优先级关系从高到低次序,如表0- 8所示。

                                                                                                                                      小墨在这里

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值