C++学习笔记(八)

结构体

c++的结构体和c语言差不多

#include<iostream>
struct inflatable{
	char name[20];
	float colume;
	double price;
};
int main(){
	using namespace std;
	inflatable guest=
	{
		"Glorious Gloria",
		1.88,
		29.99
	};
	inflatable pal=
	{
		"写个中国字",
		3.12,
		32.99 
	};
	cout<<"介绍你的顾客清单"<<guest.name;
	cout<<"以及"<<pal.name<<"\n";
	cout<<"你一共可以获得¥"<<guest.price+pal.price<<"\n";
	return 0; 
} 

在结构体变量被定义好以后,再次声明时可以省略strcut,同时也可以用句点调用里面的成员。
在函数中给结构体变量赋值时不用写里面的数据类型,直接填写内容并用逗号隔开即可。
另外,结构体里面是可以放string的
相同结构体类型之间可以互相赋值

inflatable bouquet = 
    {
    	"sunflowers",
    	0.20,
    	12.49
	};
	inflatable choice;
	cout<<"鲜花"<<bouquet.name<<"多少钱";
	cout<<bouquet.price<<endl;
	choice = bouquet;
	cout<<"选择"<<choice.name<<"多少钱"<<choice.price<<endl; 
	return 0; 

同时变量名可以直接放在结构体类型定义的下方,甚至可以直接进行赋值。

struct perks
{
	int key_number;
	char car[12];
}my_glitz={
	7,
	"packard"
};

结构数组

定义结构数组和其他数组一样,在括号里用花括号套娃就好了。调用的时候可以用中括号标明位置再调用成员就好了

inflatable guests[2] = 
	{
		{"Bambi",0.5,21.99},
		{"Godzilla",2000,565.99}
	};
	cout<<"The guests"<<guests[0].name<<" and "<<guests[1].name
		<<"\n他们的总量是"<<guests[0].colume+guests[1].colume;	
	return 0; 

另外一个小知识点就是,定义的时候成员后面加个冒号可以指定位数,比如unsigned int sn:4

共用体

共用体的定义和结构体比较类似

union one4all
{
	int int_val;
	long long_val;
	double doublie_val;
}

但是共用体变量一次只能存储一个值,自动保留最大的成员。

枚举变量

(由于书上内容较少,在菜鸟里找了一些做补充)
枚举变量的定义方法

enum spectrum {red,orange yellow,green,blue,violet,indigo,ultraviolet};

枚举常量只能以标识符形式表示,而不能是整型、字符型等文字常量。例如,以下定义非法:

enum letter_set {'a','d','F','s','T'}; //枚举常量不能是字符常量
enum year_set{2000,2001,2002,2003,2004,2005}; //枚举常量不能是整型常量

spectrum作为枚举变量的名称,里面的元素red,orange等会形成代表0到7的符号常量
也叫做枚举量
假如说我现在又要定义一个新的枚举量spectrum band;那么里面的元素如果需要赋值,只能附变量里有的枚举量

band = blue;//正确
band = 2000l;//错误

枚举变量只有赋值运算符而没有加减运算符,也就是不能加减乘除自加自减
如果一定要进行加减,需要进行强制类型转换为int不过如果这样就不能再赋值给枚举变量
如果打算只使用枚举里的常量,也可以不给枚举变量起名字
直接enum {xxxx};
我们也可以自己设置枚举变量里面各元素的值例如

enum spectrum {red=1,orange=2 yellow,green,blue,violet,indigo,ultraviolet};

枚举变量只能参与赋值和关系运算以及输出操作,参与运算时用其本身的整数值。例如,设有定义:

enum color_set1 {RED, BLUE, WHITE, BLACK} color1, color2;
enum color_set2 { GREEN, RED, YELLOW, WHITE} color3, color4;

允许进行以下的操作

color3=RED;           //将枚举常量值赋给枚举变量
color4=color3;        //相同类型的枚举变量赋值,color4的值为RED
int  i=color3;        //将枚举变量赋给整型变量,i的值为1
int  j=GREEN;         //将枚举常量赋给整型变量,j的值为0

最终有一个示例:
口袋中有红、黄、蓝、白、黑五种颜色的球若干个,每次从口袋中取三个不同颜色的球,统计并输出所有的取法。

分析:由于球只能是五种颜色之一,故可用枚举类型表示球的颜色。设取出的球为i、j、k,根据题意,i、j、k分别可以有五种取值,且i≠j≠k。可以用穷举法,逐个检验每一种可能的组合,从中找出符合要求的组合并输出。

#include<iostream>
#include<iomanip>
using namespace std;
int main(){
    enum color_set {red,yellow,blue,white,black}; //声明枚举类型color
    color_set color; 
    int i,j,k,counter=0,loop; //counter是累计不同颜色的组合数
    for(i=red;i<=black;i++) {
        for(j=red;j<=black;j++) {
            if(i!=j){                        //前两个球颜色不同
                for(k=red;k<=black;k++)
                if(k!=i&&k!=j){        //第三个球不同于前两个,满足要求
                    counter++;
                    if((counter)%22==0){ //每屏显示22行
                        cout<<"请按回车键继续";
                        cin.get();
                    }
                    cout<<setw(15)<<counter;
                    /*下面输出每种取法,一行为一种取法的三个颜色*/
                    for(loop=1;loop<=3;loop++){
                        switch(loop){
                            case 1: color=(color_set) i; break;    //第一个是i
                            case 2: color=(color_set) j; break;    //第二个是j
                            case 3: color=(color_set) k; break;    //第三个是k
                        }
                        switch(color){
                            case red:   cout<<setw(15)<<"red";   break;
                            case yellow:cout<<setw(15)<<"yellow";break;
                            case blue:  cout<<setw(15)<<"blue";  break;
                            case white:    cout<<setw(15)<<"white"; break;
                            case black: cout<<setw(15)<<"black"; break;
                        }
                    }
                    cout<<endl;            //输出一种取法后换行
                }
            }
        }
    }
    cout<<"共有:"<<counter<<"种取法"<<endl;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值