1.编写一个完整的程序,实现功能:向用户提问“现在正在下雨吗?”,提示用户输入Y或N。若输入为Y,显示“现在正在下雨。”;若输入为N,显示“现在没有下雨”;否则继续提问“现在正在下雨吗?”

#include<iostream>
#include<string>
using namespace std;
int main() {
string input; //用户输入的是一个字符串,要用cin接收一行的输入
while () { //永远执行此循环
cout << "现在正在下雨吗?";
getline(cin, input);
if (input == "Y") {
cout << "现在正在下雨" << endl;
break; //结束循环
}
else if (input == "N") {
cout << "现在没有下雨" << endl;
break; //结束循环
}
else {
continue;
}
}
system("pause");
return ;
}

  2. 编写一个完整的程序,运行时向用户提问“你考试考了多少分?(0~100)”,接收输入后判断其等级显示出来,规则为90到100优,80到90良,60到80中,0到60差。

#include<iostream>
using namespace std;
int main(){
float number;
while(){
// 第一次输入。
cout << "你考试考了多少分?(0~100):";
cin >> number;
// 检测是否输入的是符合要求的数字
while(cin.fail()){
cout<<"你输入的不是数字,请重新输入!"<<endl;
cin.clear();
cin.sync();
cout<<"你考试考了多少分?(0~100):";
cin >> number;
}
// 当输入的是数字后,进入判断
if(number >= && number <= ){
cout << "你的等级是优" << endl;
}
else if(number>= && number<){
cout << "你的等级是良" << endl;
}
else if(number>= && number<){
cout << "你的等级是中" << endl;
}
else if(number>= && number<){
cout << "你的等级是差" << endl;
}
else{
cout << "你输入的成绩不在判断等级的范围内,请重新输入!" << endl;
}
}
return ;
}

  3. 实现一个简单的菜单程序,运行时显示“Menu: A(dd) D(elete) S(ort) Q(uit),Select one:”,提示用户输入。A表示增加,D表示删除,S表示排序,Q表示退出。输入为A、D、S时分别提示“数据已经增加、删除、排序。”,输入为Q时程序结束。
      (1)要求用if…else语句进行判断,用break,continue控制程序流程。
      (2)要求使用switch语句。

#include<iostream>
#include<string>
using namespace std;
/*
利用if...else语句进行判断,用break,continue控制流程。
*/
int main() {
string input;
while () {
cout << "Menu: A(dd) D(elete) S(ort) Q(uit),Select one:";
getline(cin, input);
if (input == "A" || input == "a") {
cout << "数据已经增加!" << endl;
continue;
}
else if (input == "D" || input == "d") {
cout << "数据已经删除!" << endl;
continue;
}
else if (input == "S" || input == "s") {
cout << "数据已经排序!" << endl;
continue;
}
else if (input == "Q" || input == "q") {
break;
}
else {
cout << "你输入的参数有误,请重新输入!" << endl;
continue;
}
}
}
/*
利用switch语句进行编写
*/
//int main() {
// char input;
// while (1) {
// cout << "Menu: A(dd) D(elete) S(ort) Q(uit),Select one:";
// cin >> input;
// switch (input) {
// case 'A':
// cout << "数据已经增加!" << endl;
// continue;
// case 'D':
// cout << "数据已经删除!" << endl;
// continue;
// case 'S':
// cout << "数据已经排序!" << endl;
// continue;
// case 'Q':
// break;
// default:
// cout<<"你输入的参数有误,请重新输入!" << endl;
// continue;
// }
// }
// return 0;
//}

  4. 输入一个两位整数,要求将该数逆序输出。例如,输入68,输出86。

#include<iostream>
using namespace std;
/*
上机习题4
输入一个两位整数,要求将该数逆序输出。
*/
int main() {
int input; // 定义要输入的整数
int digit, unit; // 定义十位数和个位数
// 为了让程序可以重复输入输出,使用循环
while () {
cout << "请输入一个两位整数(10-99):";
cin >> input;
// 绝对值超过100的数字不符合题目要求
if (input >= || input <= -) {
cout << "你输入的数字不是两位整数,请重新输入" << endl;
// 清除cin流的缓存,方便下次输入不会有问题。
cin.clear();
cin.sync();
continue;
}
else {
// input整除10就能取出十位数
digit = input / ;
// input减去十位数乘以10就是个位数
unit = input - digit * ;
// 重新组合输出数字
cout << unit * + digit << endl;
}
}
return ;
}
/*
输出测试:
-568 "你输入的数字不是两位整数,请重新输入"
-89 -98
89 98
7 70
-6 -60
589 "你输入的数字不是两位整数,请重新输入"
可以循环输入,每次都会有提示:"请输入一个两位整数(10-99):"
*/

  5. 求表达式的值

