春节歇了几天之后就不想干活了
果然,人不做事..就会变懒。
惯例先说说上次
遗留的问题:
if…else if…else
把这当成三个语句而不是两个。
虽然说else if
看上去就是else
+if
但else if
占一行
else if()
{
...
}
else if()
{
...
}
else + if 就要占两行了,自动缩进之后,多级就会变得很臃肿
else
if()
{
...
}
else
if()
{
...
}
变量命名
别老用abc xyz了,更不要abc xyz ABC XYZ一起上,我看着都头大,写程序毕竟不是做数学题(而且别学教程啊,教程只是为了方便)
可以有如下替换(用有实际意义的单词):
grade credit mark point number(num) result sum temp(temporary)
这种名字怎么起,现阶段原则是,开心就好...
另外,一般见到XY都是坐标
abc做临时变量也是可以的,所以GPA计算器里写abc也将就吧(用来记录临时的值)
介绍一种常用的驼峰命名法:
- 变量&函数:
int i; //或者j,k.用作循环变量或跳出循环条件
int temp; //临时记录
double chaoChaoLength; //超超身高,注意分成3个语块,第一块首字母小写,其他块首字母大写
bool isHeBullShit; //bool型可用“is”开头,同上注意大小写
const int MAX_LENGTH;//常量,全大写,用下划线区分语块
- 类:
class GayGay //每块首字母都大写
{
...
};
下面讲正题
数组
顾名思义,就是一组数,可以是任何类型的
这组数有序存储,且可重复(数组与集合概念相对,集合无序且不可重复)
数组的定义:数据类型 数组名[常量]
int a[5]; //数组a可包含5个数
a[0] = 1; //这里a[0]表示数组a的第一个数
a[4] = 5; //将数组a的最后一个数赋值 5
/*
*就是说我们定义a[5]的这个“5”表示有5个数
*访问时从下标0开始,a[0] a[1] a[2] a[3] a[4]
*/
//上面只给2个数赋值了,其他数是多少?把整个数组输出出来看看
for (int i = 0; i < 5; i++)
{
cout << a[i] << endl;
}
int b[3] = { 6,9,4 }; //数组初始化
int c[] = { 0,0,0,0,5 }; //直接赋值时不需声明数组大小
int x = 6;
int d[x]; //敲黑板,划重点
const int y = 6;
int e[y];
偷懒贴个教程,请认真阅读
http://c.biancheng.net/cpp/biancheng/view/151.html
有一维数组肯定就有多维数组了,跟一维数组同理,就是数组套数组
http://c.biancheng.net/cpp/biancheng/view/152.html
函数
http://c.biancheng.net/cpp/biancheng/view/31.html
写得挺好的,嗯,请认真阅读
补充:
函数在被调用的时候,它所表示的值就是返回值,可以被当做普通变量,做赋值,判断等操作
#include <iostream>
using namespace std;
int square(int x) //
{
return x*x;
}
void main()
{
if (!square(0)) //square(0)返回值为0(false),!是“非”的意思,!false就是true了
{
cout << "hey";
}
bool b = square(1); //b被赋值为true了
}
常用系统函数(标准库函数)
也就是c++的创造者写好的函数
会用系统函数能节省大量时间
但有时候需要知道那些函数怎么实现的(提升自己or避免因未知原理而可能出现的问题)
遗憾的是c++中貌似不能方便地利用IDE的“转到定义”查看系统函数体。
下面列举一些常用的,请眼熟他们的名字,不仅c++,其他语言的这些函数名字也都大同小异
函数 | 解释 | 头文件 |
---|---|---|
sqrt() | 求平方根 | cmath |
abs() | 求绝对值 | cmath |
sin(),cos(),tan() | Exactly what you think | cmath |
ceil(),floor() | 天花板(地板):不小(大)于该值的最小(大)整数 | cmath |
log(),log10() | 分别表示 lnx 和 log10x | cmath |
tolower(),toupper() | 转换成小写\大写字母 | iostream |
time() | 返回1970/1/1零点到目前的秒数 | ctime |
rand(),srand() | 随机数相关 | iostream |
形参,实参,作用域
老生常谈的问题
首先需要知道,c++程序是按顺序执行(编译)的,一句一句,直到条件控制、跳转语句。也就是说下面的一段程序是错误的
int a=b;
int b=1;
c++中,一对大括号内的区域称为一个作用域,该作用域内声明的变量,对域外不可见
所以,程序执行过一个作用域之后,该域内声明的变量会消失(内存释放)
但是,在域外(特指作用域前)声明的变量,在作用域内做的改变会保留
试试看下面的代码
void main()
{
int a = 0;
{
int b = 1;
a = b;
}
cout << a;
cout << b;
}
在域外已经不存在b
这个变量了,但是域内对a
做的改变仍然保留
函数有一对大括号,然而并不能跟作用域等同
比如
void nega(double x)
{
x = -x;
}
void main()
{
int x = 6;
nega(x);
cout << x; //x仍为6
}
x没有改变,因为在nega()的这个括号里,double x
就是一个新的变量了(简称“新x”),它的值为调用时的6
,也就是“老x”的值
也就是说,调用的时候,仅仅是把x的值传了进去,函数体内的x相当于一个备份,对这个备份做任何操作,无法影响“老x”。
今天就先做对它们做初步的介绍
如“数组怎么作为函数的参数”,“怎么用函数交换两个实参的值”之类的问题,等学习了指针的内容之后就会明白。
(以上两个问题即地址与值问题)
请自己在下面练习一下怎么使用数组与函数。
提示:
void test(int arr[], int length)
可以传数组进函数,用length表示数组长度
小作业(不用交):
- 声明一个 int 型数组(乱序),对其元素进行排序
如
原数组 0 7 9 5 1 3
排序后 0 1 3 5 7 9
整个过程可写在main函数中,不需另写函数 - 把之前的作业“GPA计算器”和“输出质数”变成函数,从main函数里分离出来
要求:
GPA计算器:无输入,返回值为计算所得GPA
输出质数:输入整数n,输出从0到n的质数,无返回值
并在main函数中调用上面两个函数