第三章 程序的控制结构
第一节 if选择结构
T1039 : 判断数正负
【题目描述】
给定一个整数N,判断其正负。如果N>0,输出positive;如果N=0,输出zero;如果N<0,输出negative。
【输入】
一个整数N(−109≤N≤109)。
【输出】
如果N>0, 输出positive;
如果N=0, 输出zero;
如果N<0, 输出negative。
【输入样例】 1
【输出样例】 positive
【答案&代码】
#include<stdio.h>
#include<math.h>
int main(void){
int n;
scanf("%d",&n);
if(n>0)
printf("positive");
else if(n==0)
printf("zero");
else
printf("negative");
return 0;
}
T1040 : 输出绝对值
【题目描述】
输入一个浮点数,输出这个浮点数的绝对值,保留到小数点后两位。
【输入】
输入一个浮点数,其绝对值不超过10000。
【输出】
输出这个浮点数的绝对值,保留到小数点后两位。
【输入样例】 -3.14
【输出样例】 3.14
【答案&代码】
#include<stdio.h>
int main(void){
double n;
scanf("%lf",&n);
if(n>=0)
printf("%.2f",n);
else
printf("%.2f",-1*n);
return 0;
}
T1041 : 奇偶数判断
【题目描述】
给定一个整数,判断该数是奇数还是偶数。如果n是奇数,输出odd;如果n是偶数,输出even。
【输入】
输入仅一行,一个大于零的正整数n。
【输出】
输出仅一行,如果n是奇数,输出odd;如果n是偶数,输出even。
【输入样例】 5
【输出样例】 odd
【答案&代码】
#include<stdio.h>
int main(void){
int n;
scanf("%d",&n);
if(n%2==0)
printf("even");
else
printf("odd");
return 0;
}
T1042 : 奇偶ASCII值判断
【题目描述】
任意输入一个字符,判断其ASCII是否是奇数,若是,输出YES,否则,输出NO。例如,字符A的ASCII值是65,则输出YES,若输入字符B(ASCII值是66),则输出NO。
【输入】
输入一个字符。
【输出】
如果其ASCII值为奇数,则输出YES,否则,输出NO。
【输入样例】 A
【输出样例】 YES
【答案&代码】
#include<stdio.h>
int main(void){
char ch;
scanf("%c",&ch);
if(ch%2==0)
printf("NO");
else
printf("YES");
return 0;
}
T1043 : 整数大小比较
【题目描述】
输入两个整数,比较它们的大小。若x>y,输出>;若x=y,输出=;若x
#include<stdio.h>
int main(void){
int x,y;
scanf("%d%d",&x,&y);
if(x>y)
printf(">");
else if(x==y)
printf("=");
else
printf("<");
return 0;
}
T1044 : 判断是否为两位数
【题目描述】
判断一个正整数是否是两位数(即大于等于10且小于等于99)。若该正整数是两位数,输出1,否则输出0。
【输入】
一个正整数,不超过1000。
【输出】
一行。若该正整数是两位数,输出1,否则输出0。
【输入样例】 54
【输出样例】 1
【答案&代码】
#include<stdio.h>
int main(void){
int x,y;
scanf("%d%d",&x,&y);
if(x>y)
printf(">");
else if(x==y)
printf("=");
else
printf("<");
return 0;
}
T1045 : 收集瓶盖赢大奖
【题目描述】
某饮料公司最近推出了一个“收集瓶盖赢大奖”的活动:如果你拥有10个印有“幸运”、或20个印有“鼓励”的瓶盖,就可以兑换一个神秘大奖。现分别给出你拥有的印有“幸运”和“鼓励”的瓶盖数,判断是否可以去兑换大奖。若可以兑换大奖,输出1,否则输出0。
【输入】
一行,包含两个整数,分别是印有“幸运”和“鼓励”的瓶盖数,用一个空格隔开。
【输出】
一行。若可以兑换大奖,输出1,否则输出0。
【输入样例】 11 19
【输出样例】 1
【答案&代码】
#include<stdio.h>
int main(void){
int xy,gl;
scanf("%d%d",&xy,&gl);
if(xy>=10||gl>=20)
printf("1");
else
printf("0");
return 0;
}
T1046 : 判断一个数能否同时被3和5整除
【题目描述】
判断一个数n 能否同时被3和5整除,如果能同时被3和5整除输出YES,否则输出NO。
【输入】
输入一行,包含一个整数n。( -1,000,000 < n < 1,000,000)
【输出】
输出一行,如果能同时被3和5整除输出YES,否则输出NO。
【输入样例】 15
【输出样例】 YES
【答案&代码】
#include<stdio.h>
int main(void){
int num;
scanf("%d",&num);
if(num%3==0&&num%5==0)
printf("YES");
else
printf("NO");
return 0;
}
T1047 : 判断能否被3,5,7整除
【题目描述】
给定一个整数,判断它能否被3,5,7整除,并输出以下信息:
能同时被3,5,7整除(直接输出3 5 7,每个数中间一个空格);
只能被其中两个数整除(输出两个数,小的在前,大的在后。例如:3 5或者 3 7或者5 7,中间用空格分隔);
只能被其中一个数整除(输出这个除数);
不能被任何数整除,输出小写字符‘n’,不包括单引号。
【输入】
输入一行,包括一个整数。
【输出】
输出一行,按照描述要求给出整数被3,5,7整除的情况。
【输入样例】 105
【输出样例】 3 5 7
【答案&代码】
#include<stdio.h>
int main(void){
int num;
scanf("%d",&num);
if(num%105==0)
printf("3 5 7");
else if(num%3==0||num%5==0||num%7==0){
if(num%3==0)
printf("3 ");
if(num%5==0)
printf("5 ");
if(num%7==0)
printf("7 ");
}
else
printf("n");
return 0;
}
T1048 : 有一门课不及格的学生
【题目描述】
给出一名学生的语文和数学成绩,判断他是否恰好有一门课不及格(成绩小于60分)。若该生恰好有一门课不及格,输出1;否则输出0。
【输入】
一行,包含两个在0到100之间的整数,分别是该生的语文成绩和数学成绩。
【输出】
若该生恰好有一门课不及格,输出1;否则输出0。
【输入样例】 50 80
【输出样例】 1
【答案&代码】
#include<stdio.h>
int main(void){
int ch,ma;
scanf("%d%d",&ch,&ma);
if(ch<60&&ma>=60)
printf("1");
else if(ch>=60&&ma<60)
printf("1");
else
printf("0");
return 0;
}
第二节 switch语句
T1049 : 晶晶赴约会
【题目描述】
晶晶的朋友贝贝约晶晶下周一起去看展览,但晶晶每周的1、3、5有课必须上课,请帮晶晶判断她能否接受贝贝的邀请,如果能输出YES;如果不能则输出NO。注意YES和NO都是大写字母!
【输入】
输入有一行,贝贝邀请晶晶去看展览的日期,用数字1到7表示从星期一到星期日。
【输出】
输出有一行,如果晶晶可以接受贝贝的邀请,输出YES,否则,输出NO。注意YES和NO都是大写字母!
【输入样例】 2
【输出样例】 YES
【答案&代码】
#include<stdio.h>
int main(void){
int d;
scanf("%d",&d);
switch(d){
case 1:
case 3:
case 5:
printf("NO");break;
default:
printf("YES");break;
}
return 0;
}
T1050 : 骑车与走路
【题目描述】
在清华校园里,没有自行车,上课办事会很不方便。但实际上。并非去办任何事情都是骑车快,因为骑车总要找车、开锁、停车、锁车等,这要耽误一些时间。假设找到自行车,开锁并车上自行车的时间为27秒;停车锁车的时间为23秒;步行每秒行走1.2米,骑车每秒行走3.0米。请判断走不同的距离去办事,是骑车快还是走路快。如果骑车快,输出一行”Bike”;如果走路快,输出一行”Walk”;如果一样快,输出一行”All”。
【输入】
输入一行,包含一个整数,表示一次办事要行走的距离,单位为米。
【输出】
输出一行,如果骑车快,输出一行”Bike”;如果走路快,输出一行”Walk”;如果一样快,输出一行”All”。
【输入样例】 120
【输出样例】 Bike
【答案&代码】
#include<stdio.h>
int main(void){
int len;
scanf("%d",&len);
if(50+(double)len/3.0>(double)len/1.2)
printf("Walk");
else if(50+(double)len/3.0==(double)len/1.2)
printf("All");
else
printf("Bike");
return 0;
}
T1051 : 分段函数
【题目描述】
编写程序,计算下列分段函数y=f(x)的值。结果保留到小数点后三位。
y=−x+2.5; (0 ≤x< 5)
y=2−1.5(x−3)(x−3) (5 ≤x< 10)
y=x2−1.5 (10 ≤x< 20)
【输入】
一个浮点数N(0≤N<20)。
【输出】
输出 N 对应的分段函数值:f(N)。结果保留到小数点后三位。
【输入样例】 1.0
【输出样例】 1.500
【答案&代码】
#include<stdio.h>
int main(void){
double x;
scanf("%lf",&x);
double y;
if(0<=x&&x<5)
y=-x+2.5;
else if(5<=x&&x<10)
y=2-1.5*(x-3)*(x-3);
else if(10<=x&&x<20)
y=x/2-1.5;
printf("%.3f",y);
return 0;
}
T1052 : 计算邮资
【题目描述】
根据邮件的重量和用户是否选择加急计算邮费。计算规则:重量在1000克以内(包括1000克), 基本费8元。超过1000克的部分,每500克加收超重费4元,不足500克部分按500克计算;如果用户选择加急,多收5元。
【输入】
输入一行,包含整数和一个字符,以一个空格分开,分别表示重量(单位为克)和是否加急。如果字符是y,说明选择加急;如果字符是n,说明不加急。
【输出】
输出一行,包含一个整数,表示邮费。
【输入样例】 1200 y
【输出样例】 17
【答案&代码】
#include<stdio.h>
#include<math.h>
int main(void){
int x;
char ch;
scanf("%d %c",&x,&ch);
int sum;
if(x<=1000)
sum=8;
else
sum=8+ceil((double)(x-1000)/500)*4;
if(ch=='y')
sum+=5;
printf("%d",sum);
return 0;
}
T1053 : 最大数输出
【题目描述】
输入三个整数,数与数之间以一个空格分开。 输出一个整数,即最大的整数。
【输入】
输入为一行,包含三个整数,数与数之间以一个空格分开。
【输出】
输出一行,包含一个整数,即最大的整数。
【输入样例】 10 20 56
【输出样例】 56
【答案&代码】
#include<stdio.h>
#include<algorithm>
int main(void){
int num[3];
for(int i=0;i<3;i++)
scanf("%d",num+i);
std::sort(num,num+3);
printf("%d",num[2]);
return 0;
}
T1054 : 三角形判断
【题目描述】
给定三个正整数,分别表示三条线段的长度,判断这三条线段能否构成一个三角形。如果能构成三角形,则输出“yes”,否则输出“no”。
【输入】
输入共一行,包含三个正整数,分别表示三条线段的长度,数与数之间以一个空格分开。
【输出】
如果能构成三角形,则输出“yes” ,否则输出“no”。
【输入样例】 3 4 5
【输出样例】 yes
【答案&代码】
#include<stdio.h>
#include<algorithm>
int main(void){
int num[3];
for(int i=0;i<3;i++)
scanf("%d",num+i);
std::sort(num,num+3);
if(num[0]+num[1]>num[2])
printf("yes");
else
printf("no");
return 0;
}
T1055 : 判断闰年
【题目描述】
判断某年是否是闰年。如果公元a年是闰年输出Y,否则输出N。
【输入】
输入只有一行,包含一个整数a(0 < a < 3000)。
【输出】
一行,如果公元a年是闰年输出Y,否则输出N。
【输入样例】 2006
【输出样例】 N
【答案&代码】
#include<stdio.h>
int main(void){
int y;
scanf("%d",&y);
if(y%400==0)
printf("Y");
else if(y%4==0&&y%100!=0)
printf("Y");
else
printf("N");
return 0;
}
T1056 : 点和正方形的关系
【题目描述】
有一个正方形,四个角的坐标(x,y)分别是(1,-1),(1,1),(-1,-1),(-1,1),x是横轴,y是纵轴。写一个程序,判断一个给定的点是否在这个正方形内(包括正方形边界)。如果点在正方形内,则输出yes,否则输出no。
【输入】
输入一行,包括两个整数x、y,以一个空格分开,表示坐标(x,y)。
【输出】
输出一行,如果点在正方形内,则输出yes,否则输出no。
【输入样例】 1 1
【输出样例】 yes
【答案&代码】
#include<stdio.h>
int main(void){
int x,y;
scanf("%d%d",&x,&y);
if(-1<=x&&x<=1&&-1<=y&&y<=1)
printf("yes");
else
printf("no");
return 0;
}
T1057 : 简单计算器
【题目描述】
一个最简单的计算器,支持+, -, *, / 四种运算。仅需考虑输入输出为整数的情况,数据和运算结果不会超过int表示的范围。然而:
如果出现除数为0的情况,则输出:Divided by zero!
如果出现无效的操作符(即不为 +, -, *, / 之一),则输出:Invalid operator!
【输入】
输入只有一行,共有三个参数,其中第1、2个参数为整数,第3个参数为操作符(+,-,*,/)。
【输出】
输出只有一行,一个整数,为运算结果。然而:
如果出现除数为0的情况,则输出:Divided by zero!
如果出现无效的操作符(即不为 +, -, *, / 之一),则输出:Invalid operator!
【输入样例】 1 2 +
【输出样例】 3
【答案&代码】
#include<stdio.h>
int main(void){
int a,b;
char op;
scanf("%d %d %c",&a,&b,&op);
int result;
switch(op){
case '+':
result=a+b;
printf("%d",result);
break;
case '-':
result=a-b;
printf("%d",result);
break;
case '*':
result=a*b;
printf("%d",result);
break;
case '/':
if(b==0){
printf("Divided by zero!");
break;
}
result=a/b;
printf("%d",result);
break;
default:
printf("Invalid operator!");
break;
}
return 0;
}
T1058 : 求一元二次方程
【题目描述】
求一元二次方程ax2+bx+c=0的根,其中a不等于0。结果要求精确到小数点后5位。
【输入】
输入一行,包含三个浮点数a,b,c(它们之间以一个空格分开),分别表示方程ax2+bx+c=0的系数。
【输出】
输出一行,表示方程的解。
若两个实根相等,则输出形式为:“x1=x2=…”;
若两个实根不等,在满足根小者在前的原则,则输出形式为:“x1=…;x2=…“;
若无实根输出“No answer!”。
所有输出部分要求精确到小数点后5位,数字、符号之间没有空格。
【输入样例】 -15.97 19.69 12.02
【输出样例】 x1=-0.44781;x2=1.68075
【答案&代码】
#include<stdio.h>
#include<math.h>
#define precision_1 1e-12
#define precision_2 1e-6
int main(void){
double a,b,c,x1,x2,delta;
scanf("%lf%lf%lf",&a,&b,&c);
delta=b*b-4*a*c;
if(delta<0&&fabs(delta)>precision_1)
printf("No answer!\n");
else if(fabs(delta)<precision_1){
x1=-b/(2*a);
if(fabs(x1)<precision_2)
printf("x1=x2=%.5lf\n",0);
else
printf("x1=x2=%.5lf\n",x1);
}
else{
x1=(-b+sqrt(delta))/(2*a);
x2=(-b-sqrt(delta))/(2*a);
if(fabs(x1)<precision_2) x1=fabs(x1);
if(fabs(x2)<precision_2) x2=fabs(x2);
if(x1<x2)
printf("x1=%.5lf;x2=%.5lf",x1,x2);
else
printf("x1=%.5lf;x2=%.5lf",x2,x1);
}
return 0;
}