NOIP,CSP-J,CSP-S——函数

news2024/11/17 10:47:49

一、函数概念

/*函数返回类型 函数名(参数){
      语句
}
*/
int add(int x,int y){
    return x+y;
}

调用这个函数add 

int main(){
   int x,y,z;
   scanf("%d%d",&x,&y);
   z=add(x,y);
   printf("%d",z);
}

二、变量作用域

 main函数的z只作用于第二个for语句,

出了这个大括号就找不到了,所以电脑在编译printf语句会报错

例题:阶乘

方法一

#include<bits/stdc++.h>
using namespace std;

int fac(int n){
	int ans=1;
	for(int i=n;i>=1;i--){
		ans*=i;
	}
	return ans;
	
} 

int main(){
	int n;
	scanf("%d",&n);
	int ans=fac(n);
	printf("%d",ans);
	return 0;
}

方法二

#include<bits/stdc++.h>
using namespace std;

int fac(int n){
	if(n==1) return 1;
	else return fac(n-1)*n; 
	
} 

int main(){
	int n;
	scanf("%d",&n);
	int ans=fac(n);
	printf("%d",ans);
	return 0;
}

例题:加减乘除

#include<bits/stdc++.h>
using namespace std;
//加 
int jia(int a,int b){	
	return a+b;
} 
//减
int jian(int a,int b){	
	return a-b;
} 
//乘
int cheng(int a,int b){	
	return a*b;
} 
//除
int chu(int a,int b){	
	return a/b;
} 


int main(){
	int a,b;
	scanf("%d%d",&a,&b);
	printf("%d\n",jia(a,b));
	printf("%d\n",jian(a,b));
	printf("%d\n",cheng(a,b));
	printf("%d\n",chu(a,b));
	return 0;
}

三、函数声明

四、参数传递

1、值传递

#include<bits/stdc++.h>
using namespace std;

void work(int x,int y){
	x+=1;
	y+=2;
	printf("work:x=%d,y=%d\n",x,y);
} 

int main(){
	int x=0,y=1;
	printf("before work:x=%d,y=%d\n",x,y);
	work(x,y);
	printf("after work:x=%d,y=%d\n",x,y);
	return 0;
}

 2、引用传递

#include<bits/stdc++.h>
using namespace std;

void work(int &x,int &y){
	x+=1;
	y+=2;
	printf("work:x=%d,y=%d\n",x,y);
} 

int main(){
	int x=0,y=1;
	printf("before work:x=%d,y=%d\n",x,y);
	work(x,y);
	printf("after work:x=%d,y=%d\n",x,y);
	return 0;
}

#include<bits/stdc++.h>
using namespace std;

void my_swap(int &x,int &y)
{
	int t;
	t=x;
	x=y;
	y=t;
} 

int main(){
	int x=0,y=1;
	printf("before swap:x=%d,y=%d\n",x,y);
	my_swap(x,y);
	printf("after swap:x=%d,y=%d\n",x,y);
	return 0;
}

3、指针传递

(1)一维数组传参

使用这种数组的指针传参,在函数内部修改数组内容,外部的值也会改变

#include<bits/stdc++.h>
using namespace std;
int a[100],b[100];
int n,m;

void print(int a[],int n){
	for(int i=1;i<=n;i++){
		printf("%d ",a[i]);
	}
	printf("\n");
} 

int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
	}
	for(int i=1;i<=m;i++){
			scanf("%d",&b[i]);
		}
	print(a,n);
	print(b,m);
}

(2)二维数组传参

注意一定要指定二维数组的大小,与传入的数组一致

#include<bits/stdc++.h>
using namespace std;

int n,m;
int a[100][100];

void print(int a[][100]) {
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			printf("%d ",a[i][j]);
		}
		printf("\n");
	}
}

int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			scanf("%d",&a[i][j]);
		}
	}
	print(a);
	return 0;
	
}

例题:统计“a”的个数2

方法一:

