① c語言中函數是怎樣用的
定義好的函數,若在主函數之後定義,在主函數中要聲明一下。
聲明方法為把定義好的函數按原樣寫下,再加上一個「;」。
若在主函數之前定義,在主函數就可以直接調用。
一般格式k=函數名(變數);
函數運算結果通過return語句返回,賦值給k。
希望你能看懂!
② c語言定義函數是什麼
將代碼段封裝成函數的過程叫做函數定義。
函數可以重復使用的代碼,用來獨立地完成某個功能,它可以接收用戶傳遞的數據,也可以不接收。接收用戶數據的函數在定義時要指明參數,不接收用戶數據的不需要指明,根據這一點可以將函數分為有參函數和無參函數。
相關概念:
函數不能嵌套定義,main 也是一個函數定義,所以要將 sum 放在 main 外面。函數必須先定義後使用,所以 sum 要放在 main 前面。
函數定義時給出的參數稱為形式參數,簡稱形參;函數調用時給出的參數(也就是傳遞的數據)稱為實際參數,簡稱實參。函數調用時,將實參的值傳遞給形參,相當於一次賦值操作。
原則上講,實參的類型和數目要與形參保持一致。如果能夠進行自動類型轉換,或者進行了強制類型轉換,那麼實參類型也可以不同於形參類型,例如將 int 類型的實參傳遞給 float 類型的形參就會發生自動類型轉換。
③ c語言定義函數
你想通過函數參數返回賦值結果,參數要用指針,調用要用地址:
bool a,b;
void action1(bool *a,bool *b); // 參數要用指針,函數要修正一下。
action1( &a, &b); // 調用要用地址
printf("a=%d,b=%d\n",a,b);
如果沒有頭文件stdbool.h, 則按下面方法:
#include <stdio.h>
//#include <stdbool.h>
#include <windows.h>
#define bool BOOL
#define true TRUE
#define false FALSE
int main()
{
bool a,b;
void action1(bool *a,bool *b);
action1( &a, &b);
printf("a=%d,b=%d\n",a,b);
return 0;
}
void action1(bool *a, bool *b){
*a =true;
*b = false;
}
④ c語言常用的函數有哪些
#include
<assert.h>
//設定插入點
#include
<ctype.h>
//字元處理
#include
<errno.h>
//定義錯誤碼
#include
<float.h>
//浮點數處理
#include
<fstream.h>
//文件輸入/輸出
#include
<iomanip.h>
//參數化輸入/輸出
#include
<iostream.h>
//數據流輸入/輸出
#include
<limits.h>
//定義各種數據類型最值常量
#include
<locale.h>
//定義本地化函數
#include
<math.h>
//定義數學函數
#include
<stdio.h>
//定義輸入/輸出函數
#include
<stdlib.h>
//定義雜項函數及內存分配函數
#include
<string.h>
//字元串處理
#include
<strstrea.h>
//基於數組的輸入/輸出
#include
<time.h>
//定義關於時間的函數
#include
<wchar.h>
//寬字元處理及輸入/輸出
#include
<wctype.h>
//寬字元分類
標准
C/C++
(同上的不再注釋)
#include
<algorithm>
//STL
通用演算法
#include
<bitset>
//STL
位集容器
#include
<cctype>
#include
<cerrno>
#include
<clocale>
#include
<cmath>
#include
<complex>
//復數類
#include
<cstdio>
#include
<cstdlib>
#include
<cstring>
#include
<ctime>
#include
<deque>
//STL
雙端隊列容器
#include
<exception>
//異常處理類
#include
<fstream>
#include
<functional>
//STL
定義運算函數(代替運算符)
#include
<limits>
#include
<list>
//STL
線性列表容器
#include
<map>
//STL
映射容器
#include
<iomanip>
#include
<ios>
//基本輸入/輸出支持
#include
<iosfwd>
//輸入/輸出系統使用的前置聲明
#include
<iostream>
#include
<istream>
//基本輸入流
#include
<ostream>
//基本輸出流
#include
<queue>
//STL
隊列容器
#include
<set>
//STL
集合容器
#include
<sstream>
//基於字元串的流
#include
<stack>
//STL
堆棧容器
#include
<stdexcept>
//標准異常類
#include
<streambuf>
//底層輸入/輸出支持
#include
<string>
//字元串類
#include
<utility>
//STL
通用模板類
#include
<vector>
//STL
動態數組容器
#include
<cwchar>
#include
<cwctype>
using
namespace
std;
C99
增加
#include
<complex.h>
//復數處理
#include
<fenv.h>
//浮點環境
#include
<inttypes.h>
//整數格式轉換
#include
<stdbool.h>
//布爾環境
#include
<stdint.h>
//整型環境
#include
<tgmath.h>
//通用類型數學宏
⑤ 關於C語言的函數
取決於你要寫什麼東西——例如軟體中是否只包含一個可執行的程序。(注意軟體和程序是不一樣的概念。)
對於同一個鏈接目標(例如.exe文件)而言,相同名稱的符號只能出現一次,否則出現鏈接錯誤。於是對應的若干個源文件中任何相同函數只能出現一次,main也不例外。
如果是編譯成多個可執行文件,那麼之間的源文件可以完全沒關系,這樣就可以有多個main函數(當然一個程序裡面還是只能有一個)。
也可能一個main也沒有,例如對於像.dll這樣的庫文件而言。
====
[原創回答團]
⑥ c語言函數
C語言中,參數傳遞是單向按值傳遞,相當於將a和b的值賦值給x,y,雖然fun函數中,x和y的值交換了,但是main函數中,a和b的值沒有發生變化。
如果想在自定義函數中改變a和b的值,必須交換其地址,藉助指針,間接交換他們的值,程序改為如下即可:
#include <stdio.h>
void fun(int *x,int *y) // 定義形參為指針類型
{
int t;
t=*x;*x=*y;*y=t;
}
main()
{int a=5,b=6;
fun(&a,&b); // 交換存放地址
printf("%d,%d\n",a,b);
}
⑦ c語言的函數頭
在一個函數定義中,函數體之前的所有部分稱為函數頭,它給出了該函數的返回類型、每個參數的次序和類型等函數原型信息,所以當沒有專門給出函數原型說明語句時,系統就從函數頭中獲取函數原型信息。
一個函數的原型語句就是其函數頭的一個拷貝,當然要在最後加上語句接上結束符分號。函數原型語句與函數頭也有細微的差別,在函數原型語句中,其參數表中的每個參數允許只保留參數類型,而省略參數名,並且若使用參數名也允許與函數頭中對應的參數名不同。
全文如下:
一)、定義格式
<類型名> <函數名> ([<參數表>]) <函數體>
<類型名>為系統或用戶已定義的一種數據類型,它是函數執行過程中通過return語句要求返回的值的類型,又稱為該函數的類型。當一個函數不需要通過return語句返回一個值時,稱為無返回值函數或無類型函數,此時需要使用保留字void作為類型名。當類型名為int時,可以省略不寫,但為了清楚起見,還是寫明為好。
<函數名>是用戶為函數所起的名字,它是一個標識符,應符合C++標識符的一般命名規則,用戶通過使用這個函數名和實參表可以調用該函數。
<參數表>又稱形式參數表,它包含有任意多個(含0個,即沒有)參數說明項,當多於一個時其前後兩個參數說明項之間必須用逗號分開。每個參數說明項由一種已定義的數據類型和一個變數標識符組成,該變數標識符成為該函數的形式參數,簡稱形參,形參前面給出的數據類型稱為該形參的類型。一個函數定義中的<參數表>可以被省略,表明該函數為無參函數,若<參數表>用void取代,則也表明是無參函數,若<參數表>不為空,同時又不是保留字void,則稱為帶參函數。
<函數體>是一條復合語句,它以左花括弧開始,到右花括弧結束,中間為一條或若干條C++語句。
在一個函數的參數表中,每個參數可以為任一種數據類型,包括普通類型、指針類型、數組類型、引用類型等,一個函數的返回值可以是除數組類型之外的任何類型,包括普通類型、指針類型和引用類型等。另外,當不需要返回值時,應把函數定義為void類型。
二)、定義格式舉例
(1) void f1() {...}
(2) void f2(int x) {...}
(3) int f3(int x,int* p) {...}
(4) char* f4(char a[]){...}
(5) int f5(int& x,double d) {...}
(6) int& f6(int b[10], int n) {...}
(7) void f7(float c[][N], int m, float& max) {...}
(8) bool f8(ElemType*& bt, ElemType& item) {...}
在第一條函數定義中,函數名為f1,函數類型為void,參數表為空,此函數是一個無參無類型函數。若在f1後面的圓括弧內寫入保留字void,也表示為無參函數。
在第二條函數定義中,僅帶有一個類型為int的形參變數x,該函數沒有返回值。
在第三條函數定義中,函數名為f3,函數類型為int,函數參數為x和p,其中x為int型普通參數,p為int*型指針參數。
在第四條函數定義中,函數名為f4,函數類型為char*,即字元指針類型,參數表中包含一個一維字元數組參數。注意:在定義任何類型的一維數組參數時,不需要給出維的尺寸,當然給出也是允許的,但沒有任何意義。
在第五條函數定義中,函數名為f5,返回類型為int,該函數帶有兩個形參,一個為 整型引用變數x,另一個為雙精度變數d。
在第六條函數定義中,函數名為f6,函數類型為int&,即整型引用,該函數帶有兩個形參,一個是整型數組b,另一個是整型變數n。在這里定義形參數組b所給出的維的尺寸10可以被省略。
在第七條函數定義中,函數名為f7,無函數類型,參數表中包含三個參數,一個為二維單精度型數組c,第二個為整型變數m,第三個為單精度引用變數max。注意:當定義一個二維數組參數時,第二維的尺寸必須給出,並且必須是一個常量表達式,第一維尺寸可給出也可不給出,其作用相同。
在第八條函數定義中,函數名為f8,返回類型為bool,即邏輯類型,該函數帶有兩個參數,一個為形參bt,它為ElemType的指針引用類型,另一個為形參item,它是ElemType的引用類型,其中ElemType為一種用戶定義的類型或是通過typedef語句定義的一個類型的別名。
三)、有關函數定義的幾點說明
1. 函數原型語句
在一個函數定義中,函數體之前的所有部分稱為函數頭,它給出了該函數的返回類型、每個參數的次序和類型等函數原型信息,所以當沒有專門給出函數原型說明語句時,系統就從函數頭中獲取函數原型信息。
一個函數必須先定義或聲明而後才能被調用,否則編譯程序無法判斷該調用的正確性。一個函數的聲明是通過使用一條函數原型語句實現的,當然使用多條相同的原型語句聲明同一個函數雖然多餘但也是允許的,編譯時不會出現錯誤。
在一個完整的程序中,函數的定義和函數的調用可以在同一個程序文件中,也可以處在不同的程序文件中,但必須確保函數原型語句與函數調用表達式出現在同一個文件中,並且函數原型語句出現在前,函數的調用出現在後。
通常把一個程序中用戶定義的所有函數的原型語句組織在一起,構成一個頭文件,讓該程序中所含的每個程序文件的開始(即所有函數定義之前)包含這個頭文件(通過#include命令實現),這樣不管每個函數的定義在哪裡出現,都能夠確保函數先聲明後使用(即調用)這一原則的實現。
一個函數的原型語句就是其函數頭的一個拷貝,當然要在最後加上語句接上結束符分號。函數原型語句與函數頭也有細微的差別,在函數原型語句中,其參數表中的每個參數允許只保留參數類型,而省略參數名,並且若使用參數名也允許與函數頭中對應的參數名不同。
2. 常量形參
在定義一個函數時,若只允許函數體訪問一個形參的值,不允許修改它的值,則應把該形參說明為常量,這只要在形參說明的前面加上const保留字進行修飾即可。如:
void f9(const int& x, const char& y);
void f10(const char* p, char key);
在函數f9的函數體中只允許使用x和y的值,不允許修改它們的值。在函數f10的函數體中只允許使用p所指向的字元對象或字元數組對象的值,不允許修改它們的值,但在函數體中既允許使用也允許修改形參key的值。
3. 預設參數
在一個函數定義中,可根據需要對參數表末尾的一個或連續若干個參數給出預設值,當調用這個函數時,若實參表中沒有給出對應的實參,則形參將採用這個預設值。如:
void f11(int x, int y=0) {...}
int f12(int a[], char op='+', int k=10) {...}
函數f11的定義帶有兩個參數,分別為整型變數x和y,並且y帶有預設值0,若調用該函數的表達式為f11(a,b),將把a的值賦給x,把b的值賦給y,接著執行函數體;若調用該函數的表達式為f11(a+b),則也是正確的調用格式,它將把a+b的值賦給x,因y沒有對應的實參,將採用預設值0,參數傳送後接著執行函數體。
函數f12的定義帶有三個參數,其中後兩個帶有預設值,所以調用它的函數格式有三種,一種只帶一個實參,用於向形參a傳送數據,後兩個形參採用預設值,第二種帶有兩個實參,用於分別向形參a和op傳送數據,第三個形參採用預設值,第三種帶有三個實參,分別用於傳送給三個形參。
若一個函數帶有專門的函數原型語句,則形參的預設值只能在該函數原型語句中給出,不允許在函數頭中給出。如對於上述的f11和f12函數,其對應的函數原型語句分別為:
void f11(int x, int y=0);
int f12(int a[], char op='+', int k=10);
函數定義應分別改寫為:
void f11(int x, int y) {...}
int f12(int a[], char op, int k) {...}
4. 數組參數
在函數定義中的每個數組參數實際上是指向元素類型的指針參數。對於一維數組參數說明:
<數據類型> <數組名>[]
它與下面的指針參數說明完全等價:
<數據類型> *<指針變數名>
其中<指針變數名>就是數組參數說明中的<數組名>。如對於f12函數定義中的數組參數說明int a[],等價於指針參數說明int* a。也就是說,數組參數說明中的數組名a是一個類型為int*的形參。注意:在變數定義語句中定義的數組,其數組名代表的是一個數組,它的值是指向第一個元素的指針常量,這與數組形參的含義有區別。
對於二維數組參數說明:
<數據類型> <參數名>[][<第二維尺寸>]
它與下面的指針參數說明完全等價:
<數據類型> (*<參數名>)[<第二維尺寸>]
如對於f7函數定義中的二維數組參數說明float c[][N],等價於指針參數說明float(*c)[N]。
5. 函數類型
當調用一個函數時就執行一遍循環體,對於類型為非void的函數,函數體中至少必須帶有一條return語句,並且每條return語句必須帶有一個表達式,當執行到任一條return語句時,將計算出它的表達式的值,結束整個函數的調用過程,把這個值作為所求的函數值帶回到調用位置,參與相應的運算;對於類型為void的函數,它不需要返回任何函數值,所以在函數體中既可以使用return語句,也可以不使用,對於使用的每條return語句不允許也不需要帶有表達式,當執行到任一條return語句時,或執行到函數體最後結束位置時,將結束函數的調用過程,返回到調用位置向下繼續執行。
6. 內聯函數
當在一個函數的定義或聲明前加上關鍵字inline則就把該函數聲明為內聯函數。計算機在執行一般函數的調用時,無論該函數多麼簡單或復雜,都要經過參數傳遞、執行函數體和返回等操作。若把一個函數聲明為內聯函數後,在程序編譯階段系統就有可能把所有調用該函數的地方都直接替換為該函數的執行代碼,由此省去函數調用時的參數傳遞和返回操作,從而加快整個程序的執行速度。通常可把一些相對簡單的函數聲明為內聯函數,對於較復雜的函數則不應聲明為內聯函數。從用戶的角度看,調用內聯函數和一般函數沒有任何區別。下面就是一個內聯函數定義的例子,它返回形參值的立方。
inline int cube(int n)
{
return n*n*n;
}
⑧ C語言中函數的作用
C語言中的函數的作用是可以將一段經常需要使用的代碼封裝起來,在需要使用時可以直接調用。
示例:
語言的函數定義和函數聲明
#include<stdio.h>
//使用函數前,需要在main函數前對使用的函數進行聲明
int getMax(int, int);
void main() {
int t=getMax(12, 21);
printf("%d ", t);
getchar();
}
int getMax(int a, int b) {
if (a > b) {
return a;
}
else {
return b;
}
}
(8)c語言的函數擴展閱讀
scanf 函數
函數原型:int scanf(char *format [,argument,...])
功能:從標准輸入設備(一般指鍵盤)實現格式化輸入
返回值:成功返回讀入的數據項個數
函數參數:format 格式化字元串
argument 輸入數據項的地址列表
常用格式類型參考printf函數的個格式類型
用法舉例:
從標准輸入設備中輸入一個整數到整形變數a中,輸入一個浮點數到浮點型變數b中
int a=0;
float b=0;
scanf("%d%f",&a,&b);
上面程序執行後,從鍵盤輸入: 19 18.6 ,程序將 19賦值給變數a, 18.6賦值給變數b 。
⑨ c語言定義函數是什麼
c語言定義函數是一段可以重復使用的代碼,用來獨立地完成某個功能,它可以接收用戶傳遞的數據,也可以不接收。
接收用戶數據的函數在定義時要指明參數,不接收用戶數據的不需要指明,根據這一點可以將函數分為有參函數和無參函數。
函數就是一段封裝好的,可以重復使用的代碼,它使得我們的程序更加模塊化,不需要編寫大量重復的代碼。函數可以提前保存起來,並給它起一個獨一無二的名字,只要知道它的名字就能使用這段代碼。
C語言特點及運用范圍:
C語言是一門面向過程的、抽象化的通用程序設計語言,廣泛應用於底層開發。C語言能以簡易的方式編譯、處理低級存儲器。C語言是僅產生少量的機器語言以及不需要任何運行環境支持便能運行的高效率程序設計語言。它既具有高級語言的特點,又具有匯編語言的特點。
C語言特點:簡潔的語言、具有結構化的控制語句、豐富的數據類型、豐富的運算符、可對物理地址進行直接操作、代碼具有較好的可移植性、可生成高質量、目標代碼執行效率高的程序。
C語言是一門面向過程的計算機編程語言,C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、僅產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。C語言描述問題比匯編語言迅速、工作量小、可讀性好、易於調試、修改和移植,而代碼質量與匯編語言相當。