Q1(a) 小偉打算編寫一個程序。該程序把兩個44的表內的數字相加。表3內的數字是由表1和表2應格子內的數字相加而成。例如:

Slides:



Advertisements
Similar presentations
1 第 3 章 C++ 中的条件与循环 第 3 次见面! acm.nefu.edu.cn/C++_03.ppt.
Advertisements

CSIM, PU C Language Introduction to the C Programming Language 重覆敘述 (for,while,break,continue) 適合重複性的計算或判斷.
《C语言程序设计》复习
Introduction 基本概念 授課老師:蕭志明
“八皇后”问题 崔萌萌 吕金华.
Loops.
第一章 C语言概述 计算机公共教学部.
项目五——校园一卡通程序功能模块化设计 5-1项目显示查询和退出函数设计.
C语言程序设计 第八章 函数.
第一章 程序设计入门.
Introduction to the C Programming Language
C语言程序设计 课程 第5章 数组 主讲:李祥 博士、副教授 单位:软件学院软件工程系.
高级语言程序设计 主讲人:陈玉华.
循环结构又称为重复结构:用来处理需要重复处理的问题,它是程序中一种很重要的结构。
函數 授課:ANT 日期:2009/3/24.
C程序设计.
If … else 選擇結構 P27.
Chap 2 用C语言编写程序 2.1 在屏幕上显示 Hello World! 2.2 求华氏温度 100°F 对应的摄氏温度
Introduction to the C Programming Language
Introduction to the C Programming Language
STRUCTURE 授課:ANT 日期:2010/5/12.
第七章 函数 目录 有参的加法函数的开发 函数定义的一般形式 函数参数和函数的值 函数的调用
QQ: 李祥 QQ: 欢迎多种方式的学习交流,祝大家学有所成.
计算概论 第十八讲 C语言高级编程 结构与习题课 北京大学信息学院.
Function.
程式撰寫流程.
Chap 8 指针 8.1 寻找保险箱密码 8.2 角色互换 8.3 冒泡排序 8.4 电码加密 8.5 任意个整数求和*
第5章 堆疊(Stacks) 5-1 堆疊的基礎 5-2 堆疊的表示法 5-3 堆疊的應用 - 運算式的計算與轉換
第7章 编译预处理 本章要求: 本章重点: 本章难点: 掌握用#define定义无参数宏和带有参数宏定义和调用方法;
Introduction to the C Programming Language
作弊是否很有诱惑性? 上堂课已经讲了 作业不一定在两个小时里都能完成 答疑没有一个人? 作弊是有记录的 心理系很多同学集体作弊,让人震惊
Chap 3 分支结构 3.1 简单的猜数游戏 3.2 四则运算 3.3 查询自动售货机中商品的价格.
1. 說明一個一維整數陣列passwd,下標範圍0至49 2. 在屏幕顯示 "Enter password"
C语言 程序设计基础与试验 刘新国、2012年秋.
多维数组与指针 用指针变量可以指向一维数组中的元素,也可以指向多维数组中的元素。但在概念上和使用上,多维数组的指针比一维数组的指针要复杂一些。 1. 多维数组元素的地址 先回顾多维数组的性质,可以认为二维数组是“数组的数组”,例 : 定义int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};
程序的三种基本结构 if条件分支语句 switch多路开关语句 循环语句 循环嵌套 break,continue和goto语句
計數式重複敘述 for 迴圈 P
第5讲 结构化程序设计(Part II) 周水庚 2018年10月11日.
第七章 函数及变量存贮类型 7.1 函数基础与C程序结构 7.2 函数的定义和声明 7.3 函数的调用 7.4 函数的嵌套与递归
授课老师:龚涛 信息科学与技术学院 2016年3月 教材:《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
第2章 C++流程控制语句 if 语句 switch语句 for语句 while语句 do - while语句 break语句
第0章作业: 教材P12-练习与实践 1.写出用符号’*’输出描绘汉字”大”的流程图。
数组 梁春燕 华电信息管理教研室.
C语言概述 第一章.
資料結構與C++程式設計進階 排序與搜尋 講師:林業峻 CSIE, NTU 6/ 14, 2010.
程式結構&語法.
第三章 C++的语句和简单的程序设计 主要内容:
C++语言程序设计 C++语言程序设计 第三章 控制语句 第十一组 C++语言程序设计.
C程序设计.
C 语言程序设计 程序的循环结构 电大崇信县工作站 梁海亮.
第2章 算法与C语言程序 程序 (1)数据的描述:数据的类型和组织形式(数据结构) (2)操作的描述:操作步骤(算法) 沃思指出:
Introduction to the C Programming Language
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
第十四章 若干深入问题和C独有的特性 作业: 函数指针 函数作参数 函数副作用 运算 语句 位段 存储类别 编译预处理
C程序设计.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
第三章 基本的輸出與輸入函數 (Basic Output & Input Function)
程序设计基础.
第五章 逻辑运算和判断选取控制 §5.1 关系运算符和关系表达式
第七章  数 组.
第1章 数据结构基础概论 本章主要介绍以下内容 数据结构研究的主要内容 数据结构中涉及的基本概念 算法的概念、描述方法以及评价标准.
Chap 7 数 组 7.1 排序问题 7.2 找出矩阵中最大值所在的位置 7.3 进制转换.
多重條件選擇敘述
C/C++基礎程式設計班 陣列 講師:林業峻 CSIE, NTU 3/14, 2015.
遊戲利用一大小為n×n的表格(即表格有n行和n列),其中n為2至8間(包括2和8)的整數。 表格內每一單元格可由所在的行數和列數參照。
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
编译原理实践 7.PL/0的词法分析程序构造.
Q6. 某學校將學生的電話號碼存貯在一個文字檔'telist.txt'。 在這交字檔中,每行有14個字符,代表學生班別、班號和電話號碼,
函式庫補充資料 1.
C语言基础学习 从外行到入门.
Presentation transcript:

