当前位置: 首页 > article >正文

C语言笔记 13

初见函数


求素数的和

#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.kler.cn/a/349238.html

相关文章:

  • 【Fargo】2:发送侧流量统计
  • 使用redis存储股股票数据及近一个月的行情数据
  • 【深度学习系统】Lecture 2 - ML Refresher / Softmax Regression
  • 偷啥的都有!
  • 基于JAVA+SpringBoot+Vue的旅游管理系统
  • kubernetes自定义pod启动用户
  • Android TextView实现一串文字特定几个字改变颜色
  • 浅谈Java之MBus通信
  • std::function的概念和使用方法
  • 硬盘文件误删:原因、恢复方案与预防措施
  • “探索端智能,加速大模型应用” 火山引擎边缘智能x扣子技术沙龙圆满落幕!
  • 机器人研究不同模态之间的融合方法
  • OpenAI Canvas:提升编程与写作效率的全新工作界面
  • Shiro 认证(Authentication)
  • 实战篇:(二)React 创建项目并连接 MySQL 后台的实战教程
  • STM32的SPI技术介绍
  • kubernetes中的微服务
  • 开启您的财富增值之路
  • B3622 枚举子集
  • 如何查看GB28181流媒体平台LiveGBS中对GB28181实时视频数据统计的负载信息