#include<iostream>
using namespace std;
/*
上机习题5
*/
int main() {
float x1 = 2.5;
int a1 = ;
float y1 = 4.7;
cout << "x1+a1%3*(int)(x1+y1)%2/4 ="<< x1 + a1 % * (int)(x1 + y1) % / << endl;
// a1%3=1,(int)(x1+y1)=7
// 1*7%2/4=7%2/4=1/4=0
// 2.5+0=2.5
int a2 = ;
int b2 = ;
float x2 = 3.5;
float y2 = 2.5;
cout << "(float)(a+b)/2+(int)x%(int)y =" << (float)(a2 + b2) / + (int)x2 % (int)y2 << endl;
// (float)(a2+b2)=5.0,(int)x2=3,(int)y2=2
// 5.0/2+3%2=2.5+1=3.5
int a3 = ;
int n3 = ;
cout << "a%=(n%=2) =" << (a3 %= (n3 %= )) << endl;
// n3=n3%2=5%2=1
// a3=a3%1=12%1=0
int a4 = ;
cout << "a+=a-=a*=a =" << (a4 += a4 -= a4 *= a4) << endl;
// a4=a4*a4=12*12=144
// a4=a4-a4=144-144=0
// a4=a4+a4=0+0=0
system("pause");
return ;
}

  6. 编写一个完整的程序,运行时向用户提问“你考试考了多少分?(0~100)”,接收输入后判断其等级显示出来,规则为90到100优,80到90良,60到80中,0到60差。

#include<iostream>
using namespace std;
/*
用if语句实现
*/
#include<iostream>
using namespace std;
int main(){
float number;
while(){
// 第一次输入。
cout << "你考试考了多少分?(0~100):";
cin >> number;
// 检测是否输入的是符合要求的数字
while(cin.fail()){
cout<<"你输入的不是数字,请重新输入!"<<endl;
cin.clear();
cin.sync();
cout<<"你考试考了多少分?(0~100):";
cin >> number;
}
// 当输入的是数字后,进入判断
if(number >= && number <= ){
cout << "你的等级是优" << endl;
}
else if(number>= && number<){
cout << "你的等级是良" << endl;
}
else if(number>= && number<){
cout << "你的等级是中" << endl;
}
else if(number>= && number<){
cout << "你的等级是差" << endl;
}
else{
cout << "你输入的成绩不在判断等级的范围内,请重新输入!" << endl;
}
}
return ;
}
/*
用switch语句实现
*/
int main(){
int number;
cout << "你考试考了多少分?(0~100):";
cin >> number;
switch(number/){
case :
cout<<"你的等级为优"<<endl;
break;
case :
cout<<"你的等级为优"<<endl;
break;
case :
cout<<"你的等级为良"<<endl;
break;
case :
cout<<"你的等级为中"<<endl;
break;
case :
cout<<"你的等级为中"<<endl;
break;
default:
cout<<"你的等级为差"<<endl;
break;
}
system("pause");
return ;
}

  7. 实现一个简单的菜单程序,运行时显示“Menu: A(dd) D(elete) S(ort) Q(uit),Select one:”,提示用户输入。A表示增加,D表示删除,S表示排序,Q表示退出。输入为A、D、S时分别提示“数据已经增加、删除、排序。”,输入为Q时程序结束。
      (1)要求用if…else语句进行判断,用break,continue控制程序流程。
      (2)要求使用switch语句。

#include<iostream>
#include<string>
using namespace std;
/*
利用if...else语句进行判断,用break,continue控制流程。
*/
int main() {
string input;
while () {
cout << "Menu: A(dd) D(elete) S(ort) Q(uit),Select one:";
getline(cin, input);
if (input == "A" || input == "a") {
cout << "数据已经增加!" << endl;
continue;
}
else if (input == "D" || input == "d") {
cout << "数据已经删除!" << endl;
continue;
}
else if (input == "S" || input == "s") {
cout << "数据已经排序!" << endl;
continue;
}
else if (input == "Q" || input == "q") {
break;
}
else {
cout << "你输入的参数有误,请重新输入!" << endl;
continue;
}
}
}
/*
利用switch语句进行编写
*/
int main() {
char input;
while () {
cout << "Menu: A(dd) D(elete) S(ort) Q(uit),Select one:";
cin >> input;
switch (input) {
case 'A':
cout << "数据已经增加!" << endl;
continue;
case 'D':
cout << "数据已经删除!" << endl;
continue;
case 'S':
cout << "数据已经排序!" << endl;
continue;
case 'Q':
break;
default:
cout<<"你输入的参数有误,请重新输入!" << endl;
continue;
}
}
return ;
}

  8. 用穷举法找出1~100间的质数并显示出来,分别使用while,do……while,for循环语句实现。

