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