1. 程式人生 > 實用技巧 >c語言部落格3—函式

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));產生真正的隨機數