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;
//