初次使用函数,感觉很陌生,因为之前的练习都只是在main函数中编写代码实现题目。但后来写着写着,就发现原来函数这么好用,大大省去了很多在主函数编写的代码。在做A题的时候,一看题目,顿时有点懵:我怎么不知道printf函数有返回值?printf不就是一个输出的函数吗?后来当我试着将printf函数的返回值赋给一个变量a,再输出这个a,发现真的有返回值。
先简述一下题目:
KiKi写了一个输出“Hello world!”的程序,BoBo老师告诉他printf函数有返回值,你能帮他写个程序输出printf(“Hello world!”)的返回值吗?
输入描述: 无
输出描述: 包括两行: 第一行为“Hello world!” 第二行为printf(“Hello world!”)调用后的返回值。
AC代码:
#include<iostream> using namespace std; int main() { int a=printf("Hello world!"); printf("\n"); printf("%d",a); return 0; }输出结果是这样的:
Hello world! 12
原来printf函数的返回值就是要输出的字符串的长度(包括空格和标点符号),长知识了。
之后的题也都是利用函数实现题目,只不过题目很有难度,并且也帮我们回忆起了之前练习中的题目(例如J题(素数个数:对于正整数 n, 求 n 以内的(包括 n)素数个数。))利用sqrt函数可以优化代码,提高运行效率。
对于无返回值void类型的函数,直接再main函数中声明函数名及括号里的实参名即可,而对于有返回值的函数,直接cout<<函数名(变量名)即可,另外如果在函数中已进行过循环,在主函数里就不必进行同样的循环,直接声明函数即可。
函数可以在main函数里多次声明,可以多次将不同的变量代入函数进行计算后输出,例如E题(小乐乐计算函数),I题(组合数)。
对于最后一道题L题(排序函数重载),个人认为意义不大,无非就是对于不同的数据类型需要将函数的形参的数据类型改一下再写一遍(例如需要将浮点数冒泡排序,需要将形参的数据类型由int型变成float型),没有体现出函数重载的真实价值。
最后一点,就是对于cout某个数或某个运算结果,不算有函数返回值,只有return某个值才算有函数返回值,这个刚开始写函数的时候总会忘记,导致程序运行错误。