欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語(yǔ)言函數(shù)基礎(chǔ)教程分類自定義參數(shù)及調(diào)用示例詳解

 更新時(shí)間:2021年11月24日 16:26:18   作者:鹿九丸  
這篇文章主要為大家介紹了C語(yǔ)言函數(shù)的基礎(chǔ)教程,主要包含C語(yǔ)言函數(shù)的分類,C語(yǔ)言函數(shù)自定義,C語(yǔ)言函數(shù)的參數(shù)及C語(yǔ)言函數(shù)的調(diào)用示例詳解,有需要的朋友可以借鑒參考下

1.? 函數(shù)是什么?

提到函數(shù),我們最先想到的肯定是數(shù)學(xué)中的函數(shù),那么C語(yǔ)言中的函數(shù)究竟是什么呢?接下來(lái)帶大家看一下吧!

維基百科中對(duì)函數(shù)的定義:子程序

在計(jì)算機(jī)科學(xué)中,子程序(英語(yǔ):Subroutine, procedure, function, routine, method, subprogram, callable unit),是一個(gè)大型程序中的某部分代碼, 由一個(gè)或多個(gè)語(yǔ)句塊組 成。它負(fù)責(zé)完成某項(xiàng)特定任務(wù),而且相較于其他代 碼,具備相對(duì)的獨(dú)立性。 一般會(huì)有輸入?yún)?shù)并有返回值,提供對(duì)過(guò)程的封裝和細(xì)節(jié)的隱藏。這些代碼通常被集成為軟 件庫(kù)。

2.??C語(yǔ)言中函數(shù)的分類

2.1?庫(kù)函數(shù)

2.1.1 為什么要有庫(kù)函數(shù)

1. 我們知道在我們學(xué)習(xí)C語(yǔ)言編程的時(shí)候,總是在一個(gè)代碼編寫完成之后迫不及待的想知道結(jié)果,想把這個(gè)結(jié)果打印到我們的屏幕上看看。這個(gè)時(shí)候我們會(huì)頻繁的使用一個(gè)功能:將信息按照一定的格 式打印到屏幕上(printf)。

2. 在編程的過(guò)程中我們會(huì)頻繁的做一些字符串的拷貝工作(strcpy)。

3. 在編程是我們也計(jì)算,總是會(huì)計(jì)算n的k次方這樣的運(yùn)算(pow)。

像上面我們描述的基礎(chǔ)功能,它們不是業(yè)務(wù)性的代碼。我們?cè)陂_(kāi)發(fā)的過(guò)程中每個(gè)程序員都可能用的到, 為了支持可移植性和提高程序的效率,所以C語(yǔ)言的基礎(chǔ)庫(kù)中提供了一系列類似的庫(kù)函數(shù),方便程序員進(jìn)行軟件開(kāi)發(fā)。

2.1.2?什么是庫(kù)函數(shù)

那么什么是庫(kù)函數(shù)呢?舉個(gè)簡(jiǎn)單的例子,庫(kù)函數(shù)就是C語(yǔ)言本身給我們已經(jīng)定義好的函數(shù),作為程序員我們可以直接使用,就像printf()和scanf()。

注意:使用庫(kù)函數(shù)必須包含頭文件,例如我們使用printf()與scanf()時(shí)要引用stdio.h頭文件,即我們通常寫的#include<stdio.h>

2.1.3 主函數(shù)只能是main()嗎

很多小伙伴就疑惑了,那么主函數(shù)是什么呢?主函數(shù)為什么叫main函數(shù)呢?我們必須使用main()函數(shù)嗎?接下來(lái)給大家解除這個(gè)疑惑!

首先給大家一個(gè)結(jié)論,C語(yǔ)言中默認(rèn)main作為主函數(shù)的名字,但是主函數(shù)的名字卻不一定一定是main(),實(shí)際上,我們可以自己進(jìn)行設(shè)定主函數(shù)的名字的,C語(yǔ)言中提供了#pragma comment()可以自己設(shè)定主函數(shù)的名字,有興趣的小伙伴可以自己去嘗試,在這個(gè)地方像喲啊告訴大家,作為程序的入口主函數(shù)的名字不一定必須是main(),希望大家可以記住這個(gè)!至于主函數(shù)為什么叫main()函數(shù),這本身就是C語(yǔ)言默認(rèn)的,如果硬要強(qiáng)行解釋一波的話,main()的英文意識(shí) 就是主要的意思。

