一、大纲
1. 掌握关系和逻辑运算符的使用
2. 掌握if-else语句和switch语句的使用
3. 了解条件运算符的使用
二、实验目标:
1. 理解关系运算符的用法,重点掌握关系运算符在条件判断和分支结构中的应用。
2. 正确理解”==”和”=”的区别,以及使用它们的运算结果对程序的影响。
3. 理解逻辑运算符的用法,掌握运算法则。重点掌握其在条件判断和分支结构中的应用。
4. 掌握短路运算的运算原理和使用方法。
5. 掌握表达式语句,复合语句的使用。
6. 熟练掌握使用if语句的各种语句格式进行编程,建立面向过程的编程思路。
7. 掌握条件运算的使用。
8. 熟练掌握使用switch语句进行分支结构程序的设计。
三、实验方式:
要求学生自己独立完成
四、上机指导任务
4.1任务1:数字判断(时间:20分钟)
4.1.1 任务描述
写一个程序,从键盘上接收两个整数,输出这两个整数中值大的一个。
#include<stdio.h>
int main(){
int a,b;
scanf("%d",&a);
scanf("%d",&b);
if(a>b){
printf("%d",a);
}else{
printf("%d",b);
}
return 0;
}
4.1.2 任务目的
(1) 建立面向过程的编程思路。
(2) 掌握关系运算符的使用。
(3) 掌握条件表达式的使用
(4) 掌握if语句的使用。
4.1.3 任务要求
(1) 使用if语句条件判断进行实现
(2) 使用条件表达式进行实现。
(3) 在用户输入数据前应给出提示信息,在输出结果时也应给出相应的关于结果的提示信息。
(4) 为程序添加适当的注释信息。
4.1.4 难点提示
用条件表达式进行实现时,可以将比较结果保存到另一个变量中,输出时直接输出该变量即可。
4.2任务2:阅读程序(时间:10分钟)
4.2.1 任务描述
(1) 分别阅读下面两段程序,分析程序的结果。
// 程序1
#include <iostream>
using namespace std;
int main()
{
int password = 0;
cout << "请输入密码 :";
cin >> password;
if( password == 123456 )
{
cout << "输入正确,可以进行下面的操作." << endl;
}
else
{
cout << "输入错误,程序即将退出." << endl;
}
return 0;
}
(2)
// 程序2
#include <iostream>
using namespace std;
int main()
{
int password = 0;
cout << "请输入密码 :";
cin >> password;
if( password = 123456 )
{
cout << "输入正确,可以进行下面的操作." << endl;
}
else
{
cout << "输入错误,程序即将退出." << endl;
}
return 0;}
4.2.2 任务目的
(1) 正确理解”= =”和”=”的区别,以及使用它们的运算结果对程序的影响。
(2) 掌握if-else语句在程序中的使用。
(3) 编写面向过程的程序的编程思想。
4.2.3 任务要求
(1) 分析程序结果,掌握此类程序的编程流程。
(2) 进行相应总结:此类程序的编程思想,以及”= =”和”=”各自的含义、表达式的返回值以及运算规则。
4.3任务3:整除运算(时间:20分钟)
4.3.1 任务描述
写一个程序,接收两个整数a和b,并判断a是否能被b整除,输出判断结果。
int main(){
int a,b;
scanf("%d",&a);
scanf("%d",&b);
if(a%b==0){ //判断a能否被b整除
printf("a能被B整除");
}else{
printf("a不能被b整除");
}
return 0;
}
4.3.2 任务目的
(1) 复习算数运算符的使用。
(2) 掌握逻辑运算在if-else语句中的使用。
(3) 掌握错误处理在程序中的使用。
4.3.3 任务要求
(4) 程序要能对输入的错误整数进行错误判断(if(cin.fail()){…})。
(5) 程序各个部分之间要用空行隔开,为程序添加适当的注释信息。
(6) 对输入输出有相应的提示信息。
4.3.4 难点提示
注意: a是能被b整除的意思是说:b除以a没有余数(即余数为0)。
4.4任务4:数字判断2(时间:20分钟)
4.4.1 任务描述
(1) 写一个程序,接收两个数字,判断这两个数字的乘积是否大于等于5000,如果大于则告诉用户大于5000,如果相等则告诉用户等于5000,否则告诉用户小于5000。
#include<stdio.h>
int main(){
int a,b;
scanf("%d",&a);
scanf("%d",&b);
if(a*b>5000){
printf("这两个数乘积大于5000");
}else if(a*b==5000){
printf("这两个数乘积等于5000");
}else{
printf("这两个数乘积小于5000");
}
return 0;
}
4.4.2 任务目的
(1) 掌握使用if语句实现多重分支进行流程判断。
(2) 掌握关系运算符的使用。
4.4.3 任务要求
(1) 要求分别使用简单的if语句和在else中嵌套if-else语句的格式进行实现。
(2) 给出适当的提示信息和注释信息。
4.4.4 难点提示
4.5任务5:对自动取款机业务的简单实现(时间:30分钟)
4.5.1 任务描述
(1) 银行的自动取款机大概有如下几种操作:存款、取款、查询余额、转账等几种功能。要求用switch语句进行模拟其操作。
(2) 由于在这里没有具体的按钮,可以使用数字来模拟用户的选择。例如:可以提示用户"存款请按1"、"取款请按2"、"查询余额请按3"、"转账请按4"、"退出请按5"。来让用户进行选择。
(3) 而具体的操作,可以直接在屏幕上输出操作过程即可。例如:当用户选择1后,可以直接在屏幕上打印“正在进行存款操作.”即可,其它操作类似。
int main(){
int a=0;
printf("请选择服务种类:\n");
printf("存款请按1:\n");
printf("取款请按2:\n");
printf("查询余额请按3:\n");
printf("转账请按4:\n");
printf("退出请按5:\n");
printf("请您选择\n");
fflush(stdout);
scanf("%d",&a);
switch (a) {
case 1:
printf("存款业务正在办理中、。。。");
break;
case 2:
printf("取款业务正在办理中、。。。");
break;
case 3:
printf("正在为您查询余额、。。。");
break;
case 4:
printf("转账业务正在办理中、。。。");
break;
case 5:
printf("正在安全退出、。。。");
break;
return 0;
break;
default:
printf("对不起,请核对您的账户信息");
break;
}
}
4.5.2 任务目的
(1) 使用面向过程的编程思路解决一些实际问题。
(2) 掌握使用switch语句进行多分支的条件判断。
(3) 复习错误处理机制的使用(对cin的出错判断)
4.5.3 任务要求
(1) 程序开始首先应在屏幕上所有的业务提示信息,提示可以为用户提供的服务:
请选择服务种类 :
存款请按1
取款请按2
查询余额请按3
退出请按4
请您选择 :
(2) 然后让用户选择,并进行相关业务处理。
(3) 要求为程序添加错误处理机制。
4.5.4 难点提示
注意:
(1) 为switch语句添加default选项。
(2) 每个分支后面不要忘记添加break;
4.6 作业1(30分钟)
4.6.1 作业任务
从键盘上接收一个字符,判断它到底是哪种字符:数字,小写字母,大写字母,其他字符。int main(){
char c;
fflush(stdout);
scanf("%c",&c);//从键盘接收1个值
if(c>='a'&&c<='z'){
printf("小写字母");
}
else if(c>='A'&&c<='Z'){
printf("大写字母");
}else{
printf("数字");
}//用if语句进行条件判断
return 0;
}
4.6.2 任务要求
(1) 使用简单if语句进行实现。
(2) 再使用在else中嵌套if-else语句的语句格式进行实现。
(3) 判断单个字符,是根据字符在ASCII码表中的顺序进行编写的,例如:对是否是小写字母就可以用下面这种判断方式:if( chioce>='a' && chioce<='z' ){…}。其它几种判断类似。
4.7 作业2(20分钟)
4.7.1 作业任务
写一个程序,能够判断从键盘上输入的年份是否是一个闰年。
#include<stdio.h>
int main(){
int nian;
printf("请输入您要查询的年份");
fflush(stdout);
scanf("%d",&nian);
if(nian%100==0){//先判断是否是整千年的年份
if(nian%4==0){
printf("此年份是闰年。");
}else{
printf("此年份是平年。");
}
}else if(nian%4==0){
printf("此年份是闰年");
}else{
printf("此年份是平年。");
}
return 0;
}
4.7.2 任务要求
(1) 使用逻辑运算符进行运算。
(2) 需要有相关的错误处理机制。
4.8 作业3(15分钟)
4.8.1 作业任务
写一个程序,接收一个数字,判断它是否能同时被2和3整除
#include<stdio.h>
int main(){
int a;
scanf("%d",&a);
if(a%2==0){
if(a%3==0){
printf("此数能同时被2和3整除");
}else{
printf("此数不能同时被2和3整除");
}
}else{
printf("此数不能同时被2和3整除");
}
return 0;
}
4.8.2 任务要求
(1) 能同时被2和3整除的意思是说:让这个数分别去除以2和3,看是否余数全为0。
(2) 要求使用逻辑运算符进行运算。
(3) 添加适当的注释信息。
五、课后作业
5.1作业一(15分钟)
5.1.1作业任务
写出下面各逻辑表达式的值,a=3,b=4,c=5。
(1)a+b>c&&b==c 0
(2)a||b+c&&b-c 1
(3)!(a>b)&&!c||11
(4)!(x=a)&&(y=b)&&00
(5)!(a+b)+c-1&&b+c/21
5.1.2任务要求
(1)先计算结果在敲代码验证结果
(2)熟悉运算符的优先级。
(3)掌握逻辑表达式的运算。
5.1.3难点提示
无
5.2作业二(15分钟)
5.2.1作业任务
有3个整数a、b、c,由键盘输入,输出其中最大的数。
#include<stdio.h>
int main(){
int a,b,c;
scanf("%d",&a);
scanf("%d",&b);
scanf("%d",&c);
if(a>b){
if(a>c){
printf("%d",a);
}else{
printf("%d",c);
}
}else if(b>c){
printf("%d",b);
}else{
printf("%d",c);
}
return 0;
}
5.2.2任务要求
(1)给出适当的提示信息和注释信息。
(2)用两种方法输出最大数。
5.2.3任务难点提示
(1)方法一利用if语句。
(2)方法二利用条件运算符(? :)。
5.3作业三(20分钟)
5.3.1作业任务
给出一百分制成绩,要求从键盘输入成绩后,输出成绩等级‘A’、‘B’、‘C’、‘D’、'E'。90分以上为‘A’,80—89分为‘B’,70—79分为‘C’,60—69分为‘D’,60分一下为'E'。
int main(){
int a;
printf("请输入成绩:\n");
fflush(stdout);
scanf("%d",&a);
if(a>=90){
printf("A");
}else if(a>=80){
printf("B");
}else if(a>=70){
printf("C");
}else if(a>=60){
printf("D");
}else{
printf("E");
}
return 0;
}
5.3.2任务要求
(1)给出适当的提示信息和注释信息。
(2)要求用switch case和if else 两种方法)
#include<stdio.h>
int main(){
int a;
printf("请输入成绩:\n");
fflush(stdout);
scanf("%d",&a);
int s;
if(60>a>0){s=1;}
if(70>a>=60){s=2;}
if(80>a>=70){s=3;}
if(90>a>=80){s=4;}
if(100>a>=90){s=5;}
switch(s){
case 1:printf("E");break;
case 2:printf("D");break;
case 3:printf("C");break;
case 4:printf("B");break;
case 5:printf("A");break;
default :printf("请核对您的成绩");break;
}
return 0;
}
5.3.3任务难点提示
用switch case时注意break的使用。
5.4作业四(25分钟)
5.4.1作业任务
给你个不多于5位的正整数,要去:
(1)求出它是几位数;
(2)分别输出每一位数字;
(3)按逆序输出各位数字,例如原数为321,应输出123。
5.4.2任务要求
(1)给出适当的提示信息和注释信息。
(2)从键盘输入不多于5位的数。若大于五位数提示输入错误。
int main(){
int a;
scanf("%d",&a);
if(a>99999){
printf("请输入一个小于五位的数字");
}else if(a>9999){
int b,c,d,e,f;
b=a/10000;
c=a/1000%10;
d=a/100%10;
e=a/10%10;
f=a%10;
printf("这是一个五位数\n");
printf("每一位数字分别是%d,%d,%d,%d,%d\n",b,c,d,e,f);
printf("逆序每一位数字分别是%d,%d,%d,%d,%d",f,e,d,c,b);
}else if(a>999){
int b,c,d,e;
b=a/1000;
c=a/100%10;
d=a/10%10;
e=a%10;
printf("这是一个四位数\n");
printf("每一位数字分别是%d,%d,%d,%d\n",b,c,d,e);
printf("逆序每一位数字分别是%d,%d,%d,%d",e,d,c,b);
}else if(a>99){
int b,c,d;
b=a/100;
c=a/10%10;
d=a%10;
printf("这是一个三位数\n");
printf("每一位数字分别是%d,%d,%d\n",b,c,d);
printf("逆序每一位数字分别是%d,%d,%d",d,c,b);
}else if(a>9){
int b,c;
b=a/10;
c=a%10;
printf("这是一个两位数\n");
printf("每一位数字分别是%d,%d\n",b,c);
printf("逆序每一位数字分别是%d,%d",c,b);
}else if(a>=0){
printf("这是一个一位数\n");
printf("每一位数字分别是%d\n",a);
printf("逆序每一位数字分别是%d",a);
}
return 0;
}
5.4.3任务难点提示
(1)利用if语句判断是否大于五位数。
(2)判断几位数方法if(n>9999){五位数}
else if(n>999){ 四位数}
(3)分别利用/和%求每一位数字如324 。324/100=4, 324-(4*100)/10=3,324%10=4。
5.5作业五(20分钟)
5.5.1作业任务
从键盘输入三个整数,判断是否能构成三角形,若能构成三角形判断是直角三角形,等腰三角形还是等边三角形还是任意三角形。
#include<stdio.h>
int main(){
int a,b,c,d;
printf("请输入三个整数\n");
fflush(stdout);
scanf("%d",&a);
scanf("%d",&b);
scanf("%d",&c);
if(a>b){
d=a;
a=b;
b=d;
}
if(a>c){
d=a;
a=c;
c=d;
}
if(b>c){
d=b;
b=c;
c=d;
}
if(a+b>c){
printf("能构成三角形\n");
if(a*a+b*b==c*c){
printf("此三角形为直角三角形");
}
else if(a*a+b*b>c*c){
printf("此三角形为钝角三角形");
}
else if(a*a+b*b<c*c){
printf("此三角形为锐角三角形");
}
}
else{
printf("不能构成三角形");
}
return 0;
}
5.5.2任务要求
(1)给出适当的提示信息和注释信息。
(2)要求分别使用简单的if语句和在else中嵌套if-else语句的格式进行实现。
5.5.3任务难点提示
(1)构成三角形条件(两边之和大于第三边)。
(2)直角三角形a*a=b*b+c*c,钝角三角形a*a>b*b+c*c,锐角三角形a*a<b*b+c*c