#include<iostream>
using namespace std;
/*
用for循环实现求质数
*/
int main() {
cout<<"2是质数"<<endl;
// 待遍历的数,只需要遍历3开始所有的奇数
for (int i = ; i <= ; i=i+) {
// 除数
for (int j = ; j <= i; j++) {
// 遍历条件
if (i%j == ) {
break;
}
// 超过i/2后不需要遍历,余数肯定不为0
if (j > i / ) {
cout << i << "是质数" << endl;
break;
}
}
}
system("pause");
return ;
}
/*
用while循环实现求质数
*/
int main(){
cout<<"2是质数"<<endl;
int i = ;
// 遍历奇数
while(i <= ){
// 记录整数成功的次数
int flag = ;
int j = ;
// 只需要遍历i/2前面的部分就可以
while(j<=i/){
// 整除成功一次就记录一次
if(i%j==){
flag++;
break;
}
j++;
}
// 只要flag又一次记录就不是质数
if(flag==){
cout<<i<<"是质数"<<endl;
}
// 下一个奇数
i=i+;
}
system("pause");
return ;
}
/*
用do while循环实现求质数
*/
int main(){
cout<<"2是质数"<<endl;
int i = ;
do{
int j = ;
int flag = ;
do{
if(i%j==){
flag++;
break;
}
j++;
}while(j<=i/);
if(flag==){
cout << i << "是质数" << endl;
}
i=i+;
}while(i<=);
system("pause");
return ;
}

  9. 在程序中定义一个int型变量,赋予1~100的值,要求用户猜这个数,比较两个数的大小,把结果提示给用户,直到猜对位置,分别使用while和do……while来实现。

/*
用while实现
*/
#include<iostream>
using namespace std;
int main() {
int n,m;
cout << "请出题者输入一个数(1~100): ";
cin >> n;
cout << "请猜题者输入数字(1~100):";
while (!cin.fail()) {
cin.clear();
cin.sync();
cin >> m;
if (m < n) {
cout << "输入数字比既定数字小,请重新输入:";
continue;
}
else if (m > n) {
cout << "输入数字比既定数字大,请重新输入:";
continue;
}
else {
cout << "恭喜你猜对了数字,记得找铎神领取红包!" << endl;
break;
}
}
system("pause");
return ;
}
/*
用do……while实现
*/
#include<iostream>
using namespace std;
int main() {
int n, m;
cout << "请出题者输入一个数(1~100): ";
cin >> n;
cout << "请猜题者输入数字(1~100):";
do{
cin.clear();
cin.sync();
cin >> m;
if (m < n) {
cout << "输入数字比既定数字小,请重新输入:";
continue;
}
else if (m > n) {
cout << "输入数字比既定数字大,请重新输入:";
continue;
}
else {
cout << "恭喜你猜对了数字,记得找铎神领取红包!" << endl;
break;
}
} while (!cin.fail());
// 让结果显示的代码,不要马上闪退结束。
getchar();
getchar();
return ;
}

  10. 输出九九乘法表

#include<iostream>
#include<iomanip> // 为了引入setw()控制输出宽度
using namespace std;
int main() {
for (int i = ; i <= ; i++) {
for (int j = ; j <= ; j++) {
// setw(2)为了输出整齐
cout << i << "*" << j << "=" << setw() << i*j << " ";
}
// 输出完一列以后就可以换行
cout << endl;
}
system("pause");
return ;
}

  11. 完成函数,参数为两个unsigned short int型数,返回值为第一个参数除以第二个参数的结果,数据类型为short int;如果第二个参数为0,则返回值为-1,在主程序中实现输入输出。

#include<iostream>
using namespace std;
short int transfun(unsigned short int n1 , unsigned short int n2);
int main() {
unsigned short int n1, n2;
cout << "请输入第一个数:";
cin >> n1;
cout << "请输入第二个数:";
cin >> n2;
cout<<"返回值是"<<transfun(n1, n2)<<endl;
system("pause");
return ;
}
short int transfun(unsigned short int n1, unsigned short int n2) {
if (n2 == ) {
return -;
}
else {
return n1 / n2;
}
}

  12. 编写函数把华氏温度转成摄氏温度

#include<iostream>
using namespace std;
// 摄氏度转华氏度的函数的声明
void CelTransFah(double Fah);
// 主函数
int main() {
double Fah;
while (!cin.fail()) {
cin.clear();
cin.sync();
cout << "请输入一个华氏温度:";
cin >> Fah;
CelTransFah(Fah);
}
system("pause");
return ;
}
// 函数方法
void CelTransFah(double Fah) {
double Cel;
Cel = (Fah - 32.0)*5.0 / 9.0;
cout << "相应的摄氏温度为:" << Cel << "°C" << endl;
}

  13. 体会引用的用法

