美文网首页
老九学堂c++练习

老九学堂c++练习

作者: 波洛的汽车电子世界 | 来源:发表于2019-07-22 22:21 被阅读0次

练习16

作业

注意:插入元素时将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

作业

代码

#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

作业

代码

#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

作业
  1. 代码箭头

  2. 代码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);
}
  1. 代码矩形
#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

嵌套循环


Screenshot 2019-07-26 at 15.53.20.png
  1. 空菱形
#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);

}
  1. 字母菱形
#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);

}
  1. 星号菱形
#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

作业

代码

#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

Screenshot 2019-07-24 at 10.57.22.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

作业

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

Screenshot 2019-07-24 at 10.22.04.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

作业

代码

#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

作业

代码一:

#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

作业

代码

#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

作业

代码

#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

作业

代码

#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

作业

代码

#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

需求说明:

  1. 创建c++程序,实现从控制台输出多行信息。
  2. 要求:数字使用整型或浮点型定义。


    任务

程序:

#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;
}
上交作业
#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;
}

相关文章

网友评论

      本文标题:老九学堂c++练习

      本文链接:https://www.haomeiwen.com/subject/zewglctx.html