這篇介紹C語言里函數(shù)的定義、子函數(shù)的使用。接著介紹變量的作用域,定義全局變量、靜態(tài)變量、只讀變量、變量初始化等等。
![](http://image109.360doc.com/DownloadImg/2023/10/3121/274674905_1_20231031092021367.jpeg)
一、函數(shù)定義
//定義一個函數(shù)
int func(int a,int b)
{
}
<函數(shù)的返回值類型> <函數(shù)名稱>(函數(shù)的形參列表,....)
{
函數(shù)代碼主體部分;
}
<函數(shù)的返回值類型>: 返回值類型可以是C語言支持任何類型?;緮?shù)據(jù)類型、指針、結(jié)構(gòu)體、枚舉… 如果函數(shù)執(zhí)行完畢,不需要返回值,可以將函數(shù)返回值類型聲明為空類型。Void 函數(shù)名稱 :不能與庫函數(shù)名稱沖突,命名規(guī)則與變量命名規(guī)則一樣。 函數(shù)的形參列表 :函數(shù)在執(zhí)行行傳入的參數(shù),類型與返回值類型定義方法一樣。 如果有多個形參,可以使用逗號隔開 函數(shù)的返回值: 如果函數(shù)執(zhí)行完畢之后需要向調(diào)用處返回數(shù)據(jù),可以使用return,該語句只能返回一個值。
#include <stdio.h>
int func(int,int); //聲明func函數(shù)
//int func(int a,int b);//聲明func函數(shù)
int main(void)
{
int a;
a=func(12.34,56.78); //形參傳入之后,會轉(zhuǎn)為整型
printf('a=%d\n',a);
return 0;
}
//定義一個函數(shù)
int func(int a,int b)
{
int c;
c=a b;
return c; //給調(diào)用者返回結(jié)果
}
二、函數(shù)練習(xí)作業(yè)
(1)編寫一個判斷某一年是否是閏年的函數(shù)。(條件: 能整除4且不能整除100 或者能整除400 )
#include <stdio.h>
int func_year(int year); //聲明函數(shù)
int main(void)
{
int year; //c89標(biāo)準(zhǔn)
int err=0;
printf('輸入一個年份:');
scanf('%d',&year);
err=func_year(year);//調(diào)用函數(shù)
if(err==1)
{
printf('閏年!\n');
}
else if(err==0)
{
printf('平年!\n');
}
else
{
printf('輸入的年份錯誤!\n');
}
return 0;
}
(2)該函數(shù)由主函數(shù)調(diào)用,判斷平年和閏年。
/*
函數(shù)功能: 判斷平年和閏年
返回值 : 0表示平年,1表示閏年,負(fù)數(shù)表示錯誤
*/
int func_year(int year)
{
if(year<1900)return -1; //加一個限制條件
if((year%4==0&&year%100!=0)||year%400==0)
{
return 1;
}
return 0;
}
(3)輸入一個華氏溫度,輸出攝氏溫度,計算公式為(華氏度-32)×5÷9 要求結(jié)果保留兩位小數(shù)。
#include <stdio.h>
float func_temp(float temp); //聲明函數(shù)
int main(void)
{
float temp;
printf('輸入一個溫度值:');
scanf('%f',&temp);
printf('temp=%.2f\n',func_temp(temp));
return 0;
}
/*
函數(shù)功能: 計算溫度
返回值 : 攝氏度
*/
float func_temp(float temp)
{
//(華氏度-32)×5÷9
return (temp-32)*5/9.0;
}
(4)封裝函數(shù),打印以下圖案: 回文三角形,形參可以決定行數(shù)。
1
121
12321
1234321
(5)計算百分比與數(shù)據(jù)自動轉(zhuǎn)換
#include <stdio.h>
int main(void)
{
float data;
data=(10/60.0)*100; //運算時,需要一個數(shù)據(jù)是浮點數(shù),運算中才可以使用浮點方式存儲
printf('data=%.0f%%\n',data);
return 0;
}
(6)函數(shù)返回值例子: 限定范圍
#include <stdio.h>
int func(int a);
int main(void)
{
printf('%d\n',func(200));
return 0;
}
int func(int a)
{
return (a==100); //限定范圍值為0和1
}
三、 變量的作用域
3.1 全局變量和局部變量
const int c; //定義只讀變量
static int b; //定義靜態(tài)變量
說明: 變量定義作用域分為全局變量和局部變量。 1.局部變量和全局變量名稱可以相同。 2.如果局部變量名稱與全局變量名稱相同,優(yōu)先使用局部變量。
#include <stdio.h>
void func(int);
int data=123; //全局變量(公用變量)
int main(void)
{
int data=456; //局部變量
printf('data1=%d\n',data);
func(666);
return 0;
}
void func(int data)
{
printf('data2=%d\n',data);
}
3.2 只讀變量
#include <stdio.h>
void func(int);
const int data=888; //只讀變量
int main(void)
{
//data=666; 錯誤的
printf('%d\n',data);
return 0;
}
void func(int data)
{
printf('data2=%d\n',data);
}
3.3 靜態(tài)變量
?靜態(tài)變量測試
#include <stdio.h>
int func(void);
int main(void)
{
int i,data;
for(i=0;i<5;i )
{
data=func();
}
printf('data=%d\n',data);
return 0;
}
int func(void)
{
//int data=0; //局部變量,生命周期隨著函數(shù)調(diào)用結(jié)束而終止。
static int data=0; //靜態(tài)變量,生命周期與main函數(shù)一樣。
//static int data=0 只有第一次執(zhí)行有效
data ; //data=data 1 ,1
return data;
}
3.4 靜態(tài)全局變量
#include <stdio.h>
//int data; 全局變量,可以在其他.c文件引用
static int data=0; //靜態(tài)全局變量-----局部變量
//靜態(tài)全局變量: 表示該data變量不能被其他文件所引用。
//防止全局變量,重命名。
int main(void)
{
return 0;
}
3.5 靜態(tài)函數(shù)
#include <stdio.h>
static int func(void);
int main(void)
{
func();
return 0;
}
//定義靜態(tài)函數(shù),表示該函數(shù)只能在本文件使用。
static int func(void)
{
printf('123\n');
}
3.6 變量的初始化值
#include <stdio.h>
static int data1;
int data2;
int main(void)
{
int data3; //局部變量
static int data4;
printf('data1=%d\n',data1); //0
printf('data2=%d\n',data2); //0
printf('data3=%d\n',data3); //未知值
printf('data4=%d\n',data4); //0
int cnt;
//cnt ;
/*
for(i=0;i<5;i )
{
if(xxxx)data3|=0x1;
data3<<=1;
}*/
return 0;
}