Q1(a) 小偉打算編寫一個程序。該程序把兩個44的表內的數字相加。表3內的數字是由表1和表2應格子內的數字相加而成。例如: 5 + = 6 7 8 The sum of these two tables is > 1 3 3 5 3 3 5 5 3 4 5 6 5 6 7 8 Enter the row 1 elements of Table 1 : 1 2 3 4 Enter the row 2 elements of Table 1 : 2 3 4 5 Enter the row 3 elements of Table 1 : 0 0 0 0 Enter the row 4 elements of Table 1 : 4 5 6 7 Enter the row 1 elements of Table 2 : 0 1 0 1 Enter the row 2 elements of Table 2 : 1 0 1 0 Enter the row 3 elements of Table 2 : 3 4 5 6 Enter the row 4 elements of Table 2 : 1 1 1 1 CS1999

int table1[MAX][MAX], table2[MAX][MAX], i, j; #define MAX 4 int table1[MAX][MAX], table2[MAX][MAX], i, j; void output(){ printf ("\nThe sum of these tables is >\n"); for(i=0;i<MAX;i++){ for(j=0;j<MAX;j++) printf("%d\t",table2[i][j]); printf("\n"); } main(){ printf("Enter two %dx%d matrix: \n\n", MAX,MAX); input1(); input2(); process(); output(); } CS1999

