二. 教学重点,难点分析 1. C语言概述
知识点 C语言概述 C语言程序的构成 标识符 常量 所占分值 考核几率 0-1分 0-1分 1-2分 1-2分 20% 30% 60% 80% 专家点评 简单识记 简单识记 简单,属重点识记知识点 简单,属重点识记知识点 变量 2-3分 100% 难度适中,重点理解重点掌握 注意:从几年的试题分析看C语言的概述和程序的构成合起来考试已经是一个惯例了。
2. 运算符与表达式
知识点 C运算符简介 运算符的结合和优先级 强制类型转换运算符 逗号运算符和逗号表达式 基本的算术运算符 算术表达式和运算符的 赋值运算符和赋值表达式 复合的赋值运算符 赋值运算中的类型转换 位运算符和位运算 所占分考核几率 专家点评 值 0-1分 10% 0-1分 0-1分 0-1分 1-2分 1-2分 2-4分 1-2分 0-1分 0-1分 60% 30% 40% 100% 100% 100% 100% 80% 75% 80% 简单识记 简单识记 简单识记 简单,属重点识记知识点 简单,属重点识记知识点 难度适中,重点理解重点掌握 难度适中,重点理解重点掌握 简单,重点掌握重点理解 偏难,不是重点 偏难,不是重点 偏难,属重点识记知识点 优先级与结合、自增自减运算符 2-3分 三. 教学讲点
1. C语言的基本构成和格式 #include “stdio.h” main()
{
int a,b,sum;/* 定义变量*/
a=10; /*把整数10赋值给变量a*/ b=20; /*把整数20赋值给变量b*/ sum=a+b; /*把两数之和赋值给变量 sum*/
printf(“a=%d,b=%d,sum=%d\\n”,a,b,sum);/*输出计算结果*/ }
(1).C程序由函数组成,一个程序必须且只能有一个主函数(main()),C程序总是从主函数开始执行,在主函数中结束。
(2).定义函数时函数名后必须有一对小括号,函数体必须放在一对花括号内,在函数体中,函数体有两个部分:定义部分和执行部分。定义语句必须出现在执行语句之前,我们先定义了a,b,sum,然后才给它们赋值。 (3).C语言中每条语句都以分号“;”结束,分号时C语句的一部分。即使是程序的最后一个语句也不例外。分号是语句结束的标志。
(4). 一行可以写多条语句,一条语句也可以分在多行上写,但是,不能将一个整体分开。
例如:i nt 是错误的,而int正确。
(5). C语言的注释必须放在“/*”和“*/”之间,“/”和“*”之间不允许有空格。“/*”和“*/”之间不允许再插入“/*”或“*/”。注释可以出现在程序中的任意位置。注释部分不被执行。 (6).C语言程序书写格式自由,语句可以从任一列开始书写,一行内可以写多个语句。但是过于“自由”的程序书写格式往往使人们很难读懂程序,初学者应该从一开始就养成好的习惯,是程序便于阅读。
2. 标识符
(1) 标识符只能由字母、数字和下划线组成。 (2) 标识符的第一个字符必须是字母或下划线。
(3) 标识符的大小写字母是有区别的,如abc和ABC是两个完全不
同的标识符。 (3) 标识符的分类:
关键字:关键字是具有特定的含义的、专门用来说明C语言特定成分的一类标识符。详细的查阅附录二。
预定义标识符:在C语言中它也有特定的含义。预定义标识符可以用位“用户表标识符”使用,只是这将使这些标识符失去了原来的意义。 用户标识符:由用户根据需要定义的标识符被成为用户标识符。用户标示符用来给变量、函数、数组或者指针等命名。
3. C语言的数据类型
3.1数据可以分为常量和变量。常量是指在程序执行中不变的量,常量
分为:整型常数、实型常数、字符常量、字符串常量。
整型数据: 进制间的转换
3.11.二、八、十六进制转为十进制 规则:“按权相加”
3.12.十进制转为二、八、十六进制 规则:
整数部分:基数除取余,逆序排列 小数部分:基数乘取整,顺序排列
3.13.二进制转为八、十六进制
规则:三(四)合一,按序相拼(整数部分,从右向左取,小数部分从左向右取,位数不足补零)。
3.14.八、十六进制转为二进制 规则:一分三(四),按序相拼
3.2整型数据在内存中的存放形式
1字节=8位,1Byte=8bit
字长:指CPU能同时处理的二进制位数。由CPU的型号而定。如:16位微机的字长就是16位或2字节。
1GB=1024MB,1MB=1024KB,1KB=1024B
B:表示字节,字节是表示存储容量的最小单位。位(bit):是计算机中信息表示的最小单位。
3.21.正整数在内存中用“原码”形式存放。(直接转换为二进制即可)。 如:5 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 二字节能存放的最大数是:32767 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 对带符号数,最高位是符号位,用0表示正,用1表示负。
3.22.负整数在内存中用“补码”形式存放。 取补码的步骤:
(1)忽略负号,求出原码。
(2)将原码按位取反(0 、1 互换)。 (3)在第二步的基础上加1。 如:取-5的补码。 (1) 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 (2) 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 (3) 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 将补码转换成相应的整数的步骤: (1)将补码按位取反加1。
(2)将步骤1得到的二进制数转换成十进制数,然后加上负号即可。 例如: 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 按位取反加1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 转换成十进制:1×215=32768 加负号:-32768
几个特殊的带符号整数: 1000000000000000 -32768 0111111111111111 32767 1111111111111111 -1
3.23.无符号整数:只有正整数,没有负整数,最高位不表示符号位,每一位均参与转换。 二进制 带符号整数 无符号整数 1111111111111111 -1 65535 1000000000000000 -32768 32768 例2-12:若有:int a=-1; unsigned b=65535;则 printf(“%d,%u,%d,%u”,a,a,b,b); 输出结果是:-1,65535,-1,65535 数据益出问题:
例2-13:若有int a=32767;则a=a+1的结果是: -32768
例2-14:若有unsigned b=65536;则b的值是:0 分析:32767:01111111111111111 +1
100000000000000
将100000000000000按照带符号数转为十进制为-32768 65535:1111111111111111 +1 111111111111111 1 +1 1 00000000 00000000 65536 unsigned b=655536;而b属于无符号整型,在内存中只占两字节,所以只能包括16位。
标准C没有具体要求规定各类型数据所占内存的字节数, 现以这次考试标准viusal c++6.0为例,说明各类型变量所占的位数。 类型 short int long t
所占位所占字 类型 数 16 32 32 节数 2 4 4 2 unsigned lon 32 g float double 32 4 8 unsigned shor16 4 所占位所占字节数 unsigned int 32 数 4 3.3实型数据(浮点数)
3.31.实型常量
(1)小数形式:由数字和小数点组成,必须有小数点,小数点的某一侧可以没有数字。如:.23 ,123.876 ,123.
(2)指数形式:用“e”或“E”后接一个整数,表示以10为底的幂数。
注意: “e”或“E”之前之后必须有数字,且之后的数字必须是整数。他们和前后的数字之间不能有空格。 例如:
例2-15:下列合法的常量是( )。
A.-32169 B.0128 C.0XDEFG D.13E0.5 例2-16:下列合法的实型常量是( )。
(A) 0Xff (B)124E (C) 1.23E5.0 (D) 3.E2 (E) 1.25E+2 (F).23e+02 3.32.实型变量
单精度型 float 占 4 字节 双精度型 double 占 8 字节
长双精度 long double 占 16字节(较少用)
4. 表达式与运算符
4.1算术运算符及其表达式:+ - * / % %:(求余运算) 注意:
(1)%两边必须是整型数据。12.0%3 表达式是错误的。
(2)求余(%)的方法是:忽略符号,求出余数,再将所得余数的符号定为与被除数相同。
例如:17%3 结果是:2
17%-3 结果是:2,-17%3 结果是:-2,-17%-3 结果是:-2
4.2强制类型转换 强制类型表达式:(类型名)表达式
注意:类型名(表达式)这种形式是C++的强制类型表达方式。
5.赋值运算符及其表达式
5.1.赋值运算符 =
格式:变量名=表达式
功能:将表达式的值赋给左边的变量。 注:
(1)赋值运算符左边只能是一个变量,不能是常量,也不能是表达式。 a+b=3 4=3 是非法的表达式 a=6 a+(b=3) 都是合法的表达式
a=b=20 a=(b=10)/(c=2) 都是合法的表达式
(2)实型数据赋给整型变量时,小数部分被舍去,整型数据赋给实型变量时,系统自动将整型数据转换为实型数据。 例如:float a; int b;
表达式a=10%3 的值是1.0 表达式b=a=10%3的值是1
5.2.复合赋值运算符及其表达式:+= -= *= /= %= &= |= ^= >>= <<=
例如:a+=3 相当于a=a+3,a/=b+4 相当a/=(b+4) 或a=a/(b+4) 例:若a=12,则执行表达式a+=a-=a+a后a的值是多少? 分析:a+=a-=(a+a) /*a的值是12*/ a+=a-=24 /*a的值是12*/ a+=a=a-24 /*a的值是12*/ a+=a=-12 /*a的值是12*/ a+=-12 /*a的值是-12*/ a=a+(-12) /*a的值是-12*/ a=-24 /*a的值是-24*/
5.3.自增、自减运算符及其表达式
++ -- 注意:
(1)只能用于变量,不能用于常量和表达式。 如:6++ (a+b)-- 都是错误的。
(2)当它们用于变量名前时,表达式的值为变量的值加一或减一。当位于变量名后时,表达式的值为变量原来的值。不论位于变量名前还是变量名后,只要进行了自增、自减运算,变量的值都会在原来的基础上加1或减1。 如:a=3 则 a++ 表达式的值是3 运算之后变量的值是 4 a=3 则 ++a 表达式的值是 4之后变量的值是 4 a=3 则 a-- 表达式的值是3 之后变量的值是 2 a=3 则 --a 表达式的值是2 之后变量的值是 2
(3)口诀:
j=i++;这个表达式是先引用后增值。即:先把i的初始值给变量j,然后 i再自加1。
j=++i;这歌表达式是先增值后引用。即:i先自加1,然后再将我们自加后的值赋值给变量 j。
但是记住它们是一起执行的,就是说:例如j=i++先引用后增值实际上是一起执行的,它们之间不存在先后关系,我们只是位了好记才用到了上面的方法。老师在上课的时候先不要说,但是你们必须知道。j=i--,j=--i和上面j=i++,j=++i的方法是一样。
5.4逗号运算符及其表达式
1.格式:表达式1,表达式2,…,表达式n
注意:1.逗号表达式的值是整个逗号表达式中最后一个表达式的值。 2.求值顺序是从左到右依次求解。
例如:a=(3,b=1)的值是1 运算结束后a的值是1, b的值是 1。
四.相关试题
1.2008年4月相关试题
(11)以下叙述中正确的是
A)C程序中的注释只能出现在程序的开始位置和语句的后面 B)C程序书写格式严格,要求一行内只能写一个语句 C)C程序书写格式自由,一个语句可以写在多行上 D)用C语言编写的程序只能放在一个程序文件中 (12)以下选项中不合法的标识符是 A)print B)FOR C)&a D)_00
(13)以下选项中不属于字符常量的是 A) 'C' B) \"C\" C)'\\xCC0' D) '\\072'
(14)设变量已正确定义并赋值,以下正确的表达式是 A)x=y*5=x+z B)int(15.8%5) C)x=y+z+5,++y D)x=25%5.0
填空(7)设变量已正确定义为整型,则表达式n=i=2,++i,i++的值为【7】。
2.2007年9月相关试题
(11)C语言源程序名的后缀是 A).exe B).C C).obj D).cp (12)可在C程序中用作用户标识符的一组标识符是 A) and B) Date C) Hi D) case _2007 y-m-d Dr.Tom Big1 (13)以下选项中,合法的一组C语言数值常量是 A) 028 B) 12. C) .177 D) 0x8A .5e-3 0Xa23 4e1.5 10,000 -0xf 4.5e0 0abc 3.e5 (14)以下叙述中正确的是
A)C语言程序将从源程序中第一个函数开始执行
B)可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行
C)C语言规定必须用main作为主函数名,程序将从此开始执行,在此结束 D)main可作为用户标识符,用以命名任意一个函数作为主函数
(16)以下关于long、int和short类型数据占用内存大小的叙述中正确的是 A)均占4个字节 B)根据数据的大小来决定所占内存的字节数
C)由用户自己定义 D)由C语言编译系统决定 (17)若变量均已正确定义并赋值,以下合法的C语言赋值语句是 A)x=y==5; B)x=n%2.5; C)x+n=i; D)x=5=4+1;
3.2007年4月相关考题
(12)下列叙述中错误的是(D )
A)计算机不能直接执行用C语言编写的源程序
B)C程序经C编译程序编译后,生成后缀为.obj的文件是一个二进制文件 C)后缀为.obj的文件,经连接程序生成后缀为.exe的文件是一个二进制文件 D)后缀为.obj和.exe的二进制文件都可以直接运行
(13)按照C语言规定的用户标识符命名规则,不能出现在标识符中的是(B ) A)大写字母 B)连接符 C)数字字符 D)下划线 (14)以下叙述中错误的是(C ) A)C语言是一种结构化程序设计语言
B)结构化程序有顺序、分支、循环三种基本结构组成 C)使用三种基本结构构成的程序只能解决简单问题 D)结构化程序设计提倡模块化的设计方法
(15)对于一个正常运行的C程序,以下叙述中正确的是(A) A)程序的执行总是从main函数开始,在main函数结束
B)程序的执行总是从程序的第一个函数开始,在main函数结束
C)程序的执行总是从main函数开始,在程序的最后一个函数中结束
D)程序的执行总是从程序的第一个函数开始,在程序的最后一个函数中结束 (19)有以下程序,其中%u表示按无符号整数输出(B ) main()
{unsigned int x=0xFFFF; /* x的初值为十六进制数 */ printf(“%u\\n”,x);
}/*注意:x是占两个字节*/ 程序运行后的输出结果是
A)-1 B)65535 C)32767 D)0xFFFF
第三章 顺序结构
一.教学重点、难点
知识点 C语句分类 字符输出函数putchar() 字符输入函数getchar() 格式输入函数printf() 格式输出函数scanf() 所占分考核几率 专家点评 值 0-1 1-2 1-2 3-4 3-4 30% 70% 70% 100% 100% 简单识记 难度适中,重点掌握 难度适中,重点掌握 难度适中,重点理解重点掌握 难度适中,重点理解重点掌握
二.教学内容
1.语句
C语句共分为5类:
1.1控制语句
1.2函数调用语句: printf(“this is a c statement”); 1.3表达式语句
每一个合法的表达式后加上分号(;)就构成了表达式语句。 ++a;i+j;
语句和表达式的区别:
表达式有唯一确定的值,而语句没有值。 1.4赋值语句
格式:赋值表达式; i=1,j=2是逗号表达式 i=1; j=2;是两条赋值语句
i++; i--;++i;--i;都是赋值语句 等价于i=i+1;或i=i-1;
1.5空语句:只有一个单独的分号构成的语句。如: ;就是一条空语句。 1.6复合语句:用一对{}将若干语句括起来构成一条复合语句。
2.输入输出语句
在使用库函数时必须先用预编译命令#include<头文件名> 或 #include“头文件名”将相应的头文件包含到源程序中。 如:#include 注意:格式控制包括以%开头的“格式说明符”和原样输出的普通字符。 如:printf(“a=%d,a+b=%d”,30,4+7); 输出结果是:a=30,a+b=11 (1)d格式 %d:按实际长度输出十进制整数。 %md:输出占m列,若小于m列,左边补空格,若大于m列,按实际输出。 %-md:输出占m列,若小于m列,右边补空格,若大于m列,按实际输出。 %ld:输出长整型数据,输入输出长整型数据时必须用该格式。 例如:printf(“%d,%6d,%-6d,%ld”,386,1234,3456,12345L); 输出结果:386, 1234,3456 ,12345 printf(“%2d”,12345); 输出结果:12345 (2)u格式 %u:以无符号十进制形式输出整数。 printf(“%u”,-1); 65535 ptintf(“%u”,-32768);32768 (3)o格式 %o:以无符号八进制形式输出整数,不输出前导符0。 printf(“%d,%o”,-1,-1); -1,177777 (4)x或X格式 %x或%X以无符号十六进制形式输出整数。不输出前导符0x或0X,小写对小写,大写对大写。 printf(“%d,%x,%X,%x”,-1,-1,0xabc,0XAbc); -1,ffff,ABC,abc 注:若要输出十六进制和八进制的前导符,则要用%#o和%#x、%#X格式。 printf(“%#o,%#x,%#X”,-1,-1,0xaBc); 0177777,0xffff,0XABC (5)c格式 %c用来输出一个字符,不输出单引号定界符。%c和%d可以相互转换。 printf(“%c,%d”,’a’,’a’); a,97 printf(“%c,%d”,100,100); d,100 (6)s格式 用来输出一个字符串,不输出双引号和字符串结束符。 %s:输出字符串的有效字符。 printf(“%s”,”china\\0yunnan”); china %ms:输出占m列,若小于m列,左边补空格,大于m列,按实际输出。 printf(“%5s,%-5s,%2s”,”swfc”,”swfc”,”swfc”); swfc,swfc ,swfc %m.ns:输出占m列,只输出字符串的左n个字符到m列的右端。 如:printf(“%7.5s”,”yunnan”); yunna (7)f格式:按小数形式输出实型数据。 %f:默认输出6位小数。 如:printf(“%f,%f”,3.12,5.4312e+2); 3.120000,3.120000 %m.nf:输出占m列,其中有n位小数。若超过m列,确保n位小数后按实际输出。注意四舍五入问题。 如:printf(“%7.3f,%-7.3f,%4.2f”,3.1415726,3.1415926,314.5926); 3.142,3.142 ,314.59 (8)e格式 以指数形式输出一个实数。小数点前只有一位非零数,5位小数,3位指数。 如:printf(“%e,%e”,123.4,123.45e-7); 234000e+002,1.234500e-005 (9)g格式 自动在%f和%e中选择较短的一种输出,对于小数部分不输出无意义的0。 如:printf(“%g,%g”,123.45,123.45e-2); 123.45,1.2345 printf(“%g”,123000000.0); 23e+08 小结: (1)%%表示输出一个%。 如:printf(“%%d=%d”,10,10); %d=10 (2)除了x,e,g大小写均可外,其它都只能小写。 如:printf(“%d=%D”,20,20); 20=%D (3)输出格式说明符所能操作的数据类型必须与输出项的类型一致。 如:printf(“%d”,1.234);/*出错*/ 2.2. scanf()函数 格式:scanf(“格式控制”,地址列表); 注意: (1)可指定数据所占的列数,输入后由系统自动截取相应的位数。 如:scanf(“%3d%2d”,&a,&b); 若输入:3863018 则:a的值是:386 b的值是:30 若输入:3863 a的值是:386 b的值是:3 scanf(“%3c%2d”,&ch,&c); 若输入:3863018 则: ch的值是:’3’ b的值是:30 (2)%*md:表示跳过m列不读。 如:scanf(“%*3d%3d%4d”,&a,&b); 若输入:123456 则:a的值是:456 b的值是:原来的值。 (3)不能在scanf()函数中指定输入数据的小数位数。 如:scanf(“%7.5f”,&a);/*出错*/ 在scanf()函数中,输入时普通字符原样输入。 如:scanf(“a=%d,b=%d”,&a,&b); 若要给a赋值5,b赋值10,正确的输入是:a=5,b=10 scanf(“%d*,%d#,%d”,&a,&b,&c); 若要让a,b,c分别得到1,2,3,正确的输入是:1*,2#,3<回车> 若两个格式说明符之间没有其它字符,则在输入数据时,两数据之间要用回车或空格分隔,回车或空格可以是多个。但是,%c格式除外。 如:scanf(“%d%d”,&a,&b); 若想让a的值为5,b的值为10。则正确的输入是: 5 空格10<回车> 或 5<回车> 10<回车> 或5空格 空格 空格10<回车> (6)多个%c格式之间没有其它字符,仍然不能用回车或空格来分隔。 如:scanf(“%c%c%c”,&a,&b,&c); 若输入:a空格b空格c<回车> a的值是’a’,b的值是空格,c的值是’b’。 (7)格式说明符所能操作的数据类型必须与对应变量的类型相同。 如:int a; scanf(“%f”,&a); /*出错*/ 总结: 1.普通字符原样输入,原样输出。 2.对于%d格式,指定宽度小于输出宽度,原样输出。 3.%#o,%#x,%#X表示要输出八进制的前导符数字0,和十六进制的前导符0x,0X。 4.%x,%X格式,小写对小写,大写对大写。 5.%*md:表示跳过相应的输入项。 6.注意进制间的转换,以及无符号数和带符号数之间的转换。 7.在scanf()函数中,给double类型变量输入数据时,应该使用%lf类型说明符,而输出时,可以用%lf,也可以用%lf。 三. 试题分析 1.2008年4月试题分析 (16)有以下程序段 char ch; int k; ch='a'; k=12; printf(\"%c,%d,\ 已知字符a的ASCll十进制代码为97,则执行上述程序段后输出结果是 A)因变量类型与格式描述符的类型不匹配输出无定值 B)输出项与格式描述符个数不符,输出为零值或不定值 C)a,97,12k=12 D)a,97,k=12 2.2007年9月试题分析 (15)若在定义语句:int a,b,c,*p=&c; 之后,接着执行以下选项中的语句,则能正确执行的语句是 A)scanf(\"%d\ B)scanf(\"%d%d%d\ C)scanf(\"%d\ D)scanf(\"%d\(18)有以下程序段 int j; float y; char name[50]; scanf(\"%2d%f%s\ 当执行上述程序段,从键盘上输入55566 7777abc 后,y的值为 A)55566.0 B)566.0 C)7777.0 D)566777.0 填空(6)执行以下程序时输入1234567 { int a=1,b; scanf(\"%2d%2d\ printf(\"%d %d\\n\ } 3.2007年4月试题分析 (16)设变量均已正确定义,若要通过scan(“%d%c%d%c”,&a1,&c1,&a2,&c2);语句为变量a1和a2赋数值10和20,为变量c1和c2赋字符X和Y。以下所示的输入形式中正确的是(注:□代表空格字符)( D) A)10□X□20□Y〈回车〉 B)10□X20□Y〈回车〉 C)10□X〈回车〉 D)10X〈回车〉 20□Y〈回车〉 20Y〈回车〉 填空(6) 执行以下程序后的输出结果是 。 main() {int a=10; a=(3*5,a+4); printf(“a=%d\\n”,a); } 第四章 选择结构 一.教学重点、难点 知识点 关系运算符及优先次序 关系表达式 逻辑运算符及优先级 逻辑表达式 if语句的几种形式 if语句的嵌套 条件运算符 switch语句 语句标号 goto 所占分值 0-1 0-1 1-2 1-2 1-2 1-2 0-1 2-4 0-1 1-2 考核几率 40% 50% 50% 50% 100% 100% 100% 100% 10% 10% 专家点评 简单识记 简单,属重点识记知识点 简单识记 简单,属重点识记知识点 简单识记 难度适中,重点掌握 难度适中,重点掌握 简单,重点掌握重点理解 偏难,不是重点 简单识记 二.教学内容 1.关系运算与逻辑运算 1.1逻辑值 真(非零值) 假(零) 1.2关系运算符及其表达式 < <= > >= == != 关系运算符优先级别低于算术运算符,高于赋值运算符。 ( < <= > >=)优先级别高于(== !=) 如:a>b+c 等价于a>(b+c) a==b 4=4 表达式不合法 关系表达式的值只有1和0,其中1表示“真”,0表示“假”。 1.3逻辑运算符及其表达式 && 逻辑“与” || 逻辑“或” !逻辑“非” 优先级别:! 》&& 》|| 运算规则: 逻辑&&:遇假则假 逻辑||:遇真则真 逻辑!:真假互换 逻辑表达式的值:1(真)、0(假) 例如:3>4 结果是:0 3&&4结果是:1 !3&&4结果是:0 0||3结果是:1 注意:在求解逻辑与(&&)表达式时,若&&运算符左边表达式的值为0(假),则不再进行&&右边表达式的运算,且将整个&&表达式的值定为0;在求解逻辑或(||)表达式时,若||左边表达式的值为非0值(真),则不再进行||右边表达式的运算,且将整个逻辑||表达式的值定为1(真)。 2.if语句 2.1.if语句格式: 1) if(表达式) 2)if(表达式) 语句1; 语句1; else 语句2; 称为:全if 单if 注意: (1)if 后的表达式必须用()括起,else后没有表达式。 (2)if和else都只能控制紧跟它的一条语句,若要控制多条语句,必须用一对 {}括起构成一条复合语句。 2.2执行方式: 2.21 if语句的执行方式:首先判断表达式的值是否为“真”,若“真”,则执 行语句部分。如果表达式的值为“假”,则“跳过”语句部分执行if语句后面的其它语句。 2.22 if-else语句的执行方式:首先判断表达式的值是否为“真”,若“真”, 则执行语句部分。如果表达式的值为“假”,则执行else语句后面的语句。 例1:main() {int m=5; if(m++>5) printf(“m=%d”,m); else printf(“m=%d”,m--); } 例2:main() {int m=5; if(++m>5) printf(“m=%d”,m); else printf(“m=%d\\n”,m--); printf(“m=%d”,m); } 2.3 if 语句的嵌套 if(表达式1) if(表达式2) 语句1; else 语句2; else if(表达式3) 语句3; else 语句4; else总是与前面最近的且未配对的if语句配对,组成一对if-else语句。 if(表达式1) if(表达式2) 语句1; else if(表达式3) 语句2; else 语句3; 第一个else语句有的同学会把它误以为和第一个if配对,但是实际的情况是和第二个if语句配对,即: if(表达式1) if(表达式2) 语句1; else if(表达式3) 语句2; else 语句3; 例1.请分析下列程序的输出结果。 main() { int s,t,a,b; sanf(“%d%d”,&a,&b); s=1;t=1; if(a>0) s=s+1; if(a>b) t=s+1; else if(a==b) t=s; else t=2*s; printf(“%d\\n”,t); } 若运行时输入5 10 回车,则程序的执行结果是? main() { int s,t,a,b; sanf(“%d%d”,&a,&b); s=1;t=1; if(a>0) {s=s+1; if(a>b) t=s+1;} else if(a==b) t=s; else t=2*s; printf(“%d\\n”,t); } 若运行时输入5 10 回车,则输出结果是? 例2.分析下列程序的输出结果 main() { int a=4,b=3,c=5,t=0; if(aprintf(“%d %d %d\\n”,a,b,c); } main() { int a=4,b=3,c=5,t=0; if(aprintf(“%d %d %d\\n”,a,b,c); } 联想交换的思想:若要交换a和b的值,通常的做法是: {t=a;a=b;b=t;} 3.条件运算符和条件表达式 条件运算符:? : 是唯一一个三目运算符。优先级别高于赋值运算,结合方向自右向左。 格式:表达式1 ?表达式2 :表达式3 执行方式:先求“表达式1”的值,若其值为“真”,求出“表达式2”的值作为 整个条件表达式的值;若其值为“假”,求出“表达式3”的值作为整个表达式的值。 例如:max=a>b?a:b; 相当于:if(a>b) max=a; else max=b; a>b?a:c>d?c:d 相当于a>b?a:(c>d?c:d) 注意:表达式1、2、3的值不要求具有相同的类型,最后结果的类型为表达式2、3中较高类型的一种。如:(x=6)>(y=5)?1:1.5 表达式的值是 1.0而不是1。 4.switch语句 格式: switch(表达式) { case 常量表达式1:语句1;break; case 常量表达式2:语句2;break; … case 常量表达式n:语句n;break; default :语句n+1;break; } 说明: (1) switch、case、default、break都是关键字。花括号里面的语句叫做switch 语句体。Switch语句体中可以没有break语句和default部分。 (2) Switch语句的圆括号中表达式的值必须是整型或是字符型,不能为实型。 case后的表达式可以是求得整型量的常量表达式,但是常量表达式中不能含有变量。 (3) 执行Switch语句时,首先计算Switch后圆括号的表达式的值,然后将这 个值与语句体中case后的常量表达式的值相比较,如果某个常量表达式的值与之相等,则执行该case后的语句块;如果没有任何一个常量表达式的值与之相等,则执行default后的语句块。 (4) 在执行的时候如果遇到break语句,则跳出switch语句。如果执行完一个 case或者default语句块后没有遇到break,则继续顺序往下执行,知道遇到break语句或者语句体被执行完毕为止。 (5) default最多只能有一个,通常出现在switch语句的最后部分,但也可以 出现在case之间或所有的case之前。 四.试题分析 1.2008年4月试题分析: (17)已知字母A的ASCⅡ代码值为65,若变量kk为char型,以下不能正确判断出kk中的值为大写字母的表达式是 A)kk>='A'&&kk<='Z' B)!(kk>='A'||kk<='Z') C)(kk+32)>='a'&&(kk+32)<='z' D)isalpha(kk)&&(kk<91) (18)当变量c的值不为2、4、6时,值也为“真”的表达式是 A)(c==2)||(c==4)||(c==6) B)(c>=2&&c<=6)||(c!=3)||(c!=5) C)(c>=2&&c<=6)&&!(c%2) D)(c>=2&&c<=6)&&(c%2!=1) (19)若变量已正确定义,有以下程序段 int a=3,b=5,c=7; if(a>b) a=b; c=a; if(c!=a) c=b; printf(\"%d,%d,%d\\n\ 其输出结果是 A)程序段有语法错 B)3,5,3 C)3,5,5 D)3,5,7 (20)有以下程序 #include { int x=1,y=0,a=0,b=0; switch(x) { case 1: switch(y) { case 0: a++; break; case 1: b++; break; } case 2: a++; b++; break; case 3: a++; b++; } printf(“a=%d,b=%d\\n”,a,b); } 程序的运行结果是 A)a=1,b=0 B)a=2,b=2 C)a=1,b=1 D)a=2,b=1 2.2007年9月试题分析 (20)有以下计算公式 xyx(x0)(x0) 若程序前面已在命令行中包含math.h文件,不能够正确计算上述公式的程序段是 A) if(x>=0) y=sqrt(x); B) y=sqrt(x); else y=sqrt(-x); if(x<0) y=sqrt(-x); C) if(x>=0) y=sqrt(x); D) y=sqrt(x>=0?x :-x); if(x<0) y=sqrt(-x); (21)设有条件表达式:(EXP)? i++ :j-- ,则以下表达式中与(EXP)完全等价的是 A)(EXP==0) B)(EXP!=0) C)(EXP==1) D)(EXP!=1) (23)已有定义:char c; ,程序前面已在命令行中包含ctype.h文件。不能用于判断c中的字符是否为大写字母的表达式是 A)isupper(c) B)'A'<=c<='Z' C)'A'<=c&& c <='Z' D)c <=('z'-32)&&('a'-32)<= c (7)以下程序的功能是:输出a、b、c三个变量中的最小值。请填空。 #include { int a,b,c,t1,t2; scanf(\"%d%d%d\ t1= a3.2007年4月试题分析 (20)设变量x和y均已正确定义并赋值,以下if语句中,在编译时将产生错误信息的是(C ) A)if(x++); B)if(x>y&&y!=0); C)if(x>y) x- - D)if(y<0) {;} else y++; else x++; (21)以下选项中,当x为大于1的奇数时,值为0的表达式( ) A)x%2==1 B)x/2 C)x%2!=0 D)x%2==0 (22)以下叙述中正确的是(C ) A)break语句只能用于switch语句体中 B)continue语句的作用是:使程序的执行流程跳出包含它的所有循环 C)break 语句只能用在循环体内和switch语句体内 D)在循环体内使用break语句和continue语句的作用相同 (23)有以下程序( ) main() {int k=5,n=0; do {switch(k) {case1: case3:n+=1; break; default;n=0;k--; case2: case4:n+=2;k--;break; } printf(“%d”,n); }while(k>0&&n<5); } 程序运行后的输出结果是 A)235 B)0235 C)02356 D)2356 第五章 循环结构 一.教学重点、难点 知识点 while语句 do...while语句 for语句 循环嵌套 循环比较 break语句 continue语句 所占分值 2-3 2-3 5-7 4-6 0-1 2-3 2-3 考核几率 100% 100% 100% 100% 20% 70% 50% 专家点评 重点理解重点掌握 重点理解重点掌握 重点理解重点掌握 重点理解重点掌握 简单识记 难度适中,重点掌握 难度适中,重点掌握 注意:循环在这一章中的知识点比较少,但是它贯穿了整个的C语言的章节中,老师在教学中一定要把它它当做重点中的重点来抓! 二.教学内容 1.while语句 格式: while(表达式) { 循环体语句 } 注意: 1.1.while是C语言的关键字。 1.2.while后必须有小括号将表达式括起,里面的表达式是C语言中任意的表达式,作用是控制循环。其值为“真”(非0)则执行循环体语句,否则跳出while循环。 1.3.while语句也只能控制紧跟它的一条语句。若需要控制多条语句,必须用{}括起,构成一条复合语句。 1.4.圆括号内的表达式不能省略。循环体中的可以由一条空语句构成,表示循环体部分不做任何的操作。如:while(表达式);/*;是循环体,它是一条空语句*/ 例如:分析下列程序的输出结果。 1.5.执行过程: (1)计算圆括号中表达式的值。若为非0则执行循环体语句,若为0则跳出 循环。 (2)执行完循环体语句后重复过程(1)。 main() { int i=1,sum=0; while(i<=100){ sum=sum+I; i++; } printf(“sum=%d”,sum); } 这是学习C语言基础循环的最好的练习,老师让学生练习的时候可以把i控制在10以内,让学生知道什么是循环. 2.d0-while语句 格式: do 循环体 while(表达式); 注意: 2.1.do是C语言的关键字,需要和while一起搭配使用。 2.2.while后必须有小括号将表达式括起,里面的表达式是C语言中任意的表达式,作用是控制循环。其值为“真”(非0)则执行循环体语句,否则跳出while循环。 2.3.while语句也只能控制紧跟它的一条语句。若需要控制多条语句,必须用{}括起,构成一条复合语句。 2.4.圆括号内的表达式不能省略。循环体中的可以由一条空语句构成,表示循环体部分不做任何的操作。如: do{;}while(表达式);/*;是循环体,它是一条空语句*/ 2.5.由于do-while循环结构整个语法上也是C语言语句,因此最后的分号必不可少,它同样表示语句的结束。 2.6.执行过程: (1)执行循环体语句。 (2)计算圆括号中表达式的值。若为非0则重复(1),否则跳出循环。 3.for语句 格式: for(表达式1;表达式2;表达式3) 循环体 3.1.for是C语言的关键字. 3.2for之后的圆括号内一共有三个表达式,以分号“;”隔开。一般情况下,表达式1的作用是赋初值;表达式2的作用是控制循环;表达式3的作用是赋值。 3.3.for语句也只能控制紧跟它的一条语句。若需要控制多条语句,必须用{}括 起,构成一条复合语句。 3.4. 表达式1、2、3均可以省略,若省略表达式2,则认为表达式2的值始终为真。而两个分号绝不能省。 3.5执行过程: (1)计算表达式1; (2)计算表达式2,若其值为非0,转步骤(3);若其值为0则转步骤(5); (3)执行一次for循环体。 (4)计算表达式3,转步骤(2)。 (5)结束循环,执行for语句后面的语句。 4.循环结构的嵌套 在一个循环体内,又包含另一个循环。 三种循环语句可以相互嵌套。 main() { int i,j; for(i=1;i<3;i++) for(j=1;j<4;j++) printf(“\\ni=%d,j=%d”,i,j); printf(“\\ni=%d,j=%d”,i,j); } for(i=1; ;i++) printf(“%d”,i); /*表达式2的值始终为真,这是死循环*/ 5.break 和 continue 语句 break 语句用于结束循环或switch结构。 continue 语句用于结束本次循环,跳过循环中continue后尚未执行的语句,继续进行下一次循环条件的判断。 注意:break 语句只能控制直接包含它的switch结构或循环。 continue语句只能控制直接包含它的循环。 例1: main( ) { int i,s1=0,s2=0,s3=0; for(i=1;i<=10;i++) {switch(i%5) {case 1:s1++; case 2:s2++;break; case 3:s3++;contiune; } s1++; } printf(“%d,%d,%d”,s1,s2,s3); } 例2: 把1~100之间能被4整除的数输出。(老师一定要教会学生这中方法!) main() { int i; for(i=1;i<=100;i++) { if(i%4!=0) continue; printf(”%3d”,i); } } 三.试题分析 1.2008年4月试题分析 (21)有以下程序 #include { if(x%3) {printf(“%d,”,x--); continue;} printf(“%d,”,--x); } } 程序的运行结果是 A)7,4,2 B)8,7,5,2 C)9,7,6,4 D)8,5,4,2 (22)以下不构成无限循环的语句或者语句组是 A)n=0; B)n=0;
Copyright © 2019- jqkq.cn 版权所有 赣ICP备2024042794号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务