教材:
《C语言程序设计与应用》、《C语言程序设计与应用实验指导书》
MOOC:
《C语言程序设计》——浙江大学翁恺
为什么要学习C语言相信很多人都会有这样的疑问:C语言已经是很古老的编程语言了,为什么还要学习它呢?用这些时间去学习Python、Java不香吗?甚至有一些人认为C语言已经过时了,可是就在今年五月,在TIOBE语言排行榜上C语言再次反超了Java位居第一。
C语言为什么还能占据霸主地位呢?或许C语言没有其他语言那么简单,可是在对于操作系统和系统使用程序以及需要对硬件进行操作的场合,C语言明显高于其他语言,因此许多应用软件是用C语言编写的。
此外,C语言还具有绘图能力强,极强的数据处理能力等特点。它不仅仅应用在软件开发上,还应用在各类科研项目上。
该篇文章将简要介绍大学C语言中一些简单判定性问题的解法,所谓判定性问题就是提出一个问题,只需要给出Yes或No答案的问题。希望对大家有所帮助。
基础知识变量定义小规则:(1)由英文字母、数字和下划线组成,其必须以英文字母或下划线开头;
(2)不允许使用关键字(保留字)作为标识符的名字;
(3)标识符命名应做到“见名知意”;
(4)标识符区分大小写。
表达式小规则(1)简单赋值运算符记为“=”,它的作用是将一个表达式的值赋给一个变量。由“=”连接的式子称为赋值表达式。其一般形式为:变量=表达式。
(2)赋值运算符是右结合性运算符。如x=y=z,由于“=”的右结合性,应先执行y=z,再执行x=(y=z)运算。
(3)如果赋值运算符两边的数据类型不相同,系统将自动进行类型转换,即把赋值号右边的类型换成左边的类型。
(4)在定义变量时赋以初值的方法,称为初始化。其一般形式为:类型说明符变量1 = 值1,变量2 = 值2。
常用的类型输出:%d 整型
%f 实型
%e 实型(科学计数法)
%c 字符型
%u 无符号整型
题型贴士 处理逻辑表达式例题:当i=10、j=3、k=0时,i= =1&&(j= =3||(k=k+1)),则表达式最终的值是多少?k值是多少?
参考代码:
#include
void main()
{
int i=10;
int j=3;
int k=0;
int ans=((i==1)&&(j==3||(k=k+1)));
printf("ans=%d k=%d\n",ans,k);
}
(1)“&&”与运算,“||”或运算,“!”非运算
(2)a>b && c>d等价于(a>b) && (c>d)
(3)在判断一个逻辑量“真假”时,以非0表示“真”,以0表示“假”。而在给出逻辑运算结果时,以0代表“假”,以1代表“真”
(4)短路运算:在进行逻辑运算时,逻辑表达式运算到其值完全确定时为止。例如:例题中计算i= =1&&(j= =3||k=k+1)时,由于i= =1不成立,决定了整个表达式的值为0,因此 (j= =3||k=k+1)就不再计算了,k的值还是0。
位运算所谓位运算是指进行二进制位的运算。
1. 按位与运算(&)
例题:9&5=?
参考答案:可写算式如下:
9的二进制补码: 0 0 0 0 1 0 0 1
5的二进制补码: 0 0 0 0 0 1 0 1
& ___________________
0 0 0 0 0 0 0 1(1的二进制补码)
即9&5=1。
只有对应的两个二进位均为1时,结果位才为1,否则为0,它是双目运算符。即:0&0=0;0&1=0;1&0=0;1&1=1。2. 按位或运算(|)
例题:9|5=?
参考答案:可写算式如下:
9的二进制补码: 0 0 0 0 1 0 0 1
5的二进制补码: 0 0 0 0 0 1 0 1
| _________________
0 0 0 0 1 1 0 1 (十进制为13)
即9|5=13。
只要对应的两个二进位有一个为1时,结果位就为1,它是双目运算符。即:0|0=0;0|1=1;1|0=1;1|1=1。3. 按位异或(^)
例题:9^5=?
参考答案:可写算式如下:
9的二进制补码: 0 0 0 0 1 0 0 1
5的二进制补码: 0 0 0 0 0 1 0 1
^ _________________
0 0 0 0 1 1 0 1 (十进制为12)
即9|5=12。
当两对应的二进位相异时,结果为1,它是双目运算符。即:0^0=0;0^1=1;1^0=1;1^1=0。4. 求反运算(~)
例题:进行~9的运算
参考答案:0000000000001001
~ __________________
1111111111110110
对参与运算的数的各二进位按位求反,它是单目运算符,具有右结合性。即:~0=1;~1=0。5. 左移运算
左移运算符“<
6. 右移运算
右移运算符“>>”是双目运算符。其功能是把“>> ”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。
例如:设 a=15,a>>2 表示把000001111右移为00000011(十进制3)。对于有符号数,在右移时,符号位将随同移动。当为正数时,最高位补0;而为负数时,符号位为1,最高位是补0还是补1取决于计算机系统的规定。
判定性结构1. if判断结构
流程图如下:
2. if-else判断结构
流程图如下:
3. if语句的嵌套
if (表达式)
if (表达式)
语句1;
else
if (表达式)
语句2;
注意:在C语言中,else 应与同一个语句块内,最近的一个且没
有其它 else 配对的 if 组成配对关系。
4. switch判定结构
switch(表达式){
case常量表达式1: 语句块1; [break;]
case常量表达式2: 语句块2; [break;]
…
case常量表达式n: 语句块n; [break;]
[default : 语句块n+1;]
}
5. switch与if-else的比较
① else-if比switch的条件控制更强大一些
else-if可以依照各种逻辑运算的结果进行流程控制
switch只能进行==判断,并且只能是整数或字符判断
② switch比else-if更清晰
例题要求程序功能为:输入学生考试分数,按A、B、C、D、E给出成绩的等级。90分以上(包括90分)为A等,60分以下(不包括60分)为E等,中间每10分为一个等级。
参考答案:
#include
void main(void)
{
char cLevel=0x20;
float fScore;
printf("请输入成绩:");
scanf("%f",&fScore); /*输入考试分数*/
if(fScore>100.0||fScore<0.0)
{
printf("\n输入成绩错误!");
return;
}
else if (fScore > 89.99) cLevel='A'; /*分数fScore>=90*/
else if (fScore > 79.99) cLevel='B'; /*分数90>fScore>=80*/
else if (fScore > 69.99) cLevel='C'; /*分数80>fScore>=70*/
else if (fScore > 59.99) cLevel='D'; /*分数70>fScore>=60*/
else cLevel='E'; /*分数fScore<60*/
printf("该成绩的等级为:%c\n",cLevel);
下篇推送预告:循环结构及应用
扫码关注我们了解更多计算机知识