C语言之函数题
目录
1.乘法口诀表
2.交换两个整数
3.函数判断闰年
4.函数判断素数
5.计算斐波那契数
6.递归实现n的k次方
7.计算一个数的每位之和(递归)
8.字符串逆序(递归实现)
9.strlen的模拟(递归实现)
10.求阶乘
11.打印一个数的每一位
12.概念辨析总结tips
今天分享一些练习题🙂🙂,快开学了,烦躁的很。
1.乘法口诀表
2.交换两个整数
3.函数判断闰年
4.函数判断素数
5.计算斐波那契数
6.递归实现n的k次方
7.计算一个数的每位之和(递归实现)
8.字符串逆序(递归实现)
9.strlen的模拟(递归实现)
10.求阶乘
11.打印一个数的每一位
12.使用函数实现数组操作
13.冒泡排序
14.【一维数组】交换数组
1.乘法口诀表
//题目1
//乘法口诀表
//实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定
如:输入9,输出9*9口诀表,输出12,输出12*12的乘法口诀表。//乘法口诀表
//1*1=1
//2*1=2 2*2=4 ....
//3*1=3 3*2=6 ....
//....
//嵌套循环
//先打印行再打印列//美观
//2d占两个位置,d占一个位置
//-2d是左对齐两个位置
//题目1
#include<stdio.h>
void test(int n)//实现乘法口诀
{int i = 1;int j = 1;for (i = 1; i <= n; i++)//1 2...{for (j = 1; j <= i; j++)//1 2...{printf("%-d*%-d=%-2d ", i, j, i * j);//-2d左对齐两个空位}printf("\n");}
}
int main()
{int n = 0;scanf("%d", &n);//输入一个数字test(n);return 0;
}

