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

C语言-函数练习1

以下是我初学C语言的笔记记录,欢迎评论区留言补充

【共有三道题】

一,写一个函数,能够判断出100-200之间的素数

【判断方法】

只能被1或是它本身整除;
意味着比如素数7,只能被1或是它本身整除,或是讲,它不能被2-6整除

不用函数,有三种思路做法

(1)

//方法一(不是函数的方法)int main()
{int i = 0;for (i = 100;i <= 200; i++){int j = 0;int flag = 1;//1为素数,0不是素数for (j = 2; j <= i - 1; j++){if (i % j == 0){flag = 0;break;}}if (1 == flag)printf("是素数%d ",i);}return 0;
}

(2)


//方法2 (不是函数的方法)
//思路:如果不是素数,比如16 = 2*8 = 4*4 = a*b
//则必然a或是b有一个数<= sqrt(16) = 4#include<math.h>
int main()
{int i = 0;for (i = 100; i <= 200; i++){int j = 0;int flag = 1;for (j = 2; j <= sqrt(i); j++){if (i % j == 0){flag = 0;break;}}if (1 == flag){printf("是素数%d ", i);}}return 0;
}

(3)

//方法三(不是函数的方法)
//思路:是素数的话,意味着奇数
int main()
{int i = 0;for (i = 101;i <= 200; i+=2){int j = 0;int flag = 1;//1为素数,0不是素数for (j = 2; j <= i - 1; j++){if (i % j == 0){flag = 0;break;}}if (1 == flag)printf("是素数%d ",i);}return 0;
}

用函数

//用函数
//如果是素数,返回1;不是返回0int is_prime(int n)
{int j = 0;for (j = 2; j <= n - 1; j++){if (n % j == 0)return 0;}return 1;
}
int main()
{int i = 0;int count = 0;for (i = 100; i <= 200; i++){if (is_prime(i)){count++;printf("素数为:%d\n", i);}}printf("\n总共:%d", count);return 0;
}

当然,也可以进行优化,比如用上面(2)(3)的思路

二, 写一个函数判断是不是闰年,2000-2040年

【判断方法】

第一种:能被4整除,但是不能被100整除;

第二种:能被400整除

 不用函数的方法,有两种思路

(1)

int main()
{int year = 0;int count = 0;for (year = 2000; year <= 2040; year++){if (year % 4 == 0 && year % 100 != 0){printf("是闰年%d\n", year);count++;}if (year % 400 == 0){printf("是闰年%d\n", year);count++;}}printf("\ncount=%d", count);return 0;}

(2)

int main()
{int year = 0;int count = 0;for (year = 2000; year <= 2040; year++){if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)){printf("是闰年%d\n", year);count++;}}printf("总共:%d", count);return 0;
}

用函数

int is_leap_year(int year)
{if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))return 1;elsereturn 0;
}
int main()
{int year = 0;int count = 0;for (year = 2000; year <= 2040; year++){if (is_leap_year(year)){printf("是闰年:%d\n", year);count++;}}printf("总共:%d", count);return 0;
}

三, 写一个函数,实现一个整形有序数组的二分查找

【判断方法】左右下标,与左右整除出来的下标mid 的关系

不用函数

int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int k = 7;int sz = 0;int left = 0;int mid = 0;int right = 0;sz = sizeof(arr) / sizeof(arr[0]);right = sz - 1;while (left <= right){mid = left + (right - left) / 2;//mid 需要放在while里面,
//如果在外面,则while里对mid的修改不起效,那么就没有结果输出if (arr[mid] > k){right = mid - 1;}else if (arr[mid] < k){left = mid + 1;}else{printf("找到了,下标为:%d", mid);break;}}if (left > right){printf("找不到了");}return 0;
}

用函数

int is_find(int arr[], int k, int sz)
{//mid,left,right//k,szint left = 0;int right = 0;right = sz - 1;while (left <= right){int mid = 0;mid = left + (right - left) / 2;if (arr[mid] < k){left = mid + 1;}else if (arr[mid] > k){right = mid - 1;}elsereturn mid;}return -1;
}
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int k = 7;int sz = 0;sz = sizeof(arr) / sizeof(arr[0]);//查找kint a = 0;a = is_find(arr, k, sz);if (a == -1)printf("没找到");elseprintf("找到,下标:%d", a);//这里在main函数中,要引用mid,是没法的//可以将mid设为函数的返回值,并且在main函数中//定义一个变量a来存储返回值return 0;
}

【注意】

*

main函数中没法直接引用自定义函数中的量,需要想办法,比如自定义函数返回值,且让main函数中有一个变量可以进行接收

*

sz不可以放在自定义函数中进行计算,原因:数组传参实际上传给形参的是数组第一个元素的地址,即形参此时的参数是一个指针变量,如果在这样的条件下,还进行sz大小的计算,那么结果可能是1或是2,即用指针变量的大小 / 一个整形数组的元素,由于指针变量大小可能是4或是8个字节,所以结果是1或是2

*

数组传参实际上是传递的是数组首个元素的地址,而不是整个数组,所以在函数内部计算一个函数参数部分的数组的元素个数是不靠谱的

【琐碎记录】 

1. 布尔类型c99后,值为true,false,类型是bool,应用stdbool.h的头文件,大小一个字节

2  .for(;;)

3. return的作用大于break;break只是结束一个循环,而return就是已经出结论的程度,函数直接结束;

4. if,else if ,如果一个条件满足第一个if,则不会走else if,但是如果都是if , if那么就算符合第一个if也是要再走下一个if的条件;

http://www.xdnf.cn/news/159481.html

相关文章:

  • arcpy列表函数的应用
  • 软件测评中心如何保障软件质量与安全性?
  • autodl(linux)环境下载git-lfs等工具及使用
  • .NET8 依赖注入组件
  • Nacos 集群节点是如何管理的?节点加入和退出的流程是怎样的?
  • 免费送源码:Java+ssm+HTML 三分糖——甜品店网站设计与实现 计算机毕业设计原创定制
  • 2025春季NC:3.1TheTrapeziumRule
  • 哈希表的线性探测C语言实现
  • 嵌入式学习笔记 - HAL_xxx_MspInit(xxx);函数
  • 生成式AI全栈入侵:当GPT-4开始自动编写你的Next.js路由时,人类开发者该如何重新定义存在价值?
  • 梯度下降法
  • MySQL 调优
  • 使用 IntersectionObserver 实现懒加载提升网页性能的高效方案
  • Make + OpenOCD 完成STM32构建+烧录
  • [论文解析]Mip-Splatting: Alias-free 3D Gaussian Splatting
  • 探索 AI 在文化遗产保护中的新使命:数字化修复与传承
  • Unity中文件上传以及下载,获取下载文件大小的解决方案
  • 1--Python基础课程实验指导书
  • Postman脚本处理各种数据的变量
  • 常见的六种大语言模型微调框架
  • Go设计模式-观察者模式
  • html初识
  • 求解,如何控制三相无刷电机?欢迎到访评论
  • 【家政平台开发(81)】让家政服务“绿”起来:平台绿色环保服务推广指南
  • 【Castle-X机器人】五、物联网模块配置与调试
  • 【源码+文档+调试讲解】基于springboot的健身房管理系统
  • 怎样理解ceph?
  • vue3获取麦克风权限通过websocket进行通话
  • 【AI提示词】财务顾问
  • 《TCP/IP详解 卷1:协议》之第七、八章:Ping Traceroute