C语言笔记 13

devtools/2024/10/15 14:52:30/

初见函数


求素数的和

#include <stdio.h>int main()
{int m,n;int sum = 0;int cnt = 0;int i;scanf("%d %d", &m, &n);// m=10,n=31;if( m==1) m=2;for( i=m; i<=n; i++ ) {int isPrime = 1;int k;for ( k=2; k<i-1; k++ ) {if ( i%k == 0 ) {isPrime = 0;break;}}if ( isPrime ) {sum += i;cnt++;}}printf("%d %d\n", cnt, sum);return 0;
}

写自己的函数

#include <stdio.h>int isPrime(int i);
{int ret = 1;int k;for ( k=2; k<i-1; k++ ) {if ( i%k == 0 ) {ret = 0;break;}}return ret;
}int main()
{int m,n;int sum = 0;int cnt = 0;int i;scanf("%d %d", &m, &n);//m=10,n=31;if( m==1 )m=2;for ( i=m; i<=n; i++ ) {if ( isPrime(i) ) {sum += i;cnt++;}}
pritnf("%d %d\n", cnt, sum);return 0;
}

函数变得很简洁,而isPrime函数将来也可以用到其他地方

求和

 求1~10、20~30和35~45的三个和

#include <stdio.h>int main()
{int i;int sum;for ( i=1,sum=0; i<=10; i++ ) {sum += i;}printf("%d到%d的和是%d\n", 1, 10, sum);for ( i=20,sum=0; i<=30; i++ ) {sum += i;}printf("%d到%d的和是%d\n", 20, 30, sum);for ( i=35,sum=0; i<=45; i++ ) {sum += i;}printf("%d到%d的和是%d\n", 35, 45, sum);reuturn 0;
}

发现,有三段几乎一样的代码,在程序中叫做”代码复制“

“代码复制”是程序质量不良的表现

将重复函数提取出来:

void sum(int begin, int end)

{

  int i;

  int sum = 0;

  for ( i=begin; i<=end; i++ ) {

        sum += i;

  }

  printf("%d到%d的和是%d\n", begin, end, sum);

}

int main()

{

  sum(1,10);

  sum(20,30);

  sum(35,45);

  return 0;

}

函数的定义和使用


什么是函数:

函数是一块代码,接受零个或多个参数,做一件事情,并返回零个或一个值

函数定义

void sum(int begin, int end)
{int i;int sum = 0;for ( i=begin; i<=end; i++ ) {sum += i;}printf("%d到%d的和是%d\n", begin, end, sum);
}

函数头: 

void sum(int begin, int end)

void:返回类型(不返回任何结果的函数)

sum:函数名 

int begin, int end:参数表

函数体: (一定要有)

  int i;
  int sum = 0;
  for ( i=begin; i<=end; i++ ) {
    sum += i;
  }
  printf("%d到%d的和是%d\n", begin, end, sum);

调用函数

 格式:函数名(参数值);

()起到了表示函数调用的重要作用,即使没有参数也需要();如果有参数,则需要给出正确的数量和顺序,这些值会被按照顺序依次用来初始化函数中的参数

函数返回

函数知道每一次是哪里调用它,会返回到正确的地方

从函数中返回


  • return:停止函数的执行,并送回一个值
  • return的两种写法:

①return;

②return 表达式;

  • 一个函数里可以出现多个return语句

int max(int a, int b)

{

  int ret;

  if ( a>b ) {

        ret = a;

  } else {

        ret = b;

  }

  return ret;

>>

int max(int a, int b)

{

  if ( a> b ) {

        return a;

  } else {

        return b;

  } 

}

*但上述不是一种好的写法,不符合单一出口

从函数中返回值

  • 可以赋值给变量
  • 可以再传递给函数
  • 甚至可以丢弃

没有返回值的函数

格式:void 函数名(参数表) 

不能使用带值的return(可以没有return)

调用的时候不能做返回值的赋值

*如果函数有返回值,则必须使用带值的return


http://www.ppmy.cn/devtools/126210.html

相关文章

Patroni配置3-环境变量配置设置

目录 全局/通用 Log Citus Consul Etcd Etcdv3 ZooKeeper Exhibitor Raft&#xff08;已弃用&#xff09; PostgreSQL REST API CTL 环境配置设置 可以通过系统环境变量覆盖Patroni配置文件中定义的一些配置参数。本文档列出了Patroni处理的所有环境变量。通过这些…

mysql-数据库的操作

目录 认识数据库的基本操作 1、创建数据库 &#xff08;1&#xff09;校验集、编码集 &#xff08;2&#xff09;指定字符集和校验集创建数据库 2、展示所建立的数据库&#xff1a; 3、查看自己当前数据库&#xff1a; 4、修改数据库 5、删除数据库 6、库的备份与恢复…

Go 语言应用开发:从入门到实战

Go 语言应用开发&#xff1a;从入门到实战 引言 Go&#xff08;Golang&#xff09;是由 Google 开发的一种开源编程语言&#xff0c;设计初衷是提高编程效率&#xff0c;尤其是在高并发场景下表现出色。Go 语言以其简洁、易学、高效并发的特性&#xff0c;逐渐成为开发者的首…

【HarmonyOS】HMRouter使用详解(三)生命周期

生命周期&#xff08;Lifecycle&#xff09; 使用HMRouter的页面跳转时&#xff0c;想实现和Navigation一样的生命周期时&#xff0c;需要通过新建生命周期类来实现对页面对某一个生命周期的监控。 新建Lifecycle类 通过继承IHMLifecycle接口实现生命周期接口的方法重写。 通过…

《软件工程概论》作业一:新冠疫情下软件产品设计

课程说明&#xff1a;《软件工程概论》为浙江科技学院2018级软件工程专业在大二下学期开设的必修课。课程使用《软件工程导论&#xff08;第6版&#xff09;》&#xff08;张海藩等编著&#xff0c;清华大学出版社&#xff09;作为教材。以《软件设计文档国家标准GBT8567-2006》…

spring-第三章 spring入门程序

spring 文章目录 spring前言1.依赖引入1.1依赖包介绍1.2基础依赖引入 2.IOC功能使用2.1xml文件2.1.1bean**标签介绍**2.1.2配置实例 2.2使用bean2.2.1获取IOC容器2.2.2获取bean对象 3.补充说明4.开启log4j2日志4.1引入依赖4.2配置文件4.3使用日志 总结 前言 这篇文章中我们简单…

【算法——递归回溯】

这个东西还是很重要的&#xff0c;直接决定了你的动态规划章节的学习深度 78. 子集 方法1&#xff1a; vector<vector<int>>V; void dfs(vector<int> v,vector<int> nums,int index) {if(indexnums.size()) V.push_back(v);else{v.push_back(nums[i…

【获取简易网页存储的密码】

拜访客户&#xff0c;电脑端连上客户的访客网络后&#xff0c;发现手机还没连&#xff0c;同时网页上的密码被隐藏显示了&#xff0c;自己也忘了访客密码是多少了。这种安全性要求不高的网页隐藏密码如何查看&#xff1a; 1.如下&#xff0c;电脑连上了网络&#xff0c;但自己…