注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Mister.Hu(巷里人家)

Go abroad!

 
 
 

日志

 
 
关于我

A campus photograph palyer,an enthusiastic reader,a solitary writer,a future traffic engineer.

网易考拉推荐

C++强化【8】  

2015-09-06 11:10:44|  分类: Senior |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

实例87:格式打印(函数)

#include <iostream>

#include <iomanip>

#include <string>

using namespace std;

 

void print_int(int x,int y)

{

        cout<<x<<' '<<y<<endl; //按十进制输出 

        cout<<oct<<x<<' '<<y<<endl; //按八进制输出

        cout<<hex<<x<<' '<<y<<endl;//按十六进制输出

}

void print_float(float a, float b)

{

        cout<<a<<' '<<b<<endl; //无格式输出

        cout.setf(ios::showpos); //强制在正数前加+

        cout<<a<<' '<<b<<endl;

        cout.unsetf(ios::showpos); //取消正数前加+

        cout.setf(ios::showpoint); //强制显示小数点后的无效0

        cout<<a<<' '<<b<<endl;

        cout.unsetf(ios::showpoint); //取消显示小数点后的无效0

        cout.setf(ios::scientific); //科学记数法

        cout<<a<<' '<<b<<endl;

        cout.unsetf(ios::scientific); //取消科学记数法

        cout.setf(ios::fixed); //按点输出显示

        cout<<a<<' '<<b<<endl;

        cout.unsetf(ios::fixed); //取消按点输出显示

        cout.precision(18); //精度为18,正常为6

        cout<<a<<' '<<b<<endl;

        cout.precision(6); //精度恢复为6

}

void print_string(string a,string b,string *c,int length)

{

        cout<<a<<endl;

        cout<<" ";

        cout<<b<<endl;

        for(int i=0;i<length;i++)

        {

                 cout<<"  ";

                 cout<<c[i];

                 cout<<setfill('.')<<setw(30)<<i+1<<endl; //宽度为30,填充为'.'输出

        }

}

void main()

{

        int xx=100, yy=200; 

        print_int(xx,yy);//按进制输出

        float f1=0.000000001,f2=-0.6;

        print_float(f1,f2);//浮点数

        string str_caption="6";

        string str1="实例087  格式打印(设计函数)";

        string str_sub[3]={"实例描述","实现过程","代码解析"};

        print_string(str_caption,str1,str_sub,3);//字符串输出

}

注:这里一共定义了三个函数,分别是print_intprint_floatprint_string,分别定义了不同的输出类型,第一个函数中将两个int型变量以三种进制输出,注意,如果第四行为cout<<x<<' '<<y<<endl;则依然输出十六进制,如果要输出十进制,应当改为:cout<<dec<<x<<' '<<y<<endl;第二个函数将float型函数以不同的方式输出,具体代码简单。第三个函数需注意,cout<<" ";相当于首行缩进2字符,string *c定义的是一个字符串数组,如string str_sub[3]={"实例描述","实现过程","代码解析"};

 

实例89:汽车行驶里程

#include <iostream>

using namespace std;

/*一辆汽车每小时可行驶90公里,每跑两小时休息半小时

问该车工作8小时能行驶的里程*/

float mile(float a,float b,float c,int d)

{

        float result=0.0;//总里程

        while(a>0)//时间没用完

        {

                 if(a>=d)

                         result+=d*b;

                 else

                 result+=a*b;

                 a-=(c+d);//先减

        }

    return result;

 

}

void main()

{

        float whole_hour=8;//总时间

        float mile_per_hour=90;//每小时里程

        float relax=0.5;//休息时间

        int diff=2;//工作两小时休息

        cout<<"汽车8小时内跑"<<mile(whole_hour,mile_per_hour,relax,diff)<<"公里"<<endl;

}

实例90:求班级男女生的人数

#include <iostream>

using namespace std;

 

void fenlei(int* a, int* b, int length)

{

        for(int i=0;i<length;i++)

        {

                 if(a[i]==0)

                         b[1]++;

                 else if(a[i]==1)

                         b[0]++;

        }

}

void main()

{

        int sex_banji[10]={1,1,0,0,0,1,0,0,1,1};//0-female1-male

        int num[2]={0};//男女人数,元素0为男,元素1为女

        fenlei(sex_banji,num,10);

        cout<<"男女人数分别为:"<<num[0]<<","<<num[1]<<endl;

}

