C++資訊之芽

2024/2/21

學習目標:cout、cin、printf、scanf。

學會使用位址指定字元&

#include<iostream>

using namespace std;


main(){

char name[]="張庭禎"; //宣告姓名變數 

int age = 18;//宣告年齡變數 

cout << "Hi,C++"<<endl;

cout <<"我是"<<name<<endl;

printf("Hello world!\n");

printf("我是%s,今年%d歲。\n",name,age);

cout<<"輸入姓名1:";

cin >> name;

cout<<"輸入年齡1:";

cin >> age;

printf("我是%s,今年%d歲。\n",name,age);

printf("輸入姓名2:");

scanf("%s",name);

printf("輸入年齡2:");

scanf("%d",&age);

printf("我是%s,今年%d歲。\n",name,age);

return 0;

}

輸出入作業1.cpp

輸入姓名、體重、身高,輸出:我是xxx,體重???公斤,身高???公尺,BMI=???。

2024/3/6第四周

四則運算 + - * / 商 餘 次方。

int a=10,b=3;

double result = std::pow(a, b);

if選擇結構、if-else。

for迴圈、累加、九九乘法表。

2024/3/13第五周

//格式字元 long = %lu、long long = %llu 

if (條件判斷句或運算式) {

}

else {

}

switch (變數或運算式) {

case 9:

  ...

  break;

case 8:

  ...

  break;

default:

  ...

}

迴圈

for (int i=起始值;執行條件;增量方式){

}

前判斷式迴圈

while (條件式) {

...

}

判斷式迴圈 : 至做一次

do {

} while (條件式);

202/3/20第六周

整數陣列

int a1[5] = {1,2,3,4,5};

計算陣列長度

陣列總長度 / 陣列元素大小

int len = sizeof(a1) / sizeof(int);

指標

int arr[5] = {1,2,3,4,5};

int* p = arr;

//指標走訪陣列 

for(int i=0;i<len;i++){//迴圈變數i為位移量

cout << *(p+i) << " ";

}

隨機取值

#include<stdlib.h>

#include<time.h>

srand(time(NULL));

int min=10,max=100,tmp=0;

tmp = (max-min+1)*rand() / (RAND_MAX+1.0) + min; //取10到100的整數(含)

題目

1.宣告一個含有十個整數的陣列。

2.宣告一個指標變數,指向陣列開頭記憶體位址。

3.隨機產生1到100的整數(10個),放入陣列中。

4.以指標逐一走訪陣列。 

2024/3/27第七周

函式

//傳值呼叫 call by value

int gcd(int,int);

int LCM(int,int);

//傳址呼叫 call by address

void swap(int*,int*);

int sum(int*);

作業:累加a=36,b=48,n[5]={1,2,3,4,5}

2024/4/3第八周

二維陣列-迷宮

2024/4/10第九周

C++踩地雷

參考文獻:http://squall.cs.ntou.edu.tw/cprog/practices/p07%20Mine%20Sweeper.pdf

#includ<windows.h>

清除螢幕

void clearScreen() {

    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);

    CONSOLE_SCREEN_BUFFER_INFO csbi;

    GetConsoleScreenBufferInfo(hConsole, &csbi);

    COORD screenSize = { csbi.srWindow.Right + 1, csbi.srWindow.Bottom + 1 };

    DWORD dwBytesWritten;

    FillConsoleOutputCharacter(hConsole, ' ', screenSize.X * screenSize.Y, { 0, 0 }, &dwBytesWritten);

    SetConsoleCursorPosition(hConsole, { 0, 0 });

}

顯示地雷陣列

void show(int mine) {

    printf("還有%d個地雷未標示\n", mine);

    printf("  0 1 2 3 3 4 5 6 7 8 9\n");

    for (int i = 0; i < 10; i++) {

        printf("%d - - - - - - - - - - -\n", i);

    }

    printf("請輸入 0:打開、1:標示 及座標(i,j)? ");

} 

2024/4/17第十周

延續踩地雷遊戲

引用標頭檔

#include<iostream>

#include<windows.h>

宣告函式

void init();//初始化

void clearScreen();//清除螢幕(全部填入空白)

void Check_Show(int*,int*); //檢查並顯示地雷區 

void input(); //輸入動作與座標 

void showArr(int*); //顯示陣列(測試用) 

int  calMine(int*,int,int); //計算周圍地雷數

游標位置、控制游標、改變文字及背景顏色---Global

//獲取目前游標位置 

COORD getCurrentCursorPosition() {

    CONSOLE_SCREEN_BUFFER_INFO csbi;

    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);


    if (!GetConsoleScreenBufferInfo(hConsole, &csbi)) {

        // 獲取失敗返回 (-1, -1)

        COORD invalidCoord = { -1, -1 };

        return invalidCoord;

    }


    return csbi.dwCursorPosition;

}

//移動游標至指定位置 

void moveCursorToPosition(int x, int y) {

    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);

    COORD position = { static_cast<SHORT>(x), static_cast<SHORT>(y) };

    SetConsoleCursorPosition(hConsole, position);

}

//設定文字顏色 

void SetColor(int color = 7){

  HANDLE hConsole;

  hConsole = GetStdHandle(STD_OUTPUT_HANDLE);

  SetConsoleTextAttribute(hConsole,color);

}

//公用變數宣告 

//定義地雷陣列

int arr[10][10]={

{0,0,0,0,0,0,0,0,0,0},

{1,0,1,0,1,0,1,0,1,1},

{0,0,0,0,0,0,0,0,0,0},

{0,0,1,0,1,0,1,0,1,0},

{0,0,0,0,0,0,0,0,0,0},

{0,0,0,0,0,0,0,0,0,0},

{0,0,0,0,0,0,0,0,0,0},

{0,0,0,0,0,0,0,0,0,0},

{0,0,0,0,0,0,0,0,0,0},

{0,0,0,0,0,0,0,0,0,0}

};

int* ap=arr[0];//取得二維陣列arr開頭位址 

//定義周圍地雷數量

int num[10][10]={

{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},

{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},

{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},

{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},

{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},

{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},

{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},

{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},

{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},

{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}

};

int* ap1=num[0];//取得二維陣列num開頭位址 

//定義已選位置 

int mark[10][10]={

{0,0,0,0,0,0,0,0,0,0},

{0,0,0,0,0,0,0,0,0,0},

{0,0,0,0,0,0,0,0,0,0},

{0,0,0,0,0,0,0,0,0,0},

{0,0,0,0,0,0,0,0,0,0},

{0,0,0,0,0,0,0,0,0,0},

{0,0,0,0,0,0,0,0,0,0},

{0,0,0,0,0,0,0,0,0,0},

{0,0,0,0,0,0,0,0,0,0},

{0,0,0,0,0,0,0,0,0,0},

};

int* ap2=mark[0];//取得二維陣列mark開頭位址 

//

COORD cursorPos;

int s, row, col; //s:動作選擇、row:列座標、col:欄座標 

bool hit = false;

//