程序控制结构(if-else选择结构switch分支结构)
本题集都是具有分支选择结构得程序题目,典型得特点就是需要用if else或者是switch结构来控制程序结构,与前面学习不同,不在是全部代码都执行,而是根据条件决定执行哪句代码
文章目录
奇偶数判断
题目描述:
给定一个整数,判断该数是奇数还是偶数。
输入格式
- 输入仅一行,一个大于零的正整数n。
输出格式
- 输出仅一行,如果n是奇数,输出odd;如果n是偶数,输出even。
样例输入
5
样例输出
odd
解:
#include<iostream>
using namespace std;
int main() {
int x;
cin >> x;
cout << ((x % 2 == 0) ? "even" : "odd") << endl;
return 0;
}
判断数正负
题目描述:
给定一个整数N,判断其正负。
输入格式
- 一个整数N(-10^9 <= N <= 10^9)
输出格式
- 如果N > 0, 输出positive;
如果N = 0, 输出zero;
如果N < 0, 输出negative。
样例输入
1
样例输出
positive
解:
#include<iostream>
using namespace std;
int main() {
long long x;
cin >> x;
if (x == 0) {
cout << "zero" << endl;
} else if (x > 0) {
cout << "positive" << endl;
} else {
cout << "negative" << endl;
}
return 0;
}
判断是否为两位数
题目描述:
判断一个正整数是否是两位数(即大于等于10且小于等于99)。
输入格式
- 一个正整数,不超过1000。
输出格式
- 一行。若该正整数是两位数,输出1,否则输出0。
样例输入
54
样例输出
1
解:
#include<iostream>
using namespace std;
int main() {
int x;
cin >> x;
cout << (x >= 10 && x < 99) << endl;
return 0;
}
[编程入门]三个数字的排序
题目描述:
输入三个整数,按由小到大的顺序输出。
输入格式
- 三个整数
输出格式
- 由小到大输出成一行,每个数字后面跟一个空格
样例输入
2 3 1
样例输出
1 2 3
解:
#include<iostream>
using namespace std;
int main() {
int a, b, c;
cin >> a >> b >> c;
int x[3] = { a, b, c };
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
if (x[j] > x[j + 1]) {
int o = x[j];
x[j] = x[j + 1];
x[j + 1] = o;
}
}
}
cout << x[0] << ' ' << x[1] << ' ' << x[2] << endl;
return 0;
}
适合晨练
题目描述:
输入温度t的值,判断是否适合晨练。(25≤t≤30,则适合晨练ok!,否则不适合no!)
输入格式
- 输入温度t的值。
输出格式
- 输出判断结果
样例输入
26
样例输出
ok!
解:
#include<iostream>
using namespace std;
int main() {
float x;
cin >> x;
cout << ((x>=25 && x<=30) ? "ok!" : "no!") << endl;
return 0;
}
收费
题目描述:
乘坐飞机时,当乘客行李小于等于20公斤时,按每公斤1.68元收费,大于20公斤时,按每公斤1.98元收费,编程计算收费(保留2位小数)。
输入格式
- 行李重量。
输出格式
- 费用(保留2位小数)。
样例输入
20.00
样例输出
33.60
解:
#include<iostream>
using namespace std;
int main() {
float n;
cin >> n;
int x = (int)n + (n - (int)n > 0 ? 1 : 0);
if (x <= 20) {
printf("%.2f", (x * 1.68));
} else {
printf("%.2f", (x * 1.98));
}
return 0;
}
[编程入门]三个数最大值
题目描述:
编写一个程序,输入a、b、c三个值,输出其中最大值。
输入格式
- 一行数组,分别为a b c
输出格式
- a b c其中最大的数
样例输入
10 20 30
样例输出
30
解:
#include<iostream>
using namespace std;
int main() {
int a, b, c;
cin >> a >> b >> c;
int x[3] = { a, b, c };
int y = x[0];
for (int i = 0; i < 3; i++) {
if (y < x[i]) {
y = x[i];
}
}
cout << y << endl;
return 0;
}
输出绝对值
题目描述:
输入一个浮点数,输出这个浮点数的绝对值。
输入格式
- 输入一个浮点数,其绝对值不超过10000。
输出格式
- 输出这个浮点数的绝对值,保留到小数点后两位。
样例输入
-3.14
样例输出
3.14
解:
#include<iostream>
using namespace std;
int main() {
double x;
cin >> x;
printf("%.2f", (x < 0 ? -x : x));
return 0;
}
奇偶ASCII值判断
题目描述:
任意输入一个字符,判断其ASCII是否是奇数,若是,输出YES,否则,输出NO。
例如,字符A的ASCII值是65,则输出YES,若输入字符B(ASCII值是66),则输出NO。
输入格式
- 输入一个字符。
输出格式
- 如果其ASCII值为奇数,则输出YES,否则,输出NO。
样例输入
A
样例输出
YES
解:
#include<iostream>
#include <iomanip>
using namespace std;
int main() {
int x = (int)cin.get();
cout << (x % 2 == 0 ? "NO" : "YES") << endl;
return 0;
}
整数大小比较
题目描述:
输入两个整数,比较它们的大小。
输入格式
- 一行,包含两个整数x和y,中间用单个空格隔开。
0 <= x < 2^32, -2^31 <= y < 2^31。
输出格式
- 一个字符。
若x > y,输出 > ;
若x = y,输出 = ;
若x < y,输出 < 。
样例输入
1000 100
样例输出
>
解:
#include<iostream>
using namespace std;
int main() {
long long a, b;
cin >> a >> b;
cout << (a == b ? '=' : (a > b ? '>' : '<')) << endl;
return 0;
}
收集瓶盖赢大奖
题目描述:
某饮料公司最近推出了一个“收集瓶盖赢大奖”的活动:如果你拥有10个印有“幸运”、或20个印有“鼓励”的瓶盖,就可以兑换一个神秘大奖。
现分别给出你拥有的印有“幸运”和“鼓励”的瓶盖数,判断是否可以去兑换大奖。
输入格式
- 一行,包含两个整数,分别是印有“幸运”和“鼓励”的瓶盖数,用一个空格隔开。
输出格式
- 一行。若可以兑换大奖,输出1,否则输出0。
样例输入
11 19
样例输出
1
解:
#include<iostream>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
cout << (a > 10 || b > 20) << endl;
return 0;
}
判断一个数能否同时被3和5整除
题目描述:
判断一个数n能否同时被3和5整除。
输入格式
- 输入一行,包含一个整数n。(-1,000,000 < n < 1,000,000)
输出格式
- 输出一行,如果能同时被3和5整除输出YES,否则输出NO。
样例输入
15
样例输出
YES
解:
#include<iostream>
using namespace std;
int main() {
int x;
cin >> x;
cout << (x % 3 == 0 && x % 5 == 0 ? "YES" : "NO") << endl;
return 0;
}
判断能否被3、5、7整除
题目描述:
给定一个整数,判断它能否被3,5,7整除,并输出以下信息:
1、能同时被3,5,7整除(直接输出3 5 7,每个数中间一个空格);
2、只能被其中两个数整除(输出两个数,小的在前,大的在后。例如:3 5或者 3 7或者5 7,中间用空格分隔);
3、只能被其中一个数整除(输出这个除数);
4、不能被任何数整除,输出小写字符‘n’,不包括单引号。
输入格式
- 输入一行,包括一个整数。
输出格式
- 输出一行,按照描述要求给出整数被3,5,7整除的情况。
样例输入
105
样例输出
3 5 7
解:
#include<iostream>
using namespace std;
int main() {
int x;
cin >> x;
bool o = true;
for (int i = 3; i <= 7; i += 2) {
if (x%i == 0) {
cout << i << ' ';
o = false;
}
}
if (o) {
cout << 'n' << endl;
}
return 0;
}
有一门课不及格的学生
题目描述:
给出一名学生的语文和数学成绩,判断他是否恰好有一门课不及格(成绩小于60分)。
输入格式
- 一行,包含两个在0到100之间的整数,分别是该生的语文成绩和数学成绩。
输出格式
- 若该生恰好有一门课不及格,输出1;否则输出0。
样例输入
50 80
样例输出
1
解:
#include<iostream>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
bool i = a >= 60, o = b >= 60;
cout << !(i == o) << endl;
return 0;
}
星期判断机
题目描述:
刚学完switch语句,来试试身手吧!
输入一个数字06,输出对应的星期,比如输入0,输出Sunday,16分别是周一到周六
用英文输出哦!
如果不是0~6的数字,提示:input error!
输入格式
- 一个数字
输出格式
- 对应的星期
样例输入
6
样例输出
Saturday
解:
#include<iostream>
#include<string>
using namespace std;
int main() {
int x; cin >> x;
string y;
switch (x){
case 0: y = "Sunday";
break;
case 1: y = "Monday";
break;
case 2: y = "Tuesday";
break;
case 3: y = "Wednesday";
break;
case 4: y = "Thursday";
break;
case 5: y = "Friday";
break;
case 6: y = "Saturday";
break;
default: y = "input error!";
break;
}
cout << y << endl;
return 0;
}
模拟计算器
题目描述:
使用Switch语句编写一个模拟简单计算器的程序。依次输入两个整数和一个字符,并用空格隔开。如果该字 符是一个“+”,则打印和;如果该字符是一个“-”,则打印差;如果该字符是一个“*”,则打印积;如果该字符是“/”,则打印商;如果该字符是一个 “%”,则打印余数。打印结果后输出一个空行。
输入格式
- 一行,前面两个数,再一个运算符号。
输出格式
- 运算表达式的结果。
样例输入
3 4 +
样例输出
7
解:
#include<iostream>
using namespace std;
int main() {
int a, b;
char o;
cin >> a >> b >> o;
switch (o) {
case '+': cout << a + b << endl;
break;
case '-': cout << a - b << endl;
break;
case '*': cout << a * b << endl;
break;
case '/': cout << a / b << endl;
break;
case '%': cout << a % b << endl;
break;
}
return 0;
}
买笔
题目描述:
期末来临了,班长小Q决定将剩余班费x元钱,用于购买若干支钢笔奖励给一些学习好、表现好的同学。已知商店里有三种钢笔,它们的单价为6元、5元和4元。小Q想买尽量多的笔(鼓励尽量多的同学),同时他又不想有剩余钱。请您编一程序,帮小Q制订出一种买笔的方案。
输入格式
- 一个正整数x(剩余班费)。
输出格式
- 一行,依次为6元、5元和4元钱笔的数目,用一个空格隔开。
样例输入
10
样例输出
1 0 1
解:
#include<iostream>
using namespace std;
int main() {
float x1, x2, x3, y1, y2, y3;
cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;
double a, b, c;
a = pow(pow(x1 - x2, 2) + pow(y1 - y2, 2), 1.0 / 2);
b = pow(pow(x2 - x3, 2) + pow(y2 - y3, 2), 1.0 / 2);
c = pow(pow(x3 - x1, 2) + pow(y3 - y1, 2), 1.0 / 2);
double d = (a + b + c) / 2;
// 使用海伦公式
double y = pow(d*(d - a)*(d - b)*(d - c), 1.0 / 2);
printf("%.2f", y); // C风格输出
// cout << fixed << setprecision(2) << y << endl; // C++风格输出
return 0;
}
晶晶赴约会
题目描述:
晶晶的朋友贝贝约晶晶下周一起去看展览,但晶晶每周的1、3、5有课必须上课,请帮晶晶判断她能否接受贝贝的邀请,如果能输出YES;如果不能则输出NO。
输入格式
- 输入有一行,贝贝邀请晶晶去看展览的日期,用数字1到7表示从星期一到星期日。
输出格式
- 输出有一行,如果晶晶可以接受贝贝的邀请,输出YES,否则,输出NO。注意YES和NO都是大写字母!
样例输入
2
样例输出
YES
解:
#include<iostream>
using namespace std;
int main() {
int x;
cin >> x;
bool o = true;
for (int i = 1; i <= 5; i += 2) {
if (x == i) {
o = false;
}
}
cout << (o ? "YES" : "NO") << endl;
return 0;
}
骑车与走路
题目描述:
在北大校园里,没有自行车,上课办事会很不方便.但实际上,并非去办任何事情都是骑车快,因为骑车总要找车、开锁、停车、锁车等,这要耽误一些时间.假设找到自行车,开锁并车上自行车的时间为27秒;停车锁车的时间为23秒;步行每秒行走1.2米,骑车每秒行走3.0米。请判断走不同的距离去办事,是骑车快还是走路快。
输入格式
- 输入一行,包含一个整数,表示一次办事要行走的距离,单位为米。
输出格式
- 输出一行,如果骑车快,输出一行"Bike";如果走路快,输出一行"Walk";如果一样快,输出一行"All"。
样例输入
120
样例输出
Bike
解:
#include<iostream>
using namespace std;
int main() {
int x;
cin >> x;
float a = 27 + 23 + x * 3.0;
float b = x * 1.2;
cout << (a == b ? "All" : a > b ? "Bike" : "Walk") << endl;
return 0;
}
分段函数
题目描述:
编写程序,计算下列分段函数y=f(x)的值。
y=-x+2.5; 0 <= x < 5
y=2-1.5(x-3)(x-3); 5 <= x < 10
y=x/2-1.5; 10 <= x < 20
输入格式
- 一个浮点数N,0 <= N < 20
输出格式
- 输出N对应的分段函数值:f(N)。结果保留到小数点后三位。
样例输入
1.0
样例输出
1.500
解:
#include<iostream>
using namespace std;
int main() {
float x;
cin >> x;
if (x < 5) {
printf("%.3f", (-x + 2.5));
} else if (x < 10) {
printf("%.3f", (2 - 1.5 * (x - 3) * (x - 3)));
} else {
printf("%.3f", (x / 2 - 1.5));
}
return 0;
}
计算邮资
题目描述:
根据邮件的重量和用户是否选择加急计算邮费。计算规则:重量在1000克以内(包括1000克), 基本费8元。超过1000克的部分,每500克加收超重费4元,不足500克部分按500克计算;如果用户选择加急,多收5元。
输入格式
- 输入一行,包含整数和一个字符,以一个空格分开,分别表示重量(单位为克)和是否加急。如果字符是y,说明选择加急;如果字符是n,说明不加急。
输出格式
- 输出一行,包含一个整数,表示邮费。
样例输入
1200 y
样例输出
17
解:
#include<iostream>
using namespace std;
int main() {
int x, y = 8;
char o;
cin >> x >> o;
x -= 1000;
if (x > 0) {
int i = x / 500 + (x % 500 == 0 ? 0 : 1);
y += i * 4;
}
if (o == 'y') {
y += 5;
}
cout << y << endl;
return 0;
}
三角形判断
题目描述:
给定三个正整数,分别表示三条线段的长度,判断这三条线段能否构成一个三角形。
输入格式
- 输入共一行,包含三个正整数,分别表示三条线段的长度,数与数之间以一个空格分开。
输出格式
- 如果能构成三角形,则输出“yes” ,否则输出“no”。
样例输入
3 4 5
样例输出
yes
解:
#include<iostream>
using namespace std;
int main() {
int x[3];
cin >> x[0] >> x[1] >> x[2];
int o = 0;
for (int i = 0; i <= 3; i++) {
if (x[o] < x[i]) {
o = i;
}
}
bool y = x[o] < x[0] + x[1] + x[2] - x[o];
cout << (y ? "yes" : "no") << endl;
return 0;
}
判断闰年
题目描述:
判断某年是否是闰年。如果公元a年是闰年输出Y,否则输出N。
输入格式
- 输入只有一行,包含一个整数a(0 < a < 3000)。
输出格式
- 一行,如果公元a年是闰年输出Y,否则输出N。
样例输入
2006
样例输出
N
解:
#include<iostream>
using namespace std;
int main() {
int x;
cin >> x;
bool y = (x % 4 == 0 && x % 100 != 0) || x % 400 == 0;
cout << (y ? 'Y' : 'N') << endl;
return 0;
}
点和正方形的关系
题目描述:
有一个正方形,四个角的坐标(x,y)分别是(1,-1),(1,1),(-1,-1),(-1,1),x是横轴,y是纵轴。写一个程序,判断一个给定的点是否在这个正方形内(包括正方形边界)。
输入格式
- 输入一行,包括两个整数x、y,以一个空格分开,表示坐标(x,y)。
输出格式
- 输出一行,如果点在正方形内,则输出yes,否则输出no。
样例输入
1 1
样例输出
yes
解:
#include<iostream>
using namespace std;
int main() {
int x[2];
cin >> x[0] >> x[1];
bool y = x[0] <= 1 && x[0] >= -1 && x[1] <= 1 && x[1] >= -1;
cout << (y ? "yes" : "no") << endl;
return 0;
}
C语言考试练习题_一元二次方程
题目描述:
解一元二次方程ax^2+bx+c=0的解。
输入格式
- a,b,c的值。
输出格式
- 输出两个解,按照大小顺序输出,一个解时需要打印两次,不用考虑无解问题,保留两位小数
样例输入
1 5 -2
样例输出
0.37 -5.37
解:
#include<iostream>
#include<cmath>
using namespace std;
int main() {
float a, b, c, x1, x2, discriminant;
cin >> a >> b >> c;
discriminant = b * b - 4 * a * c;
x1 = (-b + sqrt(discriminant)) / (2 * a); // sqrt()是cmath头文件中的开方函数
x2 = (-b - sqrt(discriminant)) / (2 * a); // Visual Studio 2017中已经默认导入
if (x1 < x2) {
float o = x1;
x1 = x2, x2 = o;
}
printf("%.2f %.2f", x1, x2);
return 0;
}