---
# System prepended metadata

title: 1101 計算機概論 4abc

---

# 1101 計算機概論 4abc
[TOC]
## 資源分享

### 課堂用書 PDF
- [C: How to Program: with an introduction to C++ Global Edition 8th Edition](https://faculty.ksu.edu.sa/sites/default/files/c_how_to_program_with_an_introduction_to_c_global_edition_8th_edition.pdf)

### 適合新手的 C compiler/IDE
- 線上(不須安裝軟體)
    - [OnlineGBD debuger](https://www.onlinegdb.com/)
- GUI 軟體編譯器
    - [Code::Blocks](https://www.codeblocks.org/)
    - [Visual Studio](https://visualstudio.microsoft.com/zh-hant/vs/)
        > 選 community 2019版才是免費的
    - [Dev-C++](https://sourceforge.net/projects/orwelldevcpp/)

### 其他
- [ACM NCNU Linux note](https://hackmd.io/h6ZHt9RpSWGrofwXeEHKEA?view)

## 9/23
### 上課內容
- [Introduction PPT](https://moodle.ncnu.edu.tw/pluginfile.php/1265949/mod_resource/content/1/cop.pdf)
- [CPU simulator](http://erdos.csie.ncnu.edu.tw/~klim/cpu-simulator/index.html)

### 在 lilina 文字介面的常用指令
- **pwd**: 取得目前所在的位置
    ```bash=
    pwd
    ```
    > 會顯示目前自己在哪個目錄底下
- **ls**: 列出當前的目錄檔案列表
    ```bash=
    ls
    ```
- **cd**: 切換目錄(directiry)，目錄可以想像成Windows系統中的資料夾，就像是一個放檔案的容器
    ```bash=
    cd my_directiry
    ```
    > 空格後加上要切換到的目錄名稱，必須是已經存在的目錄

- **mkdir**: 建立新的目錄
    ```bash=
    mkdir my_directiry2
    ```
    > 空格後加上要創建的新目錄名稱
- **nano**: 使用nano文字編輯器開啟文字檔(進入編輯介面)，==程式都要打在文字檔裡面==
    ```bash=
    nano my_file
    ```
    > 空格後加上要編輯的文字檔，如果該檔案不存在就會自動建立新的文字檔
    > `ctrl+x`可以退出編輯介面，會詢問是否儲存新的修改內容，按`Y`(yes)/`N`(no)
- **rm**: 刪除檔案
    ```bash=
    rm my_file
    ```
    > 空格後加上要刪除的檔案名稱，謹慎刪除(無法復原)
- **rmdir**: 刪除目錄，使用方式同上

### 作業
- 安裝 [Pietty/Putty](https://moodle.ncnu.edu.tw/mod/resource/view.php?id=679056)
- 連線至 lilina.csie.ncnu.edu.tw (163.22.17.162)
    > 使用帳號密碼成功登入後會進到自己的home目錄，是屬於自己的個人空間
- 在目錄`~/c-1001/exer1`底下建立檔案`hello.c`
    ```bash=
    cd ~/c-1001/exer1
    nano hello.c
    ```
    - 接著會進到編輯介面，輸入下方程式
    ```c=
    #include <stdio.h>
    int main()
    {
      printf("hello, world!\n");
    }
    ```
    > `ctrl-x`:退出編輯，按`Y`儲存內容
- 用 gcc 編譯`hello.c`
    ```bash=
    gcc hello.c
    ```
- 得到`a.out`並執行
    ```bash=
    ./a.out
    ```
    - 成功的話會顯示程式執行結果
        ```
        hello, world!
        ```
        
## String op
- `strncpy`
```c=
#include <stdio.h>
#include <string.h>
int main()
{
    char s[] = "This is a string.";
    char sub[5];
    strncpy(sub,s,4);
    printf("%s", sub);
	return 0;
}
```
- `strtok`
```c=
#include <stdio.h>
#include <string.h>
int main()
{
    char s[] = "This is a string.";
    char *sub = strtok(s," ");
    printf("%s", sub);
	return 0;
}
```
- [Substring function DIY](https://job.achi.idv.tw/2013/12/02/in-the-c-language-substr/)


## ex9
### ex9a.c
```c=
#include <stdio.h>

void print_arr(int a[], int N, int W)
{
    int R = N/W;
    if (N % W > 0)    R = R + 1;
    for (int i = 0; i < R; i++)
    {
        for (int j = 0; j < W; j++)
        {
            int index = i*W + j;
            if(index < N)
                printf("%5d", a[index]);
        }
        printf("\n");
    }
}
int main()
{
    int N, W;
    scanf("%d %d", &N, &W);
    int a[N];
    for(int i = 0; i < N; i++)
        scanf("%d", &a[i]);
    print_arr(a, N, W);
    return 0;
}
```
### ex9b.c
```c=
#include <stdio.h>

void reverse(int a[], int count)
{
    int sum = count - 1;
    for (int i = 0; i < count/2; i++)
    {
        int tmp = a[sum - i];
        a[sum - i] = a[i];
        a[i] = tmp;
    }
}
int main()
{
    int num, count = 0;
    int a[50];
    while(scanf("%d", &num) != EOF)
    {
        a[count] = num;
        count++;
    }
    reverse(a,count);
    for(int i = 0; i <= count; i++)
        printf("\n%d", a[i]);
   return 0;
}
```

### ex9c.c
```c=
#include <stdio.h>
int main()
{
    while(1)
    {
        int R, C;
        scanf("%d %d", &R, &C);
        if (R == 0 || C == 0)   break;
        char a[R][C];
        for(int i = 0; i < R; i++)
        {
            for(int j = 0; j < C; j++)
                a[i][j] = '.';
        }
        while(1)
        {
            int n;
            scanf("%d", &n);
            if (n == 0) break;
            else if (n > 0)
            {
                n = n-1;
                for(int j = 0; j < C; j++)
                    a[n][j] = 'o';
            }
            else
            {
                n = -n -1;
                for(int i = 0; i < R; i++)
                    a[i][n] = 'o';
            }
        }
        for(int i = 0; i < R; i++)
        {
            for(int j = 0; j < C; j++)
                printf("%c", a[i][j]);
            printf("\n");
        }
    }
    return 0;
}
```

## Structure