#include<iostream>
using namespace std;
int main() {
int intOne;
int &rSomeRef = intOne;
intOne = ;
cout << "intOne:\t" << intOne << endl;
// 输出"intOne: 5"
cout << "rSomeRef:\t" << rSomeRef << endl;
// 输出"rSomeRef:5"
int intTwo = ;
rSomeRef = intTwo; // 通过改变引用来改变原来的变量
cout << "\nintOne:\t" << intOne << endl;
// 输出换行,然后输出"intOne:8"
cout << "intTwo:\t" << intTwo << endl;
// 输出"intTwo: 8"
cout << "rSomeRef:\t" << rSomeRef << endl;
// 输出"rSomeRef:8"
system("pause");
return ;
}

  14. 函数原型中的参数名与函数定义中的参数名以及函数调用中的参数名必须一致吗?

/*
从该例子可以看到函数原型的参数名字。
函数定义中的参数名字,函数调用的参数名字
可以完全不一样。
*/
#include<iostream>
using namespace std;
void test(int a);
int main() {
int c = ;
test(c);
system("pause");
return ;
}
void test(int b) {
cout << b << endl;
}

  15. 调用被重载的函数时,通过什么来区分被调用的是哪个函数?

/*
从实验结果看出,是根据实参来进行匹配重载的,
优先会考虑最好的匹配。
*/
#include<iostream>
#include<string>
using namespace std;
void test(int a) {
cout << a << endl;
}
void test(double b) {
cout << b << endl;
}
void test(string b) {
cout << b << endl;
}
int main() {
test();
test(6.01); // 这里输入6.0000后面不论多少个0都会被更优的6输出。
test("六点零");
system("pause");
return ;
}

  16. 完成函数,参数为两个unsigned short int型数,返回值为第一个参数除以第二个参数的结果,数据类型为short int;如果第二个参数为0,则返回值为-1,在主程序中实现输入输出。

#include<iostream>
using namespace std;
short int transfun(unsigned short int n1 , unsigned short int n2);
int main() {
unsigned short int n1, n2;
cout << "请输入第一个数:";
cin >> n1;
cout << "请输入第二个数:";
cin >> n2;
cout<<"返回值是"<<transfun(n1, n2)<<endl;
system("pause");
return ;
}
short int transfun(unsigned short int n1, unsigned short int n2) {
if (n2 == ) {
return -;
}
else {
return n1 / n2;
}
}

  17. 编写函数把华氏温度转化为相应的摄氏温度,公式为如下,在主程序中提示用户输入一个华氏温度,转化后输出相应的摄氏温度。$$C=\frac{5}{9}*(F-32)$$

#include<iostream>
using namespace std;
// 摄氏度转华氏度的函数的声明
void CelTransFah(double Fah);
// 主函数
int main() {
double Fah;
while (!cin.fail()) {
cin.clear();
cin.sync();
cout << "请输入一个华氏温度:";
cin >> Fah;
CelTransFah(Fah);
}
system("pause");
return ;
}
// 函数方法
void CelTransFah(double Fah) {
double Cel;
Cel = (Fah - 32.0)*5.0 / 9.0;
cout << "相应的摄氏温度为:" << Cel << "°C" << endl;
}

  18. 编写函数判别一个数是否是质数,在主程序中实现输入输出。

#include<iostream>
using namespace std;
// 函数的声明
bool isprime(int prime);
int main() {
int test;
cout << "请输入一个整数:";
cin >> test;
if (isprime(test)) {
cout << test << "是质数" << endl;
}
else {
cout << test << "不是质数" << endl;
}
system("pause");
return ;
}
bool isprime(int prime) {
if (prime == ) {
return true;
}
if (prime % == ) {
return false;
}
else {
for (int temp = ; temp <= prime / ; temp = temp + ) {
if (prime%temp == ) {
cout << prime << "=" << temp << "*" << prime / temp << endl;
return false;
}
}
}
return true;
}

  19. 编写函数求两个整数的最大公约数和最小公倍数。

