任务如下:
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语句更简洁,两者各有所长,可根据自己习惯选择一种进行编程。