2.1.4常見(jiàn)的庫(kù)函數(shù)

  • IO函數(shù)
  • 字符串操作函數(shù)
  • 字符操作函數(shù)
  • 內(nèi)存操作函數(shù)
  • 時(shí)間/日期函數(shù)
  • 數(shù)學(xué)函數(shù)
  • 其他庫(kù)函數(shù)

這個(gè)地方不會(huì)展開(kāi)去講,后期用到的時(shí)候具體講解。

2.2 自定義函數(shù)

2.2.1自定義函數(shù)是什么

自定義函數(shù)就是程序員自己定義用于首先特定功能的函數(shù)!比如我們要完成兩個(gè)數(shù)的相加我們定義的add()函數(shù)就屬于自定義函數(shù)。

2.2.2為什么要有自定義函數(shù)

自定義函數(shù)和庫(kù)函數(shù)一樣,有函數(shù)名,返回值類型和函數(shù)參數(shù)。

但是不一樣的是這些都是我們自己來(lái)設(shè)計(jì)。這給程序員一個(gè)很大的發(fā)揮空間。

2.2.3函數(shù)的組成

ret_type fun_name(para1, *)
{
	statement;//語(yǔ)句項(xiàng)
}
ret_type 返回類型
fun_name 函數(shù)名
para1    函數(shù)參數(shù)

2.2.4 舉例展示

(1)寫一個(gè)函數(shù)可以找出兩個(gè)整數(shù)中的最大值。

#include <stdio.h>
//get_max函數(shù)的設(shè)計(jì)
int get_max(int x, int y)
{
	return (x > y) ? (x) : (y);
}
int main()
{
	int num1 = 10;
	int num2 = 20;
	int max = get_max(num1, num2);
	printf("max = %d\n", max);
	return 0;
}

這個(gè)地方給大家解釋一下三目運(yùn)算符,即上面的(x>y)?(x):(y),這個(gè)地方表示的是,如果x>y成立,就返回x的值,反之就返回y的值,這樣就達(dá)到了求最大值的目的!

(2)寫一個(gè)函數(shù)求兩個(gè)數(shù)的和

#include <stdio.h>
//get_add函數(shù)的設(shè)計(jì)
int get_add(int x, int y)
{
	return (x + y);
}
int main()
{
	int num1 = 10;
	int num2 = 20;
	int sum = get_add(num1, num2);
	printf("sum = %d\n", sum);
	return 0;
}

3. 函數(shù)的參數(shù)

3.1 實(shí)際參數(shù)(實(shí)參)

真實(shí)傳給函數(shù)的參數(shù),叫實(shí)參。 實(shí)參可以是:常量、變量、表達(dá)式、函數(shù)等。

注意:為什么可以是函數(shù)呢?因?yàn)橛械暮瘮?shù)是由返回值的,所以自然也就能充當(dāng)實(shí)參。

無(wú)論實(shí)參是何種類型的量,在進(jìn)行函數(shù)調(diào)用時(shí),它們都必須有確定的值,以便把這些值傳送給形 參。

3.2? 形式參數(shù)(形參)

形式參數(shù)是指函數(shù)名后括號(hào)中的變量,因?yàn)樾问絽?shù)只有在函數(shù)被調(diào)用的過(guò)程中才實(shí)例化(分配內(nèi) 存單 元),所以叫形式參數(shù)。形式參數(shù)當(dāng)函數(shù)調(diào)用完成之后就自動(dòng)銷毀了。因此形式參數(shù)只在函數(shù)中有效。

為什么這樣說(shuō)呢?接下來(lái)給大家舉個(gè)例子吧!

例如我們要交換兩個(gè)變量的值:

#include <stdio.h>
void swap(int x, int y)
{
	int temp = x;
	x = y;
	y = temp;
}
int main()
{
	int num1 = 10;
	int num2 = 20;
	swap(num1, num2);
	printf("num1 = %d\nnum2 = %d", num1,num2);
	return 0;
}

下面是代碼的運(yùn)行結(jié)果:

