Day3 复合类型

Q1.如何解决VS中控制台一闪而过的问题?

在return 0前面加上cin.get()(有时候需要加两次)或者getchar()。

Q2.如何对数组进行初始化?

使用{}对初始化,元素间使用逗号分隔。如何没有指定数组大小,那么编译器将计算元素个数给定数组大小。

如果只对数组的一部分进行初始化,那么编译器将把其他元素设置为0。

C++11中,初始化可以省略=号,花括号中可以没有元素。

Q3.如何每次读取一行字符串输入?

使用cin.getline()将读取一行,并丢弃换行符;使用cin.get()将读取一行,并将换行符留在输入队列中,因此通常将两个get叠加使用:cin.get().get();

Q4.使用string类时如何读取一行输入?

使用cin将会忽略空格后的输入,因此可使用getline(cin,str)读取一行输入,该函数在string类库中。

Q5.使用\加上不可打印的字符来输出转义字符。
Q6.如何复制string对象?

使用strcpy()将字符串复制到字符数组中,使用strcat()将字符串附加到字符数组末尾。

Q7.C++中如何使用结构?

使用关键字struct可以创建结构体,C++允许声明变量时省略关键字。

结构变量初始化方式与数组类似,每个结构体使用花括号包裹,元素之间使用逗号分开,C++11中允许省略=。

结构声明时可以同时完成定义结构和创建结构变量的工作,只需将变量名放在结束括号后面即可,甚至可以同时进行初始化。

如果结构标识符是结构名,则使用句点运算符;如果标识符是指向结构的指针,则使用箭头运算符。

Q8.枚举的一些内容。

C++通过enum工具可以批量创建符号常量,并允许定义新类型。

默认情况下,将整数值赋给枚举量,第一个为0,第二个为1,可以通过显示指定整数值来覆盖默认值。

在不进行强制类型转换的情况下,只能将定义枚举时使用的枚举量赋给这种枚举的变量。

Q9.如何找到常规变量的地址?

对变量应用地址运算符&即可。

指针名表示的是地址,使用间接值符*可以得到该地址处存储的值。

Q10.如何在程序运行阶段分配内存以储存值?

使用new运算符分配一个未命名的内存空间,并使用指针储存该内存空间的地址,即可对该内存空间进行操作。

类似于:typeName *pointer_name = new typeName;

使用结束之后需要使用delete释放内存,对于new创建的数组,应该释放整个数组的内存。

编写大型程序时使用new可以节省内存占用。

Q11.C++将数组名解释为地址,即数值名为一个指针。

使用sizeof用于数组名,将返回整个数组的长度(字节)。

Q12.数组的替代品。

可以使用vector和array。


课后练习

#include "iostream";
#include "string";

using namespace std;

struct CandyBar
{
	string name;
	double weight;
	long cal;
};

struct PissaCake
{
	string name;
	double dis;
	double weight;
};

int main()
{
	//e1 编写一个程序,按要求输出信息;
	string fisrtname, lastname;
	char grade; int age = 0;
	cout << "what is your first name?";
	getline(cin,fisrtname);
	cout << endl << "what is your last name?";
		getline(cin,lastname);
	cout << endl << "what letter grade do you deserve?";
		cin >> grade;
	cout << endl << "what is your age?";
		(cin >> age).get();
	cout << endl << "name:" << fisrtname << "," << lastname ;
	grade = grade + 1;
	cout << endl << "grade" <<grade;
	cout << endl << "age:" << age;

	//e2 编写一个程序,他要求用户首先输入其名,然后输入其姓;然后程序使用一个逗号和空格将姓名组合起来,并存储和现实结果;
	string firstname2, lastname2;
	cout << endl << "enter your first name: ";
	getline(cin, firstname2);
	cout << endl << "enter your lase name:";
	getline(cin, lastname2);
	string name2 = firstname2 + " " + lastname2;
	cout << endl << "here's the information in a single string:" << name2;
	
	//e3 结构CandyBar包含3个成员。第一个成员储存了糖块的品牌;第二个成员储存了糖块的重量(小数);
	//第三个成员存储了糖块的卡路里含量(整数)。请编写一个程序,声明这个结构,创建一个名为snack的结构变量,并将其成员初始化。
	//初始化在声明变量的时候进行,最后程序显示变量内容。
	CandyBar snack =
	{
		"Mocha Mubch",
		2.3,
		350
	};
	cout << endl << snack.name << " " << snack.weight << " " << snack.cal;

	//e3 结构体CandyBar包含3个成员,编写一个程序,创建一个包含3个元素的CandyBar数组,并将他们初始化为所选择的数值,然后显示每个结构体的内容。
	CandyBar snack[3] = {
	{
		"snack1",2.1,310
	},
	{
		"snack2",2.2,320
	},
	{
		"snack3",2.3,330
	}
	};
	for (int i = 0; i <= sizeof(snack);i++)
	{
		cout << endl << snack[i].name << " " << snack[i].weight << " " << snack[i].cal;
	}

	//e4 william wingate从事比萨饼分析服务,对于每个披萨饼,他都需要记录以下信息:
	//披萨饼的公司名称,可以有多个单词组成
	//披萨饼的直径
	//披萨饼的重量
	//设计一个能够存储这些信息的结构,并编写一个程序使用结构,请求用户输入信息然后显示信息
	PissaCake pissa1;
	cout << endl << "rnter pissa name: ";
		getline(cin,pissa1.name);
	cout << endl << "enter pissa dis:";
	    cin >> pissa1.dis;
	cout << endl << "enter pissa weight:";
	    cin >> pissa1.weight;
	cout << "you enter is: " << pissa1.name << " " << pissa1.dis << " " << pissa1.weight;

	//e5 将练习5使用new来为结构分配内存,而不是声明一个结构变量
	cout << endl << "enter pissa name:";
	PissaCake *pissa = new PissaCake;
	getline(cin, pissa->name);
	cout << endl << "enter pissa dis:";
	cin >> pissa->dis;
	cout << endl <<  "enter pissa weight:";
	cin >> pissa->weight;
	cout << endl << "your enter is : " << pissa->name << " " << pissa->dis << " " << pissa->weight;
	delete pissa; // 释放内存

	//e6 完成练习3 使用new来为结构分配动态数组。
	CandyBar *snack1 = new CandyBar[3]{
	{
		"snack1",2.1,310
	},
	{
		"snack2",2.2,320
	},
	{
		"snack3",2.3,330
	}
	};

	for (int i = 0; i <= sizeof(snack1);i++)
	{
		cout << endl  << snack1[i].name << " " << snack1[i].cal << " " << snack1[i].weight;
	}

	cin.get();
	cin.get(); 
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值