NOI 1.12函数过程与抽象

文章介绍了函数在编程中的重要性,包括自定义函数、参数传递、变量作用域和递归函数的概念。还提到了结构体在对象存储中的应用。接着,给出了一道简单的C++编程题,要求计算两个整数的算术表达式结果,示例代码展示了如何定义和调用函数来实现这一功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数介绍(来源:洛谷题目单)

有时程序中会使用多次相同的语句,而且无法通过循环来减少重复编程。对于这样的功能,如果能像使用 sqrt()、max() 这样变成一个函数,那该多好啊!其实每个程序都用到了主函数——main()。除此之外,还可以自己定义其他函数,并将参数喂给这些函数,使其能够根据这些参数完成要求的任务。不过这方面还有更复杂的一些知识点,比如参数传递与变量的作用域,接下来也需要学习。函数内还能调用自己,也就是递归函数,这是程序设计新手入门公认的第一道坎,但却是非常重要的一部分。

最后介绍了结构体,可以建立并操作对象。存储一些和对象有关的信息会变得相当便利。例如,可以设计结构体来存储一位同学的各项信息——姓名、年龄、性别、考试成绩等等,而一个确定的同学就是一个对象。可以很方便地操作一个对象,也可以用数组批量存储对象。


常见:

void(无返回值)

不难猜出:

int() ___

float() ___

。。。。。。


了解之后,就可以开始进入学习了

函数定义格式如下:

int 函数名(int/float/char变量名/int/float/char数组名[]){
	
}

提到这个,就必须详解实参与形参


形参实例化之后其实相当于实参的windows.old。

了解更多还可以去(4条消息) 函数的参数(形参与实参)的理解_乌克兰水晶小乳猪的博客-优快云博客_函数形参看看,可能有所帮助。

让我们来编写一道题

(来源:noi1.12 1.简单算数表达式求值)


描述

两位正整数的简单算术运算(只考虑整数运算),算术运算为:

+,加法运算;
-,减法运算;
*,乘法运算;
/,整除运算;
%,取余运算。

算术表达式的格式为(运算符前后可能有空格):
运算数 运算符 运算数

请输出相应的结果。

输入

一行算术表达式。

输出

整型算数运算的结果(结果值不一定为2位数,可能多于2位或少于2位)。

样例输入

32+64

样例输出

96

学习之后不难写出如下代码:

#include<iostream>
#include<cstring>
#include<string>
using namespace std;
int calc(int a,char op,int b){
	if(op=='+') return a+b;
	if(op=='-') return a-b;
	if(op=='*') return a*b;
	if(op=='/') return a/b;
	if(op='%') return a%b;
}
int main(){
	int m,c;
	char ku;
	cin>>m>>ku>>c;
	cout<<calc(m,ku,c);
	return 0;
} 
#include<iostream>
#include<cstring>
#include<string>
using namespace std;
int calc(int a,char op,int b){
	if(op=='+') return a+b;
	if(op=='-') return a-b;
	if(op=='*') return a*b;
	if(op=='/') return a/b;
	if(op='%') return a%b;
}
int main(){
	int m,c;
	char ku;
	cin>>m>>ku>>c;
	cout<<calc(m,ku,c);
	return 0;
} 

//方便复制的版本

你学会了吗?

修改:

注:return 为返回值,你可以写出cout<<calc(...)是因为返回值已设定。

<think>好的,我需要帮助用户查找NOI竞赛相关的常用函数集合。首先,用户的问题是关于NOI常用函数列表的汇总,他们可能在准备竞赛时需要这些资源来提高编程效率。根据用户提供的引用链接,我需要先检查这些引用中是否有相关信息。 查看引用[1],是关于量子力学和中小学信息学比赛的,可能不直接相关。引用[2]提到了NOI题库和题解,可能包含一些函数的使用示例。引用[3]和[4]涉及NOI Linux的使用和竞赛资料,但具体是否有函数列表还不确定。用户可能需要的是C++标准库中的常用函数,比如算法、数学处理、字符串操作等,这些在竞赛编程中非常常见。 接下来,我需要整理这些常用函数,确保覆盖主要方面。比如数学函数中的abs、sqrt、pow,字符串处理的substr、find,STL算法如sort、lower_bound等。此外,还要注意竞赛中的输入输出优化,这可能包括快读函数。引用[2]中的题解可能展示了这些函数的使用,但用户需要的是列表,所以应该分门别类列举,并给出示例和适用场景。 同时,用户可能希望了解这些函数NOI竞赛中的实际应用,所以每个类别下可以简要说明用途。例如,排序函数在解题中的重要性,数学函数在处理几何或数论问题时的应用。此外,引用[3]提到的NOI Linux环境可能需要特别注意某些函数的兼容性或性能表现。 需要验证是否有引用资料直接提供了函数列表。如果引用中没有现成的列表,可能需要根据常见的NOI编程实践来汇总,并参考用户提供的引用作为辅助资料。比如,引用[4]提到博主是竞赛指导教师,可能其博客中有相关资料,但根据给出的链接描述,可能需要进一步查找。 最后,确保回答结构清晰,分点列出函数类别,每个函数给出简单示例,并提到相关的引用作为支持。例如,输入输出优化可以参考引用[2]中的题解案例,或者引用[3]中的NOI环境配置建议。同时,生成的相关问题应围绕如何应用这些函数、优化技巧以及竞赛中的常见错误展开。</think>关于NOI竞赛中常用的函数和编程技巧,以下是针对C++语言的汇总整理,涵盖算法、数学、字符串处理等核心领域: ### 一、数学计算类函数 1. **绝对值函数** `int abs(int x);` 示例:$|a-b|$ 可写为 `abs(a-b)` 2. **幂函数开方** `double pow(double base, double exp);` `double sqrt(double x);` 示例:计算$x^3$写作`pow(x,3)`,$\sqrt{2}$写作`sqrt(2)` 3. **取整函数** `double ceil(double x);` // 向上取整 `double floor(double x);` // 向下取整 ### 二、字符串处理函数 1. **截取子串** `string substr(size_t pos = 0, size_t len = npos);` 示例:`s.substr(2,5)` 截取从第3字符开始的5个字符 2. **查找子串** `size_t find(const string& str, size_t pos = 0);` 返回首次出现位置,未找到返回`string::npos` ### 三、STL算法库关键函数 1. **快速排序** `sort(begin, end, cmp);` 示例:`sort(arr, arr+n);` 时间复杂度$O(n \log n)$[^2] 2. **二分查找** `lower_bound(begin, end, val);` 返回第一个≥val的迭代器,要求序列有序 3. **最大最小值** `max(a, b);` `min(a, b);` 支持多参数版本`max({a,b,c})` ### 四、输入输出优化 ```cpp inline int read() { // 快读函数 int x=0,f=1; char c=getchar(); while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar(); return x*f; } ``` (适用于大规模数据输入场景,参考NOI Linux环境优化[^3]) ### 五、其他实用技巧 1. **位运算宏定义** `#define lowbit(x) ((x)&(-x))` // 获取最低有效位 2. **容器清空优化** `vector<int>().swap(v);` // 彻底释放vector内存
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值