很明顯,并沒(méi)有達(dá)成交換的目的,這就證明了:形式參數(shù)當(dāng)函數(shù)調(diào)用完成之后就自動(dòng)銷毀了,即我們把num1和num2傳給x和y之后,雖然我們?cè)诤瘮?shù)例將x和y交換了,但是由于x和y在swap函數(shù)調(diào)用完成后就銷毀了,即并沒(méi)有真正實(shí)現(xiàn)num1和num2的交換。

所以我們可以簡(jiǎn)單的認(rèn)為:形參實(shí)例化之后其實(shí)相當(dāng)于實(shí)參的一份臨時(shí)拷貝。

4. 函數(shù)的調(diào)用

4.1 傳值調(diào)用

函數(shù)的形參和實(shí)參分別占有不同內(nèi)存塊,對(duì)形參的修改不會(huì)影響實(shí)參。我們上述的交換的例子就是傳值調(diào)用,即并不能真正達(dá)成交換兩個(gè)變量的值的目的!

4.2??傳址調(diào)用

傳址調(diào)用是把函數(shù)外部創(chuàng)建變量的內(nèi)存地址傳遞給函數(shù)參數(shù)的一種調(diào)用函數(shù)的方式。

這種傳參方式可以讓函數(shù)和函數(shù)外邊的變量建立起真正的聯(lián)系,也就是函數(shù)內(nèi)部可以直接操 作函數(shù)外部的變量。

同樣,我們就以前面的交換兩個(gè)變量的值的例子來(lái)給大家進(jìn)行舉例!

#include <stdio.h>
void swap(int *x, int *y)
{
	int temp = *x;
	*x = *y;
	*y = temp;
}
int main()
{
	int num1 = 10;
	int num2 = 20;
	swap(&num1, &num2);
	printf("num1 = %d\nnum2 = %d", num1,num2);
	return 0;
}

這個(gè)地方為什么會(huì)發(fā)生這種情況呢?等后期我們學(xué)到指針的那一節(jié)的時(shí)候?qū)?huì)具體講解!

4.3 練習(xí)

4.3.1. 寫一個(gè)函數(shù)判斷一年是不是閏年。

#include<stdio.h>
int is_leap_year(int year)
{
	if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}
int main()
{
	int year = 0;
	int flag = 0;
	scanf("%d", &year);
	flag=is_leap_year(year);
	if (1 == flag)
	{
		printf("是閏年!");
	}
	else
	{
		printf("不是閏年!");
	}
	return 0;
}

4.3.2.寫一個(gè)函數(shù)可以判斷一個(gè)數(shù)是不是素?cái)?shù)。

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

4.3.3??寫一個(gè)函數(shù),實(shí)現(xiàn)一個(gè)整形有序數(shù)組的二分查找。

#include<stdio.h>
int find_num(int arr[], int size,int k)
{
	int left = 0;
	int right = 0;
	right = size - 1;
	int mid = 0;
	while (left <= right)
	{
		mid = (left + right) / 2;
		if (arr[mid] < k)
		{
			left = mid + 1;
		}
		else if (arr[mid] > k)
		{
			right = mid - 1;
		}
		else
		{
			return mid;
		}
	}
	if (left > right)
	{
		return -1;
	}
}
int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int k = 7;
	int size = 0;
	size = sizeof(arr) / sizeof(arr[0]);
	int ret = 0;
	ret = find_num(arr, size,k);
	if (-1 == ret)
	{
		printf("沒(méi)有找到!");
	}
	else
	{
		printf("找到了!下標(biāo)為%d", ret);
	}
	return 0;
}