#include<iostream>
using namespace std;
int gcd(int n1, int n2);
int lcm(int n1, int n2);
int main() {
int n1, n2;
cout << "请输入第一个整数:";
cin >> n1;
cout << "请输入第二个整数:";
cin >> n2;
int N1 = gcd(n1, n2);
int N2 = lcm(n1, n2);
cout << n1 << "和" << n2 << "的最大公约数是" << N1 << endl;
cout << n1 << "和" << n2 << "的最小公倍数是" << N2 << endl;
system("pause");
return ;
}
// 要巧妙利用值传递,既达到交换的目的,又能不影响原来的输入输出。
void transnumber(int n1, int n2) {
int temp;
if (n1 < n2) {
temp = n1;
n1 = n2;
n2 = temp;
}
}
int gcd(int n1, int n2) {
// 交换两数确认前者比后者大,利用形参继续完成事情。
transnumber(n1, n2);
int r1 = n1%n2;
if (r1 == ) {
return n2;
}
else {
gcd(n2, r1);
}
}
int lcm(int n1, int n2) {
int temp = gcd(n1, n2);
return n1*n2 / temp;
}

  20. 在主程序中提示输入整数n,编写函数用递归的方法求1到n的和。

#include<iostream>
using namespace std;
int integersum(int n) {
if (n>) {
return n + integersum(n - );
}
else {
return ;
}
}
int main() {
cout << integersum() << endl;
system("pause");
return ;
}

  21. 用递归的方法编写函数求斐波那契数列,公式为$$F_n = F_{n-1} + F_{n-2} (n>2)$$ $$F_0 = F_1 = 1$$

/*
为了观察递归调用的过程,特意写的比较麻烦,使用了一些输出
方便观察递归进行到哪一步。
*/
#include<iostream>
using namespace std;
int fibonacci(int n) {
if (n == ) {
cout << "使用了n=1" << endl;
return ;
}
else if (n == ) {
cout << "使用了n=2" << endl;
return ;
}
else {
cout <<"此时n的值是"<< n << ",这回调用的是fibonacci的第" << n - << "项" << endl;
return fibonacci(n - ) + fibonacci(n - );
}
}
int main() {
int n;
while () {
cin.sync();
cin.clear();
cout << "请输入想求的Fibonacci的项数:";
cin >> n;
cout << "Fibonacci第" << n << "项是:" << fibonacci(n) << endl;
}
system("pause");
return ;
}
/*
以n=6为例,输出结果如下:
请输入想求的Fibonacci的项数:6
此时n的值是6,这回调用的是fibonacci的第5项
此时n的值是5,这回调用的是fibonacci的第4项
此时n的值是4,这回调用的是fibonacci的第3项
此时n的值是3,这回调用的是fibonacci的第2项
使用了n=2
使用了n=1
使用了n=2
此时n的值是3,这回调用的是fibonacci的第2项
使用了n=2
使用了n=1
此时n的值是4,这回调用的是fibonacci的第3项
此时n的值是3,这回调用的是fibonacci的第2项
使用了n=2
使用了n=1
使用了n=2
Fibonacci第6项是:8 这是个单线程的过程,为了求解两个fibonacci的递归return,
(1) 先求解第一个,一直求到n=2
(2) 此时发现两个return都可以求了,就进入n=1求出来,然后又返回到n=2
(3) 求解第二个,重复(1)(2),最后返回到n=2
*/

  22. 用递归的方法编写函数求n阶勒让德多项式的值,在主程序中实现输入输出,递归公式为:$$P_n(x)=\frac{(2n-1)P_{n-1}(x)-(n-1)P_{n-2}(x)}{n}$$ $$P_{0}(x)=1;P_{1}(x)=x$$

#include<iostream>
using namespace std;
double legendre(int n,double x) {
if (n == ) {
return ;
}
else if (n == ) {
return x;
}
else {
return ((*n-)*x*legendre(n-,x)-(n-)*legendre(n-,x))/n;
}
}
int main() {
int n;
double x;
while () {
cin.sync();
cin.clear();
cout << "请输入想求的Legendre的阶数:";
cin >> n;
cout << "请输入想求的x值:";
cin >> x;
cout << "Legendre" << n << "阶,取x="<< x <<"的时候的值是:" << legendre(n,x) << endl;
}
system("pause");
return ;
}

  23. 编写递归函数getPower计算x^y,在同一个程序中针对整型和实型实现两个重载的函数。

#include<iostream>
using namespace std;
int getPower(int x, int y) {
if (y == ) {
return ;
}
else if (y > ) {
return x*getPower(x, y - );
}
else {
return x*getPower(x, y + );
}
}
double getPower(double x, int y) {
if (y == ) {
return ;
}
else if (y > ) {
return x*getPower(x, y - );
}
else {
return x*getPower(x, y + );
}
}
int main() {
int a,m;
double b;
while () {
cin.sync();
cin.clear();
cout << "请输入一个整数作为底数:";
cin >> a;
cout << "请输入一个实数作为另一个底数:";
cin >> b;
cout << "请输入一个整数作为指数:";
cin >> m;
cout << a << "的" << m << "次方是" << getPower(a, m) << endl;
cout << b << "的" << m << "次方是" << getPower(b, m) << endl;
}
system("pause");
return ;
}

  24. 输入一个两整数,要求将该数逆序输出。例如,输入68,输出86。

