函数(二)

简介: 函数(二)

一.函数代码练习

1.写一个函数判断一个数是不是素数,是素数返回1.不是返回0.打印100-200之间的素数

题目中既然把素数作为判断部分,那么我们可以采用函数作为判断条件,基本架构如下:

int main()
{
  int i = 0;
  for (i = 101; i <= 200; i=i+2)
  {
    if (is_prime(i))
    {
      printf("%d\n", i);
    }
  }
  return 0;
}

偶数不可能是素数,所以直接pass掉。

下面是函数部分:

int prime(int x)
{
  int j = 0;
  for (j = 2; j <= sqrt(x); j++)
  {
    if (x % j == 0)
    {
      return 0;
    }
    return 1;
  }
}

关于sqrt平方的方法,后续会作出说明。

基本上素数方面只需要掌握2个循环就行了,而要想引入函数,把函数当作判断也是一种不错的组合。

检查了一遍我居然犯了一个致命错误,return 1不应该在for循环里,这样会导致每一个数都会变成素数,根本判定不了。

2.写一个函数判断一年是不是闰年 1000-2000

int decide(int n)
{
  if (n % 400 == 0 || (n % 4 == 0 && n % 100 != 0))
  {
    return 1;
  }
  else
  {
    return 0;
  }
}
int main()
{
  int i = 0;
  int count = 0;
  for (i = 1000; i <= 2000; i++)
  {
    if (decide(i))
    {
      count++;
      printf("%d\n", i);
    }
  }
  printf("%d", count);
  return 0;
}

会发现这是老套路了,就是通过把函数返回的数组作判断条件。

3.写一个函数,实现整形有序数组的二分查找,找到了就返回下标,找不到就返回-1。

int half(int arr[], int k, int sz)
{
  int left = 0;
  int right = sz - 1;
  int count = 0;
  while (left <= right)
  {
    int mid = (left + right) / 2;
    if (arr[mid] > k)
    {
      right = mid - 1;
    }
    else if(arr[mid]<k)
    {
      left = mid + 1;
    }
    else
    {
      count = 1;
      return mid;
    }
  }
  if (count != 1)
  {
    return -1;
  }
}
int main()
{
  int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
  int k = 0;
  scanf("%d", &k);
  int sz = sizeof(arr) / sizeof(arr[0]);
  int ret = half(arr, k, sz);
  if (ret != -1)
  {
    printf("找到了,下标是%d", ret);
  }
  else
  {
    printf("找不到");
  }
  return 0;
}

这里的返回操作基本和无函数没有区别,唯一要注意的是上传过去的数值要有所甄别,不用一股脑全传,挑一些重要的数值即可。

4.写一个函数,每调用一次这个函数,num的值就加1.

int main()
{
  int num = 0;
  prime()
  return 0;
}

首先传输的是地址,因为如条件所言的话不仅仅是形参需要变化,实参也要跟着改变。

void prime(int *num)
{
  *num = *num + 1;
}
int main()
{
  int num = 0;
  prime(&num);
  printf("%d\n", num);
  prime(&num);
  printf("%d\n", num);
  return 0;
}

剩下就简单了,在函数内部实现Num++就行了,不过因为接受的是地址,所以是*num++.

二.链式访问

int main()
{
  printf("%d", printf("%d", printf("43")));
  return 0;
}

如图所示,按照这样的结构最终会打印出什么呢?

首先,printf的返回值是整型int,其次打印了几个字符就返回数字几。例如打印43则返回2,而2作为打印为1个字符就返回1.

int main()
{
  printf("%d", printf("%d", 2));
  return 0;
}

所以最后结果为4321。

需要注意的是如果是打印了%d\n的话,那么在屏幕上会识别到换行,这样\n也会作为字符计算的。

相关文章
|
1月前
|
Java 测试技术 Python
为什么要用函数
在编程中,函数是一种重要的抽象工具,它使我们能够组织和复用代码,提高代码的可读性、可维护性和效率。函数允许我们将一段代码块封装起来,给它一个名字,并通过参数和返回值来与外部世界交互。下面,我们将深入探讨为什么要使用函数,并附上相应的代码示例。
15 1
|
8月前
|
程序员 编译器 C语言
从零带你认识函数(一)
从零带你认识函数
58 1
|
4月前
|
前端开发 JavaScript
Less的函数的介绍
Less的函数的介绍
25 0
|
4月前
|
开发工具 Windows
GetMessage()函数使用时的注意
GetMessage()函数使用时的注意
28 0
|
4月前
|
存储 C语言
对函数的剖析二
对函数的剖析二
29 0
|
4月前
|
机器学习/深度学习
函数的使用
任务1 统计小组一门课程的总分及平均分。
28 1
|
6月前
|
程序员
函数
一、函数 函数是一段封装了特定功能的可重复使用的代码块。它接受输入参数,执行特定的操作,并返回一个结果。函数可以在程序中被多次调用,避免了重复编写相同的代码,提高了代码的复用性和可维护性。 函数通常具有以下几个特点: 1. 输入参数:函数可以接受零个或多个输入参数,用于传递数据给函数。输入参数可以是任意类型的数据,如整数、浮点数、字符串、数组等。函数可以使用输入参数来执行特定的操作。 2. 函数体:函数体是函数的核心部分,包含了函数要执行的操作。函数体是由一系列的语句组成的代码块,可以包含各种控制语句、变量声明、表达式等。函数体定义了函数的具体功能。 3. 返回值:函数可以返回一个结果给调用者
33 0
|
7月前
MQTTClient_setCallbacks()函数
MQTTClient_setCallbacks()
461 0
|
8月前
|
监控 程序员 C语言
C/C++ 字符串转数字函数
C/C++ 字符串转数字函数
333 0