#include<bits/stdc++.h>
using namespace std;
char s[20];
int jisuan(){
	scanf("%s",s+1);
	int len=strlen(s+1);
	int ans=0;
	for(int i=0;i<=len;i++){
		if(s[i]=='a') ans++;
	}
	return ans;
	
}

int main(){
	for(int i=1;i<=3;i++){
		printf("%d\n",jisuan());
	}
	
	return 0;
	}

方法二:

#include<bits/stdc++.h>
using namespace std;
char s[20];
//统计a的个数 
int jisuan(char s[]){
	int len=strlen(s+1);
	int ans=0;
	for(int i=0;i<=len;i++){
		if(s[i]=='a') ans++;
	}
	return ans;
	
}

int main(){
	for(int i=1;i<=3;i++){
		scanf("%s",s+1);
		printf("%d\n",jisuan(s));
	}
	
	return 0;
	}

练习题:排排队

#include<bits/stdc++.h>
using namespace std;

int n,m;
int a[1010][1010];
//声明输出 
void print(int a[][1010]);

int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			scanf("%d",&a[i][j]);
		}
	}
	print(a);//调用输出 
	return 0;
} 
//定义输出 
void print(int a[][1010]){
	for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				printf("%d ",a[i][j]);
			}
			printf("\n");
		}
}

练习题:询问区间

#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[110];
int flag,l,r;//通过flag判定是输出最大值还是最小值,l和r是区间 

int res(int flag ,int l,int r){
	//区间排序,从小到大 
	for(int i=l;i<r;i++){
		int mina=i;
		for(int j=l+1;j<=r;j++){
			if(a[j]<a[mina]) mina=j;
		}
		swap(a[i],a[mina]);
	}
	for(int i=l;i<=r;i++)
	   printf("%d ",a[i]);
	if(flag==1) return a[l];
	else return a[r];
}

int main(){
	//输入 
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
	}
	for(int i=1;i<=m;i++){
		scanf("%d%d%d",&flag,&l,&r);
		printf("%d",res(flag,l,r));
	} 
	return 0;
} 

练习题:a到b的质数

#include<bits/stdc++.h>
using namespace std;
int a,b;
//判定是否是质数 
bool isprime(int x){
	for(int i=2;i<=x-1;i++){
		if(x%i==0) return false;
	}
	return true;
}

int main(){
	scanf("%d%d",&a,&b);
	for(int i=a;i<=b;i++){
		if(isprime(i)&&(i !=1)) printf("%d\n",i);
	}
	return 0;
} 

练习:幂和

#include<bits/stdc++.h>
using namespace std;
int m,n;
//求每个值的幂 
int mi(int x){
	int base=x;
	for(int j=1;j<n;j++){
		x*=base;
	}
	return x;
}
int main(){
	scanf("%d%d",&m,&n);
	int res=0;
	for(int i=1;i<=m;i++){
		res+=mi(i);
	}
	printf("%d",res);
	
}

五、C++常用的函数

练习题:最大值

#include<bits/stdc++.h>
using namespace std;

int a,b,c;

int main(){
	scanf("%d%d%d",&a,&b,&c);
	int max1=max(a,b);
	int max2=max(max1,c);
	printf("%d",max2);
	return 0;
	
} 

 练习题:排序

#include<bits/stdc++.h>
using namespace std;
int n,a[110];

void print(int a[],int n){
	for(int i=1;i<n;i++){
		int minid=i;
		for(int j=i+1;j<=n;j++){
			if(a[j]<a[minid]) minid=j;
		}
		swap(a[i],a[minid]);
	}
	for(int i=1;i<=n;i++){
		printf("%d ",a[i]);
	}
}

int main(){
	//输入 
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
	}
	//输出
	print(a,n);
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1658214.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

我从这些书籍中学来的财务以及税务知识

