中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言函數分類自定義參數及調用方法是什么

發布時間:2021-11-24 17:48:03 來源:億速云 閱讀:214 作者:iii 欄目:開發技術

本篇內容主要講解“C語言函數分類自定義參數及調用方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C語言函數分類自定義參數及調用方法是什么”吧!

1.  函數是什么?

提到函數,我們最先想到的肯定是數學中的函數,那么C語言中的函數究竟是什么呢?接下來帶大家看一下吧!

維基百科中對函數的定義:子程序

在計算機科學中,子程序(英語:Subroutine, procedure, function, routine, method, subprogram, callable unit),是一個大型程序中的某部分代碼, 由一個或多個語句塊組 成。它負責完成某項特定任務,而且相較于其他代 碼,具備相對的獨立性。 一般會有輸入參數并有返回值,提供對過程的封裝和細節的隱藏。這些代碼通常被集成為軟 件庫。

2.  C語言中函數的分類

2.1 庫函數

2.1.1 為什么要有庫函數

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

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

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

像上面我們描述的基礎功能,它們不是業務性的代碼。我們在開發的過程中每個程序員都可能用的到, 為了支持可移植性和提高程序的效率,所以C語言的基礎庫中提供了一系列類似的庫函數,方便程序員進行軟件開發。

2.1.2 什么是庫函數

那么什么是庫函數呢?舉個簡單的例子,庫函數就是C語言本身給我們已經定義好的函數,作為程序員我們可以直接使用,就像printf()和scanf()。

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

2.1.3 主函數只能是main()嗎

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

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

2.1.4常見的庫函數
  • IO函數

  • 字符串操作函數

  • 字符操作函數

  • 內存操作函數

  • 時間/日期函數

  • 數學函數

  • 其他庫函數

這個地方不會展開去講,后期用到的時候具體講解。

2.2 自定義函數

2.2.1自定義函數是什么

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

2.2.2為什么要有自定義函數

自定義函數和庫函數一樣,有函數名,返回值類型和函數參數。

但是不一樣的是這些都是我們自己來設計。這給程序員一個很大的發揮空間。

2.2.3函數的組成
ret_type fun_name(para1, *)
{
	statement;//語句項
}
ret_type 返回類型
fun_name 函數名
para1    函數參數
2.2.4 舉例展示

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

#include <stdio.h>
//get_max函數的設計
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;
}

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

(2)寫一個函數求兩個數的和

#include <stdio.h>
//get_add函數的設計
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. 函數的參數

3.1 實際參數(實參)

真實傳給函數的參數,叫實參。 實參可以是:常量、變量、表達式、函數等。

注意:為什么可以是函數呢?因為有的函數是由返回值的,所以自然也就能充當實參。

無論實參是何種類型的量,在進行函數調用時,它們都必須有確定的值,以便把這些值傳送給形 參。

3.2  形式參數(形參)

形式參數是指函數名后括號中的變量,因為形式參數只有在函數被調用的過程中才實例化(分配內 存單 元),所以叫形式參數。形式參數當函數調用完成之后就自動銷毀了。因此形式參數只在函數中有效。

為什么這樣說呢?接下來給大家舉個例子吧!

例如我們要交換兩個變量的值:

#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;
}

下面是代碼的運行結果:

C語言函數分類自定義參數及調用方法是什么

很明顯,并沒有達成交換的目的,這就證明了:形式參數當函數調用完成之后就自動銷毀了,即我們把num1和num2傳給x和y之后,雖然我們在函數例將x和y交換了,但是由于x和y在swap函數調用完成后就銷毀了,即并沒有真正實現num1和num2的交換。

所以我們可以簡單的認為:形參實例化之后其實相當于實參的一份臨時拷貝。

4. 函數的調用

4.1 傳值調用

函數的形參和實參分別占有不同內存塊,對形參的修改不會影響實參。我們上述的交換的例子就是傳值調用,即并不能真正達成交換兩個變量的值的目的!

4.2  傳址調用

傳址調用是把函數外部創建變量的內存地址傳遞給函數參數的一種調用函數的方式。

這種傳參方式可以讓函數和函數外邊的變量建立起真正的聯系,也就是函數內部可以直接操 作函數外部的變量。

同樣,我們就以前面的交換兩個變量的值的例子來給大家進行舉例!

#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;
}

這個地方為什么會發生這種情況呢?等后期我們學到指針的那一節的時候將會具體講解!

4.3 練習

4.3.1. 寫一個函數判斷一年是不是閏年。
#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.寫一個函數可以判斷一個數是不是素數。
#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  寫一個函數,實現一個整形有序數組的二分查找。
#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("沒有找到!");
	}
	else
	{
		printf("找到了!下標為%d", ret);
	}
	return 0;
}

到此,相信大家對“C語言函數分類自定義參數及調用方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

囊谦县| 太康县| 镇江市| 武冈市| 大荔县| 仁寿县| 襄城县| 嘉义市| 莒南县| 静乐县| 卢氏县| 花莲市| 漯河市| 鹤峰县| 资阳市| 玉田县| 鲁山县| 浏阳市| 仁化县| 旺苍县| 临湘市| 资兴市| 云梦县| 金门县| 介休市| 平定县| 灵寿县| 嘉义市| 武鸣县| 如东县| 怀柔区| 蒙自县| 眉山市| 虎林市| 韩城市| 邵阳县| 台湾省| 怀集县| 喀什市| 高密市| 沁水县|