一、函數
1.參數 函數在使用的時候,一個很明顯特徵就是使用帶括號(),在我們使用的時候,裏面可能還會有一些數據或者是變量,這就是參數。參數是函數中需要處理
的數據。
函數在定義的時候,給出的參數就是形式參數,也就是說的形參;函數調用的時候,傳遞的參數就是實參。在操作中,將實參的值傳遞過去給形參,就是相 當於一次賦值操作。這裏需要注意的就是實參和形參的類型、數目必須要一致。
注意事項:
1) 形參變量只有在函數被調用時纔會分配內存,調用結束後,立刻釋放內存,所以形參變量只有在函數內部有效,不能在函數外部使用。
2) 實參可以是常量、變量、表達式、函數等,無論實參是何種類型的數據,在進行函數調用時,它們都必須有確定的值,以便把這些值傳送給形參,所 以應該提前用賦值、輸入等辦法使實參獲得確定值。
3) 實參和形參在數量上、類型上、順序上必須嚴格一致,否則會發生“類型不匹配”的錯誤。 2.返回值
函數的返回值指的是函數被調用之後,執行完程序代碼段後所得到的數值,可以通過return進行返回。 一個函數中,可以出現多個return,但是每次調用的時候,只能有一個return進行執行,返回。
return 的一般形式:
3.函數的定義 3.1無參函數的定義
如果函數不接收用戶傳遞的數據,那麼定義時可以不帶參數。如下所示:
說明:
返回值類型可以使C語言中的任意數據類型,比如是int,float,char等 函數名是標識符的一種,命名規則和標識符相同。函數名後面的括號不能少。 函數體是我們需要執行的代碼。即使是一個語句,也要有{}包圍 在函數體內部使用return語句返回數據。
舉例:
注意:main 是函數定義,不是函數調用。當可執行文件加載到內存後,系統從 main 函數開始執行,也就是說,系統會調用我們定義的 main 函 數。
return 表達式; 可以是:
return average; return x +y; return (100 + 300);
返回值類型 函數名(){ 函數的片段
}
返回值類型 函數名(){ 函數體
}
int sum(){
int i, sum=0;
for(i=1; i<=100; i++){ sum+=i;
}
return sum; }
3.2無返回值的定義
void print_tedu() {
printf("hello tedu\n"); }
3.3有參函數的定義
返回值類型 函數名(參數列表){ 函數體
}
int max1(int x, int y) {
if (x > y) {
return x; }else
{
return y;
} }
函數的練習: 1.練習:控制檯請用戶輸入頭和腳的數量,輸出兔子和雞各有幾隻。
//雞兔同籠問題
int rabbit(int heads, int legs) {
int num = 0;
for (num = 0; num < heads; num++) {
if (4 * num + 2 * (heads - num) == legs) {
return num; }
}
return -1; }
void check() {
int heads = 0, legs = 0;
int temp = 0; printf("請輸入頭和腳的數量:"); scanf_s("%d%d", &heads, &legs);
temp = rabbit(heads, legs); if (temp == -1)
{
printf("不好意思,沒兔子。"); }else{
printf("兔子有%d只,雞有%d只\n", temp, (heads - temp)); }
}
2.階乘求和: sum = 1!+ 2!+ 3! + 4! +...+(n-1)! + n!
long factorial(int n);//求階乘 long sum(long n);//求和
//階乘求和:sum = 1!+ 2!+ 3! + 4! +...+(n-1)! + n!
long factorial(int n)
{
int i;
long result = 1; for (i = 1; i <= {
result *= i; }
return result; }
//求和
long sum(long n) {
int i;
long result = 0; for (i = 1; i <= {
n; i++)
n; i++)
result = result + factorial(i); }
return result; }
3.一隻剛出生的奶牛,4年生1只奶牛,以後每一年生1只,現在給你一隻剛出生的奶牛,問你30年後又多少奶牛。
#include <stdio.h>
int CalCowsNum(int iYear){ int iCnt =0;
long lCowsNum = 1; //奶牛總數 for(iCnt=1; iCnt<=iYear; iCnt++){
if(iCnt>=4){ //4年以後奶牛數量開始增多
if((iYear-iCnt)>3){ //第2個4年開始後產的奶牛開始生新奶牛
} }
return lCowsNum;
int main(){
int iYear =0;
//返回奶牛總數
}
lCowsNum += CalCowsNum(iYear - iCnt); }else{
lCowsNum++; }
printf("Please input require years:");
scanf ("%d", &iYear); //輸入年數
printf("In %d years, There is %d cows.\n", iYear, CalCowsNum(iYear)); //輸出結果
return 0; }
二、宏定義
一般寫法:
#define 宏名 字符串
假如現在要開發一個C語言程序,並且要求跨平臺,在 Windows 和 Linux 下都能運行,怎麼辦呢?
#include <stdio.h> //瞭解
void test() {
#if _WIN32
printf("666"); #elif __linux__
printf("hello"); #else
printf("sdfsd"); #endif
}
五子棋
開發工具:VS2012 頭文件:
第一步:畫出棋盤。 第二步:黑白雙方落子 第三步:判斷是不是已經五子連接 第四步:優化 第五步:由一個轉變爲多文件編程---extern
#include<stdio.h> #include<windows.h> #include<conio.h> #include<stdlib.h>
#include <stdlib.h> #include <stdio.h>
#include <conio.h> #include <Windows.h>
///////////////全局變量/////////////////////// char board[20][20];
int x, y;//代表是棋盤的行x和列y一個交點
///////////////函數的聲明/////////////////////// void initBoard();//棋盤的初始化
void printBoard();//棋盤的打印
void Pos(int x, int y);//設置光標的位置
void printNum();//設置打印的棋盤數字 void startGame();//開始遊戲
void checkWin();//檢測遊戲勝負
///////////////函數的使用/////////////////////// //設置光標的位置-----瞭解
void Pos(int x, int y)
{
COORD pos;
HANDLE hOutput;//句柄
pos.X = x;
pos.Y = y;
hOutput = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(hOutput, pos);
}
//設置打印的棋盤數字 void printNum()
{
int i;
Pos(2, 0);
for (i = 0; i < 20; i++) {
printf("%2d", i); }
for (i = 0; i < 20; i++) {
Pos(0, 1 + i);
printf("%2d", i); }
}
//棋盤的初始化 void initBoard() {
int i, j;
for (i = 0; i < 20; i++) {
for(j=0;j <20;j++) {
} }
}
//棋盤的打印
void printBoard() {
int i, j; printNum();//打印 for (i = 0; i < 20; {
} }
void checkWin() {
board[i][j]
= '*';
i++)
//printf("\n");
Pos(2, 1+i);
for(j=0;j <20;j++) {
printf(" %c", board[i][j]); }
}
void startGame() {
initBoard(); printBoard();
while (1) {
} }
int main() {
startGame();
return 0; }
//int temp;//1 2 printf("\n請落白色棋子,輸入行,列座標:"); scanf_s("%d%d",&x, &y);
board[x][y] = 'W'; printBoard();
system("cls"); printBoard();
printf("\n請落黑色棋子,輸入行,列座標:"); scanf_s("%d%d",&x, &y);
board[x][y] = 'B'; printBoard();
system("cls"); printBoard();