C++三目运算、函数和数据类型的转换及举例

***接上一篇博客:C++程序流程和循环控制及例子***

十四、三目运算

三目运算也叫条件运算三元运算,可以实现简单if语句的功能,但是书写更简洁
    语法:表达式一 ?表达式二 :表达式三
    解释:先计算表达式一的值,如果为真,整个表达式的结果为表达式二的值,如果为假,整个表达式的结果为表达式三的值。

例1:判断a、b的大小

#include<iostream>
int main()
{
	int a = 10;
	int b = 15;
	int c = a > b ? a : b;
	std::cout << "大的数是:" << c << "\n";
	return 0;
}

十五、函数

15.1 函数的声明和定义

在复杂的程序中,如果全部的代码都写在 main 函数中,main 函数体将非常庞大臃肿
把任务分工到其它的函数中,main 函数只负责程序的核心流程,具体的任务由其它函数完成;
这种思想就是模块化编程
声明和定义函数的语法:
返回值的数据类型 函数名(参数一的数据类型 参数一,参数二的数据类型 参数二,.....)
{
    //实现函数功能的代码
    return 返回值
}


注意:
1.函数的声明和定义可以书写在一起,也可以分开,如果书写在一起,一般放在 main 函数的上面,如果分开,一般在main 函数的上面声明,在main 函数的下面定义。
2.如果函数的声明和定义分开书写,函数的声明后面一定要有分号,函数的定义后面一定不能写分号。在同一个程序中,函数只需要声明和定义一次,也可以多次声明,但只能定义一次。函数的声明必须和函数的定义一致 (返回值的数据类型、函数名、参数列表)return 语句返回值的数据类型必须与函数的声明一致。
3.如果函数的重点是实现功能, 不必关心返回值,返回值的return 语句后面就空着。

15.2函数的调用

语法:函数名(参数一,参数二,......)
注意:
1.声明函数的代码必须放在调用之前,定义函数的代码可以放在调用之后;
2.调用函数的时候,参数列表必须与函数的声明一致(参数的个数、书写的顺序和数据类型);
3.不管在什么地方,都不能调用 main 函数,但是,在普通函数中,可以调用其它的普通函数;
4.调用函数的代码可以独占一条语句,也可以用于表达式(赋值运算、算术运算、关系运算、函
数的参数;
5.如果函数用于表达式中,返回值的数据类型要匹配(否则可能会被隐式转换或编译错误);
6.如果函数有返回值,可以不关心它,忽略它。    

15.3 函数分文件编写

头文件 (*.h):需要包含的头文件,指定命名空间,声明全局变量,函数的声明,数据结构和类的声明等。
源文件 (*.cpp):函数的定义、类的定义
主程序 : main 函数,程序的核心流程,需要用#include“头文件名"把头文件包含进来


15.4 递归函数

    递归,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法
    也就是说,递归算法是一种直接或者间接调用自身函数的算法。
    通俗来说,递归算法的实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法来表示问题的解。这就是分治的思想。

递归的三大要素
第一:明确你这个函数想要干什么。先不管函数里面的代码什么,而是要先明白,你这个函数的功能是什么,要完成什么样的一件事。
第二:寻找递归结束条件。我们需要找出当参数为啥时,递归结束,之后直接把结果返回,请注意,这个时候我们必须能根据这个参数的值,能够直接知道函数的结果是什么。
第三:找出函数的等价关系式。我们要不断缩小参数的范围,缩小之后,我们可以通过一些辅助的变量或者操作,使原函数的结果不变。(分治的思想,大规模问题化解成小规模问题,直到化成单一问题进行解决)

例2:斐波那契数列的递归

#include<iostream>

int Feibo(int n)
{
	if (n <= 2)
	{
		return 1;
	}
	else
	{
		return Feibo(n - 1) + Feibo(n - 2);
	}
}

int main()
{
	int n = 0;
	std::cout << "输入n:";
	std::cin >> n;
	std::cout << "第" << n << "个斐波那契数是:" << Feibo(n) << std::endl;
	return 0;
}

 

十六、数据类型的转换

    计算机进行运算时,要求各操作数的类型具有相同的大小和存储方式。
    在实际开发中,不同类型的数据进行混合运算是基本需求。
    自动类型转换: 某些类型的转换编译器可以隐式的进行,不需程序员干预。
    强制类型转换: 有些类型的转换需要程序员显式指定。

1)自动类型转换
不同数据类型的差别在于取值范围和精度数据的取值范围越大,精度越高
整型从低到高:
char -> short -> int -> long -> long long
浮点型从低到高:
float -> double -> long double

自动类型转换的规则如下:
如果一个表达式中出现了不同类型操作数的混合运算,较低类型将自动向较高类型转换
当表达式中含有浮点型操作数时,所有操作数都将转换为浮点型
赋值运算的右值类型与左值类型不一致时,将右值类型提升/降低为左值类型。
赋值运算右值超出了左值类型的表示范围,把该右值截断后赋给左值,所得结果可能毫无意义;

int a = 10;
double b = 20.5;
float c = a + b; // 这里a会自动转换为double类型,然后进行运算

2)强制类型转换
为了让程序设计更灵活,转换的目的更清晰,C++提供了强制类型转换的方法,也称之为显式转换
强制类型转换的语法(目标类型)表达式;
注意:
如果使用强制转换,表示程序员已有明确的目的。
如果转换的行为不符合理,后果由程序员承担。
如果采用了强制类型转换,编译的告警信息将不再出现。
类型转换运算符的优先级比较高,如果没把握就加括号

double d = 30.7;
int e = (int)d; // 这里我们将double类型的d强制转换为int类型,小数部分被丢弃,结果为30

十七、数据类型的别名

    创建数据类型的别名有两个目的:
    1、为名称复杂的类型创建别名,方便书写和记忆。
    2、创建与平台无关的数据类型,提高程序的兼容性。
    语法: typedef 数据类型名 别名;

#include<iostream>
using namespace std;

// 创建一个数据类型的别名
typedef int Age;

int main() {
    // 使用别名定义变量
    Age a = 20;
    cout << "Age: " << a << endl;
    return 0;
}

在这个例子中,我们创建了一个名为Age的别名,它代表int类型。然后我们在main函数中使用这个别名来定义一个变量a。这样,我们就可以像使用int一样使用Age来定义变量了。


本节完。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万叶学编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值