以上就是C語(yǔ)言函數(shù)基礎(chǔ)教程分類自定義參數(shù)及調(diào)用示例詳解的詳細(xì)內(nèi)容,更多關(guān)于C語(yǔ)言函數(shù)分類自定義參數(shù)及調(diào)用的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C/C++中字符串流詳解及其作用介紹

    C/C++中字符串流詳解及其作用介紹

    這篇文章主要介紹了C/C++中字符串流詳解及其作用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • opencv3/C++關(guān)于移動(dòng)對(duì)象的輪廓的跟蹤詳解

    opencv3/C++關(guān)于移動(dòng)對(duì)象的輪廓的跟蹤詳解

    今天小編就為大家分享一篇opencv3/C++關(guān)于移動(dòng)對(duì)象的輪廓的跟蹤詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • C++中Semaphore內(nèi)核對(duì)象用法實(shí)例

    C++中Semaphore內(nèi)核對(duì)象用法實(shí)例

    這篇文章主要介紹了C++中Semaphore內(nèi)核對(duì)象用法實(shí)例,有助于深入了解信號(hào)量(Semaphore)的基本用法,需要的朋友可以參考下
    2014-10-10
  • 總結(jié)C/C++面試中可能會(huì)碰到的字符串指針題

    總結(jié)C/C++面試中可能會(huì)碰到的字符串指針題

    C/C++是最能體現(xiàn)程序員能力的語(yǔ)言之一,其功能強(qiáng)大,在IT行業(yè)的各個(gè)方面都有大量的應(yīng)用。下面這篇文章主要介紹了總結(jié)了在C/C++面試中可能會(huì)碰到的字符串指針題,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-01-01
  • 匯編語(yǔ)言常見(jiàn)錯(cuò)誤信息中文注解

    匯編語(yǔ)言常見(jiàn)錯(cuò)誤信息中文注解

    這篇文章主要介紹了匯編語(yǔ)言常見(jiàn)錯(cuò)誤信息中文注解,本文收集大部分匯編中常見(jiàn)錯(cuò)誤信息及對(duì)應(yīng)的中文注解,需要的朋友可以參考下
    2014-09-09
  • C++簡(jiǎn)單實(shí)現(xiàn)shared_ptr的代碼

    C++簡(jiǎn)單實(shí)現(xiàn)shared_ptr的代碼

    智能指針用于資源管理,為了保證資源的操作得到順利的執(zhí)行防止資源泄露,因此大多數(shù)實(shí)現(xiàn)都以noexcept在參數(shù)列表后聲明為不拋出異常,這篇文章主要介紹了C++簡(jiǎn)單實(shí)現(xiàn)shared_ptr的代碼,需要的朋友可以參考下
    2022-09-09
  • C++ STL中的常用遍歷算法分享

    C++ STL中的常用遍歷算法分享

    這篇文章主要為大家詳細(xì)介紹了C++ STL中兩個(gè)常用的遍歷算法,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)與借鑒價(jià)值,感興趣的小伙伴可以參考一下
    2022-12-12
  • 淺談C++基類的析構(gòu)函數(shù)為虛函數(shù)

    淺談C++基類的析構(gòu)函數(shù)為虛函數(shù)

    本文重點(diǎn):應(yīng)該為多態(tài)基類聲明虛析構(gòu)器。一旦一個(gè)類包含虛函數(shù),它就應(yīng)該包含一個(gè)虛析構(gòu)器。如果一個(gè)類不用作基類或者不需具有多態(tài)性,便不應(yīng)該為它聲明虛析構(gòu)器。
    2015-10-10
  • C語(yǔ)言動(dòng)態(tài)規(guī)劃多種背包問(wèn)題分析講解

    C語(yǔ)言動(dòng)態(tài)規(guī)劃多種背包問(wèn)題分析講解

    背包問(wèn)題(Knapsack problem)是一種組合優(yōu)化的NP完全問(wèn)題。問(wèn)題可以描述為:給定一組物品,每種物品都有自己的重量和價(jià)格,在限定的總重量?jī)?nèi),我們?nèi)绾芜x擇,才能使得物品的總價(jià)格最高
    2022-04-04
  • c語(yǔ)言 深入理解函數(shù)的遞歸

    c語(yǔ)言 深入理解函數(shù)的遞歸

    這一章講解的是函數(shù)的遞歸,因?yàn)檫f歸函數(shù)是一個(gè)非常重要求解復(fù)雜問(wèn)題的方法之一,在學(xué)習(xí)算法的過(guò)程之中我們也會(huì)遇到他,所以我想對(duì)它進(jìn)行一次講解,希望能幫助其他人,也能幫助我自己來(lái)梳理一遍。下面我會(huì)通過(guò)一些題目的講解去認(rèn)識(shí)遞歸函數(shù)
    2022-02-02

最新評(píng)論