C++幼儿园[3] - 数组与函数

春节歇了几天之后就不想干活了
果然,人不做事..就会变懒。

惯例先说说上次

遗留的问题:

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 thinkcmath
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表示数组长度

小作业(不用交):

  1. 声明一个 int 型数组(乱序),对其元素进行排序

    原数组 0 7 9 5 1 3
    排序后 0 1 3 5 7 9
    整个过程可写在main函数中,不需另写函数
  2. 把之前的作业“GPA计算器”和“输出质数”变成函数,从main函数里分离出来
    要求:
    GPA计算器:无输入,返回值为计算所得GPA
    输出质数:输入整数n,输出从0到n的质数,无返回值
    并在main函数中调用上面两个函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值