C語(yǔ)言函數(shù)封裝及變量的作用域
1. for循環(huán)示例
#include <stdio.h>
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 <stdio.h>
int main()
{
int i;
int val; //獲取鍵盤上輸入的值
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ù)量
從鍵盤上輸入一個(gè)字符串:
計(jì)算字符串里有多少個(gè)空格、小寫字母、大寫字母、數(shù)字。
scanf("%s",buff);
/*
scanf 函數(shù)依靠 \n和空格代表結(jié)束符號(hào)
*/
#include <stdio.h>
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("小寫:%d\n",cnt2);
printf("大寫:%d\n",cnt3);
printf("數(shù)字:%d\n",cnt4);
printf("其他:%d\n",cnt5);
return 0;
}
4. 字符串轉(zhuǎn)整數(shù)。
從鍵盤上輸入一個(gè)字符串”12345”, int data=12345;
#include <stdio.h>
//"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)字符串
整數(shù)轉(zhuǎn)字符串:
#include <stdio.h>
//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<i; j++)
{
str[j]=buff[i-j-1]; //倒序
}
str[j]='\0';
printf("轉(zhuǎn)換之后字符串: %s\n",str);
return 0;
}
6. 浮點(diǎn)數(shù)轉(zhuǎn)字符串
//以下例子代碼實(shí)現(xiàn)將浮點(diǎn)數(shù)分解成兩個(gè)整數(shù)
#include <stdio.h>
//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ù)
從鍵盤上輸入一個(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.我們自己的寫的函數(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 <stdio.h>
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 <stdio.h>
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 <stdio.h>
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 <stdio.h>
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 <stdio.h>
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 <stdio.h>
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 <stdio.h>
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 <stdio.h>
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 <stdio.h>
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"
};到此這篇關(guān)于C語(yǔ)言函數(shù)封裝及變量的作用域的文章就介紹到這了,更多相關(guān)C語(yǔ)言函數(shù)封裝內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++ 中l(wèi)ambda表達(dá)式的編譯器實(shí)現(xiàn)原理
C++ 11加入了一個(gè)非常重要的特性——Lambda表達(dá)式。這篇文章主要介紹了C++ 中l(wèi)ambda表達(dá)式的編譯器實(shí)現(xiàn)原理,需要的朋友可以參考下2017-02-02
Qt實(shí)現(xiàn)卡牌對(duì)對(duì)碰游戲(附demo)
本文主要介紹了Qt實(shí)現(xiàn)卡牌對(duì)對(duì)碰游戲,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-10-10
OpenGL實(shí)現(xiàn)3D空間中移動(dòng)圖像
這篇文章主要為大家詳細(xì)介紹了OpenGL實(shí)現(xiàn)3D空間中移動(dòng)圖像,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-08-08
C++之關(guān)于string對(duì)象的大小比較
這篇文章主要介紹了C++之關(guān)于string對(duì)象的大小比較方式,具有很好的 參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
C++基于人工智能搜索策略解決農(nóng)夫過(guò)河問(wèn)題示例
這篇文章主要介紹了C++基于人工智能搜索策略解決農(nóng)夫過(guò)河問(wèn)題,簡(jiǎn)單描述了農(nóng)夫過(guò)河問(wèn)題的概念、實(shí)現(xiàn)原理并結(jié)合具體實(shí)例形式給出了C++使用人工智能搜索策略解決農(nóng)夫過(guò)河問(wèn)題的相關(guān)操作技巧,需要的朋友可以參考下2017-12-12
C語(yǔ)言 一級(jí)指針與二級(jí)指針詳細(xì)介紹
這篇文章主要介紹了C語(yǔ)言 一級(jí)指針與二級(jí)指針詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2016-10-10

