第四章 选择结构程序设计
章节重点:这一章应着重掌握if...else语句、switch多分支语句、关系运算符和关系表达式、逻辑运算符和逻辑表达式、条件运算符和条件表达式、会使用选择结构的嵌套
(1)概念题(这里着重理解)
算数运算:+、-、*、/运算,对象为实数或复数,结果也为实数或者复数。
关系运算:>、>=、<、<=、==、!=,六种,关系运算的值为逻辑值,true、false。
逻辑运算:&&、||、!,三种,逻辑运算的值为逻辑值,true、false。
(2)概念题(这里着重理解)
在C的逻辑运算中 1 代表为 真,以 0 代表为 假 。
在逻辑表达式中的运算对象 非零 代表 真,以 0 代表 假 。
(3)a=3,b=4,c=5。写出逻辑表达式的值(详细讲解一道题)
a+b>3&&b==c
要掌握符号的优先级问题,因为a+b=7所以a+b>3为真,然后b是不等于c的所以为假,1&&0,结果为0。
这种题的解题技巧在先处理关系运算,处理完后在分析逻辑运算,分清运算符的结合方向为自右向左还是自左向右。
(4)输入三个数,输出最大值
# include <stdio.h>
int main()
{
int a,b,c,max;
scanf("%d,%d,%d",&a,&b,&c);//注意输入格式
if(a>b)
max=a;
else
max=b;
if(max<c)
max=c;
printf("%d",max);
return 0;
}
(5)输入小于1000的正数,输出它的平方根(注意题目中的要求)
算法分析:注意double数据类型的输入格式以及求次方的pow()函数。想输出整形,可以直接赋值给整形。
#include <stdio.h>
#include <math.h>
int main()
{ double n;
int m=2;
int s;
printf("请输入一个小于1000的正数n\n");
scanf("%lf",&n);//double数据类型的输入需使用%lf
//printf("%f\n",n);double数据类型的输出使用%f即可
if(n>1000)
printf("请从新输入正数n\n");
s=pow(n,2);
printf("n的平方根为%d",s);
return 0;
}
(6)阶跃函数求值
#include <stdio.h>
int main()
{
int x,y; //根据要求定义数据类型
printf("请输入x的值\n");
scanf("%d",&x);
if(x<1)
y=x;
else if((1<=x)&&(x<10))
y=2*x-1;
else
y=3*x-11;
printf("%d",y);
return 0;
}
(7)阶跃函数求值
这道题根据给出的程序,应该明白if与else的配对关系,else总是与他上面的最近的未配对的if配对。
程序1不能实现题目要求,当x输入负数时 ,y输出的是0,因为执行了else。当x输入为零时,就没有进入if的判断体。
程序2也不能实现题目要求,当x输入负数时,y输出0,因为不进入if判断体。当x输入0时,y=-1,执行else语句。
(8)成绩等级
算法分析:对于输出成绩等级,选择比较多,可选用switch多分支语句,也可使用if...else。
# include<stdio.h>
int main ()
{
int score;
printf("请输入百分制成绩\n");
scanf("%d",&score);
switch(score/10){ //取除数
case 9:printf("A");break;
case 8:printf("B");break;
case 7:printf("C");break;
case 6:printf("D");break;
case 5:
case 4:
case 3:
case 2:
case 1:
case 0:printf("E");break;//若值为5,4,3,2,1,0都执行E;
}
return 0;
}
(9)正整数
算法分析:借助判断位数,去输出数据,我完全使用取除数和余数进行运算输出。
# include <stdio.h>
int main()
{
int num;
int one,two,three,four;//定义个位十位百位千位
scanf("%d",&num);
if(num/1000) //求出它是几位数并且正序输出、逆序输出
{printf("是四位数\n");
printf("正序%d",num/1000);
printf("%d",num%1000/100);
printf("%d",num%1000%100/10);
printf("%d\n",num%1000%100%10);
printf("逆序%d",num%1000%100%10);
printf("%d",num%1000%100/10);
printf("%d",num%1000/100);
printf("%d",num/1000);}
else if(num/100)
{printf("是三位数\n");
printf("正序%d",num/100);
printf("%d",num%100/10);
printf("%d\n",num%100%10);
printf("逆序%d",num%100%10);
printf("%d",num%100/10);
printf("%d",num/100);}
else if(num/10)
{printf("是二位数\n");
printf("正序%d",num/10);//正序
printf("%d\n",num%10);
printf("逆序%d",num%10);//逆序
printf("%d\n",num/10);
}
else
{printf("是个位数\n");
printf("正序%d\n",num/1);
printf("逆序%d",num/1);}
return 0;
}
(10)企业发放奖金根据利润提成
# include <stdio.h>
int main()
{
int i,m;
scanf("%d",&i);
if(i<100000)
printf("%d",i*0.1);
else if(100000<i<=20000)
printf("%d",m=100000*0.1+(i-100000)*0.075);
else if(200000<i<=400000)
printf("%d",m=200000*0.075+(i-200000)*0.05);
else if(400000<i<=600000)
printf("%d",m=400000*0.05+(i-400000)*0.03);
else if(600000<i<=1000000)
printf("%d",m=600000*0.03+(i-600000)*0.015);
else
printf("%d",m=1000000*0.015+(i-1000000)*0.01);
return 0;
}
# include <stdio.h>
int main()
{
int i,m,c;
scanf("%d",&i);
c=i/100000;
switch(c)
{
case 0:printf("%d",m=i*0.1);break;
case 1:
case 2:printf("%d",m=100000*0.1+(i-100000)*0.075);break;
case 3:
case 4:printf("%d",m=200000*0.075+(i-200000)*0.05);break;
case 5:
case 6:printf("%d",m=400000*0.05+(i-400000)*0.03);break;
case 7:
case 8:
case 9:printf("%d",m=600000*0.03+(i-600000)*0.015);break;
default: printf("%d",m=1000000*0.015+(i-1000000)*0.01);break;
}
return 0;
}
(11)输入四个整数,按要求由小到大排序
算法分析:为了方便,在这一章中我使用了后面的知识,运用数组将四个数据进行输入,使用冒泡法进行排序。
#include <stdio.h>
int main()
{
int a[4]; //定义数组大小
int temp,i,j;
for(i=0;i<4;i++)
scanf("%d",&a[i]);
for(j=0;j<3;j++) //使用冒泡法排序
for(i=0;i<3-j;i++)
if(a[i]>a[i+1])
{temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;}
for(i=0;i<4;i++)
printf("%d ",a[i]);
return 0;
}
(12)输坐标,求该点的建筑高度
算法分析:通过x,y坐标的限制,进行判断坐标是否在圆塔内
# include <stdio.h>
int main()
{
float x,y;
scanf("%f %f",&x,&y);
if(-3<x<-1||1<x<3)
{if(-3<y<-1||1<y<3)
printf("10");}
else printf("0");
return 0;
}
来源:CSDN
作者:婧_
链接:https://blog.csdn.net/black_procedure/article/details/104538971