0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C語(yǔ)言_函數(shù)封裝、變量的作用域

DS小龍哥-嵌入式技術(shù) ? 來(lái)源:DS小龍哥-嵌入式技術(shù) ? 作者:DS小龍哥-嵌入式技 ? 2022-08-14 09:48 ? 次閱讀

1. for循環(huán)示例

#include 
int main()
{
	int i,j;
	int len=4;
	for(i=len; i>=1; i--)
	{
		for(j=len; j>i; j--)printf(" "); //打印空格
		for(j=1; j<=i; j++)printf("%d",j); //打印前半部分
		for(j=i-1; j>=1; j--)printf("%d",j); //打印后半部分
		printf("\n");
	}
	return 0;
}

2. 模擬實(shí)現(xiàn)投票系統(tǒng)。switch

比如: 有10張票,3個(gè)候選人。 進(jìn)行投票,最終得出票數(shù)。
#include 
int main()
{
	int i;
	int val; //獲取鍵盤(pán)上輸入的值
	int cnt1=0,cnt2=0,cnt3=0,cnt4=0;
	for(i=1; i<=10; i++)
	{
		printf("請(qǐng)輸入投票的編號(hào)(1~3,4表示無(wú)效票) 剩余票數(shù)(%d) :",10-i);
		scanf("%d",&val);
		switch(val)
		{
		case 1:
			cnt1++;
			break;
		case 2:
			cnt2++;
			break;
		case 3:
			cnt3++;
			break;
		default:
			cnt4++;
			break;
		}
	}
	printf("1號(hào)選手:%d\n",cnt1);
	printf("2號(hào)選手:%d\n",cnt2);
	printf("3號(hào)選手:%d\n",cnt3);
	printf("無(wú)效票數(shù):%d\n",cnt4);
	return 0;
}

3. 計(jì)算字符串空格、數(shù)字等數(shù)據(jù)數(shù)量

1.從鍵盤(pán)上輸入一個(gè)字符串
計(jì)算字符串里有多少個(gè)空格、小寫(xiě)字母、大寫(xiě)字母、數(shù)字。
scanf("%s",buff);
	/*
	scanf 函數(shù)依靠  \n和空格代表結(jié)束符號(hào)
	*/
#include 
int main()
{
	char buff[100];
	int i=0;
	int cnt1=0,cnt2=0,cnt3=0,cnt4=0,cnt5=0;
	printf("請(qǐng)輸入字符串:");
	gets(buff);

	while(buff[i]!='\0')
	{
		if(buff[i]==' ')
		{
			cnt1++;
		}
		else if(buff[i]>='a'&& buff[i]<='z')
		{
			cnt2++;
		}
		else if(buff[i]>='A'&& buff[i]<='Z')
		{
			cnt3++;
		}
		else if(buff[i]>='0'&& buff[i]<='9')
		{
			cnt4++;
		}
		else
		{
			cnt5++;
		}
		i++;
	}
	printf("空格:%d\n",cnt1);
	printf("小寫(xiě):%d\n",cnt2);
	printf("大寫(xiě):%d\n",cnt3);
	printf("數(shù)字:%d\n",cnt4);
	printf("其他:%d\n",cnt5);
	return 0;
}

4. 字符串轉(zhuǎn)整數(shù)。

2.字符串轉(zhuǎn)整數(shù)。 
從鍵盤(pán)上輸入一個(gè)字符串”12345”,  int data=12345;
#include 
//"1234"
int main()
{
	char buff[100];
	int i=0,value=0;
	printf("輸入數(shù)字字符串(0~9):");
	scanf("%s",buff);

	while(buff[i]>='0' && buff[i]<='9')  //實(shí)現(xiàn)字符串轉(zhuǎn)整數(shù)
	{
		value=value*10; //0 10 120 1230
		value=value+(buff[i]-'0'); //1 12 123  1234
		i++;
	}

	if(buff[i]!='\0') //轉(zhuǎn)換失敗
	{
		printf("警告:轉(zhuǎn)換不完整。 得到的值:%d\n",value);
	}
	else
	{
		printf("轉(zhuǎn)換成功! 正確值=%d\n",value);
	}
	return 0;
}

