一、 C语言的基本词汇
基本符号:① 特殊符号(运算符)(34个) ②保留字{ 关键字(32个)+ 特定字(9个)}
1、34种运算符:
算术运算符:+ - * / % ++ --
关系运算符:< <= == > >= !=
逻辑运算符:! && || 位
运算符 :<< >> ~ | ^ &
赋值运算符:= 及其扩展
条件运算符:?:
逗号运算符:,
指针运算符:* &
求字节数 :sizeof
强制类型转换:(类型)
分量运算符:. ->
下标运算符:[]
其它:( ) -
2、32个关键字:(由系统定义,不能重作其它定义)
auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef unsigned union void volatile while
3、9个特定字(使用时前面加#)
define undef include ifdef ifndef endef else endif if
二、简单的C程序介绍
/* example1.3 The first C Program*/
#include <stdio.h>
void main()
{
printf(“This is a C program.\n”);
}
1、⭐优秀程序员的素质之一:
- 使用TAB缩进
- {}对齐
- 有足够的注释
- 有合适的空行
习惯用小写字母,大小写区别
不使用行号,无程序行概念
可使用空行和空格
常使用锯齿形书写格式
#include <stdio.h>
void main()
{
int i , j , sum;
sum=0;
for(i=1; i<10;i++)
{
for(j=1;j<10;j++)
{
sum+=i*j ;
}
}
printf(“%d\n”,sum);
}
2、C程序的结构特点
函数与主函数
程序由一个或多个函数组成
必须有且只能有一个主函数main() 程序执行从main开始,在main中结束,其它函数通过嵌套调用得以执行。
程序语句
C程序由语句组成
用“;”作为语句终止符
注释 /* */为注释,不能嵌套
不产生编译代码
3、C程序开发步骤
三、 数据及运算
1、C语言基本数据类型
2、常量
定义:程序运行时其值不能改变的量(即常数)
分类: 符号常量:用标识符代表常量
直接常量: 整型常量
实型常量
字符常量
字符串常量
(1)单字符常量
转义字符:反斜线后面跟一个字符或一个代码值表示
(2)字符串常量
字符串:双引号括起来的一串字符
字符串结束标志:’\0’
字符串的内部表示方法
注意: 字符和字符串表示形式的区别
数字和数字字符的区别
空字符‘\0’和空格字符‘ ’的区别
(3)符号常量
标识符形式的常量
例:求圆周长
#include<stdio.h>
#define PI 3.1416
void main()
{
float r,l;
printf("INPUT r=");
scanf("%f",&r);
l=2*PI*r;
printf("L=%.2f\n",f);
}
3、变量
变量的概念
在程序运行过程中,其值可以改变的量称为变量
一个变量应该有一个名字
在内存中占据一定的存储单元
变量在使用前必须有一个确定的值
变量的定义
格式: [修饰符] 定义符 变量表列;
int a,b;
功能: 分配内存 建立变量名与内存地址间的对应关系
int a,b;
a=3;
b=a+2;
变量赋初值
赋值运算符 = : 格式:变量=值(常量、变量、表达式)
例如:x=-x;
变量赋初值 定义时初始化(必须为常量或常量表达式)
int a=3,b=5;
使用前赋初值 int a;
a=3;
变量名:内存地址 变量值:内存空间记录的数据
4、运算符与表达式
- 运算符:C语言中描述数据运算的特殊符号。
- 表达式:用运算符将C语言的各种运算对象连接起来,组成符合C语法要求的式子。
- 计算:表达式的求值过程。
- C的运算符的三要素:
- 优先级(决定混合运算中的先后次序)
- 几目 (操作数的个数)
- 结合方向
1、算术运算符与表达式
五种基本算术运算符 +、-(减法/取负)、*、/、%(求余,模运算符)
算术表达式 由算术运算符、括号和任何有值的对象连接起来的符合C语言要求的式子称为算术运算表达式
2、自增(减)运算符与表达式
自增(++)、自减(- -)运算
作用:自增运算使单个变量的值加1,自减运算使单个变量的值减 1
表达式: 变量++(++变量)
int a,b=1;
b++;
a=++b;
⭐自增、自减运算,常用于循环语句和指针变量中。
⭐自增、自减运算符,不能用于常量和表达式。
⭐在表达式中,最好避免连续使同一变量进行自增或自减运算。
3、赋值运算符与表达式
简单的赋值运算符 :=、
功能:将一个数据值写入到变量对应的内存空间中。
赋值表达式: 变量=确定的值
例如:a=4;
c=a+b;
赋值表达式的值即变量的值。
4、复合赋值运算
复合赋值运算符是由赋值运算符之前再加一个双目运算符构成的。
复合赋值运算的一般格式为: 变量 双目运算符 = 表达式
└──┬──┘
复合赋值运算符
等价于:变量= 变量 双目运算符 (表达式)
C 语言规定的10 种复合赋值运算符如下:
+= -= *= /= %= /*复合算术运算符 5 种*/
&= ^= |= <<= >>= /*复合位运算符 5种*/
例如: x += 3 /* 等价于x=x+3 */
y *= x + 6 /* 等价于y=y*(x+6),而不是 y=y*x+6 */
四、顺序结构程序设计
1、C语句概述
一个C程序可以包含多个源程序文件。
一个源程序文件由预处理命令和若干函数组成。
函数由函数首和函数体两部分组成。
函数体主要包含:数据描述部分和算法实现部分。 算法实现部分由若干条语句组成,每条语句都以 ; 为结尾。
C语句的分类
1.控制语句(9条) 2.表达式语句 3.空语句 4.复合语句 5.函数调用语句
控制语句(9条)
表达式语句
表达式语句由一个合法的C语言表达式加上分号“;”组成。
一般形式为: 表达式;
a=3;
I=I+1;
x+y;
空语句
只有分号“;”组成的语句 一般位于循环体中,表示循环体什么也不做
复合语句
用{}把多条语句括起来成为复合语句,又称分程序.
{
z=x+y;
i++;
}
函数调用语句
由函数名、实际参数加上分号“;”组成。
一般形式为:函数名(实际参数表列);
printf(“test”);
swap(a,b);
2、 库函数的使用
函数:事先编好的完成一定功能的程序段。
按编写者的不同可分为: 标准库函数 自定义函数
3、输出函数
(1)putchar(字符输出函数)
向终端输出一个字符
putchar(a); /* 输出变量a中存储的字符 */
putchar(‘\n’); /* 输出换行回车 */
putchar(‘\101’); /* 输出字符‘A’ */
使用时必须包含stdio.h函数库 预处理命令:#include <stdio.h>
(2)printf(格式输出函数)
printf函数调用的一般形式: printf(格式控制,输出表列);
格式控制(用双引号引起来): 格式控制字符;
转义字符
普通字符
输出表列:常量、变量、表达式
printf函数中常用的格式字符
4、输入函数
(1)getchar
由终端向程序中输入一个字符
#include <stdio.h>
void main()
{ char c1,c2;
c1=getchar();
c2=getchar();
putchar(c1);
putchar(c2);
}
(2)scanf(格式输入函数)
scanf函数调用的一般形式: scanf(格式控制,地址表列);
格式控制 :格式字符
普通字符
地址表列 :取地址运算符:&
变量地址的表示:&a
五、选择结构程序设计
1、C 语言中逻辑量的表示
(1)逻辑量的概念
条件判定的结果用逻辑量表示。条件判定的结果只有成立和不成立两种。
成立表示为1 (真) 不成立表示为0 (假)
如:3>5,x<0,a+b>c
(2)关系运算符和关系表达式
1) 六种关系运算符 < <= > >= == !=
2) 关系表达式: 由关系运算符将两个操作数连接起来组成的表达式(运算结果为逻辑量)。
(3)逻辑运算符和逻辑表达式
1) 三种逻辑运算符
&& 与运算(二者必须完全符合)
|| 或运算(二者之一符合即可)
! 非运算(取反)
2) 逻辑运算表达式
用逻辑运算符将操作数连接起来的式子。(操作数和运算结果都是逻辑量)。
(4)逻辑运算符的优先级
1. ! 、&& 、 ||
高------->低
2. && 和 || 低于关系运算符,! 高于算术运算符
(a>b)&&(b>c) 可写成 a>b&&b>c
2、if语句
(1)if语句的格式:
if(逻辑量) 语句1;
[else 语句2;]
逻辑量为真执行语句1, 否则执行语句2
//求两个数的最大值(方法一)
#include <stdio.h>
void main()
{
int a,b,max;
scanf(“%d%d”,&a,&b);
if(a>b) max=a;
else max=b;
printf(“max=%d”,max);
}
//求两个数的最大值(方法二)
#include <stdio.h>
void main()
{
int a,b,max;
scanf(“%d%d”,&a,&b);
max=a;
if(max<b)
max=b;
printf(“max=%d”,max);
}
(2)条件运算符和条件表达式
条件运算符 :? :
条件运算表达式的的格式: 操作数1 ? 操作数2 : 操作数3
一般规则: 如果操作数1的值为真,则以操作数2的值作为条件表达式的值,否则以操作数3的值作为整个条件表达式的值,通常用于赋值语句之中。
对于if、else语句可以用简单的一个条件运算表达式来处理
例如:if( a>b )
max=a;
else
max=b;
可以写成:max=(a>b)?a:b; 条件表达式运算结果类型和后两个操作数中类型较高的一个保持一致。
(3)if语句的嵌套
一般形式:
if(逻辑量1)
if(逻辑量2)语句1;
else 语句2;
else if(逻辑量3) 语句1;
else 语句2;
if语句的配对原则: C语言规定,else总是与它前面(同层)最近的不带else的if 配对。
例 从键盘输入x的值求y的值
#include <stdio.h>
void main()
{ float x,y;
scanf(“%f”,&x);
if(x>0) y=1/x;
else
if(x<0) y=-1/(2*x);、
else y=0;
printf(“%f”,x);
}
例 求三个整数的最大值。(方法一)
#include <stdio.h>
void main()
{ int a,b,c;
scanf(“%d%d%d”,&a,&b,&c);
if(a>b)
if(a>c) printf(“max=%d”,a);
else printf(“max=%d”,c);
else if(b>c) printf(“max=%d”,b);
else printf(“max=%d”,c);
}
求三个整数的最大值。(方法二)
#include <stdio.h>
void main()
{
int a,b,c,max;
scanf(“%d%d%d”,&a,&b,&c);
max=a;
if(max<b) max=b;
if(max<c) max=c;
printf(“max=%d”,max);
}
求三个整数的最大值。(方法三)
#include <stdio.h>
void main()
{
int a,b,c,t;
scanf(“%d%d%d”,&a,&b,&c); if(a>b)
{ t=a;a=b;b=t; }
if(b>c)
{ t=b;b=c;c=t; }
printf(“max=%d”,c);
}
3、switch语句
switch语句是多分支选择语句 一般形式:
switch(表达式)
{
case 常量表达式1: 语句1;
case 常量表达式2: 语句2;
…
case 常量表达式n: 语句n;
default : 语句n+1;
}
计算出switch后面括号里表达式的值;
用表达式的值与case后面的常量逐一进行比较,当其与某一个case后面的常量相等时,由此进入switch语句,开始顺次执行后面所有的可执行语句;
如和所有的case后面的常量都不相符时,则由default后面的语句开始执行,直到遇到switch语句结束的“}”或者遇到“break;”语句为止。
⭐case后面的常量只能是整型或字符型 switch后面括号里表达式的值可以是任意类型,系统会根据case后面常量的类型自动进行转换
⭐default语句可以省略
⭐default语句可以出现在case之前,但switch语句仍按照原有的方法执行。
六、循环结构程序设计
1、循环结构的分类
(1)当型循环
(2)直到型循环
循环结构(当型循环)while 语句
条件P成立时反复执行A操作,直到P为假结束循环;
循环结构(直到型循环) do–while 语句
反复执行A操作,直到条件P为假结束循环;
2、解决循环问题的基本步骤
构造循环体
寻找控制循环的循环变量
找出控制循环变量的3个要素
循环变量的初值
循环的条件
使循环趋于结束的部分
3、实现循环的语句
在C语言中有四条可以实现循环结构的语句: 1)while 语句 2)for 语句 3)do – while 语句 4)if – goto 语句
(1)goto语句
(2)while语句
//求35个人的平均成绩
#include <stdio.h>
void main()
{
int m=0;
float score,average=0;
while(m<35)
{
scanf("%f",&score);
average+=score;
m=m+1; /* m++; */
}
average/=35;
printf("Average=%.2f\n",average);
}
通用性
人数以变量表示 int number; (m<number)
宏定义 #define N 35 (m<N)
分析m:初值与循环条件的关系
#include <stdio.h>
#define N 35
void main()
{
int m=1;
float score,average=0;
while(m<=N)
{
printf(“Input score(%d):",m);
scanf("%f",&score);
average+=score;
m=m+1; /* m++; */
}
average/=N;
printf("Average=%.2f\n",average);
}
//求1~100累加
#include <stdio.h>
void main()
{ int sum=0,n;
n=1;
while( n<=100 )
{
sum=sum+n;
n++;
}
prinf(“sum=%d”,sum);
}
3、do-while循环
#include <stdio.h>void main()
{
int n,i=1;
float fac=1;
scanf(“%d”,&n);
do
{
fac=fac*i;
i++;
}while(i<=n);
prinf(“fac=%.0f”,fac);
}
4、for语句
七、函数
1、概述
(1)C 语言中关于函数的约定:
一个C程序可以由多个文件组成;
一个源程序文件由一个或多个函数组成,但有且仅有一个main()函数
C程序从main()开始执行,由主函数结束
函数之间的关系相互独立,不存在从属关系
函数之间是通过函数调用来连接的。
主函数只能调用别的函数,但不能被别的函数调用
其他自定义函数既可调用别的函数,又可被别的函数调用
(2)函数的分类
用户角度:标准库函数(系统函数)
用户自定义函数
函数参数角度:无参函数
有参函数
函数返回值角度:有值函数
无值函数
2、函数的定义、返回值
函数的一般形式: 类型说明符 函数名(形参表列)
{
数据描述;
算法实现;
}
//定义函数实现 x2-1
float y(float x)
{
float z;
z=x*x-1;
return(z);
}
(1)有值函数的定义
有值函数需要给主调函数一个返回值,使用return语句实现。
return语句的一般格式:return(表达式); 或 return 表达式;
功能 向主调函数带回一个返回值; 释放在子函数运行中分配的所有内存空间; 结束该被调函数的执行,使程序流程跳转至主调函数继续执行;
函数类型与return语句中表达式的值数据类型不一致时,以函数类型为主。
[例]编写函数将某一字母变成大写字母
算法分析: 小写字母 =〉大写字母 C-32
返回值:return
类型:字符型
char pro(char c)
{
if(c>='a'&&c<='z')
return(c-32);
return(c);
}
(2)无值函数的定义
无值函数无需给主调函数带回返回值,此类函数的类型为void,函数体中省略return语句。
void beep()
{
int i;
for(i=0;i<10;i++)
putchar('\101');
}
3、函数的声明及调用
在C语言中,用户可以根据需要调用任何函数来完成某种处理,一个函数调用另一个函数称为函数调用。
其中调用者称为主调函数,被调用者称为被调函数。
函数调用可以作为表达式中的一个分量,也可以单独构成语句。
(1)函数调用的一般形式
函数名(实际参数表)
函数调用的功能:
实现流程的转移:程序的执行从主调函数转到了被调函数
实现参数的传递: 参数值传递:实参向形参的单向值传递
返回值:由被调向主调带回的数据
(2)实参和形参
参数传递: 一一对应 单向传递
求值方向: 自右向左
(3)函数调用的方式
函数调用的三种格式
函数调用语句 beep();
将有值函数调用参与表达式构成语句 x=max(a,b);
有参函数的调用作为另一个函数调用的实际参数 y=max(max(a,b),c);