注:在这个函数中,int* a, int* b相当于定义了两个数组变量,其中,前面一个用于记录每个人的男女性别,后面一个用于记录男女人数。

实例92:内存整理

#include <iostream>

#include <stdlib.h>

using namespace std;

 

#define M 30

 

void delZero(char *ch, int size)

{

        int length=size;

        for(int i=0;i<size;i++)

        {

                 if(ch[i]==' ')

                 {

                         for(int j=i;j<size;j++)

                                  ch[j]=ch[j+1];

                         length--;

                         i--;

                 }

        }

        ch=new char[length];

}

void main()

{

        char *ch_test;

        ch_test=new char[M];

        strcpy(ch_test,"ak dfl jak df     ");

        cout<<"试验的字符数组为:"<<ch_test<<"在这里"<<endl;

        delZero(ch_test,M);

        cout<<"整理内存后:"<<endl;

        cout<<ch_test<<"在这里"<<endl;

        free(ch_test);

        ch_test=NULL;

}

注:这里其实就是将字符串中的空格删除,关键有以下几点,一个是i--;的使用,如果没有连着的空格,可以将其删除,但如果有连续的空格,i--;便显得十分关键了。

其次是动态数组的申请:ch_test=new char[M];注意M会自动赋值,以及其后的释放。

注:分水果

#include <iostream>

using namespace std;

int* fenpei(int* a, int* b, int num)

{

        int *remain=new int[num];

        for(int i=0;i<num;i++)

                 remain[i]=a[i]%b[i];

        return remain;

}

void main()

{

        int fruit[10];//10种水果各自个数

        int num_people[10];//每种水果对应分配人数

        int *premain;

        for(int i=0;i<10;i++)

        {

                 fruit[i]=100*i+1;

                 num_people[i]=i+1;

        }

        premain=fenpei(fruit,num_people,10);

        cout<<"分配水果后各自还剩个数:"<<endl;

        for(int j=0;j<10;j++)

                 cout<<premain[j]<<endl;

        delete[] premain;

        premain=NULL;

}

注:这里一次可以返回多个值,其实是定义了一个数组函数。注意在调用函数时,主函数内与函数相对应的函数定义为:int *premain;调用时不要写入指针,而是直接写为premain=fenpei(fruit,num_people,10);

实例94:图书名整理系统

#include <iostream>

using namespace std;

void sequence(char **ch, int row, int col)

{

        for(int i=0;i<row;i++)

        {

                 for(int j=i+1;j<row;j++)

                 {

                         if(ch[i][0]>ch[j][0])

                         {

                                  char *ch1=new char[col];

                                  strcpy(ch1,ch[i]);

                                  strcpy(ch[i],ch[j]);

                                  strcpy(ch[j],ch1);

                         }

                 }

        }

}

void main()

{

        int m=5,n=50;

        cout<<"现有5本英文图书,名字分别如下:"<<endl;

        char **ch=new char*[m];

        for(int i=0;i<m;i++)

                 ch[i]=new char[n];

        strcpy(ch[0],"C++ Primer");

        strcpy(ch[1],"More Effective C++");

        strcpy(ch[2],"Essential C++");

        strcpy(ch[3],"Imperfect C++");

        strcpy(ch[4],"Head First Java");

        for(int j=0;j<5;j++)

                 cout<<ch[j]<<endl;

                cout<<endl<<"将它们按首字母顺序重新排序,结果为:"<<endl;

        sequence(ch,m,n);

        for(int k=0;k<5;k++)

                 cout<<ch[k]<<endl;

        delete[] ch;

        ch=NULL;

}

注:首先,函数定义的是一个二维数组ch,在比较字符串首字母的过程中,依然遵循与后面所有字符串对比的原则,ch[i][0]表示第i排的首字母。这里需要注意,虽然ch定义的二维数组,但不代表ch[i]就没有意义,而是,ch[i]代表的是一个字符串,ch[i][j]代表的是该字符串中每个具体的字符。在主函数中,申请动态二维内存为代码串:char **ch=new char*[m];

        for(int i=0;i<m;i++)

                 ch[i]=new char[n];

  评论这张
 
阅读(33)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016