“你不能指望在开始工作的头两年攒下任何积蓄。” 这句话一直是我的座右铭&#xff0c;也是我给大学生的个人理财建议。这也就难怪我二十出头的时候&#xff0c;基本就是靠薪水过日子。 回想起来&#xff0c;我意识到其实这并不是最好的建议&#xff0c;甚至非常不好。 我现…

纹理映射技术在AI去衣应用中的关键作用

引言&#xff1a; 随着人工智能技术的飞速发展&#xff0c;其在图像处理领域中的应用也日益广泛。AI去衣&#xff0c;作为一种颇具争议的技术应用&#xff0c;指的是利用深度学习算法自动移除或替换图片中的衣物。在这一过程中&#xff0c;纹理映射技术扮演了不可或缺的角色。本…

Anaconda安装和深度学习环境的安装(TensorFlow、Pytorch)

换了新电脑&#xff0c;重新装一下anaconda这些编程环境。好久没装过了&#xff0c;自己也需要查查资料&#xff0c;然后记录一下&#xff0c;分享给别人。 目标&#xff0c;三个环境&#xff1a;1.anaconda基础环境&#xff08;包含xgboost和lightgbm&#xff09;&#xff0c…

地图位置的二维码怎么做?在线制作地图二维码的方法

怎么定位一个位置做成二维码呢&#xff1f;随着互联网的不断发展&#xff0c;现在通过扫描二维码来获取导航位置的方式有很多的场景都在应用。这种方式的好处在于其他人都可以通过这个二维码来获取位置&#xff0c;有利于分享。 导航地图二维码可以在电脑的二维码生成器上快速…

springboot3项目练习详细步骤(第一部分:用户业务模块)

目录 环境准备 用户模块 注册 注册接口文档 ​编辑 实现结构 Spring Validation 登录 登录的接口文档 实现登录逻辑 JWT令牌 完善登录认证 拦截器 获取用户详细信息 接口文档 Usercontroller类中编写方法接口 忽略属性返回 优化代码ThreadLocal 更新用户基本信…

win11 安装oracle11g详细流程及问题总结

1.安装包下载地址 本案例操作系统&#xff0c; Oracle 11g下载-Oracle 11g 64位/32位下载官方版(附详细的安装图解教程) - 多多软件站多多为大家免费提供Oracle 11g下载&#xff0c;包含64位/32位官方版本&#xff0c;并附详细的Oracle 11g安装图解教程&#xff0c;同时希望能…

全网最详细的Python自动化测试(unittest框架)

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

【AIGC】深入探索AIGC技术在文本生成与音频生成领域的应用

&#x1f680;文章标题 &#x1f680;AIGC之文本生成&#x1f680;应用型文本生成&#x1f680;创作型文本生成&#x1f680;文本辅助生成&#x1f680;重点关注场景 &#x1f680;音频及文字—音频生成&#x1f680;TTS(Text-to-speech)场景&#x1f680;乐曲/歌曲生成&#x…

鸿蒙开发-ArkTS语言-容器-非线性容器

鸿蒙开发-UI-web 鸿蒙开发-UI-web-页面 鸿蒙开发-ArkTS语言-基础类库 鸿蒙开发-ArkTS语言-并发 鸿蒙开发-ArkTS语言-并发-案例 鸿蒙开发-ArkTS语言-容器 文章目录 前言 一、非线性容器 1.HashMap 2.HashSet 3.TreeMap 4.TreeSet 5.LightWeightMap 6.LightWeightSet 7.P…

【qt】QString字符串

前言&#xff1a; 这节很轻松&#xff0c;大家可以放心食用 ♪(&#xff65;ω&#xff65;)&#xff89; QString目录 一.与cString的区别二.隐式共享三.初始化四.判断是否为空串五.字符串的长度六.添加字符串1.尾加2.任意位置加 七.替换字符串八.修改字符串九.删除字符串1.清…

《吸血鬼崛起》大剑技能是什么 大剑武器连招教学

