C語(yǔ)言函數(shù)的運(yùn)用及調(diào)用
綿陽(yáng)網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),綿陽(yáng)網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為綿陽(yáng)上千余家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的綿陽(yáng)做網(wǎng)站的公司定做!
1.當(dāng)程序變得越來(lái)越復(fù)雜的時(shí)候,我們可以使用函數(shù)進(jìn)行完成任務(wù),并不再是進(jìn)行編寫(xiě)。
2.C語(yǔ)言本身就具有豐富的庫(kù)函數(shù):
目錄路徑函數(shù)
字符類(lèi)型分類(lèi)函數(shù)
內(nèi)存管理函數(shù)
數(shù)學(xué)函數(shù)
進(jìn)程控制函數(shù)
日期和時(shí)間函數(shù)
接口函數(shù)
輸入輸出函數(shù)
圖形函數(shù)
診斷函數(shù)
3.每一種函數(shù)都有它的作用,在需要使用時(shí),直接進(jìn)行調(diào)用就可以了。
4.函數(shù)分為有參和無(wú)參函數(shù)。
參數(shù)可以分為形參與實(shí)參。
形參在函數(shù)內(nèi),而實(shí)參在函數(shù)外。
形參直接使用,而實(shí)參在函數(shù)外調(diào)用。
5. 函數(shù)的值只能通過(guò)return語(yǔ)句返回主調(diào)函數(shù)。
6.在函數(shù)內(nèi)有局部變量和全局變量?jī)煞N,局部變量在函數(shù)內(nèi)使用,而全局變量可在函數(shù)中使用。
7.從變量作用域可以劃分全局,而在變量的生存期可以分為靜態(tài)與動(dòng)態(tài)存儲(chǔ)方式。
固定的存儲(chǔ)空間與運(yùn)行時(shí)分配的存儲(chǔ)空間方式還是有所不同的。
auto聲明自動(dòng)變量,自動(dòng)變量用關(guān)鍵字作存儲(chǔ)類(lèi)別的聲明,在函數(shù)調(diào)用結(jié)束將會(huì)自動(dòng)釋放這些存儲(chǔ)空間。
static可以聲明局部變量,在函數(shù)調(diào)用結(jié)束之后不消失而保留原值。
8.register可以聲明局部變量,在函數(shù)調(diào)用時(shí)為了提高效率,可以寄存在CPU的寄存器中。
extern可以聲明局部變量,擴(kuò)展程序文件中的作用域。
關(guān)于c語(yǔ)言中函數(shù)調(diào)用問(wèn)題解答如下:
首先如果是編譯的這個(gè)代碼那這個(gè)函數(shù)肯定被調(diào)用了,讓你覺(jué)得沒(méi)有調(diào)用是因?yàn)閣hile循環(huán)沒(méi)有被執(zhí)行。
圖中紅色框內(nèi)代碼p1和p2經(jīng)過(guò)賦值p1是肯定大于p2所以不滿足while.的條件直接退出了函數(shù)。
你需要看看要實(shí)現(xiàn)啥在改一下。
C語(yǔ)言調(diào)用函數(shù)就是先定義并聲明函數(shù),之后再根據(jù)定義函數(shù)的格式調(diào)用。
下面舉例來(lái)說(shuō)明函數(shù)調(diào)用方法:
#include
int fun(int x, int y); // 函數(shù)聲明,如果函數(shù)寫(xiě)在被調(diào)用處之前,可以不用聲明
void main()
{
int a=1, b=2, c;
c = fun(a, b); // 函數(shù)的調(diào)用,調(diào)用自定義函數(shù)fun,其中a,b為實(shí)際參數(shù),傳遞給被調(diào)用函數(shù)的輸入值
}
// 自定義函數(shù)fun
int fun(int x, int y) // 函數(shù)首部
{ // {}中的語(yǔ)言為函數(shù)體
return xy ? x : y; // 返回x和y中較大的一個(gè)數(shù)
}
如何調(diào)用C語(yǔ)言寫(xiě)的庫(kù),如a.lib等,有對(duì)應(yīng)的庫(kù)頭文件a.h。假設(shè)a.h中定義了函數(shù):
int
WhyCoding(int
a,
float
b);
做法是,
/*
cpp_a.h
*/
extern
"C"
{
#include
"a.h"
}
或
/*
cpp_a.h
*/
extern
"C"
{
int
WhyCoding(int
a,
float
b);
/*
重定義所有的C函數(shù)
*/
}
從上面可以看出,extern
"C"
是用在C和C++之間的橋梁。之所以需要這個(gè)橋梁是因?yàn)镃編譯器編譯函數(shù)時(shí)不帶
函數(shù)的類(lèi)型信息,只包含函數(shù)符號(hào)名字,如C編譯器把函數(shù)int
a(float
x)編譯成類(lèi)似_a這樣的符號(hào),C連接器只要
找到了調(diào)用函數(shù)的符號(hào),就可以連接成功,它假設(shè)參數(shù)類(lèi)型信息是正確的,這是C編譯連接器的缺點(diǎn)。而C++
編譯器為了實(shí)現(xiàn)函數(shù)重載,編譯時(shí)會(huì)帶上函數(shù)的類(lèi)型信息,如他把上面的a函數(shù)可能編譯成_a_float這樣的
符號(hào)為了實(shí)現(xiàn)重載,注意它還是沒(méi)有帶返回值得信息,這也是為什么C++不支持采用函數(shù)返回值來(lái)區(qū)別函數(shù)
重載的原因之一,當(dāng)然,函數(shù)的使用者對(duì)函數(shù)返回值的處理方式(如忽略)也是重要原因。
基于以上,C調(diào)用C++,首先需要用封裝函數(shù)把對(duì)C++的類(lèi)等的調(diào)用封裝成C函數(shù)以便C調(diào)用,于是extern
"C"
的
作用是:讓編譯器知道這件事,然后以C語(yǔ)言的方式編譯和連接封裝函數(shù).(通常是把封裝函數(shù)用C++編譯器按C++
方式編譯,用了extern
"C"
后,編譯器便依C的方式編譯封裝接口,當(dāng)然接口函數(shù)里面的C++語(yǔ)法還是按C++方式
編譯;對(duì)于C語(yǔ)言部分--調(diào)用者,還是按C語(yǔ)言編譯;分別對(duì)C++接口部分和C部分編譯后,再連接就可以實(shí)現(xiàn)C
調(diào)用C++了).
相反,C++調(diào)用C函數(shù),extern
"C"
的作用是:讓C++連接器找調(diào)用函數(shù)的符號(hào)時(shí)采用C的方式,即使用_a而不是
_a_float來(lái)找調(diào)用函數(shù)。
分類(lèi): 電腦/網(wǎng)絡(luò) 程序設(shè)計(jì) 其他編程語(yǔ)言
問(wèn)題描述:
我想讓用戶按“1”就進(jìn)入一的功能,按“2”就進(jìn)入二的功能——
可我寫(xiě)的里面有好多錯(cuò)誤~~請(qǐng)大家?guī)兔~~
謝謝?。?!
阿城工作室軟件合集.cpp : Defines the entry point for the console application.
#include "stdafx.h"
#include "math.h"
#include "stdio.h"
TextIQ();
Count();
TaxCompute();
int main()
{
int choose;
printf("\n請(qǐng)選擇一個(gè)菜單選項(xiàng):\n");
printf (" 1--測(cè)測(cè)你的智商\n");菜單選項(xiàng)
printf (" 2--北京大興龐各莊瓜類(lèi)銷(xiāo)售合算工具\(yùn)n");
printf (" 9--版權(quán)聲明\n ");
printf (" 0--離開(kāi)\n");
printf (" 請(qǐng)選擇:");
scanf("%d", choose);選擇
if (1==choose)判斷選擇
TextIQ ();
if (2==choose)
Count ();
if (9==choose)
printf("版權(quán)由阿城工作室所有\(zhòng)n未經(jīng)允許不得拷貝本程序\n");
if (0==choose)
printf("謝謝使用!\nBye Bye!\n");
else
printf("請(qǐng)重新選擇一個(gè)菜單選項(xiàng)\n");
return 0;
}
/****************************************************\
模塊名稱:
測(cè)測(cè)你的智商
摘要:
本模塊是我的第一個(gè)C語(yǔ)言作業(yè),請(qǐng)多指教。
其它說(shuō)明:
本模塊使用了一些簡(jiǎn)單函數(shù)
模塊歷史:
姜城于2006年10月12日創(chuàng)建本模塊
\****************************************************/
void TextIQ()
{
char d;
printf(" 測(cè)測(cè)你的智商\n\n");
printf(" 阿城工作室\n\n\n");
printf(" 想把夢(mèng)變成現(xiàn)實(shí),第一步應(yīng)該干什么?\n\n\n");
printf(" A.起床 B.努力工作\n\n");
printf("請(qǐng)輸入您的答案 ");
scanf("%c",d);/*輸入答案*/
if(d=='a'||'A')
printf(" 恭喜你答對(duì)了!^-^ ");/*答a*/
else printf(" 很遺憾,你答錯(cuò)了! #_# ");/*答b*/
return ;
}
/****************************************************\
模塊名稱:
北京大興龐各莊瓜類(lèi)銷(xiāo)售合算工具
摘要:
本模塊是我的第二個(gè)C語(yǔ)言作業(yè),請(qǐng)多指教。
其它說(shuō)明:
本模塊從實(shí)際出發(fā),實(shí)現(xiàn)了簡(jiǎn)單功能。
模塊歷史:
姜城于2006年10月17日創(chuàng)建本模塊
\****************************************************/
Count()
{
float a,b,c,d,e,f;
printf(" 歡迎進(jìn)入北京大興龐各莊瓜類(lèi)銷(xiāo)售合算工具\(yùn)n\n");
printf(" 阿城工作室\n\n\n");
printf(" 請(qǐng)輸入您所購(gòu)買(mǎi)的不同瓜類(lèi)的重量(斤)\n\n");/*輸入購(gòu)買(mǎi)數(shù)值*/
printf(" 京秀(5.0/斤)");
scanf("%f",a);
printf(" 新秀(5.5/斤)");
scanf("%f",b);
printf(" 白色冰淇淋(4.7/斤)");
scanf("%f",c);
printf(" 臺(tái)灣無(wú)子(6.1/斤)");
scanf("%f",d);
printf(" 新紅寶(3.2/斤)");
scanf("%f",e);
f=5.0*a+5.5*b+4.7*c+6.1*d+3.2*e;/*計(jì)算總額*/
printf("\n\n\n");
printf(" 您的消費(fèi)總額為%f元\n\n",f);/*顯示總額*/
return 0;/*如果結(jié)果為XXX.XX就好了*/
}
解析:
你可以用switch語(yǔ)句呀
1、值傳遞,創(chuàng)建變量x和y,x的值等于a的值,y的值等于b的值
void Exchg1(int x, int y)?
{
int tmp;
tmp=x;
x=y;
y=tmp;
printf(“x=%d,y=%d/n”,x,y)
}
void main()
{
int a=4,b=6;
Exchg1 (a,b) ;
printf(“a=%d,b=%d/n”,a,b)
}
2、地址傳遞,相當(dāng)于建立了px和py兩個(gè)指向整型的指針,其值分別為a和b的地址
Exchg2(int *px, int *py)
{
int tmp=*px;
*px=*py;
*py=tmp;
print(“*px=%d,*py=%d/n”,*px,*py);
}
main()
{
int a=4;
int b=6;
Exchg2(a,b);
Print(“a=%d,b=%d/n”, a, b);
}
3、引用傳遞,x和y直接引用a和b,對(duì)a和b操作,相當(dāng)于給a、b起了別名x、y
Exchg2(int x, int y)
{
int tmp=x;
x=y;
y=tmp;
print(“x=%d,y=%d/n”,x,y);
}
main()
{
int a=4;
int b=6;
Exchg2(a,b);
Print(“a=%d,b=%d/n”, a, b);
}
擴(kuò)展資料:
printf用法:
printf()函數(shù)的調(diào)用格式為:printf("lt;格式化字符串gt;",lt;參量表gt;)。
其中格式化字符串包括兩部分內(nèi)容:一部分是正常字符,這些字符將按原樣輸出;另一部分是格式化規(guī)定字符,以"%"開(kāi)始,后跟一個(gè)或幾個(gè)規(guī)定字符,用來(lái)確定輸出內(nèi)容格式。
參量表是需要輸出的一系列參數(shù),其個(gè)數(shù)必須與格式化字符串所說(shuō)明的輸出參數(shù)個(gè)數(shù)一樣多,各參數(shù)之間用","分開(kāi),且順序一一對(duì)應(yīng),否則將會(huì)出現(xiàn)意想不到的錯(cuò)誤。
比如:
int a=1234;
printf("a=%d\n",a);
輸出結(jié)果為a=1234。