C++primer第五版 条件运算符练习

任务如下:

1. 编写一段程序,使用条件运算符从vector<int>中找到哪些元素的值是奇数,然后将这些奇数翻倍
2. 将成绩分为四档:fail(<60),low pass(60~75),pass(76~90)high pass(91~100),分别用条件运算符和if语句实现

附上第一个任务的代码:

// primer_4_7.cpp : Defines the entry point for the application.
// 条件运算符练习
//1. 编写一段程序,使用条件运算符从vector<int>中找到哪些元素的值是奇数,然后将这些奇数翻倍
//2. 将成绩分为四档:fail(<60),low pass(60~75),pass(76~90)high pass(91~100),分别用条件运算符和if语句实现

#include "stdafx.h"
#include <iostream>
#include <vector>
#include<string>
using namespace std;

int main()
{
	vector<int> number; //定义一个空容器number
	int a; //定义一个int型变量用于接收输入
	cout << "input the numbers:(q to over)" << endl;
	while(cin >> a)  //输入数据
		number.push_back(a);
	for(int i=0;i<number.size();i++)
		number[i]=(number[i]%2==0)?number[i]:(number[i]*2);  //偶数不变,奇数翻倍
	for(int j=0;j<number.size();j++)  //输出结果
		cout << number[j] << " ";
	cout << endl;
	system("pause");
	return 0;
}

首先定义了一个存放int型数据类型的空容器number,没有定义其大小,它是根据输入数据的个数来不断扩大的。这就比数组好用很多,数组你首先要定义它的大小,或者至少要用户输入数据个数再来定义数组的大小,都不如vector容器方便。然后用下标的方法遍历容器中的每个元素,同时用条件运算符判断是否为奇数并作相应处理,最后将处理后的数据打印出来,效果如下:

第二个任务之用条件运算符实现的代码:

// primer_4_7.cpp : Defines the entry point for the application.
// 条件运算符练习
//1. 编写一段程序,使用条件运算符从vector<int>中找到哪些元素的值是奇数,然后将这些奇数翻倍
//2. 将成绩分为四档:fail(<60),low pass(60~75),pass(76~90)high pass(91~100),分别用条件运算符和if语句实现

#include "stdafx.h"
#include <iostream>
#include <vector>
#include<string>
using namespace std;

int main()
{
	vector<int> grade; //定义一个int型容器grade来接收成绩
	vector<string> level;  //定义一个string型容器level来保存等级
	int a; //定义一个int型变量用于接收输入
	cout << "input the grade:(q to over)" << endl;
	while(cin >> a)  //输入数据
		grade.push_back(a);
	for(int i=0;i<grade.size();i++)
	{
		string temp=grade[i]>90 ? "high pass" :(grade[i]>75?"pass":(grade[i]>60?"low pass":"fail")); //判断档位
		level.push_back(temp);  //将档位对应添加进容器
	}
	for(int j=0;j<grade.size();j++)  //输出结果
		cout << grade[j] << ": " << level[j] << endl;
	cout << endl;
	system("pause");
	return 0;
}

首先定义了两个容器,一个是int型容器,用来存放成绩,一个是string型容器,用来存放等级,它们的元素是一一对应的。然后让用户输入成绩,grade容器接收完成后,再来逐一判断。可以看到,这里的条件表达式有些复杂,因为在条件运算符的内部嵌套了另外的条件运算符。但是仔细分析也容易理解,先判断成绩是否大于90(grade[i]>90 ),如果是,则将“high pass”赋给temp变量,如果不是,则继续第一个冒号后的操作。也就是说继续判断成绩是否大于75(小于等于90的情况下)(grade[i]>75),如果是,则将“pass”赋给temp变量,如果不是,则继续第二个冒号后的操作。即继续判断成绩是否大于60(小于等于75的情况下),如果是,则将“low pass”赋给temp变量,如果不是,则将“fail”赋给temp变量。因此每一个成绩都能被判入有一个对应的等级。最后再将处理结果输出。效果如下:

第二个任务之用if语句的代码:

用if语句实现和用条件运算符实现在思路上大体相同,只是判断的形式不同而已,代码如下:

// primer_4_7.cpp : Defines the entry point for the application.
// 条件运算符练习
//1. 编写一段程序,使用条件运算符从vector<int>中找到哪些元素的值是奇数,然后将这些奇数翻倍
//2. 将成绩分为四档:fail(<60),low pass(60~75),pass(76~90)high pass(91~100),分别用条件运算符和if语句实现

#include "stdafx.h"
#include <iostream>
#include <vector>
#include<string>
using namespace std;

int main()
{
	vector<int> grade; //定义一个int型容器grade来接收成绩
	vector<string> level;  //定义一个string型容器level来保存等级
	int a; //定义一个int型变量用于接收输入
	cout << "input the grade:(q to over)" << endl;
	while(cin >> a)  //输入数据
		grade.push_back(a);
	string temp;
	for(int i=0;i<grade.size();i++)
	{
		if(grade[i]<60)
			temp="fail";
		else if(grade[i]<76)
			temp="low pass";
		else if(grade[i]<91)
			temp="pass";
		else
			temp="high pass";
		level.push_back(temp);  //将档位对应添加进容器
	}
	for(int j=0;j<grade.size();j++)  //输出结果
		cout << grade[j] << ": " << level[j] << endl;
	cout << endl;
	system("pause");
	return 0;
}

该代码的运行效果和上一种一模一样,在此就不重复粘贴了。

可以看出,if语句比条件运算符在理解上更直观,而条件运算符比if语句更简洁,两者各有所长,可根据自己习惯选择一种进行编程。

猜你喜欢

转载自blog.csdn.net/elma_tww/article/details/82355459
今日推荐