V Rising《吸血鬼崛起》是一款热门游戏&#xff0c;在STEAM刚刚推出了正式版&#xff0c;而在游戏中如何利用武器连招输出高是新手玩家常常困扰的问题。如果你还不太清楚&#xff0c;那么一起来看看V Rising中的武器连招推荐吧。 在V Rising中&#xff0c;你可以在数字栏里装备…

物联网实战--平台篇之(五)账户界面

目录 一、界面框架 二、首页(未登录) 三、验证码登录 四、密码登录 五、帐号注册 六、忘记密码 本项目的交流QQ群:701889554 物联网实战--入门篇https://blog.csdn.net/ypp240124016/category_12609773.html 物联网实战--驱动篇https://blog.csdn.net/ypp240124016/cat…

压缩归档库-Snappy介绍

1.简介 Snappy 是一个 C 编写的压缩和解压缩库&#xff0c;由 Google 开发。它专为速度而设计&#xff0c;而不是最大压缩率或与其他压缩库的兼容性。 Snappy 通常用于需要快速压缩和解压缩的场景。 Snappy具有以下属性&#xff1a; 快速&#xff1a;压缩速度达到250 MB/秒及…

AMCA乙二胺,可发出蓝色荧光具有较好的反应活性和稳定性

基本信息&#xff1a; 中文名&#xff1a;AMCA乙二胺 英文名&#xff1a;AMCA Ethylenediamine 分子量&#xff1a;503.35 外观&#xff1a;无色至浅黄色固体/粉末 规格&#xff1a;10mg、25mg、50mg&#xff08;同时可提供mg级以及kg级的产品开发服务&#xff09; 纯度&…

数智结合,智慧合同让法务管理发挥内在价值

在当今这个信息化、数字化飞速发展的时代&#xff0c;数据已成为企业重要的战略资源。法务管理作为企业内部控制和风险防范的重要环节&#xff0c;其重要性不言而喻。然而&#xff0c;传统的法务管理模式往往存在效率低下、信息孤岛、反应迟缓等问题。在这样的背景下&#xff0…

在Ubuntu安装RPM文件

Ubuntu软件源包含数千个deb软件包&#xff0c;可以从Ubuntu软件中心或使用apt命令行安装。 Deb是所有基于Debian的Linux发行版&#xff0c;例如包括Ubuntu&#xff0c;Linux mint等发行版使用的安装包格式。 如果某些软件在Ubuntu软件源中不可用&#xff0c;可以通过启用适当的…

为什么智慧校园是校园信息化发展的必然趋势

怎么从数字化学校的服务形式和运维办理上进行建造&#xff0c;如何为高校供给快捷、高效、有用的运维服务是数字化学校完成“才智”的重要目标&#xff0c;也是学校提高教育的必然趋势。 首先&#xff0c;智能可视化办理&#xff0c;可视化是数字化学校发展的必然趋势。可视化即…

软件系统工程建设全套资料(交付清单)

软件全套精华资料包清单部分文件列表&#xff1a; 工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#xff0c;产品需求规格说明书&#xff0c;需求调研计划&#xff0c;用户需求调查单&#xff0c;用户需求说明书&#xff0c;概要设计说明书&#xff0c…

子查询之一(单行子查询, 多行子查询)

1. 子查询 子查询是指一个查询语句嵌套在另一个查询语句内部的查询.这个特性在MySQL4.1开始引入. SQL中子查询的使用大大增强了SELECT查询的能力.因为很多时候查询需要从结果集中获取数据&#xff0c;或者需要从同一个表中先计算得到一个数据结果&#xff0c;然后与这个数据结…

基于51单片机锅炉水位-温度-压力检测控制系统proteus仿真设计

基于51单片机锅炉监控系统仿真设计( proteus仿真程序原理图报告讲解视频&#xff09; 仿真图proteus7.8及以上 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 设计编号&#xff1a;S0056 1.主要功能&#xff1a; 基于51单片机AT89C51/52&#xff08;与…