C語言函數封裝及變量的作用域
1. for循環示例
#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. 模擬實現投票系統。switch
比如: 有10張票,3個候選人。 進行投票,最終得出票數。
#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("請輸入投票的編號(1~3,4表示無效票) 剩餘票數(%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號選手:%d\n",cnt1); printf("2號選手:%d\n",cnt2); printf("3號選手:%d\n",cnt3); printf("無效票數:%d\n",cnt4); return 0; }
3. 計算字符串空格、數字等數據數量
從鍵盤上輸入一個字符串:
計算字符串裡有多少個空格、小寫字母、大寫字母、數字。
scanf("%s",buff); /* scanf 函數依靠 \n和空格代表結束符號 */ #include <stdio.h> int main() { char buff[100]; int i=0; int cnt1=0,cnt2=0,cnt3=0,cnt4=0,cnt5=0; printf("請輸入字符串:"); 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("數字:%d\n",cnt4); printf("其他:%d\n",cnt5); return 0; }
4. 字符串轉整數。
從鍵盤上輸入一個字符串”12345”, int data=12345;
#include <stdio.h> //"1234" int main() { char buff[100]; int i=0,value=0; printf("輸入數字字符串(0~9):"); scanf("%s",buff); while(buff[i]>='0' && buff[i]<='9') //實現字符串轉整數 { value=value*10; //0 10 120 1230 value=value+(buff[i]-'0'); //1 12 123 1234 i++; } if(buff[i]!='\0') //轉換失敗 { printf("警告:轉換不完整。 得到的值:%d\n",value); } else { printf("轉換成功! 正確值=%d\n",value); } return 0; }
5. 整數轉字符串
整數轉字符串:
#include <stdio.h> //1234 int main() { char buff[100]; char str[100]; unsigned int i=0,val=0,j; printf("請輸入一個整數:"); 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("轉換之後字符串: %s\n",str); return 0; }
6. 浮點數轉字符串
//以下例子代碼實現將浮點數分解成兩個整數 #include <stdio.h> //1234 int main() { float data=123.456789; int data1,data2; data1=data; //得到整數部分 data2=(data-data1)*1000000; printf("%d.%d\n",data1,data2); return 0; }
7. 字符串轉浮點數
從鍵盤上輸入一個字符串”123.45”, float data=123.45;
printf("%d\n",0); //0 printf("%d\n",'0'); //48
8. 函數的特性與用法
C語言是靠函數組成。
函數的特性:
- 1.函數就相當於封裝一個工具。
- 2.函數可以重復調用。
- 3.函數的功能盡可能的單一。 比如:判斷閏年和平年
- 4.我們自己的寫的函數,(除瞭main函數之外) 子函數。
- 5.一般情況下,子函數的代碼都在main函數的下面。
- 6.在調用任何子函數之前,都需要聲明。
函數的定義:
<函數返回值類型> 函數的名稱(形參1,形參2…….)
{
函數的代碼……
return <返回值值>; //如何函數有返回值才需要返回
}
函數的模型:
void func1(void); //函數聲明 int func1(int data1,int data2 /*,......*/); //函數聲明 //函數原型 void func1(void) { } //函數原型 int func1(int data1,int data2 /*,......*/) { return 100; }
函數示例(計算和):
#include <stdio.h> int sum(int a,int b); //函數聲明 int main() { int data; data=sum(100,200); ///調用sum函數,並且接收返回值 printf("data=%d\n",data); data=sum(300,500); ///調用sum函數,並且接收返回值 printf("data=%d\n",data); return 0; } /* 函數功能: 計算a+b之和 */ int sum(int a,int b) { int c=a+b; return c; }
9. 判斷平年和閏年
/*判斷平年和閏年*/ #include <stdio.h> int GetYear(int year); //函數聲明 int main() { int i; for(i=2001; i<2018; i++) { if(GetYear(i))printf("%d 是閏年.\n",i); else printf("%d 是平年.\n",i); } return 0; } /* 函數功能 : 判斷平年和閏年 函數返回值: 0表示平年 1表示閏年 */ int GetYear(int year) { if((year%4==0&&year%100!=0)||(year%400==0)) { return 1; } else { return 0; } }
10. 將數組當做函數的形參
#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. 計算字符串長度
函數示例: 封裝函數,計算字符串長度
#include <stdio.h> int my_strlen(char buff[]); int main() { char buff[100]; scanf("%s",buff); printf("字符串長度:%d\n",my_strlen(buff)); return 0; } /* 函數功能: 計算字符串長度 返回值 : 字符串的長度 */ int my_strlen(char buff[]) { int len=0; while(buff[len]!='\0') { len++; } return len; }
12. 全局變量、靜態變量、局部變量、常量
如何聲明常量?
示例: 常量和變量的區別測試
#include <stdio.h> int main() { int data1=123; //默認聲明為變量 const int data2=456;//聲明為常量 //區別: 變量可以改變數據 常量不可改變數據 data1=789; //data2=789; 錯誤賦值方式 return 0; }
全局變量和局部變量區別:
#include <stdio.h> void func(void); int data=123; //全局變量,定義在函數之外的變量。 公用變量 int main(void) { int data=456; //局部變量,私有變量 printf("data1=%d\n",data); //當全局變量和局部變量重名的時候,優先使用局部變量 func(); //調用函數 return 0; } void func(void) { printf("data2=%d\n",data); //使用全局 }
局部變量傳參數示例: (分析局部變量)
#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); }
函數形參傳遞數組和傳遞變量的區別:
#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); //傳遞的是數組的首地址 printf("buff1=%d\n",buff[0]); // 9999 ? printf("data=%d\n",data); // 888 ? return 0; } /* 函數形參傳遞數組表示是傳遞地址 函數形參傳遞變量表示是傳遞數據 */ void func(int buff[],int data) { buff[0]=9999; data=9999; printf("data2的地址=0x%X\n",&data); printf("buff2的地址=0x%X\n",buff); }
全局變量和靜態變量的生命周期與main函數一樣長。局部變量的聲明周期與調用的子函數掛鉤,子函數調用完畢,內部所有的局部變量全部釋放。什麼是靜態變量? 局部的全局變量
如何聲明? static 關鍵字。
示例:
static int data; //表示聲明data是靜態變量
#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; //聲明靜態變量,int data=0 隻會執行一次。 data++; return data; }
13. 字符串進階練習作業
函數的作業:
1.時間轉換(秒與標準時間的轉換)
(1)函數1: 將秒單位時間轉為標準時間。
237562867493 —–xxxx年xx月xx日xx時xx分xx秒
(2)函數2: 將標準時間轉為秒單位的時間。
2018年6月1日19點41分23秒———-xxxxxxx秒
閏年366,平年365。 區分: 每年二月份相差一天
2.將字符串轉整數、整數轉字符串、浮點數轉字符串、字符串轉浮點數 封裝為函數。
3.封裝字符串拼接函數: 函數功能實現將a和b字符串拼接在一起。
比如: char a[100]=”123”; char b[]=”456”; 調用函數之後: a[]=”123456”
4.封裝字符串的拷貝函數: 將a字符串拷貝到b字符串。
5.封裝字符串的比較函數: 比較a字符串和b字符串是否相等。 通過返回值進行區分。
字符串解析(擴展):
1.分析GPS衛星返回的數據
提取最基本的數據:
- (1)UTC時間
- (2)海拔高度
- (3)經緯度
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" };
到此這篇關於C語言函數封裝及變量的作用域的文章就介紹到這瞭,更多相關C語言函數封裝內容請搜索LevelAH以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持LevelAH!