摘要:形式參數(shù)當(dāng)函數(shù)調(diào)用完成之后就自動(dòng)銷毀了。函數(shù)調(diào)用傳值調(diào)用函數(shù)的形參和實(shí)參分別占有不同內(nèi)存塊,對(duì)形參的修改不會(huì)影響實(shí)參。函數(shù)的聲明一般出現(xiàn)在函數(shù)的使用之前。它其實(shí)就數(shù)組訪問(wèn)的操作符。
數(shù)學(xué)中我們常見(jiàn)到函數(shù)的概念。但是你了解C語(yǔ)言中的函數(shù)嗎?
- 維基百科中對(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ù)。
庫(kù)函數(shù) 為什么會(huì)有庫(kù)函數(shù)?
- 我們知道在我們學(xué)習(xí)C語(yǔ)言編程的時(shí)候,總是在一個(gè)代碼編寫完成之后迫不及待的想知道結(jié)果,想把這個(gè)結(jié)果打印到我們的屏幕上看看。這個(gè)時(shí)候我們會(huì)頻繁的使用一個(gè)功能:將信息按照一定的格式打印到屏幕上,用到printf函數(shù)。
- 或者輸入一個(gè)數(shù)的時(shí)候,用到scanf函數(shù)。
- 向上面的描述的基礎(chǔ)功能,我們?cè)陂_(kāi)發(fā)的過(guò)程中每個(gè)程序員都可能用的到,為了支持可移植性和提高程序的效率,所以C語(yǔ)言的基礎(chǔ)庫(kù)中提供了一系列類似的庫(kù)函數(shù),方便程序員
進(jìn)行軟件開(kāi)發(fā)。
- 如果庫(kù)函數(shù)能干所有的事情,那還要程序員干什么?
- 所以更加重要的是自定義函數(shù)。
- 自定義函數(shù)和庫(kù)函數(shù)一樣,有函數(shù)名,返回值類型和函數(shù)參數(shù)。
- 但是不一樣的是這些都是我們自己來(lái)設(shè)計(jì)。這給程序員一個(gè)很大的發(fā)揮空間。
返回類型 函數(shù)名(參數(shù)類型 形式參數(shù)1,參數(shù)類型 形式參數(shù)2) { 函數(shù)體; 返回值;}
ret_type fun_name(para1, * ){ statement;//語(yǔ)句項(xiàng)}//ret_type 返回類型//fun_name 函數(shù)名//para1 函數(shù)參數(shù)
#include <stdio.h>//get_max函數(shù)的設(shè)計(jì)int get_max(int x, int y)//這里是get_max函數(shù)的定義,這里的x和y是形參,用來(lái)接收實(shí)參傳來(lái)的值。{ return (x>y)?(x):(y);//返回值}int main(){ int num1 = 10; int num2 = 20; int max = get_max(num1, num2);//這里是調(diào)用get_max函數(shù),num1和num2均為實(shí)參。 printf("max = %d/n", max); return 0;}
#include<stdio.h>#include<math.h>int is_prime(int n){ int i = 0; for (i = 2; i < sqrt(n); i ++) { if (n % i == 0) { return 0; } } return 1;}int main(){ int n = 0; scanf("%d", &n); int ret = is_prime(n); if (ret == 1) { printf("是素?cái)?shù)"); } else if(ret == 0) { printf("不是素?cái)?shù)"); } return 0;}
#include <stdio.h>void new_line(){ printf("hehe/n");}void three_line(){ int i = 0; for(i=0; i<3; i++) { new_line();第二次調(diào)用 }}int main(){ three_line();//第一次調(diào)用 return 0; }
#include <stdio.h>#include <string.h>int main(){ char arr[20] = "hello"; int ret = strlen(strcat(arr,"bit"));//這里介紹一下strlen函數(shù) printf("%d/n", ret); return 0; }#include <stdio.h>int main(){ printf("%d", printf("%d", printf("%d", 43))); //結(jié)果是啥? //注:printf函數(shù)的返回值是打印在屏幕上字符的個(gè)數(shù) return 0; }
- 程序調(diào)用自身的編程技巧稱為遞歸( recursion)。
- 遞歸做為一種算法在程序設(shè)計(jì)語(yǔ)言中廣泛應(yīng)用。 一個(gè)過(guò)程或函數(shù)在其定義或說(shuō)明中有直接或間接 調(diào)用自身的一種方法,它通常把一個(gè)大型復(fù)雜的問(wèn)題層層轉(zhuǎn)化為一個(gè)與原問(wèn)題相似的規(guī)模較小的問(wèn)題來(lái)求解,遞歸策略只需少量的程序就可描述出解題過(guò)程所需要的多次重復(fù)計(jì)算,大大地減少了程序的代碼量。
- 遞歸的主要思考方式在于:把大事化小
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>int Hanio_twice(int num){ if(1 == num) return 1; else return 2 * Hanio_twice(num - 1) + 1;}int main(){ int num = 0; scanf("%d", &num);//塔數(shù) int ret = Hanio_twice(num); printf("完成%d層的漢諾塔需要%d步/n", num, ret); return 0;}
type_t arr_name [const_n];//type_t 是指數(shù)組的元素類型//const_n 是一個(gè)常量表達(dá)式,用來(lái)指定數(shù)組的大小。
//代碼1int arr1[10];//代碼2int count = 10;int arr2[count];//數(shù)組時(shí)候可以正常創(chuàng)建?//代碼3char arr3[10];float arr4[1];double arr5[20];
int arr1[10] = {1,2,3};int arr2[] = {1,2,3,4};int arr3[5] = {1,2,3,4,5};char arr4[3] = {"a",98, "c"};char arr5[] = {"a","b","c"};char arr6[] = "abcdef";
char arr1[] = "abc";//內(nèi)存里存放了四個(gè)元素 分別是"a""b""c""/0"char arr2[3] = {"a","b","c"};//而這里面存放的是"a""b""c"
#include <stdio.h>int main(){ int arr[10] = {0};//數(shù)組的不完全初始化 int sz = sizeof(arr)/sizeof(arr[0]);//計(jì)算數(shù)組的元素個(gè)數(shù) //對(duì)數(shù)組內(nèi)容賦值,數(shù)組是使用下標(biāo)來(lái)訪問(wèn)的,下標(biāo)從0開(kāi)始。所以: int i = 0;//做下標(biāo) for(i=0; i<10; i++) { arr[i] = i;//這里i寫10,行嗎?當(dāng)然不行,寫10意味著訪問(wèn)的是第11個(gè)元素,數(shù)組會(huì)越界。 } for(i=0; i<10; ++i) { printf("%d ", arr[i]); //輸出數(shù)組的內(nèi)容 } return 0;}
int arr[10];int sz = sizeof(arr)/sizeof(arr[0]);//40/4=10;所以數(shù)組的長(zhǎng)度是10
#include <stdio.h>int main(){ int arr[10] = {0}; int i = 0; int sz = sizeof(arr)/sizeof(arr[0]); for(i=0; i<sz; ++i) { printf("&arr[%d] = %p/n", i, &arr[i]);//我們將10個(gè)元素的地址打印出來(lái)。 } return 0; }
打印結(jié)果如下
由圖片可知。
每個(gè)地址相差四位數(shù),9C和A0差四位,后面都是四位(這些數(shù)字都是16進(jìn)制)。
//數(shù)組創(chuàng)建int arr[3][4];char arr[3][5];double arr[2][4];
//數(shù)組初始化int arr[3][4] = {1,2,3,4};int arr[3][4] = {{1,2},{4,5}};int arr[][4] = {{2,3},{4,5}};//二維數(shù)組如果有初始化,行可以省略,列不能省略
#include <stdio.h>int main(){ int arr[3][4] = {0};//創(chuàng)建一個(gè)三行四列的二維數(shù)組 int i = 0; for(i=0; i<3; i++) { int j = 0; for(j=0; j<4; j++) { arr[i][j] = i*j;//循環(huán)賦值 } } for(i=0; i<3; i++) { int j = 0; for(j=0; j<4; j++) { printf("%d ", arr[i][j]);//循環(huán)輸出 } } return 0; }
#include <stdio.h>int main(){ int arr[3][4]; int i = 0; for(i=0; i<3; i++) { int j = 0; for(j=0; j<4; j++) { printf("&arr[%d][%d] = %p/n", i, j,&arr[i][j]); }//將3*4的二維數(shù)組的每個(gè)元素的地址打印出來(lái),來(lái)研究其在內(nèi)存中的存儲(chǔ)。 } return 0; }
#include <stdio.h>int main(){ int arr[10] = {1,2,3,4,5,6,7,8,9,10};//定義了10個(gè)元素。 int i = 0; for(i=0; i<=10; i++) { printf("%d/n", arr[i]);//當(dāng)i等于10的時(shí)候,這時(shí)候訪問(wèn)的是第11個(gè)元素! } return 0; }
#include <stdio.h>void bubble_sort(int arr[]){ int sz = sizeof(arr)/sizeof(arr[0]);//這一行代碼代碼錯(cuò)了.錯(cuò)誤思維是應(yīng)該是40/4=10 int i = 0;//但結(jié)果是4/4原因是因?yàn)閟izeof(arr)算出來(lái)的是首元素的地址,首元素的地址大小看機(jī)器,以32位的來(lái)說(shuō)是4字節(jié)。 for(i=0; i<sz-1; i++) { int j = 0; for(j=0; j<sz-i-1; j++) { if(arr[j] > arr[j+1]) { int tmp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = tmp; } } }}int main(){ int arr[] = {3,1,7,5,8,9,0,2,4,6}; bubble_sort(arr);//傳過(guò)去的是數(shù)組名,默認(rèn)是數(shù)組首元素的地址。 for(i=0; i<sizeof(arr)/sizeof(arr[0]); i++) { printf("%d ", arr[i]); } return 0; }
#include <stdio.h>int main(){ int arr[10] = {1,2,3
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/123733.html
摘要:語(yǔ)言在設(shè)計(jì)中考慮了函數(shù)的高效性和易用性兩個(gè)原則。在語(yǔ)言中,最常見(jiàn)的當(dāng)屬函數(shù)了。以上就是一個(gè)函數(shù),它被稱為語(yǔ)言的入口函數(shù),或者主函數(shù)。例如和都是函數(shù)名。形式參數(shù)當(dāng)函數(shù)調(diào)用完成之后就自動(dòng)銷毀了。 ...
摘要:二什么是文件磁盤上的文件就是文件。文件指針變量定義是一個(gè)指向類型數(shù)據(jù)的指針變量。表示向何種流中輸出,可以是標(biāo)準(zhǔn)輸出流,也可以是文件流。文件結(jié)構(gòu)體指針,將要讀取的文件流。 ...
目錄 一、什么是C語(yǔ)言? 二、第一個(gè)C語(yǔ)言程序 代碼 程序分析 ?程序運(yùn)行 一個(gè)工程中出現(xiàn)兩個(gè)及以上的main函數(shù) 代碼 運(yùn)行結(jié)果 分析 三、數(shù)據(jù)類型 數(shù)據(jù)各種類型 為什么會(huì)有這么多的數(shù)據(jù)類型? 計(jì)算機(jī)單位 ?各個(gè)數(shù)據(jù)類型的大小 ?注意事項(xiàng) 數(shù)據(jù)類型的使用 四、變量和常量 變量的分類 變量的使用 變量的作用域和生命周期 ?常量 五、字符串+轉(zhuǎn)義字符+注釋 字符串 ?轉(zhuǎn)義字符 注釋 六、選擇語(yǔ)句 ?...
摘要:大家好,今天屁孩君給大家?guī)?lái)入門綜合。年,標(biāo)準(zhǔn)委員會(huì)發(fā)布了語(yǔ)言的第一個(gè)國(guó)際標(biāo)準(zhǔn),該標(biāo)準(zhǔn)即為大名鼎鼎的。年,標(biāo)準(zhǔn)委員會(huì)發(fā)布了一份技術(shù)報(bào)告,詳細(xì)說(shuō)明了計(jì)劃引入的新特性。年月日,經(jīng)過(guò)標(biāo)準(zhǔn)委員投票,標(biāo)準(zhǔn)獲得一致通過(guò)。 ...
閱讀 623·2023-04-26 02:08
閱讀 2654·2021-11-18 10:02
閱讀 3458·2021-11-11 16:55
閱讀 2341·2021-08-17 10:13
閱讀 2901·2019-08-30 15:53
閱讀 685·2019-08-30 15:44
閱讀 2545·2019-08-30 11:10
閱讀 1755·2019-08-29 16:57