C語言---day04

一、函數

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();

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章