2.交换两个整数
//题目2
//交换两个整数
//实现一个函数来交换两个整数的内容。
//传值VS传址
//题目2
//交换两个整数
#include<stdio.h>
void test1(int a, int b)//传值不能改变ab
{int tmp = 0;tmp = a;a = b;b = tmp;
}void test2(int* pa, int* pb)//传值不能改变ab
{int tmp = 0;tmp = *pa;*pa = *pb;*pb = tmp;
}
int main()
{int a = 0;int b = 0;scanf("%d %d", &a, &b);test1(a,b);printf("a=%d b=%d\n", a, b);test2(&a, &b);printf("a=%d b=%d", a, b);return 0;

3.函数判断闰年
//题目3
//函数判断闰年
//实现函数判断year是不是润年。
//能被4整除同时不能被10整除
//或者能被40整除
//题目3
//判断闰年
#include<stdio.h>
int test(int year)
{if (((year % 4 == 0) && (year % 10 != 0 ))|| (year % 40 == 0))return 1;elsereturn 0;
}
int main()
{int year = 0;scanf("%d", &year);int ret=test(year);if (ret == 1)printf("是闰年\n");if (ret == 0)printf("不是闰年\n");return 0;
}

4.函数判断素数
//题目4
//函数判断素数
//实现一个函数is_prime,判断一个数是不是素数。
利用上面实现的is_prime函数,打印100到200之间的素数。//除到sqrt(i)
//奇数
//题目四
//函数判断素数
#include<stdio.h>
#include<math.h>
void is_prime(int i)
{int j = 0;int flag = 0;for (j = 2; j < sqrt(i); j++){if (i % j == 0)//(0==i%j){flag = 1;break;//不是素数} }if (flag == 0)printf("%d ", i);
}
int main()
{int i = 0;for (i = 100; i <= 200; i++)//进入100~200之间的数{is_prime(i);//函数实现}return 0;
}

5.计算斐波那契数
//题目5
//计算斐波那契数
//递归和非递归分别实现求第n个斐波那契数
例如:
输入:5 输出:5
输入:10, 输出:55
输入:2, 输出:1//1 1 2 3 5 8 13 21....
//a b c
// a b c
//题目五
//计算斐波那契数
//递归
//1 1 2 3 5 8 13....
#include<stdio.h>
int test(int n)
{if (n <= 2)return 1;elsereturn test(n - 2) + test(n - 1);
}
int main()
{int n = 0;scanf("%d", &n);int ret = test(n);printf("%d", ret);return 0;
}
//非递归
#include<stdio.h>
int main()
{int n = 0;scanf("%d", &n);//输入查找的数int a = 1;int b = 1;int c = 2;while(n>3){//进入循环c必须是2a = b;b = c;c = a + b;n--;}printf("%d",c);return 0;
}#include<stdio.h>
int main()
{int n = 0;scanf("%d", &n);//输入查找的数int a = 1;int b = 1;int c = 1;//当n<2 输出1while (n > 2){//进入循环c必须是2c = a + b;a = b;b = c;n--;}printf("%d", c);return 0;
}

6.递归实现n的k次方
//题目6
//递归实现n的k次方
//编写一个函数实现n的k次方,使用递归实现。//n的k次方==n*n的k-1次方==n*n*n的k-2次方
//如果k=0无论k是几都输出1
//如果n>0,则return n*test(n,k-1)
//如果n<0,则1/n的k次方也就是。1/n的k次方→转化成正数计算
//题目六
//递归实现n的k次方
#include<stdio.h>
double test(int n, int k)
{if (k == 0)return 1;else if (k > 0)return n * test(n, k - 1);elsereturn 1.0 / test(n, -k);//转化成k>0去计算//return (1.0 / n) * test(1.0 / n, k-1);❌
}
int main()
{int n = 0;int k = 0;scanf("%d %d", &n, &k);double ret=test(n, k);printf("%lf", ret);return 0;
}


7.计算一个数的每位之和(递归)
//题目7
//计算一个数的每位之和(递归)
//写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
输入:1729,输出:19
//题目七
//计算一个数的每位之和
#include<stdio.h>
int test(int n)
{if (n <= 9)//个位数return n;elsereturn test(n / 10)+n%10;
}
int main()
{int n = 0;scanf("%d", &n);int ret = test(n);printf("%d", ret);return 0;
}

8.字符串逆序(递归实现)
//题目8
//字符串逆序(递归实现)
//编写一个函数 reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列,不是逆序打印。
要求:不能使用C函数库中的字符串操作函数。
比如:
char arr[] = "abcdef";
逆序之后数组的内容变成:fedcba
非递归

//非递归
#include<stdio.h>
void reverse_string(char arr[], int sz)
{int left = 0;int right = sz-2;//易错while (left < right){char tmp = arr[left];arr[left] = arr[right];arr[right] = tmp;left++;right--;}
}
int main()
{char arr[] = "abcdef";int sz = sizeof(arr)/sizeof(arr[0]);reverse_string(arr,sz);printf("%s\n", arr);return 0;
}
递归
//递归
#include<stdio.h>
void reverse_string(char s[])
{size_t len = strlen(s);//计算的是\0前面的字符串的长度char tmp = s[0];s[0] = s[len - 1];s[len-1] = '\0';if (strlen(s + 1) >= 2)//需要加上\0,因为把置换right修改成了\0//逆序元素个数必须大于等于2才可以逆序reverse_string(s + 1);s[len - 1] = tmp;}
int main()
{char arr[] = "abcdef"; reverse_string(arr);printf("%s\n", arr);return 0;
}

9.strlen的模拟(递归实现)
//题目9
//strlen的模拟(递归实现)
//递归和非递归分别实现strlen
//题目九
// strlen模拟
// strlen的含义是:求字符串中有效字符的长度,不包括\0。
//递归
#include<stdio.h>
int test(char arr[])
{if (*arr == '\0')//('\0' != *arr)return 0;elsereturn 1 + test(arr+1);
}
int main()
{char arr[] = "abcdef";int ret = test(arr);printf("%d", ret);return 0;
}
// strlen模拟
// strlen的含义是:求字符串中有效字符的长度,不包括\0。
//非递归
#include<stdio.h>
int test(char arr[])
{int count = 0;//while (*arr != '\0')while ('\0'!=*arr){count++;arr++;//arr+1;}return count;
}
int main()
{char arr[] = "abcdef";int ret=test(arr);printf("%d", ret);return 0;
}

10.求阶乘
//题目10
//求阶乘
//递归和非递归分别实现求n的阶乘(不考虑溢出的问题)
//题目十
//求阶乘
//递归
#include<stdio.h>
int test(int n)
{if (n == 1)return 1;elsereturn n * test(n - 1);
}
int main()
{int n = 0;scanf("%d", &n);int ret = test(n);printf("%d", ret);return 0;
}
//非递归
#include<stdio.h>
int main()
{int n = 0;scanf("%d", &n);int i = 0;int ret = 1;for (i = 1; i <= n; i++){ret = ret * i;}printf("%d", ret);return 0;
}

11.打印一个数的每一位
//题目11
//打印一个数的每一位
//递归方式实现打印一个整数的每一位
//题目十一
//打印一个数的每一位
#include<stdio.h>
void test(int n)
{if (n <= 9)printf("%d ", n);else//n>9{test(n / 10);printf("%d ", n%10);}
}
int main()
{int n = 0;scanf("%d", &n);test(n);return 0;
}

12.概念辨析总结tips
- 能把函数处理结果的两个数据返回给主调函数有哪些办法?
- 形参用两个指针
- 形参用数组
- 用两个全局变量_全局变量可以给各个函数直接使用,所以全局变量的控制就比较难,我们建议再自己的代码中尽量减少全局变量的使用
- 注意return不能返回两个数,return只能带回一个数。🆗🆗🆗🆗🆗!
#include<stdio.h>
//指针
void test1(int* pa, int* pb)
{*pa = 4;*pb = 3;
}
//数组
void test2(int arr[5])
{arr[0] = 4;arr[1] = 3;
}
int main()
{int a = 0;int b = 0;int arr[5] = { 0 };test1(&a, &b);test2(arr);printf("a=%d b=%d\n", a, b);printf("arr[0]=%d arr[1]=%d\n", arr[0], arr[1]);return 0;
}
//全局变量
int a = 1;
int b = 2;
int main()
{printf("a=%d b=%d", a, b);
}
- 函数可以传值调用,传值调用的时候形参是实参的一份零临时拷贝。
- 函数可以传址调用,传址调用的时候,可以通过形参操作实参。
- 函数可以嵌套调用,但是不能嵌套定义。
- 函数调用后不一定带回返回值,例如只是想把某部分代码封装起来,避免与其他代码进行交互的过程,所以函数不一定有返回值。
- 实际参数和形式参数可以同名。
- 形参是在函数调用的时候才实例化,才开辟内存空间的。
- 按照传值的方式传递,形参和实参各自有各自的空间,改变形参不能改变外部的实参。
- 按照传址的方式传递,改变形参就是改变实参。
- 函数间的数据传递可以使用全局变量。
- 主调函数和被调函数不一定在同一个函数里。
- 函数的定义可以放在任意位置,函数声明必须放在函数使用之前。
- 函数必须保证先声明在使用。
- 函数声明:告诉编译器函数返回值类型函数名字和函数所需要的参数。
- 函数定义:说明函数是怎么实现的。
- 函数设计应该最求高内聚低耦合。
- 高内聚低耦合:函数体内部实现修改了,尽量不要对外部产生影响,否则:代码不方便维护。
- 尽量少使用全局变量,全局变量每个方法都可以访问,但是很难保证数据的正确性和安全性。
- 函数的参数不易过多。
- 设计函数时,尽量做到谁申请的资源就由谁释放,否则如果交给外部者释放,外部使用者可能不知道或者忘记,就会造成资源泄露。
- 函数的参数可能是变量,也可能是常量,也可能是宏,也可能是指针等等。
- 库函数的使用必须要包含对应的头文件。
- 函数中的形式参数是在栈中保存 (见下面)
函数栈帧的创建与销毁_唐棣棣的博客-CSDN博客
https://blog.csdn.net/m0_74841364/article/details/132018109?spm=1001.2014.3001.5502
- 在一个函数内定义的变量只在本函数范围内有效。
- 在一个函数内复合语句中定义的变量只能在复合语句中使用。
- C语言规定,在一个源程序中,main函数的位置可以任意。
- 存在限制条件,当满足这个限制条件的时候,递归便不在继续。
- 每次递归调用之后越来越接近这个限制条件。
- 递归层次太深,会出现死循环和栈溢出现象。
- 递归解体的思路:
- 将问题转化为其子问题,子问题要与原问题具有相同的解法
- 递归的出口
- 编写函数的方法:TDD_测试驱动开发_test drived development
- 关于指针类型+1
- 关于判断条件反起写
- 数组字符串坐标
- strlen-1 == sz-2 VS strlen == sz-1
关于以上练习题,大家可以动手写一写。🙂🙂🙂
✔✔✔✔✔感谢大家的阅读,若有错误和不足,欢迎指正!
代码----------→【gitee:https://gitee.com/TSQXG】
联系----------→【邮箱:2784139418@qq.com】
相关文章:
C语言之函数题
目录 1.乘法口诀表 2.交换两个整数 3.函数判断闰年 4.函数判断素数 5.计算斐波那契数 6.递归实现n的k次方 7.计算一个数的每位之和(递归) 8.字符串逆序(递归实现) 9.strlen的模拟(递归实现) 10.求…...
SpringBoot的四种handler类型
Controller ReuestMapping 实现Controller接口 使用Component将该类封装成一个Bean 实现HttpRequestHandler 实现RouterFunction...
基于KNN算法的鸢尾花种类预测
导入数据 iris_data load_iris() iris_data.data[0:5, :]array([[5.1, 3.5, 1.4, 0.2],[4.9, 3. , 1.4, 0.2],[4.7, 3.2, 1.3, 0.2],[4.6, 3.1, 1.5, 0.2],[5. , 3.6, 1.4, 0.2]])# 特征值名称 iris_data.feature_names[sepal length (cm),sepal width (cm),petal length (cm…...
英语-面试
自我介绍 hi,my name is tzh,26 years old.I major in software engineering. I participate in the design and development of the social project and e-commerce project. I master java and algorithm. Im familiar with gateway,spring,springboot,springcloud,redis…...
文件传输协议
文章目录 一、FTP1. 定义2. 端口3. 数据传输方式主动方式被动方式 二、TFTP三、常用命令 首先可以看下思维导图,以便更好的理解接下来的内容。 一、FTP 1. 定义 文件传输协议(FTP)是一种用于在客户端和服务器之间进行文件传输的标准网络协…...
Llama-2大模型本地部署研究与应用测试
最近在研究自然语言处理过程中,正好接触到大模型,特别是在年初chatgpt引来的一大波AIGC热潮以来,一直都想着如何利用大模型帮助企业的各项业务工作,比如智能检索、方案设计、智能推荐、智能客服、代码设计等等,总得感觉…...
白嫖idea
白嫖idea 地址 https://www.jetbrains.com/toolbox-app/...
PyCharm切换虚拟环境
PyCharm切换虚拟环境 为了满足不同任务需要不同版本的包,可以在Anaconda或者Miniconda创建多个虚拟环境文件夹,并在PyCharm下切换虚拟环境。 解决方案 1、打开Ananconda Prompt 2、创建自己的虚拟环境 格式:conda create -n 虚拟环境名字…...
自动化运维工具-----Ansible入门详解
目录 一.Ansible简介 什么是Ansible? Ansible的特点 Ansible的架构 二.Ansible任务执行解析 ansible任务执行模式 ansible执行流程 ansible命令执行过程 三.Ansible配置解析 ansible的安装方式 ansible的程序结构(yum安装为例) ansibl…...
一、Mycat2介绍与下载安装
第一章 入门概述 1.1 是什么 Mycat 是数据库中间件。 1、数据库中间件 中间件:是一类连接软件组件和应用的计算机软件,以便于软件各部件之间的沟 通。 例子:Tomcat,web中间件。 数据库中间件:连接java应用程序和数据库…...
链表的介绍
链表是一种常用的数据结构,它可以动态地添加、删除、查找和遍历元素。链表由多个节点组成,每个节点包括一个数据项和一个指向下一个节点的指针。这种数据结构可以高效地插入和删除元素,但相对于数组来说,查找元素的效率较低。 插…...
深度剖析:数据服务API的安全性与隐私保护
随着互联网技术的飞速发展,数据服务API已经成为了企业和个人获取、处理和分析数据的重要工具。然而,数据服务API的安全问题也日益凸显,尤其是在用户隐私保护方面。本文将深入剖析数据服务API的安全性与隐私保护问题,并结合产品FDL…...
MediaPlayer音频与视频的播放介绍
作者:向阳逐梦 Android多媒体中的——MediaPlayer,我们可以通过这个API来播放音频和视频该类是Androd多媒体框架中的一个重要组件,通过该类,我们可以以最小的步骤来获取,解码和播放音视频。 它支持三种不同的媒体来源…...
【Terraform学习】Terraform模块基础操作(Terraform模块)
本站以分享各种运维经验和运维所需要的技能为主 《python》:python零基础入门学习 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8》暂未更新 《docker学习》暂未更新 《ceph学习》ceph日常问题解…...
改进的KMeans 点云聚类算法 根据体元中的点数量计算点密度,并获取前K个点密度最大的体元作为初始聚类中心(附 matlab 代码)
KMeans函数的主要逻辑如下: 使用InitCenter函数初始化聚类中心,该函数根据体元密度选择初始聚类中心。该函数的输入参数包括数据(data)、聚类中心数量(centerNum)和体元数量(voxelNum)。根据点云的取值范围计算包围盒的体积(V)和体元边长(d)。根据体元边长将点云数…...
php user.ini详解
0x00 前言 本篇主要是讲解分析一下user.ini相关的内容。因为这个知识点涉及到文件上传的绕过 0x01 正文 .user.ini 文件是PHP的配置文件,用于自定义PHP的配置选项。该文件通常位于PHP安装目录的根目录下,或者在特定的网站目录下。 .user.ini 文件是一…...
用 PHP 和 JavaScript 显示地球卫星照片
向日葵 8 号气象卫星是日本宇宙航空研究开发机构设计制造的向日葵系列卫星之一,重约 3500 公斤,设计寿命 15 年以上。该卫星于 2014 年 10 月 7 日由 H2A 火箭搭载发射成功,主要用于监测暴雨云团、台风动向以及持续喷发活动的火山等防灾领域。…...
Ubantu安装mongodb,开启远程访问和认证
最近因为项目原因需要在阿里云服务器上部署MongoDB,操作系统为Ubuntu,网上查阅了一些资料,特此记录一下步骤。 1.运行apt-get install mongodb命令安装MongoDB服务(如果提示找不到该package,说明apt-get的资源库版本比…...
高手速成|数据库脚本生成工具
高手速成|数据库脚本生成工具 文章目录 高手速成|数据库脚本生成工具前言1、软件的安装及使用2、建立新工程3、创建Conceptual Data Model(概念数据模型)4、将E-R图转化为其他数据库模型5、导出DBMS代码(Sql执行脚本)6、执行sql脚…...
振动国标2009GB/T 19873.2-2009/ISO 13373-2:2005笔记
国标原文 1.时域,要求,采样率大于最高频率10倍(最低频率?) 2.频域,要求采样率大于最高频率2倍。 3.3.2 积分和微分,二次积分。 3.3.3 均方根。 3.4 滤波 4.1 奈奎斯特图、极坐标图、坎贝尔…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
Ubuntu系统多网卡多相机IP设置方法
目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机,交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息,系统版本:Ubuntu22.04.5 LTS;内核版本…...
Spring Boot + MyBatis 集成支付宝支付流程
Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例(电脑网站支付) 1. 添加依赖 <!…...
