第一章部分 C程序设计的初步知识
一、C语言的构成
(1)源程序由函数构成,每个函数完成相对独立的功能。
(2)每个源程序中必须有且只能有一个主函数,可以放在任何位置,但程序总是从主函数开始执行。
(3)函数体:在函数后面用一对花括号括起来的部分。
(4)每个语句以分号结束,但预处理命令、函数头之后不能加分号。
(5)注释:括在“/* ”与“ */”之间,没有空格,允许出现在程序的任何位置。
(6)预处理命令:以“#”开头的语句。
二、C程序的生成过程
(1)C程序是先由源文件经编译生成目标文件,然后经过连接生成可执行文件。
(2)源程序的扩展名为.c,目标程序的扩展名为.obj,可执行程序的扩展名为.exe。
试题程序
#include <stdlib.h>
#include <stdio.h>
/* ***found*** */
int fun(int n);
{/* ***found*** */
int i
/* ***found*** */
sum=0;
for(i=1;i<=n;i++)
{
sum=sum+i;
}
return sum;
}
一、标识符
在C语言中,变量名、函数名、数组名等按照一定规则命名的符号称为标识符。
1. 标识符的命名规则
2.标识符的分类
C语言的标识符可以分为3类。
(1)关键字:C语言规定的专用的标识符,它们有着固定的含义,不能更改(见课本附录)。例如int表示变量类型,不能另作它用。
(2)预定义标识符:和“关键字”一样也有特定的含义。包括:
库函数的名字,如printf
预处理命令,如define
这类标识符与关键字的区别是:Cc语言中的逗号表达式语言语法允许用户更改预定义标识符的作用,但将失去
系统规定的含义。建议用户不要更改。
(3)用户标识符:由用户根据需要定义的标识符。一般给变量、函数、数组和文件命名。
【例1】以下选项中不合法的标识符是( )。
A) &a B) FOR C) print D) 00
注意FOR(大小写不同,for为关键字)
二、常量
定义:在程序运行中,其值不能被改变的量。
常量的类型:整型常量、实型常量、字符常量、字符串常量和符号常量。
1. 整型常量
2. 实型常量
3. 字符常量
4.字符串常量
字符串常量是用双撇号括起来的一个或一串字符。例如"china"
5.符号常量
符号常量是由预处理命令“#define”定义的常量,在C程序中可用标识符代表一个常量。其一般定义格式为:#define 标识符常量 。
【例3】以下选项中,能用作数据常量的是( )。
A) 115L B) 0118 C) 1.5e1.5 D) o115
试题程序:
#include <stdio.h>
/****found****/
#define PI 3.14159;
/****found****/
int fun(int n);
{
/* ***found*** */
PI=3.14159;
return PI*n;
}
三、变量
定义:值可以改变的量。
变量要有变量名,在使用前必须先定义。在内存中占据一定的存储单元,不同类型的变量其存储单元的大小不同。存储单元里存放的是该变量的值。
变量的类型:整型变量、实型变量、字符变量。
3.字符变量
(1)作用:用来存放字符常量。
(2)定义:用关键字char定义,每个字符变量中只能存放一个字符。
(3)定义形式:char cr1,cr2;
(4)赋值:cr1=’m’,cr2=’n’;。
(5)存储方法:存储字符对应的ASCII码到内存单元中。
字符型数据与整型数据之间可以通用,一个字符能用字符的形式输出,也能用整数的形式输出。
字符数据进行算术运算,相当于对它们的ASCII码进行运算。
四、类型的自动转换和强制转换
1.类型的自动转换
(1)当同一表达式中各数据的类型不同时,编译程序会自动把它们转变成同一类型后再进行计算。
(2)转换优先级为:char<int<float<double,即左边级别“低”的类型向右边转换。
2.类型的强制转换
(1)表示形式:(类型)(表达式);
例如: float x;
int y;
y=(int)x;
【例1】以下选项中正确的定义语句是( )
A.double a;b; B.double a=b=7; C.double a=7,b=7; D.double,a,b;
【例2】在C语言中定义了一个变量,该变量代表内存中的一个( )
A.区域 B.单元 C. 地址 D.容量
【例3】下列给定程序中函数fun的功能是:求出如下分数序列的前n项之和。和值通过函数值返回。
例如,若n=5,则应输出8.391667。
试题程序:
double fun(int n)
{ int a=2,b=1,c,k;
/****found****/
int s=0.0;
for(k=1;k<=n;k++)
{/****found****/
s=s+(Double)a/b;
c=a;a=a+b;b=c;
}
return(s);
}
一、运算符简介(优先级见课本附录C)
注意:赋值运算符左侧必须为变量。
二、运算符的结合性和优先级
1.结合性
所有的单目运算符、条件运算符、赋值运算符及其扩展运算符,结合方向都是从右向左,其余运算符的结合方向是从左向右。
2.优先级比较
初等运算符>单目运算符>算术运算符(先乘除后加减)>关系运算符>逻辑运算符(不包括“!”)>条件运算符>赋值运算符>逗号运算符。
初等运算符包括:圆括号(),下标运算符[]和结构体成员运算符->。
【例1】设变量已正确定义并赋值,以下正确的表达式是( )。
A) x=y+z+5,++y B) int(15.8%5) C) x=y*5=x+z D) x=25%5.0
三、逗号运算符和逗号表达式
1.逗号表达式:用逗号运算符将几个表达式连接起来。
2.一般形式:表达式1,表达式2,…,表达式n。
3.求解过程:先求解表达式1,然后依次求解表达式2,直到表达式n的值。表达式n的值就是整个逗号表达式的值。
一、基本的算术运算符
1.分类:+(加法运算符或正值运算符)、-(减法运算符或负值运算符)、 (乘)、/(除)和%(((求余)。其中,“%”运算的两端必须都是整型,其余的运算对象都可以是整型或者实型。
2.双目运算符两边的数值类型必须一致才能进行运算,如果不一致,系统先进行一致性转换。例如,一边是整数,另一边是实数,C语言系统将把整数类型转换为实数类型,再运算,结果为实数类型。
二、算术表达式和运算符的优先级与结合性
对于不同优先级的运算符,按运算符的优先级由高到低进行运算,若优先级相同,则按结合方向进行运算。
若运算符两侧的操作数类型不同,则先利用自动转换或强制类型转换,然后进行运算。
注意大括号的匹配。
三、自加、自减运算符
1.作用:自加运算符“++”使运算变量的值增1,自减运算符“--”使运算变量的值减1。
2.均是单目运算符。运算对象可以是整型或实型变量,但不可以是常量和表达式。
3.均可作为前缀运算符,也可作为后缀运算符构成一个表达式。
++i,--i:在使用i之前,先使i的值加1或者减1,再使用此时的表达式的值参加运算。
i++,i- -:在使用i之后,使i的值加1或者减1,再使用此时的表达式的值参加运算。
【例5】以下程序运行后的输出结果是( )。
#include <stdio.h>
main()
{ int x, y, z;
x=y=1;
z=x++,y++,++y;
printf("%d,%d,%d\n",x,y,z);
}
A) 2,3,3 B) 2,3,2 C) 2,3,1 D) 2,2,1
【解析】z=x++,y++,++y;因为赋值运算符的优先级高于逗号运算符的优先级,所以可以将上式表示成(z=x++),(y++),(++y)。然后从左向右先计算表达式, z=x++,因为x++先使用后自增,所以z的值为1,x的值为2。再计算逗号表达式第二个表达式y++,此时y的值为2,最后计算第三个表达式++y,y的值为3。
一、赋值运算符和赋值表达式
1. “=”称做赋值运算符,作用是将一个数值赋给一个变量或将一个变量的值赋给另一个变量,由赋值运算符组成的表达式称为赋值表达式。
2. 一般形式:变量名=表达式。
赋值运算符的优先级别高于逗号运算符。
赋值运算符“=”和等于运算符“==”有很大差别。
赋值运算符的左侧只能是变量,而不能是常量或者表达式。右侧可以是表达式,包括赋值表达式。
规定最左边变量所得到的新值就是整个赋值表达式的值。
二、复合的赋值运算符
在赋值运算符之前加上其他运算符可以构成复合赋值运算符。例如,+ =、- =、 =、/=、% =等。 复合赋值运算符的优先级与赋值运算符的相同。
【例2】设有定义:int x=2;,以下表达式中,值不为6的是( )。
A) 2*x,x+=2 B) x++,2*x C) x*=(1+x) D) x*=x+1(自动加括号)
1.C语言提供6种位运算符
按位与“&”:若两个相应的二进制位都为1,则该位的结果为1,否则为0。
按位或“|”:两个相应的二进制位中只要有一个为1,则该位的结果为1,否则为0。
按位异或“∧”:若两个二进制位相同,则结果为0,不同则为1。
按位求反“~”:按位取反,即0变1,1变0。
左移“<<”:将一个数的二进制位全部左移若干位。
右移“>>”:将一个数的二进制位全部右移若干位。
2.说明
位运算中除“~”以外,均为双目运算符,要求两侧各有一个运算量。
运算量只能是整型或字符型数据,不能为实型数据。
【例1】设有语句:int a=1,b=2,c;
c=a^(b<<2); 00000010 左移2位得到 00001000 与 00000001 异或
执行后,c的值为( )。 00000001 00001001---9
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论