c語言部落格3—函式
0.pta總分
1.本章學習總結
1.1函式定義、呼叫、宣告
函式的定義
函式的定義首先要對函式確定函式的三個內容
1.函式的返回值型別
2.函式的名稱
3.函式的引數
如定義一個求和函式
int putSum (int a,int b)
{
int sum;
sum=a+b;
return sum
}
其中函式名稱為putSum,函式的返回值型別為整形,函式的引數為a和b
函式的呼叫
#include <stdio.h> int main() int putSum(int a, int b); { int a = 2, b = 3; int c; int putSum(int a, int b); c = putSum(a, b); printf("%d + %d = %d\n",a, b, c); } int putSum(int a, int b) { int sum; sum=a+b; return sum; }
得到結果為2+3=5
函式的宣告
函式的宣告在函式定義後加;並放在頭部即可
1.2全域性、區域性變數、靜態區域性變數
1.全域性變數具有全域性作用域。全域性變數只需在一個原始檔中定義,就可以作用於所有的原始檔。
2.靜態區域性變數具有區域性作用域,它只被初始化一次,自從第一次被初始化直到程式執行結束都一直存在,它和全域性變數的區別在於全域性變數對所有的函式都是可見的,而靜態區域性變數只對定義自己的函式體始終可見,每次被呼叫都使用上一次的值。
3.區域性變數也只有區域性作用域,它是自動物件(auto),它在程式執行期間不是一直存在,而是隻在函式執行期間存在,函式的一次呼叫執行結束後,變數被撤銷,其所佔用的記憶體也被收回。
4.靜態全域性變數也具有全域性作用域,它與全域性變數的區別在於如果程式包含多個檔案的話,它作用於定義它的檔案裡,不能作用到其它檔案裡,即被static關鍵字修飾過的變數具有檔案作用域。這樣即使兩個不同的原始檔都定義了相同名字的靜態全域性變數,它們也是不同的變數。
1.3C資料型別及注意點
1.整型變數
int型別
取值範圍(32位):-2^15— 2^15-1
轉換說明:%d
short int(或簡寫為short)
取值範圍(16位):-2^15— 2^15-1
轉換說明:%d
long int(或簡寫為long)
取值範圍(32位):取值範圍(16位)-2^31— 2^31-1
轉換說明:%ld
2.浮點數
單精度float
取值範圍:10^-37 —10^37
轉換說明:%f
雙精度double
取值範圍:(2^63— 2^63-1)
轉換說明:%f
3.字元型
轉換說明:%c
輸入單個字元
注意點
1.輸入多個字元用getchar()實現
2.在解決浮點誤差問題時,可以利用一個很小的值進行矯正
1.4C運算子
邏輯運算子:!
算術運算子:自增++,自減--,+,-,*,/
關係運算符:<,>,==,!=等
邏輯運算子:&&,||
1.5學習體會
近段時間主要學習函式的使用以及回顧資料型別,對於函式的編寫還不太熟練,應在以後多加練習
2.綜合作業:小學生口算表示式自動生成系統
2.1流程圖
2.2.函式功能及全域性變數介紹
選單相關函式
void OperateMenu();//遊戲操作介面
void OperateMenu()//遊戲操作介面
{
char option;
int i;
int temp;
system("cls");//清屏
do
{
system("cls");
printf("******************************************\n");
printf("1.一年級口算\n");
printf("2.二年級口算\n");
printf("3.三年級口算\n");
printf("4.退出系統\n");
printf("******************************************\n");
printf("請輸入您的選擇:");
scanf(" %c", &option);
switch (option)
{
case '1':
system("cls");
GradeOneMenu();
break;
case '2':
system("cls");
GradeTwoMenu();
//GradeTwoMenu();
break;
case '3':
system("cls");
GradeThreeMenu();
//GradeThreeMenu();
break;
case '4':
printf("\n謝謝您的參與!\n");
Sleep(500);
exit(0);
default:
printf("您輸入不對,只能輸入1,2,3,4,請重輸!\n");
Sleep(500);
}
} while (!(option >= '1' && option <= '4'));
}
void GradeOneMenu();//一年級
void GradeTwoMenu();//二年級
void GradeThreeMenu();//三年級
出題相關函式
int putNum(int grade)//生成運算元,用rand隨機生成數字,用switch進行轉化為運算子,對不同年級對運算子進行限制
int putNum(int grade)//生成運算元
{
int num;
switch (grade)
{
case 1:num = 1 + rand() % 9; break;
case 2:num = 1 + rand() % 99; break;
case 3:num = 1 + rand() % 99; break;
}
return num;
}
int putOperation(int grade)//生成運算子,用rand隨機生成數字,對不同年級對數值進行限制
int putOperation(int grade)//生成運算子
{
char op;
int sum = 0;
switch (grade)
{
case 1:sum = 1 + rand() % 1; break;//一年級
case 2:sum = 1 + rand() % 3; break;//二三年級
}
switch (sum)
{
case 1:op = '+'; break;
case 2:op = '-'; break;
case 3:op = '*'; break;
case 4:op = '/'; break;
}
return op;
}
2.3執行結果截圖,測試用例。
一年級題目,作答3次,全部正確
二年級題目,作答5次,中途退出
2.4大作業中程式設計技巧總結
1.分多個cpp檔案,可以讓程式碼更簡潔,查閱方便
2.運用srand((unsigned)time(NULL));產生真正的隨機數