#include<iostream>
using namespace std;
/*
1.输入一个两位整数,要求将该数逆序输出。
*/
int main() {
int input; // 定义要输入的整数
int digit, unit; // 定义十位数和个位数
// 为了让程序可以重复输入输出,使用循环
while () {
cout << "请输入一个两位整数(10-99):";
cin >> input;
// 绝对值超过100的数字不符合题目要求
if (input >= || input <= -) {
cout << "你输入的数字不是两位整数,请重新输入" << endl;
// 清除cin流的缓存,方便下次输入不会有问题。
cin.clear();
cin.sync();
continue;
}
else {
// input整除10就能取出十位数
digit = input / ;
// input减去十位数乘以10就是个位数
unit = input - digit * ;
// 重新组合输出数字
cout << unit * + digit << endl;
}
}
return ;
}
/*
输出测试:
-568 "你输入的数字不是两位整数,请重新输入"
-89 -98
89 98
7 70
-6 -60
589 "你输入的数字不是两位整数,请重新输入"
可以循环输入,每次都会有提示:"请输入一个两位整数(10-99):"
*/

  25. 求$\pi$,公式如下:$$\frac{\pi}{4} \approx 1 - \frac{1}{3} + \frac{1}{5} - \frac{1}{7} + ……  = \sum_{n=1}^{\infty}(-1)^{n-1} \frac{1}{2n-1}$$

#include<iostream>
#include<ctime> // 引入clock_t类
#include<iomanip> // 显示小数点的位数用的头文件
using namespace std;
double const EPS = 1e-;
int main() {
clock_t start, finish; // 引入记录程序运行时间的对象
start = clock(); // start对象执行clock()方法,开始计时
double sum = ;
double k = ;
int i = ;
int flag = ;
while (k / i >= EPS) {
if (i % == ) {
sum = sum + k / i;
}
else {
sum = sum - k / i;
}
i = i + ;
flag++;
}
double Sum = * sum;
cout << "π的值是:" << setprecision()<< Sum << endl;
cout << EPS << "精度下共执行了" << flag << "次循环" << endl;
finish = clock(); // finish对象执行clock()方法,结束计时。
cout << "花费的时间是:"<< finish - start << "/" << CLOCKS_PER_SEC << "(s)" << endl;
system("pause");
return ;
}
/*
实现的代码不难写,但是为了效率的问题,对EPS测试了几个常数,并记录了实验结果。
π的值是:3.141572654
1e-05精度下共执行了50000次循环
花费的时间是:2/1000(s)
π的值是:3.141590654
1e-06精度下共执行了500000次循环
花费的时间是:9/1000(s)
π的值是:3.141592454
1e-07精度下共执行了5000000次循环
花费的时间是:76/1000(s)
π的值是:3.141592634
1e-08精度下共执行了50000000次循环
花费的时间是:742/1000(s)
π的值是:3.141592652
1e-09精度下共执行了500000000次循环
花费的时间是:7392/1000(s)
到了1e-10时,循环数又翻10倍,花费的时间也会是10倍,70s的等待已经是到了不能忍受的范围。
因此纵观以上取得精度以及准确性,可以取1e-08或者1e-09作为近似值。
*/

  26. 编写一个判断素数的函数,在主函数中输入一个整数n,调用判素数的函数,在主函数中输出判断结果。

#include<iostream>
using namespace std;
// 函数的声明
bool isprime(int prime);
int main() {
int test;
cout << "请输入一个整数:";
cin >> test;
if (isprime(test)) {
cout << test << "是质数" << endl;
}
else {
cout << test << "不是质数" << endl;
}
system("pause");
return ;
}
bool isprime(int prime) {
if (prime == ) {
return true;
}
if (prime % == ) {
return false;
}
else {
for (int temp = ; temp <= prime / ; temp = temp + ) {
if (prime%temp == ) {
cout << prime << "=" << temp << "*" << prime / temp << endl;
return false;
}
}
}
return true;
}

  27. 编写一个判润年的函数,在主函数中输入一个年份year,调用判润年的函数,在主函数中输出判断结果。

