IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> c语言函数 -> 正文阅读

[C++知识库]c语言函数

首先我们要知道什么是函数,有一个定义是能完成模块化的功能的作用叫做函数。在C语言中常见的函数有io输入输出函数,字符操作函数,字符串操作函数,时间/日期函数,数学函数,其他库函数等等。

在这里推荐一个网站叫做ccplus.com在里面我们可以找到C语言所有的库函数,并且含有使用方法和简介,大家要试着会读这些网站里面的函数。

下面我给大家介绍几个库函数:

1.strcpy()---string? copy 函数,即字符串拷贝函数,它包含在string.h>头文件,我们在ccplus网站可以看到他是这样的char*strcpy(char *destination,const char*source);即把source复制到destination中,需要注意的是会连同\0一起复制过去。

下面看代码实例:

#include<stdio.h>
#include<string.h>
int main(){
char arr1[]="bit";
char arr2[20]="########";
strcpy(arr2,arr1);
printf("%s\n",arr2);
return 0;}

代码运行结果是bit。

2.memset--memory set(内存设置函数)

使用方法:

int main(){
char arr[]="hello world";
memset(arr,'*',5);//第一个是需要替换的地址,第二个是替换的内容,第三个是替换的个数
printf("%s\n"arr);

当然C语言最重要的还是自定义函数,也就是程序员自己为了想要实现某个功能而写的函数。

程序员想要设立一个自定义函数需要设立函数名,函数参数,和返回类型。

下面我们来看一个实现加法的自定义函数代码:

#include<stdio.h>
int add(int x,int y){
int z=0;
z=x+y;
return z;}
int main(){
int a=10;
int b=10;
int sum=add(a,b);
printf("%d\n",sum);
return 0;}

下面我们来看这样一串代码:

#include<stdio.h>
int get_max(int x,int y){
if(x>y)
return x;
else
return y;}
int main(){
int a=20;
int b=10;
int max=get_max(a,b);
printf("max=%d\n",max);
return 0;}

这是一个比较两个数大小的函数,结果是20。

我们再来看这样一串代码:

#include<stdio.h>
void swap(int x,int y){
int tmp=0;
tmp=x;
x=y;
y=tmp;}
int main(){
int a=10;
int b=20;
printf("a=%d  b=%d\n",a,b);
swap(a,b);
printf("a=%d b=%d\n",a,b);
return 0;}

可以看出编写这段代码的人是希望交换a,b,两个数的,但是最后代码的运行结果却不尽如意。那么是哪里出现问题了呢?在这里我们要介绍实参和形参,在这个代码里面实参就是a和b,形参就是swap函数定义的x和y。我们在用swap函数的时候把a,b这样两个实参传递给了x和y这样两个形式参数,所以说形参就是实参的一份临时拷贝,只有在调用函数的时候才会为形参开辟一片空间,在执行完函数的时候就会释放,所以在swap函数里面,x和·y虽然暂时有了ab的值,但是在swap函数中对形参x和y的改变是不会影响实参ab的值的,所以说最后ab的值没有交换,这就是我们在函数中常说到的值传递。

下面看这样一串代码就解决了这样的一个问题:

#include<stdio.h>
void swap(int *pa,int *pb){
int tmp=0;
tmp=*pa;
*pa=*pb;
*pb=tmp;}
int main(){
int a=10;
int b=20;
printf("a=%d b=%d\n",a,b);
swap(&a,&b);
printf("a=%d b=%d\n",a,b);
return 0;}

这样是把ab的地址传给了形参,所以可以直接改变ab。

在上面我们可以知道函数的调用有两种:一种是传值调用(函数的形参和实参分别占用不同的内存块,形参的改变不会影响实参的值);还有一种是传址调用(是把函数创建变量的内存地址传递给函数参数的一种调用函数的方式,这种方式可以让函数与函数外部建立起真正的联系。)

下面我们来进行几个用函数实现问题的联系:

1.写一个函数判断是否素数

#include<stdio.h>
#include<math.h>
int is_prime(int n){
int j=0;
for(j=2;j<=sqrt(n);j++){
if(n%j==0)
return 0;}
else
return 1;}
int main(){
int i=0;
for(i=100;i<=200;i++){
if(is_prime(i)==1)
printf("%d ",i);}}

2.写一个函数判断是否闰年

#include<stdio.h>
int is_leap_year(int y){
if((y%4==0&& y%100!=0)||(y%400==0))
return 1;
else 
return 0;}
int main(){
int year=0;
for(year=1000;year<=2000;year++){
if(is_leap_year(year)==1){
printf("%d",year);}}
return 0;}

3.写一个函数实现一个整型有序数组的二分查找:

功能实现:在一个有序数组中查找某个具体的数。如果找到了返回下标,找不到的化返回-1,通过对被查找元素的左右下标确定中间下标,当left和right交错的时候不可查找。

代码端:

#include<stdio.h>
int binary_searchh(int arr[],int k,int sz){
int left=0;
int right=sz-1;
while(left<=right){
int mid=(left+right)/2;//中间元素的下标
if(arr[mid]<k){
left=mid+1;
}
else if(arr[mid]>k){
right=mid-1;}
else{
return mid;
}}
return -1;}
int main(){
int arr[]={1,2,3,4,5,6,7,8,9,10};
int k=7;
int sz=sizeof(arr)/sizeof(arr[0]);
int ret=binary_search(arr,k,sz);
if(ret==-1){
printf("找不到指定的数字\n"):
else{
printf("找到了,下标是:%d\n",ret);
}
return 0;
}

写这个代码需要注意的地方就是用sizeof计算长度的时候要放在主函数中,因为如果放在自定义函数中的话,本质上是传递的arr数组首元素的地址,而不是数组整体,所以形参的arr是一个指针,当计算sizeof(arr)的时候就是4。还有就是要注意while循环里面的条件是需要等于的。求中间元素下标的语句需要放到循环里面。既要处理找到的情况也要处理没找到的情况。

函数的嵌套和链式访问:

函数嵌套就是说函数和函数之间是可以有机组合的

链式访问是指可以把一个函数的返回值作为另一个函数的参数。

即int len=0; len=strlen("abc"); printf("%d\n",len);等价于printf("%d\n",strlen(abc));

这里的printf函数和strlen函数就嵌套使用了

还有这样一个语句:printf("%d",printf("%d",printf("%d",43)));

最后打印的结果是4321,因为printf函数的返回值是所打印字符的个数。

函数的声明和定义:

就是说如果函数是在主函数后面定义的话,需要现在前面进行声明。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-07 11:49:05  更:2021-08-07 11:50:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/9 15:39:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码