大学程序设计技能训练(C)
课程目标 提高编写程序的能力 备考(上海高等学校计算机应用能力考试(二级 C)
上机安排 11月16日模拟考试(18:00—20:30) 11月23日课程考试(18:30—20:30)
考题分析 一、单选题 (15题 ,15 分) 知识点 标识符号 运算与表达式【数值计算(类型问题),逻辑运算】 输入的格式 分支的执行顺序 循环语句的执行顺序 数组的定义与引用
考题分析 知识点 函数中参数的传值与传地址问题 递归调用 链表的基本操作 指针的基本概念 结构体成员的引用 位运算
考题分析 二、程序调试题 (3 题,20分 ) 知识点 函数中参数的传值与传地址问题 递归调用 链表的基本操作 指针的基本概念 结构体成员的引用 数组的定义与引用 基本语法
考题分析 三、程序填空题 ( 2~3题,30分)。 主要涉及:循环;数组;文件
考题分析 四、编程题(2题,35分) 常用算法、综合应用
考试大纲
基本概念中的常见问题
常量 变量 运算符 表达式 标准函数 模块(自定义函数)
常量和变量
基本类型 构造类型 指针类型 空类型void 定义类型typedef 数值类型 字符类型char 枚举类型enum 整 型 浮点型 单精度型float 双精度型double 短整型short 长整型long 整型int 数组 结构体struct 共用体union C 数据类型:
数据类型决定: 1. 数据占内存字节数 2. 数据取值范围 3. 其上可进行的操作
常量 定义:程序运行时其值不能改变的量(即常数) 分类: 整型常量 实型常量 字符常量 字符串常量
符号常量:用标识符代表常量 定义格式: #define 符号常量 常量 一般用大写字母 是宏定义预处理命令,不是C语句
字符常量 定义: 用单引号括起来的单个普通字符或转义字符 字符常量的值:该字符的ASCII码值 如 ‘a’ ‘A’ ‘?’ ‘\n’ ‘\101’ aaa
字符串常量 例 ‘a’ 例 空串 “” 字符常量与字符串常量不同 例 字符串“hello”在内存中 定义:用双引号(“”)括起来的字符序列 存储:每个字符串尾自动加一个 ‘\0’ 作为字符串结束标志 字符常量与字符串常量不同 a a \0 例 ‘a’ “a” 例 空串 “” \0 例 字符串“hello”在内存中 h e l l o \0
常 量 转义字符 转义字符是一种特殊的字符常量。转义字符以反斜线“\”开头,后跟一个或几个字符。 常 量 转义字符 转义字符是一种特殊的字符常量。转义字符以反斜线“\”开头,后跟一个或几个字符。 转义字符主要用来表示那些用一般字符不便于表示的控制代码。 常用的转义字符及其含义:
转义字符及其含义: < 转义字符 含义 \n \v \r \a \‘ \ddd \t \b \f \\ \“ \xhh 换行 垂直制表 回车 响铃 单引号 3位8进制数代表的字符 水平制表 退格 换页 反斜线 双引号 2位16进制数代表的字符
变量 变量的使用:先定义,后使用 概念:其值可以改变的量 变量名与变量值 变量定义的一般格式: 数据类型 变量1[,变量2,…,变量n]; 变量初始化:定义时赋初值 变量的使用:先定义,后使用
变量 整型变量 实型变量 字符型变量 没有字符串变量,用字符数组存放
标识符: 由字母、数字和下划线三种字符组成,必须以字母或下划线开头的合法标识符。
关键字 auto break case char const continue default do double else (由系统定义,不能重作其它定义) 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
下列C语言的标识符中,不合法的标识符为_ A. star B. 1234 C. _a100 D. circuit9 E. _int F. a # b G. a_20 H. Pad
不同类型数据间的转换 隐式转换
long int unsigned double 低 高 char, short
隐式转换 什么情况下发生 运算转换-----不同类型数据混合运算时 赋值转换-----把一个值赋给与其类型不同的 变量时 输出转换-----输出时转换成指定的输出格式 函数调用转换-----实参与形参类型不一致时 转换 运算转换规则:不同类型数据运算时先自动转换成同一类型
强制类型转换 可以通过“(类型)表达式”的方式把表达式的值转为任意类型 语法:(类型名) 操作数 强制转换时,你必须知道你在做什么 操作数:可以是常量、变量、函数、表达式 例如:(float)(5/3),(float)5/3 强制转换时,你必须知道你在做什么
数据类型(Data Type) 数据为什么要区分类型? 不同类型的数据代表不同的 从基本数据类型到抽象数据类型 数据表示形式 占用内存空间大小 合法的取值范围 可参与的运算种类 从基本数据类型到抽象数据类型 基本数据类型 构造数据类型 抽象数据类型 哈工大计算机学院-车万翔 30
运算符和表达式
C语言的运算符 + - * / % ++ -- + - = += -= *= /= %= 类型 种类 算术运算符 赋值运算符 关系运算符 逻辑运算符 位运算符 条件运算符 逗号运算符 其他运算符 + - * / % ++ -- + - = += -= *= /= %= &= |= ^= >>= <<= > < >= <= == != && || ! & | ^ ~ << >> ? : , & sizeof (数据类型标识符)
学习运算符应注意 运算符功能 与运算量关系 要求运算量个数 要求运算量类型 运算符优先级别 结合方向 结果的类型
运算符 运算符具有三个属性: ①优先级:指运算的先后次序 ②结合性:指相同的优先级运算符连续出现时的计算顺序,分自左向右和自右向左两种,除特别声明外,皆指自左向右。 ③目数:指运算符要求的操作数的个数,包括单目、双目和三目,一般目数越少,优先级越高。
高 低 优先级 优先级别 算术运算符与算术表达式 关系运算符与关系表达式 逻辑运算符与逻辑表达式 赋值运算符与赋值表达式 逗号运算符与逗号表达式 逻辑运算符与逻辑表达式 算术运算符与算术表达式 优先级别 高 关系运算符与关系表达式 低
++、--的问题 1) 是单目运算符; 2) 前缀和后缀两种形式 ,只影响表达式 的值; 3) 运算对象只能是变量, 不能是常量(或运算结果是数值的表达式)。 4) 结合方向为从右到左.
关系运算 >,>=,<,<=,==,!= 关系运算符运算出的结果为0和1 0,表示假,即该关系不成立 1,表示真,即该关系成立 在所有涉及到真假判断的地方,0表示假,非0表示真
逻辑运算 逻辑运算也被称为布尔(Boolean)运算,运算结果 也是1和0 && 与运算 && 与运算 ( a > b && b > c );a大于b,并且b大于c || 或运算 ( a > b || b > c ); a大于b,或者b大于c ! 求反 ( !a );如果a是0,结果是1;如果a是非0,结果是0 并不改变a的值
&&和||运算的一个特点 只算一半 左右两个表达式,如从一个的值就能得出运算结果,那么就没必要再计算另一个 && 如左边的表达式值为0,则运算结果必为0 所以,如左边为0,右边的表达式就不再求值 || 如左边的表达式值为非0,则运算结果必为1 所以,如左边为非0,右边的表达式就不再求值
如何区别逻辑运算符(&&、||、!)与按位操作符(&、|和~)? 逻辑运算符是针对整个对象进行处理,结果是1(真)或0(假)。 按位操作符对各种长度的位向量进行操作,结果也是位向量。位运算操作时,参与运算的数据必须先转换成补码形式的二进制,然后再对对应的位进行运算。
逗号运算符和逗号表达式 C语言中,可以用逗号运算符 “,” 把两个或多个算术表达式连接起来构成逗号表达式。 逗号表达式的求值顺序是从左至右,且逗号运算符是所有运算符中优先级别最低的一种运算符。
逗号运算符和逗号表达式 下面两个表达式的结果? y=(a=5,3*5) (y=a=5,3*a) 赋值表达式 逗号表达式
条件运算符和条件表达式 ?: 条件运算符要求有3个操作对象,称三目运算符,它是C语言中唯一的一个三目运算符。 条件表达式的一般格式为: e1 ?e2 :e3 一般而言,e1为条件表达式,当其成立时,将e2的值作为整个表达式的值,不再计算e3的值;否则取e3的值作为整个表达式的结果,而不计算e2的值。
赋值表达式: 赋值运算符:= += -= *= /= %= &= |= ^= >>= <<= 赋值运算符:= += -= *= /= %= &= |= ^= >>= <<= 将表达式的值存入变量对应的内存单元中 赋值运算符仅优先于“,” ,且具有右结合性 赋值号左边必须是变量,右边可以是C语言任意合法的表达式 赋值号与数学中的等号含义不同
下面运算优先级按从高到低的排列正确的是_____ A.条件运算 赋值运算 逗号运算 B.算术运算 逻辑运算 关系运算 C.逻辑运算 关系运算 赋值运算 D.位运算 算术运算 赋值运算
若x是整型变量,y是单精度浮点型变量,值为10,表达式 x = y/4 的值是_____ 。 A. 3 B. 2.5 C. 2 D. 2.0
设a,b,c为整型变量,写出表达式: 当a比b、c都大时结果为真: ______
设有说明语句: int x=3, y=2; 则计算表达式 (x=0)&& (y=6*x) 后 变量y的值是__2____
printf(“%d %d %d\n”,x,y,z); 运行后结果? int x=-1,y=-1,z=-1,w; w=++x&&++y||++z; printf(“%d %d %d\n”,x,y,z);
定义 int b=7; float a=5.2, c=6.9; 则表达式 b*(int)(a+c)/2 的值为_________
若已定义: int x=10; 则表达式 x=(4*5,x*5,x+25) 的值是 _____ 。 A. 20 B. 45 C. 125 D. 35
设有 int x=3, y=2; 表达式求值后变量x和y的值? y=(y=3, 2*x++)
sizeof 和 strlen() printf("%d\n",sizeof("1234")); printf("%d\n",strlen("1234"));
常用库函数 C语言编译系统提供了上百种库函数,用户编写的程序(函数)中可直接调用系统提供的库函数。 要调用C语言内部函数,一般需要使用#include命令将相应的头文件包含到程序中 使用格式是: #include “头文件” 或 <头文件>
主要几个头文件功能说明: <math.h>中声明的库函数用来处理相关的数学问题 <stdio.h>中声明了C语言中大部分关于输入输出操作的函数 <math.h>中声明的库函数用来处理相关的数学问题 <stdlib.h>中声明了许多相当基本的函数 <string.h> 对字符串的各种处理 <ctype.h> 对字符的相关处理 <graphics.h> 与在图形界面作图有关的处理
数学函数 (1)取绝对值函数abs( )、fabs( ) abs(x)返回整数x的绝对值。 fabs(x)则是返回浮点数的绝对值。 (2)exp(x) exp(x):返回e的指定次幂,即求ex。 ( 3)对数函数log( )、log10( )。 log(x):返回x的自然对数,即求lnx。 log10(x):返回以10为底的对数,即求log10x。
字符函数 (1)判断字符函数 isalpha( )、isalnum( )、isdigit( ) isalpha(ch):判断ch是否是字母,是返回1,不是返回0。 isalnum(ch):ch是否是字母或数字,是返回1,不是返回0。 isdigit(ch):ch是否是数字字符(0~9),是返回1, 不是返回0。 (2)字符大小写转换函数 tolower( )、toupper( ) tolower(ch):若ch是大写字母则转换成小写字母,否则不变。 toupper(ch):若ch是小写字母则转换成大写字母,否则不变。
C程序的结构 函数 文件 函数头 函数体 函数1 函数2 函数n(其中有1个main函数,程序运行时从main函数启动,结束也返回main函数,其在程序中的位置与其作用无关)
输入、输出操作语句 C语言本身不提供输入、输出操作语句。C程序中的输入和输出操作是依靠调用C语言的标准输入输出函数来完成的。 printf ()函数、scanf ()函数 普通字符---对于此类字符,将按原样输出。 转义符---它由反斜杠字符“\”后跟一个特定字符组 成,用来输出转义符所代表的控制代码或 特殊字符。
宏定义 作用: 对源程序编译之前做一些处理,生成扩 展C源程序 格式: “#”开头 占单独书写行 语句尾不加分号 宏定义可嵌套,不能递归
以下叙述中,正确的是_____ A.C程序中,main函数必须位于程序最前面 B.C语言本身没有输入和输出语句 C.在对一个C程序进行编译的过程中发现注释中的拼写错误 D.C程序中每行中只能写一个语句
练习 执行下列程序后,s的值为多少? #define sq(X) X*X void main() { int s=15, a=2, b=1; printf(“s=%d\n”,s=sq(a+b)/sq(a+b)); }