C语言复习课件
合集下载
《C语言的基本知识》PPT课件
C语言的基本运算-关系运算
运算符 > < == >= <= !=
名称 大于 小于 等于 大于等于 小于等于 不等于
例子 a>b a<b a == b a >= b a <= b a != b
运算功能 a大于b a小于b a等于b
a大于等于b a小于等于b
a不等于b
C语言的基本运算-逻辑运算
运算符 && ‖ !
一个元素都属于同一个数据类型 结构体:struct 公用体:union 无符号数:unsigned(unsigned int;unsigned char)
C语言的基本运算-算术运算
运算符 名称
+
加
-
减
*
乘
/
除
% 取余
++ 自增
-- 自减
-
取负
例子 a+b a-b a*b a/b a%b a ++
cmd
操作
返回按键的键值,该值是2个字节的整型数,若没有
0 键按下,则该函数一直等待,直到有键按下。当按
下时,若返回值的低8位为非零,则表示为普通键, 其值代表该键的ASCII码。若返回值的低8位表示为 扩展的ASCII码,表示按下的是特殊功能键。
1 此时,该函数则用来查询是否有键按下。若返回非0
值,则表示有键按下,若为0,表示没键按下。
00001110
1
方法1:先右移n位,再与“0x01”进行与运算
bit = (byte>>n)&0x01;
方法2:使用屏蔽字
unsigned char MASK[8] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
第一讲C语言复习ppt课件
含义清楚,提高了程序的可读性。 在需要改变一个常量时能做到“一改全改”
用define定义宏是C语言的习惯,在C++中有更好的 解决方案.
用#define定义符号常量的问题 所定义的符号常量无法进行类型检查 #define的处理只是简单的字符串的替换,可能会 引起一些意想不到的错误
C++建议用const定义符号常量 const <类型名> <常量名> = <值>; 如:
(1) 编译C++程序时,编译器自定义了一个预处理 器名字, __cplusplus
#ifdef __cplusplus …..
#endif (2) 编译C程序时,编译器自定义名字__STDC__
(3) __cplusplus 和 __STDC__ 不会同时定义
#include <iostream> using namespace std;
int a; cin>>a; }
(2)如果定义DEBUG宏 实际被编译的程序代码如下:
#include <iostream> using namespace std; #define DEBUG void main() {
cout<<"Beginning execution of main()\n"; int a; cin>>a; cout<<"input int: "<<a<<endl; }
int n = scanf("%d%c%s%lf%f",&a,&b,c,&d,&e); printf("%d %c %s %lf %e %f %d",a,b,c,d,e,e,n); input: 123a teststring 8.9 9.2 output:
用define定义宏是C语言的习惯,在C++中有更好的 解决方案.
用#define定义符号常量的问题 所定义的符号常量无法进行类型检查 #define的处理只是简单的字符串的替换,可能会 引起一些意想不到的错误
C++建议用const定义符号常量 const <类型名> <常量名> = <值>; 如:
(1) 编译C++程序时,编译器自定义了一个预处理 器名字, __cplusplus
#ifdef __cplusplus …..
#endif (2) 编译C程序时,编译器自定义名字__STDC__
(3) __cplusplus 和 __STDC__ 不会同时定义
#include <iostream> using namespace std;
int a; cin>>a; }
(2)如果定义DEBUG宏 实际被编译的程序代码如下:
#include <iostream> using namespace std; #define DEBUG void main() {
cout<<"Beginning execution of main()\n"; int a; cin>>a; cout<<"input int: "<<a<<endl; }
int n = scanf("%d%c%s%lf%f",&a,&b,c,&d,&e); printf("%d %c %s %lf %e %f %d",a,b,c,d,e,e,n); input: 123a teststring 8.9 9.2 output:
C语言程序设计基础复习PPT课件
void main() { int x=1, y=5, z=9;
p(&x, y); printf("%d, %d, %d#", x, y, z); } 第40页/共92页
3、函数的调用
(1) 函数调用的一般格式 熟练掌握通过函数名调用函数,了解通过
函数指针调用函数 (2) 掌握函数的嵌套调用和递归调用
第3页/共92页
2.1 数据的定义
数据的定义包括数据类型和存储类别 1、基本类型
基本类型指整型、实型和字符型(主要是 int, float, double, char; 还 包 括 long, unsigned, short)
第4页/共92页
(1) 常量 熟练掌握各种表示形式的整数、实数、和
字符(串)常量,符号常量的定义和使用。 包括整数的十进制、八进制和十六进制的
第37页/共92页
2、函数的定义
(1) 熟练掌握函数定义的ANSI C格式 (2) 熟练掌握函数的参数(形式参数和实在
参数)及参数传递,包括指针作为函数的 参数 (3) 熟练掌握函数的返回值,包括指针作为 函数的返回值
第38页/共92页
要调用字符串处理函数时,在#include命 令行中应包含_____。
pa
int *pa, a; pa=&a; printf("%d,%d, %d", *pa, a,*&a ); printf("%x,%x, %d", pa, &a, &*p);
9a
第11页/共92页
若变量已正确定义并且指针p已经指向某个 变量x,则(*p)--相当于_____。
A、p-- B、x-- C、*(p--) D、&x- -
p(&x, y); printf("%d, %d, %d#", x, y, z); } 第40页/共92页
3、函数的调用
(1) 函数调用的一般格式 熟练掌握通过函数名调用函数,了解通过
函数指针调用函数 (2) 掌握函数的嵌套调用和递归调用
第3页/共92页
2.1 数据的定义
数据的定义包括数据类型和存储类别 1、基本类型
基本类型指整型、实型和字符型(主要是 int, float, double, char; 还 包 括 long, unsigned, short)
第4页/共92页
(1) 常量 熟练掌握各种表示形式的整数、实数、和
字符(串)常量,符号常量的定义和使用。 包括整数的十进制、八进制和十六进制的
第37页/共92页
2、函数的定义
(1) 熟练掌握函数定义的ANSI C格式 (2) 熟练掌握函数的参数(形式参数和实在
参数)及参数传递,包括指针作为函数的 参数 (3) 熟练掌握函数的返回值,包括指针作为 函数的返回值
第38页/共92页
要调用字符串处理函数时,在#include命 令行中应包含_____。
pa
int *pa, a; pa=&a; printf("%d,%d, %d", *pa, a,*&a ); printf("%x,%x, %d", pa, &a, &*p);
9a
第11页/共92页
若变量已正确定义并且指针p已经指向某个 变量x,则(*p)--相当于_____。
A、p-- B、x-- C、*(p--) D、&x- -
标准C语言复习PPT课件
静态型static
生存期:整个程序运行期间 局部静态变量
具有全局寿命和局部可见性 编译时赋初值,只赋一次;若不赋初值,其值为0
外部静态变量
外部变量只能是static型或缺省存储类型 外部静态变量不允许其它文件引用 若不赋初值,其值为0
外部参照型extern
extern不是定义变量,只是对变量进行说明 extern说明的变量在其它文件或本文件的其
循环体语句; }
do {
循环体语句; } while(expression);
for(expr1 ; expr2 ; expr3) {
循环体语句; }
第六章 函数
C语言是函数式语言 必须有且只能用一个main 程序执行从main开始,在main中结束 函数定义不能嵌套 库函数与用户自定义函数
及类型,为编译程序作类型检查提供依据
函数说明位置:在程序的数据说明部分,可在函数内部或外部
说明
C语言中下列情况下,可不作函数说明
–若函数返值是char或int型,系统自动按int 型处理
–被调用函数定义出现在主调函数之前
–在文件开头,所有函数定义之前作了类型说 明,则主调函数中不必再说明
变量的存储属性 变量的生存期:静态变量与动态变量 变量的作用域:局部变量与全局变量 变量的存储类型
auto register static extern
局部变量
定义 不同函数中定义的同名变量,占用不同的内
存单元,互不干扰
形参属于局部变量,默认为auto型
SUCCESS
THANK YOU
2019/6/18
全局变量
定义
有效范围:从定义变量的位置开始到本源文 件结束,及有extern说明的其它源文件
C语言期末复习概要PPT课件
• %d: 十进制整数。 • %f: 十进制实数。 • %c: 单个字符。 • %s: 一个字符串。
第46页/共96页
修饰符
• -: 输出的数字或字符在域内向左靠拢。 • m:数据最小宽度 • n: 输出的小数位数;
第47页/共96页
六、数组
第48页/共96页
数组的概念
• 数组是具有同一类型的有序数据的集合。 • C语言规定只能逐个引用数组元素而不能一次引用整个数组。 • 必须先定义数组,然后引用数组元素。 • 数组中各元素类型相同,与数组类型一致。 • 每个元素由统一的数组名和惟一的下标确定。 • 下标从‘0’开始,必须为整型常量或表达式。
<stdio.h>。
第38页/共96页
printf()
• 输出若干个任意类型的数据。 • 函数形式:
printf(格式控制, 输出表列) • 格式控制是用双撇号限定的字符串,包括:
• 格式说明。由“%”和格式字符组成。 • 普通字符。普通字符即需要原样输出的字符。 • 输出表列是需要按指定格式输出的若干数据。可以是变量,也可以是表达式。 由逗号隔开。
(二元,从左至右)
7. && 至右)
(二元,从左
8. ||
(二元,从左至右)
9. ? :
(三元,从右至坐)
10. =,+=,-=,*=,/=,%=
(二元,从右至左)
11. ,
( 第17页/共96页
,从左至右)
三、选择结构
第18页/共96页
单分支
• if(表达式) 语句1
第19页/共96页
双分支
第41页/共96页
getchar()
• 输入一个字符。 • 函数形式:
第46页/共96页
修饰符
• -: 输出的数字或字符在域内向左靠拢。 • m:数据最小宽度 • n: 输出的小数位数;
第47页/共96页
六、数组
第48页/共96页
数组的概念
• 数组是具有同一类型的有序数据的集合。 • C语言规定只能逐个引用数组元素而不能一次引用整个数组。 • 必须先定义数组,然后引用数组元素。 • 数组中各元素类型相同,与数组类型一致。 • 每个元素由统一的数组名和惟一的下标确定。 • 下标从‘0’开始,必须为整型常量或表达式。
<stdio.h>。
第38页/共96页
printf()
• 输出若干个任意类型的数据。 • 函数形式:
printf(格式控制, 输出表列) • 格式控制是用双撇号限定的字符串,包括:
• 格式说明。由“%”和格式字符组成。 • 普通字符。普通字符即需要原样输出的字符。 • 输出表列是需要按指定格式输出的若干数据。可以是变量,也可以是表达式。 由逗号隔开。
(二元,从左至右)
7. && 至右)
(二元,从左
8. ||
(二元,从左至右)
9. ? :
(三元,从右至坐)
10. =,+=,-=,*=,/=,%=
(二元,从右至左)
11. ,
( 第17页/共96页
,从左至右)
三、选择结构
第18页/共96页
单分支
• if(表达式) 语句1
第19页/共96页
双分支
第41页/共96页
getchar()
• 输入一个字符。 • 函数形式:
《C语言复习》课件
循环语句
01
02
03
04
循环语句用于重复执行一段 代码,直到满足特定条件为 止。在C语言中,主要有三种 类型的循环语句:for循环、 while循环和do-while循环。
for循环用于在指定次数内重 复执行代码块。for循环的语
法格式为:for (initialization; condition; update) { code block }。
while循环用于当条件为真时 重复执行代码块。while循环
的语法格式为:while (condition) { code block }
。
do-while循环与while循环类 似,不同之处在于do-while循 环至少会执行一次代码块,然 后再判断条件。do-while循环
的语法格式为:do { code block } while (condition)。
C语言的基本语法结构
C语言的基本语法结构包括数据类型、运算符、控制结构、函数等部分。
数据类型包括整型、浮点型、字符型等,运算符包括算术运算符、关系运算符、逻辑运算符等,控制结 构包括条件语句、循环语句等。
函数是C语言的基本组成单位,用于实现特定的功能或计算,通过函数可以重复使用代码,提高代码复 用性。
数,对参数的修改会影响原始变量的值。
数组的定义和使用
总结词
掌握数组的定义和使用方法
VS
详细描述
数组是一种存储相同类型数据元素的数据 结构。在C语言中,可以通过指定数组大 小来定义数组,并使用下标来访问数组元 素。数组可以用于存储大量相同类型的数 据,并提供高效的随机访问。
数组的遍历和排序
总结词
掌握数组的遍历和排序方法
02
第一章C语言基础复习.ppt
调试运行
完成
3
C
回顾2: 编译和执行C程序 源程序:是用户创建的文件,以“.c”为文件扩展名保
源存 程 序
编译
目
标
文
头文件:含有函数的声明和
件
预处理语句,用于帮助访问
外部定义的函数。头文件的
扩展名为“.h”。
C语言函数库
目标文件:是编译器的输出结 果。在VC中这类文件的扩展名 为 “.obj”
可执行文件:是连接器 的输出结果。可执行文 件 的 扩 展 名 为 “ .exe” 。
空白字符)
11
回顾6: 算术运算符
算术
单目
操作数
运算符
操作数
双目
12
回顾6: 算术运算符
算术
表达式
j = ++i;单目
j = i ++;
双目
j = - -i;
j = i - -;
如+何+计算nu+m++n+umnum=结5n)u果m+(1in初u值m+为+
i = i+ 1; --num j = 6; num--
第一、二章
C语言基础复习
复习内容
C程序的开发过程 C 程序的基本结构 基本数据类型 常量 变量 标识符 算术表达式 赋值表达式
2
回顾分析1问:题C程序的开发过程
编制程序
编译中发现错误, 转回修改源程序
编译
连接中发现错误, 转回修改源程序
连接
调试运行中发现问题,表明分析 本身有错误,重新分析问题
14
回顾7: 复合赋值运算符
运算符 表达式 计算 结果(假设 X=10)
C语言复习ppt课件
14
表达式
练习: 1.写一个表达式,表示变量a的值大于5 且小于10 a > 5 && a < 10 2.写一个表达式,表示变量a的值大于5 或小于1 a > 5 || a < 1
* 15
表达式的值
C语言中关系表达式的值是1或者0
表示其结果要么是真,要么是假。真用1表示,假 用0表示。
例:int a=5,b=2;则:
printf("*******\n"); count++; /*表达式3被移到这里*/ } * return 0;}
29
2.while语句
while (表达式) { 语句; }
只要表达式的值为非0, 就重复执行语句,直到表 达式值为0时止
*
表假达式 假
真
语句
30
3.do-while语句
do
int numbers[3]; numbers[0] = 34; numbers[1] = 23; numbers[2] = 84;
也可以在申明的同时赋初值:
int numbers[3] = {34, 23, 84};
注意:这里{ }中的值不能超过数组的元素个数。
* 39
数组的定义与使用
在申明的同时赋初值还可以写成:
┇┇
┇
值1…值n 不能相同
case 值n :语句n;break;
Байду номын сангаас
default : 语句n+1;
*}
23
switch语句的作用是根据表达式的值 ,使流程跳转到不同的语句
switch语句的一般形式:
switch(<表达式>)
表达式
练习: 1.写一个表达式,表示变量a的值大于5 且小于10 a > 5 && a < 10 2.写一个表达式,表示变量a的值大于5 或小于1 a > 5 || a < 1
* 15
表达式的值
C语言中关系表达式的值是1或者0
表示其结果要么是真,要么是假。真用1表示,假 用0表示。
例:int a=5,b=2;则:
printf("*******\n"); count++; /*表达式3被移到这里*/ } * return 0;}
29
2.while语句
while (表达式) { 语句; }
只要表达式的值为非0, 就重复执行语句,直到表 达式值为0时止
*
表假达式 假
真
语句
30
3.do-while语句
do
int numbers[3]; numbers[0] = 34; numbers[1] = 23; numbers[2] = 84;
也可以在申明的同时赋初值:
int numbers[3] = {34, 23, 84};
注意:这里{ }中的值不能超过数组的元素个数。
* 39
数组的定义与使用
在申明的同时赋初值还可以写成:
┇┇
┇
值1…值n 不能相同
case 值n :语句n;break;
Байду номын сангаас
default : 语句n+1;
*}
23
switch语句的作用是根据表达式的值 ,使流程跳转到不同的语句
switch语句的一般形式:
switch(<表达式>)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C 语 言 复 习
2010.8
基 本 要 求
• 熟悉VC++开发环境 • 掌握结构化程序设计风格 • 掌握程序设计中简单的数据结构和算 法 • 在VC++环境下具有调试程序的能力。
考 试 内 容
• • • • • • • • • • • • 一、C程序结构 二、数据类型及其运算 三、基本语句 四、选择结构,循环结构 五、数组的定义与使用 六、函数 七、编译预处理 八、指针 九、结构体,共用体 十、位运算 十一、文件操作 笔试90分钟,满分100分,其中含公共基础部分30分。 ( 公共基础知识有10道选择题和5道填空题。) • 上机90分钟,含填空,改错,编程。
第一章
• • • • 要点 Mian() 函数性语言 .c----.obj------.exe 标识符:字母 下划线 数字
第二章
• 数据类型及运算 • 注意运算符的优先级和结合性。 • A+b+c -a++ -(a++)
• 如:基本数据类型:整形(2字节), 实形(4),字符形(1)。
第三章
基本语句 1)scanf(“格式控制”,输入项地址表列);最好只 使用格式字符。不要把其它字符加进来。 scanf(“%d,%d”,&a,&b); 输入的是 3 5↙ 3,5 ↙ 2)在使用“%c”格式符输入字符时,空格不再作为 分隔符而同样是有效的输入。 printf(“%c%c”,&a,&b); 3)输入long、double型数据时,应用“%ld”、“%lf” 格式符。 scanf(“%d”,&a); 入: 123456 scanf(“%ld”,&a); printf(“%d”,a); 出: -7616
选D 改:A (*(prt+1))[2]) B *(p+5) C *(*(prt+1)+2)
注: int (*prt)[3]表示prt是一个指针变量,它指向包含4个元素的一维数组。 因此,prt不能指向一维数组中的某一个元素,prt+1就指乡向了下一行。 所以,a[1][2]应是: *(*(p+1)+2) *prt两侧的括号不能少,[]优先级高于*,若是*prt[4]就变成指针数组了。
选C A空间不够 B缺\0 D指针没有确定值
• 考点一般和循环结构和指针相结合。 • 注意:可能出现涉及算法的程序(排序)
• 第六章 函数
掌握函数结构,参数传递的方式。 注意各种变量的作用域
• (1)哪个编译会出错!! A) max(int x,int y,int *z) B) max(int x, int y) { *z=x>y?x:y;} {return x>y?x:y;}
第八章 指 针
*(a+1)
a
• 二维数组中:int a[4][5]; a+1 a+1, &a[1], p+1 表示1行的首地址。 *(a+1), a[1], *(p+1) 表示1行0列元素的地址。 a[1]+2, *(a+1)+2, &a[1][2] 表示1行2列元素的地址。 *(a[1]+2), *(*(a+1)+2), a[1][2] 表示1行2列元素的值。
-> . 优先级高于++ 选D
第十章 位运算
• • • • • • 左移<< : 右端补0 ,相当于乘以2 右移>> : 无符号数和正数左端补0 ,相当于/2;负数补1 取反:~ 按位与 :& (“0与”该位被屏蔽。“1与”保持原值) 按位或 :| (“1或”该位被置1。“0或”保持原值) 按位异或 :^ (“0异或 ”该位不变。“1异或”该位取 反) • 位数不同的两个数做位运算,先进行符号扩展。 (无符号数和正数左端补0,负数补1。
• 此处所出的题较复杂,一般与数组、函数指针相结合。
第九章 结构体共用体
• • 定义方式和含义struct union 由结构体构成的单向链表的插入、删除、查 询 • Struct st {int n; struct st *next;}; static struct st a[3]=(5,&a[1],7,&a[2],9,‟\0‟),*p; P=&a[0]; 则值为6的表达式是( D )。 A) p++->n B)p->n++ C) (*p).n++ D) +有以下定义和语句: • int w[2][3],(*pw)[3]; • pw=w; • 则对w数组元素非法引用是 • A)*(w[0]+2) B)*(pw+1)[2] • C)pw[0][0] D)*(pw[1]+2) • 选B
•注: []优先级高于*, (*(pw+1))[2]
(3)二维数组名作为实参:对应的形参必须 是一个行指针变量; • mian() • { int s[m][n];…. • fun(s);……} • 函数首部的形式: • fun (int a[][n]); • fun (int a[m][n]); • fun (int (*a)[n]); 无论哪种形式,系统都把A处理成一个行指 针。
• 结果:8 5
第七章 预处理
• 宏名一般用大写字母,以区别于普通的变 量 。 • 宏替换过程只是简单的字符串替换,并不 做语法检查。 • 宏定义一般不在行末加分号,若有分号, 则一起参加替换。 • 宏展开不占运行时间,只占编译时间,而函 数调用占运行时间。因此,使用宏可以比 函数调用更快。
• #include<stdio.h> #define MIN(x,y) (x)<(y)? (x):(y) main() 替换出来: K=10*(10)<(15)?(10):(15); { int i,j,k; K=100<15?10:15; i=10; j=15; K=15; k=10*MIN(i,j); printf("%d\n",k); } A) 15 B) 100 C) 10 D) 150
第四章 程序结构
• 1、多重IF语句的判定;判断表示式的正确理 解。main( ) {int a=1,b=3,c=5; if (c=a+b) printf ("yes\n"); else printf("no"); } • 输出结果是:答案应是yes。
假定所有变量均已正确说明,下列程序段运行后x 的值是: a=b=c=0;x=35; if (!a) x-- ; else if(b); if (c) x=3; else x=4; A)34 B)4 C)35 D)3 B
C) max(int x,int y) { int z; z=x>y?x:y; return z;} D) int max(int x, y) { int z z=x>y?x:y; return z;}
• (2)写程序结果:
• int d=1; • fun (int q) • { int d=5; • d + =q+ +; • printf("%d“,d); • } • main( ) • { int a=3; • fun(a); • d + = ++a; • printf("%d\n",d); • }
(4)指针数组作为实参时,对应的形参应该是 一个指向指针的指针。 • Main() • {int s[m][n],*ps[m];…. • for (i=o;i<m;i++) ps[i]=s[i]; • fun(ps);….. } • 函数首部: • fun (int *a[m]); • fun (int *a[]); • fun (int **a);因为此时传送的是一维指针的数组名。
第五章 数组
• 数组下标从0开始;存储方式行优先连续空间;字 符串结构‘\0‟;
下面能正确进行字符串赋值的操作是() A)char s[5]={“ABCDE”}; B) char s[5]={„A‟,‟B‟,‟C‟,‟D‟,‟E‟ }; C) char *s;s=“ABCDE”; D) char *s; scanf(“%s”,s);
• • • • • • • • • • • • • • •
2、swith中常量表达式入口的理解,break的作用。 以下程序输出结果是(C )。 #include “stdio.h” main() { int x=0,y=2,z=3; switch(x) { case 0: switch(y==2) { case 1: printf("*");break; case 2:printf("%");break; } case 1: switch(z) { case 1: printf("$"); case 2: printf("*");break; default:printf("#"); } } }(A)*% ( B)*%$ (C)*# (D)*$*#
注意位运算的优先级
• 以下程序中C的二进制值是(A) Char a=3, b=6, c; C=a^b<<2; A) 00011011 B) 00010100 C) 00011100 D) 00011000
b: 00000110 B<<2 : 00011000 A^b<<2: 00000011 00011011 选A
• 3、循环结构注意循环体的正确范围;循环 体中循环控制变量的修改;break; continue;的区别; • (1) while(a=1){……} (2) {int I,sum=0; For(i=1;i<=3;sum++) sum+=I; } 结果是:死循环。 (3) sum=0; for(i=1;i<10;i++); sum=sum+i; 结果是:10。
2010.8
基 本 要 求
• 熟悉VC++开发环境 • 掌握结构化程序设计风格 • 掌握程序设计中简单的数据结构和算 法 • 在VC++环境下具有调试程序的能力。
考 试 内 容
• • • • • • • • • • • • 一、C程序结构 二、数据类型及其运算 三、基本语句 四、选择结构,循环结构 五、数组的定义与使用 六、函数 七、编译预处理 八、指针 九、结构体,共用体 十、位运算 十一、文件操作 笔试90分钟,满分100分,其中含公共基础部分30分。 ( 公共基础知识有10道选择题和5道填空题。) • 上机90分钟,含填空,改错,编程。
第一章
• • • • 要点 Mian() 函数性语言 .c----.obj------.exe 标识符:字母 下划线 数字
第二章
• 数据类型及运算 • 注意运算符的优先级和结合性。 • A+b+c -a++ -(a++)
• 如:基本数据类型:整形(2字节), 实形(4),字符形(1)。
第三章
基本语句 1)scanf(“格式控制”,输入项地址表列);最好只 使用格式字符。不要把其它字符加进来。 scanf(“%d,%d”,&a,&b); 输入的是 3 5↙ 3,5 ↙ 2)在使用“%c”格式符输入字符时,空格不再作为 分隔符而同样是有效的输入。 printf(“%c%c”,&a,&b); 3)输入long、double型数据时,应用“%ld”、“%lf” 格式符。 scanf(“%d”,&a); 入: 123456 scanf(“%ld”,&a); printf(“%d”,a); 出: -7616
选D 改:A (*(prt+1))[2]) B *(p+5) C *(*(prt+1)+2)
注: int (*prt)[3]表示prt是一个指针变量,它指向包含4个元素的一维数组。 因此,prt不能指向一维数组中的某一个元素,prt+1就指乡向了下一行。 所以,a[1][2]应是: *(*(p+1)+2) *prt两侧的括号不能少,[]优先级高于*,若是*prt[4]就变成指针数组了。
选C A空间不够 B缺\0 D指针没有确定值
• 考点一般和循环结构和指针相结合。 • 注意:可能出现涉及算法的程序(排序)
• 第六章 函数
掌握函数结构,参数传递的方式。 注意各种变量的作用域
• (1)哪个编译会出错!! A) max(int x,int y,int *z) B) max(int x, int y) { *z=x>y?x:y;} {return x>y?x:y;}
第八章 指 针
*(a+1)
a
• 二维数组中:int a[4][5]; a+1 a+1, &a[1], p+1 表示1行的首地址。 *(a+1), a[1], *(p+1) 表示1行0列元素的地址。 a[1]+2, *(a+1)+2, &a[1][2] 表示1行2列元素的地址。 *(a[1]+2), *(*(a+1)+2), a[1][2] 表示1行2列元素的值。
-> . 优先级高于++ 选D
第十章 位运算
• • • • • • 左移<< : 右端补0 ,相当于乘以2 右移>> : 无符号数和正数左端补0 ,相当于/2;负数补1 取反:~ 按位与 :& (“0与”该位被屏蔽。“1与”保持原值) 按位或 :| (“1或”该位被置1。“0或”保持原值) 按位异或 :^ (“0异或 ”该位不变。“1异或”该位取 反) • 位数不同的两个数做位运算,先进行符号扩展。 (无符号数和正数左端补0,负数补1。
• 此处所出的题较复杂,一般与数组、函数指针相结合。
第九章 结构体共用体
• • 定义方式和含义struct union 由结构体构成的单向链表的插入、删除、查 询 • Struct st {int n; struct st *next;}; static struct st a[3]=(5,&a[1],7,&a[2],9,‟\0‟),*p; P=&a[0]; 则值为6的表达式是( D )。 A) p++->n B)p->n++ C) (*p).n++ D) +有以下定义和语句: • int w[2][3],(*pw)[3]; • pw=w; • 则对w数组元素非法引用是 • A)*(w[0]+2) B)*(pw+1)[2] • C)pw[0][0] D)*(pw[1]+2) • 选B
•注: []优先级高于*, (*(pw+1))[2]
(3)二维数组名作为实参:对应的形参必须 是一个行指针变量; • mian() • { int s[m][n];…. • fun(s);……} • 函数首部的形式: • fun (int a[][n]); • fun (int a[m][n]); • fun (int (*a)[n]); 无论哪种形式,系统都把A处理成一个行指 针。
• 结果:8 5
第七章 预处理
• 宏名一般用大写字母,以区别于普通的变 量 。 • 宏替换过程只是简单的字符串替换,并不 做语法检查。 • 宏定义一般不在行末加分号,若有分号, 则一起参加替换。 • 宏展开不占运行时间,只占编译时间,而函 数调用占运行时间。因此,使用宏可以比 函数调用更快。
• #include<stdio.h> #define MIN(x,y) (x)<(y)? (x):(y) main() 替换出来: K=10*(10)<(15)?(10):(15); { int i,j,k; K=100<15?10:15; i=10; j=15; K=15; k=10*MIN(i,j); printf("%d\n",k); } A) 15 B) 100 C) 10 D) 150
第四章 程序结构
• 1、多重IF语句的判定;判断表示式的正确理 解。main( ) {int a=1,b=3,c=5; if (c=a+b) printf ("yes\n"); else printf("no"); } • 输出结果是:答案应是yes。
假定所有变量均已正确说明,下列程序段运行后x 的值是: a=b=c=0;x=35; if (!a) x-- ; else if(b); if (c) x=3; else x=4; A)34 B)4 C)35 D)3 B
C) max(int x,int y) { int z; z=x>y?x:y; return z;} D) int max(int x, y) { int z z=x>y?x:y; return z;}
• (2)写程序结果:
• int d=1; • fun (int q) • { int d=5; • d + =q+ +; • printf("%d“,d); • } • main( ) • { int a=3; • fun(a); • d + = ++a; • printf("%d\n",d); • }
(4)指针数组作为实参时,对应的形参应该是 一个指向指针的指针。 • Main() • {int s[m][n],*ps[m];…. • for (i=o;i<m;i++) ps[i]=s[i]; • fun(ps);….. } • 函数首部: • fun (int *a[m]); • fun (int *a[]); • fun (int **a);因为此时传送的是一维指针的数组名。
第五章 数组
• 数组下标从0开始;存储方式行优先连续空间;字 符串结构‘\0‟;
下面能正确进行字符串赋值的操作是() A)char s[5]={“ABCDE”}; B) char s[5]={„A‟,‟B‟,‟C‟,‟D‟,‟E‟ }; C) char *s;s=“ABCDE”; D) char *s; scanf(“%s”,s);
• • • • • • • • • • • • • • •
2、swith中常量表达式入口的理解,break的作用。 以下程序输出结果是(C )。 #include “stdio.h” main() { int x=0,y=2,z=3; switch(x) { case 0: switch(y==2) { case 1: printf("*");break; case 2:printf("%");break; } case 1: switch(z) { case 1: printf("$"); case 2: printf("*");break; default:printf("#"); } } }(A)*% ( B)*%$ (C)*# (D)*$*#
注意位运算的优先级
• 以下程序中C的二进制值是(A) Char a=3, b=6, c; C=a^b<<2; A) 00011011 B) 00010100 C) 00011100 D) 00011000
b: 00000110 B<<2 : 00011000 A^b<<2: 00000011 00011011 选A
• 3、循环结构注意循环体的正确范围;循环 体中循环控制变量的修改;break; continue;的区别; • (1) while(a=1){……} (2) {int I,sum=0; For(i=1;i<=3;sum++) sum+=I; } 结果是:死循环。 (3) sum=0; for(i=1;i<10;i++); sum=sum+i; 结果是:10。