vlambda博客
学习文章列表

C语言拓展第二期:选择结构(一)



1.简单if语句的学习

程序的设计是为了解决生活中的实际问题。在日常生活中我们往往会遇到一些与选择有关的问题:
  • 今天出门是否带雨伞?

  • 考试是否通过?

  • 十字路口是否要驻足等待?

  • 儿童坐火车是否免票?

想要解决好这些问题,我们首先要建立一个明确的判断标准:

  • 今天出门是否带雨伞?        (需要判断是否有雨)

  • 考试是否通过?               (需要判断成绩是否及格)

  • 十字路口是否要驻足等待? (需要判断当前路口是红灯还是绿灯)

  • 坐火车儿童是否免票?     (需要判断儿童是否属于6周岁或1.2米以下

那么如何在C 语言中实现选择与判断的操作呢?
我们以判断考试是否及格作为例子来学习一下判断与选择相关语句的使用。
在开始对这个问题进行构思编程之前我们先来学习一个从计算机之外获取数据的必不可少的函数scanf()。 上一讲我们学习了printf() 这个函数,它是用来把你想要输出的东西打印在电脑屏幕上的一个函数。而scanf() 恰恰与它相反, scanf() 是用来将解决问题所需要的数据通过键盘输入到计算机中函数。printf scanf 一个输入一个输出,两者在使用的形式上有相似之处。
printf(“%d %d\n”,a,b)
scanf(“%d%d”,&a,&b)
其中%d 叫做格式字符,用来表示数据输入输出的格式;a,b 是变量名,是提前定义好的用来存放数据的,& 符号我们第一次见,它是用来获取一个变量/ 常量/ 函数的内存地址的。&a 的意思就是变量a 同学在我们计算机中所居住的地方的门牌号。那么这个门牌号是多少呢?如果你的好奇心很强的话,这里给你提供一种查询到小a 同学家门牌号的方法。
#include<stdio.h>int main(){ int a; //定义一个变量a scanf("%d",&a); //用scanf函数给a赋值 printf("a的地址为%d\n",&a); //用printf函数将a的地址打印到电脑屏幕上 return 0;}                        

C语言拓展第二期:选择结构(一)

在使用scanf 函数时一定要明确所输入数据的数据类型以及变量名和各个数据之间的对应关系,否则就容易出现错误。
了解了scanf() 函数的用法,接下来我们继续研究判断学生考试成绩是否及格的问题。
想要判断一个学生的考试成绩是否及格,首先我们要获取这个学生的成绩。于是我们定义了一个名为score 的变量用来储存这个学生的成绩。
int score;
但是这个学生的成绩现在是显示在他的试卷上的,我们怎么将这个卷面上的分数导入到电脑中呢?自然是使用刚刚学到的scanf() 函数。
scanf("%d",&score);//把试卷上的分数录入到电脑里并且保存在score这个变量中
获得了学生的成绩之后,判断他是否及格便变得很简单啦。我们把这位同学的成绩与及格标准60 分进行比较。当score ≥60 时,该同学成绩为及格 , 反之便是不及格。
C 语言来表示便是
if (score >= 60)  printf("及格");else printf("不及格");
即当同学的成绩大于等于60分的时候打印“及格”,当同学的成绩不是大于等于60分,也就是小于60分的时候,打印“不及格”。把前边的C 语句连接在一起,再加上必要的框架,我们的一个简单的判断学生成绩是否及格的小程序便编写完成了。
#include<stdio.h>int main (){ int score; printf("请输入学生的成绩:"); scanf("%d",&score); if(score >= 60) printf("及格\n"); else printf("不及格\n"); return0;}
编译运行一下
当这个同学考了100分时

C语言拓展第二期:选择结构(一)

当然是及格的。
当这个同学考了59 分时

C语言拓展第二期:选择结构(一)

很不幸他没有通过考试。
 
在进行选择和判定的时候我们用到了if 语句,其标准形式是
if( 条件1)
操作1;
else
操作2;
如果满足条件1 ,就执行操作1 ;否则就执行操作2
下面我们来练习一下:如果今天下雨我就在家写作业,否则我就去和同学打球。用if else 的形式如何来写呢?
 
按照标准形式应该是这样的:
If( 今天下午下雨)
我就在家里写作业;
else
我就和同学去打球;
这里有需要注意的是

   

C语言拓展第二期:选择结构(一)

如果加上会是什么情况呢?
这时候代码变为
if(source>=60);
printf(“ 及格\n”);
else
printf(“ 不及格\n”);
这时你会发现代码无法通过编译。而错误信息会告诉你else 没有与if 相匹配。这时为什么呢?原来当if( ……) 后边没有; 的时候 if(source>=60)  printf(“ 及格 \n”); 相当于一个整体,接下来的 else if 语句仍然是相互匹配的关系。
if( ……); printf(“ 及格\n”); 相当于我们的操作 1 为没有操作,而 if() 其后紧跟的 printf(“ 及格 \n”); 此时已经与 if 语句没有了关系。 else 在向前寻找 if 语句进行匹配时只会向前搜索一个语句,这个时候它没有发现 if 于是便完成选择结构的构建。这时编译器便会报错,提示你修改自己的程序以符合语法规则。

C语言拓展第二期:选择结构(一)





 
2.If()……else语句的嵌套使用
在我们的实际生活中我们不仅仅会遇到简单的、通过是非判断便可以做出选择的问题。有时候我们还会遇到一些需要多重判断才可以做出选择的问题。那么在面临这些问题的时候我们刚刚学会的If() ……else 语句还可以胜任吗?我们来尝试一下。
一般情况下我们都是三岁读幼儿园,六岁读小学,十二岁读初中,十五岁读高中,十八岁读大学,二十二岁本科毕业。我们能不能通过If() ……else 语句来对一个已知年龄的人来进行分类呢?
首先定义一个用来储存年龄的变量
int age;
然后进行年龄和对应生活经历的判断
if (age>22) printf("本科毕业\n");else if (age>18) printf("读大学\n");else if (age>15) printf("高中\n");else if (age>12) printf("初中\n");else if (age>6) printf("小学\n");else if (age>3) printf("幼儿园\n");else printf("婴儿\n");

加上框架编写成程序:
#include<stdio.h>int main (){int age;printf("请输入您的年龄:\n");scanf("%d",&age);printf("您现在的阶段是:");if (age>22) printf("本科毕业\n");else if (age>18) printf("读大学\n");else if (age>15) printf("高中\n");else if (age>12) printf("初中\n");else if (age>6) printf("小学\n");else if (age>3) printf("幼儿园\n");else printf("婴儿\n");return 0;}

检验一下我们的成果

C语言拓展第二期:选择结构(一)

C语言拓展第二期:选择结构(一)

通过这个例子我们发现,通过合理地使用一些简单语句,就可以实现一些较为复杂的功能。在下一节的内容中我们将进一步介绍If()……else语句的应用以及另一种选择结构的实现方法——switch语句的使用。




课后练习:

对于一元二次方程ax2+bx+c=0你可不可以根据今天所学的If()……else语句来设计一个小程序实现以下目标:
(一)  从键盘输入a、b、c的值,把完整的方程形式打印到屏幕上
(二)  判断该方程是否有实根
(三)  如果有实根的话,这个根是多少
小提示:
开头我们做一个小小的补充以便使用开平方函数
#include<stdio.h>
#include<math.h>
/*程序中使用开平方函数sqrt()所必须添 加的头文件*/





✎ 上期答案

完整代码:

#include <stdio.h>
int main(){  double simple = 1.2;  // 数值自选  printf("%f ", simple);  int boxs = 1; // 数值自选  printf("%d ", boxs);    double temp = boxs + simple;  // 注意数据类型必须为double,不然会出错, temp这个名称随意  printf("%f", temp);  // 或者直接printf("%f", boxs + simple)}











扫描二维码

获取更多精彩

FUN趣课堂