练习16
![](https://img.haomeiwen.com/i3593554/e80f869ec5f90c70.png)
注意:插入元素时将insertIndex设为最后一个,有利于简化程序
代码
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int main()
{
//实现数组元素的删除和插入
double power[99];//数组的大小一旦确定了,就不能再改了!!!
int powerCount = 0; //当前数组中的元素个数
power[powerCount++] = 45771;
power[powerCount++] = 44234;
power[powerCount++] = 18323;
power[powerCount++] = 40854;
double temp;
for(int i = 0; i<powerCount; i++)
{
for(int j =0; j <powerCount -i -1;j++)
{
if(power[j] < power[j+1])
{
temp = power[j];
power[j] = power[j+1];
power[j+1] = temp;
}
}
}
cout << "排序结果:" << endl;
for(int i = 0; i < powerCount; i++)
{
cout << power[i] << '\t';
}
cout<<endl;
//插入
double insertPower;
cout<< "请输入要插入的数字:";
cin>>insertPower;
//插入以后,保证数组仍然是有序的
//1.找到第一个比插入数字大的位置insertIndex
int insertIndex = powerCount;
for(int i = 0; i<powerCount ; i++)
{
if(insertPower >power[i]){
insertIndex = i;
break;
}
}
for(int i = powerCount -1; i>=insertIndex;i--){
power[i+1] = power[i];
}
//3. 将要插入的数字赋值给insertIndex
power[insertIndex] = insertPower;
//4. 将数组的总长度+1
powerCount++;
cout<< "插入后: ";
for(int i = 0; i<powerCount; i++)
{
cout << power[i]<<'\t';
}
//删除一个元素
//1.找到要删除的元素下标
double deletePower;
int deleteIndex = INT_MIN;
cout << "请输入要删除的数字:";
cin >> deletePower;
for(int i = 0; i<powerCount; i++){
if(deletePower == power[i]){
deleteIndex =i;
break;
}
}
if(deleteIndex == INT_MIN)
{
cout << "没有找到要删除的元素,删除失败!"<<endl;
}
else{
//2.从找到的下标开始,后面一个元素赋值给前面一个元素
for(int i = deleteIndex; i < powerCount -1; i++)
{
power[i] = power[i+1];
}
//3.总长度 -1
powerCount--;
cout<< "删除后: ";
for(int i = 0; i<powerCount; i++)
{
cout << power[i]<<'\t';
}
}
return (0);
}
练习15
![](https://img.haomeiwen.com/i3593554/111c68c7fba49cc8.png)
代码
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int main()
{
//循环录入5个整型数字,进行降序排列后输出结果
//方案1:使用冒泡排序
//第一轮比较的次数是数组的总长度-1
//下一轮比上一轮比较的次数:少一次
//外层循环控制轮数
//内层循环控制每轮的比较和交换
int nums[]= {15,25,90,23,9};
int numsLen = sizeof(nums)/sizeof(int);
int temp;
for (int i = 0; i < numsLen -1; i++)
{ for (int j =0; j< numsLen -i -1;j++)
{
if(nums[j] < nums[j+1])
{
temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
}
}
}
cout <<"冒泡排序的结果是"<<endl;
for(int i = 0; i<5;i++){
cout<< nums[i]<<",";
}
cout <<endl;
//方案2: 选择排序
// 第一步:找最小值,假设第一个元素是最小值
// 第二个元素开始,一个一个比较
// 第二步:假设第二个元素是最小值,第3个元素开始,一个一个比较
//
//擂台变量
int nums[]= {15,25,90,23,9,9,6};
int numsLen = sizeof(nums)/sizeof(int);
int temp;
int min = nums[0]; //假设最小值是数组的第一个元素
int minIndex = 0; //最小值的初始下标为0
for(int i =0;i<numsLen -1; i++)
{
min = nums[i];
minIndex = i;
for(int j =i + 1; j <=numsLen -1; j++)
{
//打擂台
if(nums[j] < min)
{
min = nums[j];
minIndex = j;
}
}
//交换
if(minIndex > i )
{
temp = nums[minIndex];
nums[minIndex] = nums[i];
nums[i] = temp;
}
}
cout <<"选择排序的结果是"<<endl;
for(int i = 0; i<numsLen;i++){
cout<< nums[i]<<",";
}
cout <<endl;
//逆序
for(int i =0;i<numsLen/2;i++)
{
temp = nums[i];
nums[i] = nums[numsLen - i - 1];
nums[numsLen - i - 1] = temp;
}
cout <<"逆序选择排序的结果是"<<endl;
for(int i = 0; i<numsLen;i++){
cout<< nums[i]<<",";
}
cout <<endl;
return (0);
}
练习14
![](https://img.haomeiwen.com/i3593554/34869bd6c0a8101a.png)
代码
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int main()
{
//求最大最小值
//奇偶数个数
//查找下标,未找到的为-1
int nums[] = {8, 4, 2, 1, 23, 344, 12};
int numsLen = sizeof(nums)/sizeof(int);
//1. 求最大值最小值排序:打擂台
int max = nums[0]; //假设第一个元素是最大值
int min = nums[0];
int maxIndex = 0; //最大值的下标
int minIndex = 0;
for(int i =1; i< numsLen; i++)
{
if(nums[i] > max)
{
max = nums[i];
maxIndex = i; //记录最大值的下标
}
if(nums[i] < min)
{
min = nums[i];
minIndex = i; //记录最大值的下标
}
}
cout << "最大值是:" << max << '\t'
<<"最大值的下标:" << maxIndex <<endl;
cout << "最小值是:" << min << '\t'
<< "最小值的下标:" << minIndex <<endl;
//2. 求奇偶数个数
int jCount = 0, oCount = 0;
for(int i = 0; i < numsLen; i++)
{
if(nums[i]%2 ==0)
{
oCount++;
}
else{
jCount++;
}
}
cout << "奇数个数" << jCount << "\t" << "偶数个数" <<oCount <<endl;
//3.查找输入的数字在数组中的下标,没有找到则下标为-1
int searchNum; //用户要查找的数字
int searchIndex = -1; //用户查找数字的下标
cout << "请输入要查找的数字:";
cin >> searchNum;
for(int i = 0; i< numsLen; i++)
{
if(nums[i]==searchNum)
{
searchIndex = i;
break;
}
}
if(searchIndex ==-1)
{
cout << "没有找到"<< endl;
}else
{ cout << "找到了,下标是:" << searchIndex << endl;}
return (0);
}
练习13
![](https://img.haomeiwen.com/i3593554/9c1eb9d040a2942a.png)
-
代码箭头
-
代码0
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
//需要控制行数 ()
//需要控制每行的星星(列数)
//双层循环,外层循环控制行(行数,换行),内层循环控制列(列数,图形)
int main()
{
for (int i =0; i<17;i++)
{
if (i==0||i==16)
{
for(int j = 0; j<9 ; j++)
{
if ((j>=3)&&(j<=5))
{cout <<"*";}
else
{cout<<" ";}
}
}
else if (i ==2||i==14)
{
for(int j = 0; j<9 ; j++)
{
if (j==1||j==7)
{cout <<"*";}
else
{cout<<" ";}
}
}
else if(i%2==0)
{
for(int j = 0; j<9 ; j++)
{
if (j==0||j==8)
{cout <<"*";}
else{cout<<" ";}
}
}
else
{ for(int j = 0; j<9 ; j++)
{cout <<" ";}
}
cout <<endl;
}
return (0);
}
- 代码矩形
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
//需要控制行数 ()
//需要控制每行的星星(列数)
//双层循环,外层循环控制行(行数,换行),内层循环控制列(列数,图形)
int main()
{
for( int i =0; i<17; i++){
if (i==0||i==16){ //打印第一行和最后一行全星
for(int j = 0; j <9;j++){
cout << "*";
}
}
else if(i%2==1){continue;}
else{
for(int j = 0; j <9;j++){
if(j ==0 || j==8) //打印偶数行
{cout << "*"; }
else{cout << ' ';} //打印奇数行
}
}
cout <<endl;
}
return (0);
}
练习12
嵌套循环
![](https://img.haomeiwen.com/i3593554/22ee2665a3c11e1d.png)
- 空菱形
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
//需要控制行数 ()
//需要控制每行的星星(列数)
//双层循环,外层循环控制行(行数,换行),内层循环控制列(列数,图形)
int main()
{
//什么时候打印空格,什么时候打印星号(#)
//在J有最小值和最大值的时候打印星号
for(int i = 0; i < 4; i++)
{
for(int j = 0; j <= 2 - i ; j++) //#
{cout << ' ';}
for(int j = 0; j <= 2 * i ; j++) //在j是极值的情况下打印*
if(j==0||j==2*i)
{cout << '*';}
else{
cout << ' ';
}
cout << endl;
}
//打印下半部分
for(int i = 0; i < 4; i++)
{
for(int j = 0; j <= i ; j++) //#
{cout << ' ';}
for(int j = 0; j <= 4 - 2 * i ; j++) //**
if(j==0 || j==4-2*i)
{cout << '*';}
else{
cout << ' ';
}
cout << endl;
}
return (0);
}
- 字母菱形
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
//需要控制行数 ()
//需要控制每行的星星(列数)
//双层循环,外层循环控制行(行数,换行),内层循环控制列(列数,图形)
int main()
{
//打印上半部分
//换成空格
for(int i = 0; i < 4; i++)
{
for(int j = 0; j <= 2 - i ; j++) //#
{cout << ' ';}
for(int j = 0; j <= 2 * i ; j++) //**
{cout << (char) ('A' + i);}
cout << endl;
}
//打印下半部分
for(int i = 0; i < 4; i++)
{
for(int j = 0; j <= i ; j++) //#
{cout << ' ';}
for(int j = 0; j <= 4 - 2 * i ; j++) //**
{cout << (char) ('A' + 4 + i);}
cout << endl;
}
return (0);
}
- 星号菱形
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
//需要控制行数 ()
//需要控制每行的星星(列数)
//双层循环,外层循环控制行(行数,换行),内层循环控制列(列数,图形)
int main()
{
//打印上半部分
//换成空格
for(int i = 0; i < 4; i++)
{
for(int j = 0; j <= 2 - i ; j++) //#
{cout << ' ';}
for(int j = 0; j <= 2 * i ; j++) //**
{cout << '*';}
cout << endl;
}
//打印下半部分
for(int i = 0; i < 4; i++)
{
for(int j = 0; j <= i ; j++) //#
{cout << ' ';}
for(int j = 0; j <= 4 - 2 * i ; j++) //**
{cout << '*';}
cout << endl;
}
return (0);
}
思路由来
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
//需要控制行数 ()
//需要控制每行的星星(列数)
//双层循环,外层循环控制行(行数,换行),内层循环控制列(列数,图形)
int main()
{
//打印矩形
/*
*****
*****
*****
*****
*/
for(int i = 0; i < 4; i++)
{
for(int j = 0; j < 4 ; j++)
{
cout << '*';
}
cout << endl;
}
//打印星号菱形:空格换成#
//图形一:#三角
//图形二:*三角
//如何打印三角:讨论i和j的关系
/*
*
**
***
****
*/
for(int i = 0; i < 4; i++)
{
for(int j = 0; j <= i ; j++) //j是指打印第几颗星星
{
cout << '*';
}
cout << endl;
}
//打印星号菱形:空格换成#
//图形一:#三角
//图形二:*三角
//如何打印三角:讨论i和j的关系
/*
*
***
*****
*/
//如何打印三角:讨论i和j的关系
for(int i = 0; i < 4; i++)
{
for(int j = 0; j <= 2 * i ; j++)
{
cout << '*';
}
cout << endl;
}
//#
/*
###*
##***
#*****
*/
for(int i = 0; i < 4; i++)
{
for(int j = 0; j <= 2 - i ; j++) //#
{cout << '#';}
for(int j = 0; j <= 2 * i ; j++) //**
{cout << '*';}
cout << endl;
}
//换成空格
for(int i = 0; i < 4; i++)
{
for(int j = 0; j <= 2 - i ; j++) //#
{cout << ' ';}
for(int j = 0; j <= 2 * i ; j++) //**
{cout << '*';}
cout << endl;
}
return (0);
}
练习11
![](https://img.haomeiwen.com/i3593554/66f9d23a217e48a8.png)
代码
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int main()
{
//循环输入5个玩家的消费,统计消费额低于500的玩家数量
const int COST = 500;
int n = 5; //玩家数量
int num = 0;
double money;
for(int i = 0; i < 5; i++){
std::cout << "请输入当前玩家的消费额" << '\n';
cin >> money;
if (money >= COST)
{continue;}
else{
num ++;
}
}
cout << "低于500的玩家有" << num << "个" << endl;
return (0);
}
练习10
![](https://img.haomeiwen.com/i3593554/dc4a8d1b06329a9b.png)
代码
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int main()
{
//猜价格
//1次:iPhone
//2-3次:小米移动电源
//5次以内:VR 眼镜
const double PRICE = 5000.0;//要猜的商品价格,可以是随机数字
double guessPrice; //用户猜的商品价格
int guessCount = 0; //用户猜测的次数
//游戏其实是一个死循环
for(;;){
cout << "please input the price of goods: "<<endl;
//每猜一次,猜测的总次数+1;
guessCount ++;
cin >> guessPrice;
if(guessPrice > PRICE){
cout << " higher! " << endl;
}else if(guessPrice < PRICE){
cout << " lower! " << '\n';
}else {
cout << "Congratulations, got it!" <<endl;
break;
}
}
if(guessCount == 1){
cout << "幸运53狂人,iPhone一台" << endl;
}else if(guessCount >=2 && guessCount >= 3){
cout << "幸运53小超人,小米移动电源一个" <<endl;
}else if (guessCount >=4 && guessCount <= 5){
cout << "幸运53小超人,VR眼镜一个"<<endl;
}
else {
cout << "幸运53幸运草,获得安慰奖!"<<endl;
}
return (0);
}
练习9
![](https://img.haomeiwen.com/i3593554/579e79997495e6e6.png)
dai
代码
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int main()
{
//循环输入玩家的年龄
int age;
for(;;){
cout << "请输入玩家年龄: ";
cin >> age;
if(age < 0){
cout << "输入的数据非法!"<< endl;
break;
}
}
cout << "强制退出!!" <<endl;
return 0;
}
练习8
![](https://img.haomeiwen.com/i3593554/9c53d48061c0d068.png)
代码
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int main()
{
//请使用循环打印1997年7月的月历
//已知:1997年7月1日(星期二),香港回归举国同庆
// 1. 定义变量
// 2. 书写循环
// 3.书写循环体以及循环体内的条件
//1. 通过观察,每个月第一天要打印\t用来表示1号是周几
//因为7月1号是周二,所以应该打印1个\t得出的规律:
// \t的数量 = 星期几-1
int day = 31; //七月一共有31天
int dayOfweek = 2; //七月第一天是周二
cout << "一\t二\t三\t四\t五\t六\t日" <<endl;
//打印 \t 周几-1
for(int i = 0; i < dayOfweek -1; i++)
{ cout << '\t'; }
//打印日子
//第二个for循环用来打印日期,因为7月有31天,所以循环31次
for(int i = 0; i<day; i++){
cout << i + 1;
//到底是\n 还是\t,需要根据i的值
//星期天是\n 其他是\t
if ((i+dayOfweek )%7==0){
cout << '\n';
}else{
cout << '\t';
}
}
return 0;
}
练习7
![](https://img.haomeiwen.com/i3593554/ba123a4132f54f40.png)
代码
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int main()
{
//使用循环模拟实现拳皇
/** 八神庵的HP*/
int hp1 = 100;
int hp2 = 100;
int attack1 = 0; // 巴神的攻击力
int attack2 = 0; //草地京的攻击力
int randNum; //用来存放玩家攻击的先后的随机数变量
srand(time(NULL)); //更新随机种子
while(hp1 >0 && hp2 >0) //当双方都生存的时候
{
// 1. 模拟玩家出招: 可以采用随机数是奇数还是偶数的方式来决定谁先进行攻击
// 奇数巴神 偶数草地经
randNum = rand();
if(randNum %2 == 1){ //奇数
attack1 = (int)(5 + 10 * rand() / (RAND_MAX + 1.0)); // 5-15之间
attack2 = (int)(5 + 10 * rand() / (RAND_MAX + 1.0));
hp2 -= attack1; //互相掉血
hp1 -= attack2;
} else{//
attack1 = (int)(5 + 10 * rand() / (RAND_MAX + 1.0)); // 5-15之间
attack2 = (int)(5 + 10 * rand() / (RAND_MAX + 1.0));
hp1 -= attack2; //互相掉血
hp2 -= attack1;
}
}
// 打印对战的最终结果
cout << "八神庵HP " << hp1 << endl;
cout << "草皮惊HP " << hp2 << endl;
return 0;
}
练习6
![](https://img.haomeiwen.com/i3593554/f8a9943a80a7df65.png)
代码一:
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
//使用循环计算1-100的累加和
//需要循环变量
//需要累加和变量
int num = 1; // 用来控制循环次数的变量
int sum = 0; // 用来保存累加和的变量
while(num<=100)
{
sum+=num; //累加1-100的值,结果保存在sum
num++;
}
cout << "1-100的累加和为" << sum << endl;
return 0;
}
代码二:
#include <iostream>
#include <iomanip>
#include <cstdlib>
using namespace std;
int main()
{
//使用循环实现三次密码错误退出系统
string password; // 密码
int i = 1; // 循环变量,用来控制循环的次数
while(i<=3)
{
cout << "请输入密码:" << endl;
cin >> password;
if(password == "12345678")
{
cout << "密码输入正确!" <<endl;
i = 5;
}
else
{
i++;
}
}
if(i == 4){
cout << "3次密码输入错误,系统强制退出!" <<endl;
exit(0);
}
return 0;
}
代码三
#include <iostream>
#include <iomanip>
#include <cstdlib>
using namespace std;
int main()
{
//某宝双十一2015年的交易额为800亿,每年递增25%
//问:按此速度哪年交易额达到2000亿?
//1. 寻找循环变量 初值 判断 更新
// 年 交易额 递增比
double money = 800.0;
int year = 2015;
while(money < 2000)
{
year++;
money = money * (1 + 0.25);
cout << "到" << year << "年,营业额达到" << money << "亿" <<endl;
}
cout << "到" << year << "年" << endl;
return 0;
}
练习5
![](https://img.haomeiwen.com/i3593554/306ba5b65c416f00.png)
代码
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
double flowerPrice ; //花的单价
//打印剧情
cout << "黎明前的黑暗渐渐褪去,海天之间透着一抹亮光,像是点燃的火把。。。"<< endl;
cout << "小男生给小女生送花,小女生问:这花多少钱啊?"<<endl;
cout << "小男生:" <<endl;
cin >>flowerPrice;
cout << "小女生:"<< endl;
if (flowerPrice >=50000)
{
cout << "马上去扯证!"<<endl;
}
else if(flowerPrice>20000 && flowerPrice<50000 )
{
cout << "那去看电影吧~" <<endl;
}
else if (flowerPrice>5000 && flowerPrice< 20000) {
cout << "你是个好人!" << endl;
}
else
cout << "我对花过敏!" << '\n';
return 0;
}
练习4
![](https://img.haomeiwen.com/i3593554/debea90ba53588fe.png)
代码
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
//败家MM的购物车
double price_louis = 35000.0;
double price_hermes = 11044.5;
double price_chanel = 1535.0;
double total = 0;
total = price_louis + price_chanel*5 +price_hermes;
double discount = 0;
//如果总价大于5万,打7折,否则,打9折
if (total >50000)
{
discount =0.7;
}
else
{
discount = 0.9;
}
total *=discount;
cout << "最终付款:" << total << endl;
cout << "折扣:" << discount << endl;
return 0;
}
练习3
![](https://img.haomeiwen.com/i3593554/ab0af6b0bfb8d123.png)
代码
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
//实用程序判断用户输入的字符是否是合法的硬盘盘符
char pan = '\0'; //默认值设置为空字符,空字符就是ASCII码为0的字符
cout << "请输入一个字符,我来判断是否合法";
cin >> pan;
// 'A' ~ 'Z'
if (pan >= 'A' && pan <= 'Z')
{
cout << "是合法盘符!" <<endl;
}
else
{
cout << "是非法盘符!" <<endl;
}
return 0;
}
练习2
![](https://img.haomeiwen.com/i3593554/4465650c0cd94bf9.png)
代码
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
double playerPower;
double realMax_harm;
double Max_harm = 256;
cout << "请输入玩家力量:";
cin >> playerPower;
realMax_harm = Max_harm * (playerPower + 100) /100;
cout << "武器实际最大伤害:" << realMax_harm <<endl;
return 0;
练习1
需求说明:
- 创建c++程序,实现从控制台输出多行信息。
-
要求:数字使用整型或浮点型定义。
任务
程序:
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
//输出男英雄
cout << "名称:德玛西亚之力盖伦\n"
<< "伤害:57.88(+4.50)\t攻击距离:172\n"
<< "护甲:27.54(+3.00)\t魔抗:32.10\n"
<< "生命:616.28(+84.25)\t生命回复:7.84(+0.50)\n"
<< "法力:0.00(+0.00)\t法力回复:0.00(+0.00)\n"
<< "移速:340\t\t定位:上单 辅助 打野\n"
<< "点券:450\t\t金币:1000"<<endl;
return 0;
}
![](https://img.haomeiwen.com/i3593554/54f20f4461c8a907.png)
#include<cmath>
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
//打印德玛西亚之力
/** 伤害 */ // 两颗星
double value_attack = 57.88;
/** 伤害成长值 */
double value_attack_growth = 4.50;
/** 攻击距离 */
double value_attack_distance = 172;
/** 护甲值 */
double value_defense = 27.54;
/** 护甲成长值 */
double value_defense_growth = 3.0;
cout << "名称:德玛西亚之力" << endl;
cout << "伤害:" << value_attack << "(+"<< value_attack_growth << ")\t"
<< "攻击距离:" << value_attack_distance << endl;
return 0;
}
网友评论