#include<iostream>
using namespace std;
bool isleapyear(int year) {
if (year % != ) {
return false;
}
else if (year % == ) {
if (year % == ) {
return true;
}
else {
return false;
}
}
else {
return true;
}
}
int main() {
int year;
while (!cin.fail()) {
cin.clear();
cin.sync();
cout << "请输入一个年份:";
cin >> year;
if (isleapyear(year)) {
cout << year << "年是闰年!可以找铎神领取红包!" << endl;
}
else {
cout << year << "年不是闰年,但是也可以找铎神领取红包!" << endl;
}
}
cout << "你输入的不是年份,请重新运行程序!" << endl;
system("pause");
return ;
}

  28. 通过键盘输入一个实数,要求按四舍五入的规则保留两位小数并输出。

#include<iostream>
#include<cmath>
using namespace std;
/*
不论输入的是多少位小数,我们需要的是保留两位小数,所以需要接触到的关键点是小数点后第三位。
四舍五入版
*/
double rounding(double number) {
int integer = static_cast<int>(number); // 取输入实数的整数部分
double knumber = number * ; //将需要判断第三位小数点移动到第一位。
int kinteger = static_cast<int>(knumber); // 取得增大100倍以后的整数,到时是输出的主体
double dnumber = knumber-kinteger; // 取剩余的小数部分
if (abs(dnumber) < 0.5) {
return kinteger / 100.0;
}
else {
if (dnumber > ) {
return kinteger / 100.0 + 0.01;
}
else {
return kinteger / 100.0 - 0.01;
}
}
}
int main() {
double number;
double result;
while (!cin.fail()) {
cin.clear();
cin.sync();
cout << "请输入一个实数:";
cin >> number;
result = rounding(number);
cout << number << "经过四舍五入以后的结果是" << result << endl;
}
system("pause");
return ;
}
#include<iostream>
#include<cmath>
using namespace std;
/*
不论输入的是多少位小数,我们需要的是保留两位小数,所以需要接触到的关键点是小数点后第三位。
四舍六入五成双版(常见于分析化学有效位数取舍)。
规则:
对于位数很多的近似数,当有效位数确定后,其后面多余的数字应该舍去,只保留有效数字最末一位,这种修约(舍入)规则是“四舍六入五成双”,
也即“4舍6入5凑偶”这里“四”是指≤4 时舍去,"六"是指≥6时进上,
"五"指的是根据5后面的数字来定,当5后有数时,舍5入1;
当5后无有效数字时,
需要分两种情况来讲:①5前为奇数,舍5入1;②5前为偶数,舍5不进。(0是偶数)
由于计算机中大量的浮点数都是带有很多位的,为了体现四舍六入五成双的算法。
根据题目需要的2位小数,我统一截取4位小数开始计算。
这样子会有一个bug,比如9.82501,因为截取了4位小数,所以修正出来是9.82,正确答案是9.83。
但是只是为了演示,实际上必须是取定位数来统一输入,再用这个算法。
可以再优化为要求输入小数的位数或判断输入数据的位数,但是这需要到数组和字符串的知识。
*/
double intercept(double number) {
int integer = static_cast<int>(number); // 取输入实数的整数部分
double knumber = number * ; // 将所需要的部分全部化为一个整数
int kinteger = static_cast<int>(knumber); // 截取整数部分
double dnumber = kinteger / 10000.0; // 取得所需要的数。
return dnumber;
}
double rounding(double number) {
double temp = intercept(number); // 截取所需要判断的数字,应该已经告知此时的数字有4位。
int ktemp = static_cast<int>(temp * );
int integer_result = static_cast<int>(temp); // 输出结果的整数部分
double digital_result = temp - integer_result; // 剩余的小数部分
int judge_number = (((ktemp % ) % ) % ) % ; // 为了能取到最后低的两位数。
if (judge_number != ) {
if (judge_number <= ) {
return integer_result + (static_cast<int>(digital_result * )) / 100.0;
}
else {
return integer_result + (static_cast<int>(digital_result * )) / 100.0 + 0.01;
}
}
else {
if ((ktemp / ) % == ) { // 倒数第3位是偶数的时候,此时应该不进位
return integer_result + (static_cast<int>(digital_result * )) / 100.0;
}
else {
return integer_result + (static_cast<int>(digital_result * )) / 100.0 + 0.01;
}
}
}
int main() {
double number;
double result;
while (!cin.fail()) {
cin.clear();
cin.sync();
cout << "请输入一个实数:";
cin >> number;
result = rounding(number);
cout << number << "经过四舍六入五成双以后的结果是" << result << endl;
}
system("pause");
return ;
}

