函数(二)

简介: 函数(二)

一.函数代码练习

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也会作为字符计算的。

相关文章
|
3月前
|
存储 Python
有效的函数(一)
有效的函数(一)
21 0
|
7月前
|
存储 C语言 Python
函数的前世今生1系列
函数的前世今生1系列
|
7月前
|
XML 存储 JavaScript
loadXMLString() 函数
`loadXMLString()` 是一个JavaScript函数,用于在不同浏览器环境下解析XML字符串。它使用DOMParser在支持的浏览器中解析,而在IE中则使用ActiveXObject。函数接受XML文本作为参数,返回解析后的XML文档。此函数适用于HTML页面的&lt;script&gt;标签内,方便在页面中重用,尤其在处理XML实例时。
|
C语言
C语言知识点之 函数2
C语言知识点之 函数2
51 0
|
7月前
|
存储 编译器 Serverless
C++系列十:函数
C++系列十:函数
|
7月前
|
开发工具 Windows
GetMessage()函数使用时的注意
GetMessage()函数使用时的注意
91 0
|
编译器 C语言
对函数的剖析一
对函数的剖析一
42 0
|
程序员 C语言
函数(1)
函数(1)
|
编译器 C语言 C++
C++——函数
C++——函数
120 0
C++——函数
|
算法 程序员 C++
C/C++ 中的 strrchr() 函数
strrchr() 函数 在 C++ 中,strrchr() 是用于字符串处理的预定义函数。cstring 是字符串函数所需的头文件
322 0