for(i=0;i<MAX;i++){ void input1(){ for(i=0;i<MAX;i++){ printf("Enter the row %d elements of Table 1: ",i); for(j=0;j<MAX;j++) scanf("%d", &table1[i][j]); } void input2(){ for(i=0;i<MAX;i++){ printf("Enter the row %d elements of Table 2: ",i); for(j=0;j<MAX;j++) scanf("%d", &table2[i][j]); } void process(){ for(i=0;i<MAX;i++) for(j=0;j<MAX;j++) table2[i][j] += table1[i][j]; } CS1999

Q2. 某學生編寫了以下的C程序,把用戶輸入的兩位正整數排序。 #define NUM 5 const int digit=2; int bin[10][NUM], data[NUM]; int key, pass, i,j,k, empty; main(){ printf("No.of positive integers to be sorted: %d\n", NUM); for(i=0; i<NUM; i++){ printf("Enter a %d-digit integer: ",digit); scanf("%d",&data[i]); } for(pass=1; pass<=digit; pass++){ … printf("After pass %d :\n", pass); for(i=0;i<NUM;i++) printf("%d\t",data[i]); printf("\n"); 2 CS1999

[7][0] [3][0] [2][0] [3][1] [2][1] [0][0] [4][0] [5][0] [1][0] [3][0] bin[i][j] for(pass=1;pass<=digit;pass++){ for(i=0; i<10; i++) for(j=0;j<NUM;j++) bin[i][j]=0; } 1 2 3 4 5 6 7 8 9 15 20 23 37 43 20 23 43 15 37 5 5 for(i=0; i<NUM; i++){ switch (pass){ case 1: key=data[i]%10; break; case 2: key=data[i]/10; break; } k=empty=0; bin[key][k] = data[i]; 個位 十位 do{ if(bin[key][k]>0) k++; else empty=1; }while (empty==0); k data[k] 37 1 23 2 43 3 20 4 15 [7][0] k data[k] 20 1 23 2 43 3 15 4 37 k=0; for(i=0; i<10; i++) for(j=0;j<NUM;j++) if (bin[i][j]>0){ data[k]=bin[i][j]; k++; } [7][0] [3][0] [3][1] [0][0] [5][0] k data[k] 15 1 20 2 23 3 37 4 43 [2][0] [2][1] [4][0] [1][0] [3][0] 5 CS1999

請小心細閱程序並回答以下各問題。附加在程序中之行號只作參考用。 (a) 指出哪一行決定須排序的正整數數目。 (b) 在280行至300行之間的嵌套for循環有什麼作用? (c) 考慮260行、280行及290行。300行會執行多少次? (d) 假設用戶把整數37、23、43、20、15順序輸入至程序中。 #define NUM 5 初始化 bin[i][j] 為0 (i) 當Pass = 1,每次剛執行完340行時Key之值為何?試填寫下表。 I Key 1 7 2 3 4 5 (ii) 當Pass = 1,下表顯示輸入的各整數在Bin中貯存的位置。試寫出程序在250行至550行之輸出。 3 5 輸入的整數 整數在Bin中貯存的位置 37 23 43 20 15 Bin[7][0] Bin[3][0] Bin[3][1] Bin[0][0] Bin[5][0] CS1999

(e) (i) 當Pass = 2,每次剛執行完350行時Key之值為何?試填寫下表。 1 2 3 4 5 (ii) 當Pass = 2,填寫下表以顯示輸入的各整數剛在520行之前在Bin中貯存的位置。 輸入的整數 整數在Bin中貯存的位置 37 23 43 20 15 4 1 3 20 23 43 15 37 Bin[2][0] Bin[2][1] Bin[4][0] Bin[1][0] Bin[3][0] (iii) 當Pass = 2, 寫出程序在520行至550行之輸出。 15 20 23 37 43 const int digit=3; switch (pass){ case 1: key=data[i]%10; break; case 2: key=data[i]/10%10; break; case 3: key=data[i]/100; break; } (f) 建議如何修改此程序, 使此算法可將三位正整數排序。 CS1999

Q3 彼得以C語言編寫一電腦遊戲程序。此遊戲的規格說明如下: I 此遊戲由玩者和電腦對奕。 II 此遊戲使用六個圍成一個圈的格子, 分別稱為box[1]、box[2]、box[3]、box[4]、box[5]、box[6] III 開始遊戲時,每個格都有一數值2。 IV 遊戲由玩者開始。玩者和電腦輪流擲骰。 每次擲出的隨機數n會根據下列規則用來更新某些格子之值: 規則甲:box n之值會增加2。 規則乙:旁邊兩格之值會各減少1。 III 若擲骰後有任何格子之值變為負數,則對方勝。 n = rand()… x = n-1 y = n+1 n=1 2 box 2 box 3 box 6 box 5 box 4 box 1 例如: 如果n=3, 則box 3會加2, 而box 2和box 4會各自減1。 如果n=1, 則box 1會加2, 而box 2和box 6會各自減1, 餘此類推。 y=2 x=6 x=2 n=3 y=4 CS1999

輸出例二: 輸出例一: Box # : 1 2 3 4 5 6 Box # : 1 2 3 4 5 6 Value : 2 2 2 2 2 2 按任意鍵...擲骰 玩者擲了4. Value : 2 2 1 4 1 2 電腦擲了1. Value : 4 1 1 4 1 1 玩者擲了3. Value : 4 0 3 3 1 1 電腦擲了6. Value : 3 0 3 3 0 3 Value : 3 -1 5 2 0 3 電腦勝. 輸出例一: Box # : 1 2 3 4 5 6 Value : 2 2 2 2 2 2 按任意鍵...擲骰 玩者擲了4. Value : 2 2 1 4 1 2 電腦擲了6. Value : 1 2 1 4 0 4 玩者擲了2. Value : 0 4 0 4 0 4 Value :-1 4 0 4 -1 6 玩者勝. CS1999

#include <stdio.h> 1 #include <stdio.h> 2 int box[7]; // 只用box[1]...box[6] 3 int n, turn; 4 main() { 變量 描述 box[] 貯存六個格子之值的陣列 turn 貯存輪到哪方的變量 (0=電腦; 1=玩者) n 貯存擲骰所得之值的變量 CS1999

(a) 試編寫一子程序init,對六個格子賦初始值。 (b) 試編寫一子程序rules,落實遊戲規格說明中的規則甲和規則乙。 void rules(int num) (c) 試編寫一子程序displaybox,以下面的格式顯示各個格子的內容: Box # : 1 2 3 4 5 6 Value : X X X X X X 其中X為各格子中的值。 void displaybox() (d) 試編寫一子程序endgame,若任何一格子負值時回輸1,否則回輸0。 int endgame() (e) 使用(a)至(d)中的子程序編寫主程序。 CS1999

for(i=0;i<6;i++) box[i]=2; } int box[6]; char turn[10]; void init(){ int i; srand(time(NULL)); for(i=0;i<6;i++) box[i]=2; } void applyRules(int n){ int x=n-1,y=n+1; if(x<0) x=5; if(y>5) y=0; box[x]--; box[n]+=2; box[y]--; } void displayBox(){ int i; printf("Box#: 0 1 2 3 4 5\n"); printf("Value"); for(i=0;i<6;i++) printf("%3d",box[i]); printf("\n"); } CS1999

if(box[i]<0) theEnd=1; return theEnd; } int endGame(){ int i, theEnd=0; for(i=0;i<6;i++) if(box[i]<0) theEnd=1; return theEnd; } void changePlayer(){ if(strcmp(turn,"Player")==0) strcpy(turn,"Computer"); else strcpy(turn,"Player"); } CS1999

printf("\n%s rolls a %d.\n", turn,n); applyRules(n); changePlayer(); } main(){ int n; init(); displayBox(); strcpy(turn,"Player"); while(!endGame()){ n = rand()%6; printf("\n%s rolls a %d.\n", turn,n); applyRules(n); changePlayer(); } printf("%s wins.\n",turn); if(strcmp(turn,"Player")==0){ printf("Press any key to roll the dice.\n"); getch(); } CS1999