C++系列作业的更多相关文章

  1. 面向对象JML系列作业总结

    面向对象JML系列作业总结 一.综述 本单元作业,由简到难地迭代式实现了三种JML需求,主要学习了面向规格的编程方法. 第一次:实现Path类和PathContainer类 第二次:继承PathCon ...

  2. OO_JAVA_JML系列作业_单元总结

    OO_JAVA_JML系列作业_单元总结 (1)梳理JML语言的理论基础.应用工具链情况 简单梳理 以下三者是jml规格里的核心,对一个方法功能和属性的限制: requires子句:规定方法的前置条件 ...

  3. Matlab系列作业

    (2019年2月19日注:Matlab这门课是在我大四上学期经历的,那时候开这篇文章是为了记录学习Matlab的时候遇到的坑,所以将所有的作业题合并到一篇文章中) 1.创建一个10*10的矩阵,矩阵所 ...

  4. OO第二单元作业小结

    前言 转眼已是第九周,第二单元的电梯系列作业已经结束,终于体验了一番多线程电梯之旅. 第一次作业是单电梯的傻瓜调度,虽然是第一次写多线程,但在课程PPT的指引下,写起来还是非常容易:第二次作业是单电梯 ...

  5. 我永远爱着OOP——第二单元作业总结

    第二单元的电梯真是愉♂快呢,多线程编程作为java编程OOP中的重要组成部分,通过这一个单元的学习,我也是有了很多全新的认识 那么下面就先例行一下公事 三次作业分析 第五次作业 设计分析 实现的电梯是 ...

  6. 第二次oo博客作业--多线程电梯

    这次的系列作业是写一个电梯调度,主要目的是让我们熟悉多线程. 第一次作业是一个傻瓜电梯的调度问题,要求也很简单,即每次接一个人就行了.我只用了两个线程,一个是输入线程,一个是电梯线程,输入线程负责从标 ...

  7. 第5-7次OO作业总结分析

    (1)从多线程的协同和同步控制方面,分析和总结自己三次作业来的设计策略及其变化. 第五次作业 第五次作业是对多线程的初步探索,所以对于多线程的基本书写机制的认识比较多.本次作业难点在于了解多线程的运作 ...

  8. OO第5-7次作业总结

    前三次作业可以说是入门编程,随着课程的深入,这三次多线程作业使我们开始慢慢接触工程性的编程任务. 对比起1-3次作业,5-7次作业明显没有那么顺利了,之前在互测环节每次最多就一个BUG或者没有BUG, ...

  9. [BUAA OO]第二次博客作业

    第五次作业 这次作业是电梯系列作业的终极版,要求是使用多线程实现三部电梯的运行.这次作业的难点在于第一次运用多线程技术,对于线程中的行为并不了解,以及电梯功能的实现(如果之前作业采取的是扫描指令队列预 ...

随机推荐

  1. flask-Local源码流程解析

    flask中Local源码数据类型首先明确:源码中要构造的数据类型数是这样的: __storage__ = { 用线程或者协程的唯一标识为键: {stack:[ctx(session/request) ...

  2. 使用CompletionService批处理任务(线程池阻塞线程)

    CompletionService ExecutorService BlockingQueueFuture 如果你向Executor提交了一个批处理任务,并且希望在它们完成后获得结果.为此你可以保存与 ...

  3. Python自学:第四章 在for循环中执行更多操作(1)

    # -*- coding: GBK -*- magicians = ['alice', 'david', 'carolina'] for magician in magicians: print(ma ...

  4. leetcode-212-单词搜索②

    题目描述: 第一次提交:(超出时间限制) class Solution: def findWords(self, board: List[List[str]], words: List[str]) - ...

  5. Perl 变量

    Perl 变量 变量是存储在内存中的数据,创建一个变量即会在内存上开辟一个空间. 解释器会根据变量的类型来决定其在内存中的存储空间,因此你可以为变量分配不同的数据类型,如整型.浮点型.字符串等. 上一 ...

  6. git使用过程中问题

    git提交文件命令顺序 fetch merge add commit pull push 取消已add文件 git reset HEAD 文件名 覆盖本地文件 git checkout 文件名 $ g ...

  7. day04 - 02 linux简单的操作命令

    man ls:查看ls的帮助文档 ls --help:查看ls的帮助文档,简单查看 help cd: 查看内置命令(man)不可以查看内置命令 touch [filename]:创建一个文件 pwd: ...

  8. 线段树逆序对(偏序)——cf1187D好题!

    /* 排除掉所有不可能的情况,剩下的就是可行的 1.数的数量不相同 2.对任意一个区间进行排序,等价于可以交换任意逆序对, 那么从1到n扫描b数组,判断是否可以将a数组中等于b[i]的值所在的位置j交 ...

  9. Js 数组的各种方法及操作

    一.数组去重 var arr = [0,1,20,3,0,45,6,0]; Array.prototype.unrepeat = function(){ var array = []; for(var ...

  10. (37)C#Linq

    https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/let-clause 一.定义 Linq(Lang ...