5. 整數(shù)轉(zhuǎn)字符串

3.整數(shù)轉(zhuǎn)字符串

#include 
//1234
int main()
{
	char buff[100];
	char str[100];
	unsigned int i=0,val=0,j;
	printf("請(qǐng)輸入一個(gè)整數(shù):");
	scanf("%d",&val);
	
	while(val)
	{
		buff[i]=val%10+'0'; //"4321"
		val=val/10;
		i++;
	}
	for(j=0; j

6. 浮點(diǎn)數(shù)轉(zhuǎn)字符串

浮點(diǎn)數(shù)轉(zhuǎn)字符串
//以下例子代碼實(shí)現(xiàn)將浮點(diǎn)數(shù)分解成兩個(gè)整數(shù)
#include 
//1234
int main()
{
	float data=123.456789;
	int data1,data2;
	data1=data; //得到整數(shù)部分
	data2=(data-data1)*1000000;

	printf("%d.%d\n",data1,data2);
	return 0;
}

7. 字符串轉(zhuǎn)浮點(diǎn)數(shù)

從鍵盤(pán)上輸入一個(gè)字符串”123.45”,  float data=123.45;
printf("%d\n",0);   //0
printf("%d\n",'0'); //48

8. 函數(shù)的特性與用法

C語(yǔ)言是靠函數(shù)組成。
函數(shù)的特性:
1.函數(shù)就相當(dāng)于封裝一個(gè)工具。
2.函數(shù)可以重復(fù)調(diào)用。
3.函數(shù)的功能盡可能的單一。  比如:判斷閏年和平年
4.我們自己的寫(xiě)的函數(shù),(除了main函數(shù)之外)  子函數(shù)。
5.一般情況下,子函數(shù)的代碼都在main函數(shù)的下面。
6.在調(diào)用任何子函數(shù)之前,都需要聲明。

函數(shù)的定義:
<函數(shù)返回值類型>  函數(shù)的名稱(形參1,形參2…….)
{
函數(shù)的代碼……
return <返回值值>;  //如何函數(shù)有返回值才需要返回
}

函數(shù)的模型:
void func1(void);  //函數(shù)聲明
int func1(int data1,int data2 /*,......*/);  //函數(shù)聲明

//函數(shù)原型
void func1(void)
{

}

//函數(shù)原型
int func1(int data1,int data2 /*,......*/)
{
	return 100;
}

函數(shù)示例(計(jì)算和):
#include 
int sum(int a,int b);  //函數(shù)聲明
int main()
{
	int data;
	data=sum(100,200); ///調(diào)用sum函數(shù),并且接收返回值
	printf("data=%d\n",data);

	data=sum(300,500); ///調(diào)用sum函數(shù),并且接收返回值
	printf("data=%d\n",data);
	return 0;
}

/*
函數(shù)功能: 計(jì)算a+b之和
*/
int sum(int a,int b)
{
	int c=a+b;
	return c;
}

9. 判斷平年和閏年

判斷平年和閏年
#include 
int GetYear(int year);  //函數(shù)聲明
int main()
{
	int i;
	for(i=2001; i<2018; i++)
	{
		if(GetYear(i))printf("%d 是閏年.\n",i);
		else printf("%d 是平年.\n",i);
	}
	return 0;
}
/*
函數(shù)功能  : 判斷平年和閏年
函數(shù)返回值:  0表示平年 1表示閏年
*/
int GetYear(int year)
{
	if((year%4==0&&year%100!=0)||(year%400==0))
	{
		return 1;
	}
	else
	{
		return 0;
	}
}

10. 將數(shù)組當(dāng)做函數(shù)的形參

#include 
void print(char buff[]);

int main()
{
	char buff[]="34534r4gyhtrvfvfdvdf";
	print(buff);
	print(buff);
	print(buff);
	print(buff);
	return 0;
}

void print(char buff[])
{
	printf("buff=%s\n",buff);
}

11. 計(jì)算字符串長(zhǎng)度

函數(shù)示例: 封裝函數(shù),計(jì)算字符串長(zhǎng)度
#include 
int my_strlen(char buff[]);

int main()
{
	char buff[100];
	scanf("%s",buff);

	printf("字符串長(zhǎng)度:%d\n",my_strlen(buff));
	return 0;
}

/*
函數(shù)功能: 計(jì)算字符串長(zhǎng)度
返回值  : 字符串的長(zhǎng)度
*/
int my_strlen(char buff[])
{
	int len=0;
	while(buff[len]!='\0')
	{
		len++;
	}
	return len;
}

12. 全局變量、靜態(tài)變量、局部變量、常量

如何聲明常量?  
示例:  常量和變量的區(qū)別測(cè)試
#include 
int main()
{
	int data1=123; //默認(rèn)聲明為變量
	const int data2=456;//聲明為常量
	//區(qū)別:  變量可以改變數(shù)據(jù)  常量不可改變數(shù)據(jù)
	data1=789;
	//data2=789;  錯(cuò)誤賦值方式
	return 0;
}

全局變量和局部變量區(qū)別:
#include 
void func(void);
int data=123; //全局變量,定義在函數(shù)之外的變量。  公用變量
int main(void)
{
	int data=456; //局部變量,私有變量
	printf("data1=%d\n",data); //當(dāng)全局變量和局部變量重名的時(shí)候,優(yōu)先使用局部變量
	func(); //調(diào)用函數(shù)
	return 0;
}

void func(void)
{
	printf("data2=%d\n",data); //使用全局
}

局部變量傳參數(shù)示例:  (分析局部變量)
#include 
void func(int data);

int main(void)
{
	int data=456; //局部變量,私有變量
	func(data);
	printf("data1=%d\n",data);
	return 0;
}

void func(int data)
{
	data=9999;
	printf("data2=%d\n",data);
}

函數(shù)形參傳遞數(shù)組和傳遞變量的區(qū)別:
#include 
void func(int buff[],int data);

int main(void)
{
	int buff[10]={456,123,789}; //局部變量,私有變量
	int data=888;

	printf("data1的地址=0x%X\n",&data);
	printf("buff1的地址=0x%X\n",buff);
	func(buff,data);					//傳遞的是數(shù)組的首地址

	printf("buff1=%d\n",buff[0]); // 9999 ?
	printf("data=%d\n",data); // 888  ?
	return 0;
}

/*
函數(shù)形參傳遞數(shù)組表示是傳遞地址
函數(shù)形參傳遞變量表示是傳遞數(shù)據(jù)
*/
void func(int buff[],int data)
{
	buff[0]=9999;
	data=9999;

	printf("data2的地址=0x%X\n",&data);
	printf("buff2的地址=0x%X\n",buff);
}

全局變量和靜態(tài)變量的生命周期與main函數(shù)一樣長(zhǎng)。
局部變量的聲明周期與調(diào)用的子函數(shù)掛鉤,子函數(shù)調(diào)用完畢,內(nèi)部所有的局部變量全部釋放。
什么是靜態(tài)變量?   局部的全局變量
如何聲明?    static 關(guān)鍵字。  示例:  static int data;  //表示聲明data是靜態(tài)變量

#include 
int func(void);

int main(void)
{
	int i;
	int sum=0;
	for(i=0; i<5; i++)
	{
		sum+=func(); //累加
	}
	printf("%d\n",sum);  //  ?
	return 0;
}

int func(void)
{
	static int data=0;  //聲明靜態(tài)變量,int data=0 只會(huì)執(zhí)行一次。
	data++;
	return data;
}

13. 字符串進(jìn)階練習(xí)作業(yè)

函數(shù)的作業(yè):  
1.時(shí)間轉(zhuǎn)換(秒與標(biāo)準(zhǔn)時(shí)間的轉(zhuǎn)換) 
(1)函數(shù)1:  將秒單位時(shí)間轉(zhuǎn)為標(biāo)準(zhǔn)時(shí)間。  
        237562867493 -----xxxx年xx月xx日xx時(shí)xx分xx秒
(2)函數(shù)2:  將標(biāo)準(zhǔn)時(shí)間轉(zhuǎn)為秒單位的時(shí)間。
       2018年6月1日19點(diǎn)41分23秒----------xxxxxxx秒
  閏年366,平年365。  區(qū)分: 每年二月份相差一天
2.將字符串轉(zhuǎn)整數(shù)、整數(shù)轉(zhuǎn)字符串、浮點(diǎn)數(shù)轉(zhuǎn)字符串、字符串轉(zhuǎn)浮點(diǎn)數(shù) 封裝為函數(shù)。
3.封裝字符串拼接函數(shù):   
           函數(shù)功能實(shí)現(xiàn)將a和b字符串拼接在一起。   
           比如: char a[100]=”123”;  char b[]=”456”;    調(diào)用函數(shù)之后:  a[]=”123456”
4.封裝字符串的拷貝函數(shù):    將a字符串拷貝到b字符串。
5.封裝字符串的比較函數(shù):    比較a字符串和b字符串是否相等。 通過(guò)返回值進(jìn)行區(qū)分。

字符串解析(擴(kuò)展):
1.分析GPS衛(wèi)星返回的數(shù)據(jù)
提取最基本的數(shù)據(jù):
(1)UTC時(shí)間
(2)海拔高度
(3)經(jīng)緯度
char gps_data[]=
{
	"$GNGGA,114955.000,2842.4158,N,11549.5439,E,1,05,3.8,54.8,M,0.0,M,,*4F \
	$GNGLL,2842.4158,N,11549.5439,E,114955.000,A,A*4D \
	$GPGSA,A,3,10,31,18,,,,,,,,,,5.7,3.8,4.2*37 \
	$BDGSA,A,3,07,10,,,,,,,,,,,5.7,3.8,4.2*2A \
	$GPGSV,3,1,10,10,49,184,42,12,16,039,,14,54,341,,18,22,165,23*7B \
	$GPGSV,3,2,10,22,11,318,,25,51,055,,26,24,205,,29,13,110,*7C \
	$GPGSV,3,3,10,31,50,287,36,32,66,018,*7F \
	$BDGSV,1,1,04,03,,,07,05,,,29,07,79,246,33,10,52,232,19*62 \
	$GNRMC,114955.000,A,2842.4158,N,11549.5439,E,0.00,44.25,061117,,,A*4D \
	$GNVTG,44.25,T,,M,0.00,N,0.00,K,A*14 \
	$GNZDA,114955.000,06,11,2017,00,00*47 \
	$GPTXT,01,01,01,ANTENNA OK*35"
};
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7594

    瀏覽量

    135858
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4277

    瀏覽量

    62323
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    介紹一些與變量相關(guān)的存儲(chǔ)屬性與作用

    為大家介紹一些變量相關(guān)的存儲(chǔ)屬性、作用、生命周期以及鏈接屬性的一些知識(shí),有助于大家更好地理解程序,分析程序。一、存儲(chǔ)類&作用&生命周期&
    發(fā)表于 02-14 07:00

    探討一下C語(yǔ)言中的作用局部變量

    作用局部變量--local variable全局變量--global variable修飾符--storage description局部變量
    發(fā)表于 02-28 06:00

    python變量作用

    python變量作用1. 作用Python的作用
    發(fā)表于 03-03 16:50

    c語(yǔ)言變量作用和存儲(chǔ)類別

    c語(yǔ)言變量作用和存儲(chǔ)類別簡(jiǎn)述,很不錯(cuò)哦。
    發(fā)表于 07-14 17:12 ?0次下載

    關(guān)于Java變量作用分析

    可能有不同的作用和名字解析。而同一語(yǔ)言內(nèi)也可能存在多種作用,隨實(shí)體的類型變化而不同。作用
    發(fā)表于 09-25 16:28 ?0次下載

    C語(yǔ)言程序設(shè)計(jì)實(shí)用教程之函數(shù)詳細(xì)介紹和應(yīng)用

    本文檔的主要內(nèi)容詳細(xì)介紹的是C語(yǔ)言程序設(shè)計(jì)實(shí)用教程之函數(shù)詳細(xì)介紹和應(yīng)用內(nèi)容包括了:1 模塊化程序設(shè)計(jì)與函數(shù)2 函數(shù)的定義與調(diào)用3
    發(fā)表于 10-31 18:04 ?2次下載
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>程序設(shè)計(jì)實(shí)用教程之<b class='flag-5'>函數(shù)</b>詳細(xì)介紹和應(yīng)用

    C語(yǔ)言教程之函數(shù)的詳細(xì)資料說(shuō)明

    本文檔的主要內(nèi)容詳細(xì)介紹的是C語(yǔ)言教程之函數(shù)的詳細(xì)資料說(shuō)明包括了:1 函數(shù)概述 ,2 函 數(shù) 定 義 ,3 函數(shù)的調(diào)用 ,4
    發(fā)表于 03-21 15:39 ?9次下載
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>教程之<b class='flag-5'>函數(shù)</b>的詳細(xì)資料說(shuō)明

    C語(yǔ)言中,全局變量濫用的后果是什么

    所創(chuàng)建的變量通常都是局部變量,只能被內(nèi)部引用,而無(wú)法被其它對(duì)象或函數(shù)引用。 全局變量既可以是某對(duì)象函數(shù)創(chuàng)建,也可以是在本程序任何地方創(chuàng)建。全
    發(fā)表于 06-24 17:14 ?1634次閱讀

    C語(yǔ)言中局部變量和全局變量

    全局變量也稱為外部變量,它是在函數(shù)外部定義的變量。它不屬于哪一個(gè)函數(shù),它屬于一個(gè)源程序文件。其作用
    的頭像 發(fā)表于 10-15 10:48 ?5403次閱讀

    C語(yǔ)言變量作用

    作用局部變量--local variable全局變量--global variable修飾符--storage description局部變量
    發(fā)表于 01-13 14:58 ?0次下載
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>中<b class='flag-5'>變量</b>的<b class='flag-5'>作用</b><b class='flag-5'>域</b>

    python變量作用

    python變量作用 1. 作用 Python的作用
    的頭像 發(fā)表于 03-03 16:50 ?1523次閱讀

    C語(yǔ)言函數(shù)的定義、子函數(shù)的使用及變量作用

    這篇介紹C語(yǔ)言函數(shù)的定義、子函數(shù)的使用。接著介紹變量作用
    的頭像 發(fā)表于 04-28 11:23 ?6597次閱讀

    C語(yǔ)言總結(jié)_函數(shù)知識(shí)

    這篇文章介紹函數(shù)的定義、函數(shù)的傳參、函數(shù)的返回值、變量作用、靜態(tài)、全局、局部
    的頭像 發(fā)表于 08-14 09:33 ?740次閱讀

    C語(yǔ)言-函數(shù)的定義、聲明、傳參

    C語(yǔ)言函數(shù)是非常重要的知識(shí)點(diǎn),一個(gè)完整的C語(yǔ)言程序就是由主函數(shù)和各個(gè)子
    的頭像 發(fā)表于 08-14 09:57 ?1884次閱讀

    scanf在C語(yǔ)言中的作用

    scanf在C語(yǔ)言中的作用? scanf是C語(yǔ)言中的輸入函數(shù),用于從標(biāo)準(zhǔn)輸入設(shè)備(如鍵盤(pán))讀取數(shù)
    的頭像 發(fā)表于 11-23 14:13 ?1246次閱讀