二、C语言运算符与关键词
(一)运算符
学好C语言就必须掌握以下运算符。
算术运算符:+-*/%++--
关系运算符:====!=
逻辑运算符:!
位运算符:~
赋值运算符:=(+=-=*=/=%=)
条件运算符:?:
逗号运算符:,
指针运算符:*
求字节运算符:sizeof
强制类型转换运算符:(类型标识符)
分量运算符:-
下标运算符:[]
其他:函数调用运算符()
(二)关键词
基本数据类型
void:声明函数无返回值或无参数,声明无类型指针,显示丢弃运算结果。(C89标准新增)
char:字符型类型数据,属于整型数据的一种。(KR时期引入)
int:整型数据,表示范围通常为编译器指定的内存字节长。(KR时期引入)
float:单精度浮点型数据,属于浮点数据的一种。(KR时期引入)
double:双精度浮点型数据,属于浮点数据的一种。(KR时期引入)
_Bool:布尔型(C99标准新增)
_Complex:复数的基本类型(C99标准新增)
_Imaginary:虚数,与复数基本类型相似,没有实部的纯虚数(C99标准新增)
_Generic:提供重载的接口入口(C11标准新增)
类型修饰关键字
short:修饰int,短整型数据,可省略被修饰的int。(KR时期引入)
long:修饰int,长整型数据,可省略被修饰的int。(KR时期引入)
longlong:修饰int,超长整型数据,可省略被修饰的int。(C99标准新增)
signed:修饰整型数据,有符号数据类型。(C89标准新增)
unsigned:修饰整型数据,无符号数据类型。(KR时期引入)
restrict:用于限定和约束指针,并表明指针是访问一个数据对象的唯一且初始的方式。(C99标准新增)
复杂类型关键字:
struct:结构体声明。(KR时期引入)
union:联合体声明。(KR时期引入)
enum:枚举声明。(C89标准新增)
typedef:声明类型别名。(KR时期引入)
sizeof:得到特定类型或特定类型变量的大小。(KR时期引入)
inline:内联函数用于取代宏定义,会在任何调用它的地方展开。(C99标准新增)
存储级别关键字:
auto:指定为自动变量,由编译器自动分配及释放。通常在栈上分配。与static相反。当变量未指定时默认为auto。(KR时期引入)。
static:指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部。(KR时期引入)。
register:指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以修饰函数形参,建议编译器通过寄存器而不是堆栈传递参数。(KR时期引入)。
extern:指定对应变量为外部变量,即标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。(KR时期引入)
const:指定变量不可被当前线程改变(但有可能被系统或其他线程改变)。(C89标准新增)
volatile:指定变量的值有可能会被系统或其他线程改变,强制编译器每次从内存中取得该变量的值,阻止编译器把该变量优化成寄存器变量。(C89标准新增)
流程控制关键字:
跳转结构:
return:用在函数体中,返回特定值(如果是void类型,则不返回函数值)。(KR时期引入)
continue:结束当前循环,开始下一轮循环。(KR时期引入)
break:跳出当前循环或switch结构。(KR时期引入)
goto:无条件跳转语句。(KR时期引入)
分支结构:
if:条件语句,后面不需要放分号。(KR时期引入)
else:条件语句否定分支(与if连用)。(KR时期引入)
switch:开关语句(多重分支语句)。(KR时期引入)
case:开关语句中的分支标记,与switch连用。(KR时期引入)
default:开关语句中的“其他”分支,可选。(KR时期引入)
编译:
#define预编译宏
#if表达式#elseif表达式#else#endif条件编译
#ifdef宏#else#endif条件编译
#ifndef宏#else#endif条件编译与条件编译。
(二)C语言实例
例题1:利用条件运算符的嵌套来完成此题:学习成绩=90分的同学用A表示,60~89分之间的用B表示,60分以下的用C表示。
解答:程序分析:(ab)?a:b这是条件运算符的基本例子。
程序源代码:
#include“stdio.h”
#include“conio.h”
main()
{
intscore;chargrade;printf(“pleaseinputascore\n”);
scanf(“%d”,score);
grade=score=90?’A’:
(score=60?’B’:’C’);
printf(“%dbelongsto%c”,score,grade);
getch();
}
例题2.输入三个整数x,y,z,请把这三个数由小到大输出。
解答:程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。
程序源代码:
#include“stdio.h”
#include“conio.h”
main()
{
intx,y,z,t;
scanf(“%d%d%d”,x,y,z);
if(x>y)
{t=x;x=y;y=t;}/*交换x,y的值*/
if(x>z)
{t=z;z=x;x=t;}/*交换x,z的值*/
if(y>z)
{t=y;y=z;z=t;}/*交换z,y的值*/
printf(“smalltobig:%d%d%d\n”,x,y,z);
getch();
}
(三)C语言练习
1.#include’stdio.h’main(){’int,y;
scanf(%d,x);
if(x0)y=-1;
elseif(x==0)y=0;
elsey=1;
printf(’x=%d,y=%d\n’,x,y);
}以上C语言程序,当输入4时,输出结果为()
A.X=4,y=1
B.X=1,y=1
C.X=0,y=0
D.X=4,y=-1
E.X=0,y=1
参考答案:A
2.#includestdio.hmain(){intn=4,i:longfac;for(fac=1,i=1;i=n;i++)fac=fac*i;printf(’fac=%d\n’,fac);}以上C语言程序的输出结果为()
A.fac=4
B.fac=24
C.fac=36
D.fac=48
E.fac=
参考答案:B
3.main(){inti,j;for(i=1,j=1;i<=3;i++,j++)printf(’s=%d’,j*i);}以上C语言程序的输出结果是()
A.s=1s=4s=9
B.s=1s=2s=3
C.s=3s=6s=9
D.s=2s=4s=8
E.s=2s=3s=4
参考答案:略
4.#includevoidmain(){inti,j,m,n;i=8;j=10;m=++i;n=j++;printf(〝%d,%d,%d,%d\n",i,j,m,n);}以上C语言程序的输出结果是()
A.8,10,9,11
B.9,11,9,11
C.9,11,10,9
D.8,11,9,11
E.9,11,9,10
参考答案:略
其他更多考试指点请