NTUBIME96-HW 板


LINE

突然想起来还没 po....@@ 第一题:(10分) 写出下列 C++ 语法中 keyword 的定义或用途: 1. const 当宣告前面加上这个关键字时,表示所修饰的物件或变数不可被改变。 以这种方式宣告的话,必须要给定初始值。另外,若是一成员函式的後 面接上 const 关键字,则表示该函式不会变动成员中的物件。 2. static 表示所修饰的物件或变数为静态,此意义为其生命周期与程式相同,会 在程式刚开始的时候配置记忆体,并在程式结束前被消灭。尽管如此, 如果宣告时是位在某个区块中的话,仍然只有在该区块范围内能够读取 它。另外,对一个 class 来说,不管以此种结构宣告的物件有多少个, 其静态成员永远只有一份实体──所有的物件会共享这些静态成员。当 一个成员函式前面加上 static 时,表示该函式只会对结构内的静态成 员做存取。如果是不属於任何结构的普通函式被冠上 static 的话,则 没有这种限制;普通的静态函式只有一项特徵,那就是它不能被计画( project,我实在不知道怎麽翻.....@@)中的其他档案存取。(这项特 徵是所有的静态变数或函式都具备的,包括之前所说的那些。) P.S. 如果你在书上看到什麽不会改变之类的叙述,那是说它的位址不会 改变。静态变数并没有 const 的特性,不要弄错了。还有什麽「 每次看到它都是同一个」之类的,也是在强调它只会被建立一次。 这题很多人错喔...... 又,如果不知道什麽是 project 的话,请务必去翻翻书喔!我一 时之间说不清楚....(绝不是因为懒! ....真的!) 3. sizeof 一个运算子,後面可以接变数或型态,会回传其所占用(或所需要)的 记忆体大小。这个回传值实际上是 char 型态大小的整数倍,会这样定 意原因是 C++ 标准中没有限定哪种型态应该占用多少记忆体,一切都 交由编译器来决定。几乎所有的编译器都是将 char 定为一个 byte , 所以通常可以把这个单位想成是 byte ,不过实际上的情形还是要以使 用的编译器为准。另外,sizeof 回传的型态是 size_t,绝大多数的编 译器都将之定义为 unsigned int。 P.S. 你可能会有个疑问,不管是型态的大小也好,或者是 size_t 这种 奇怪的型态也罢,为什麽 C++ 标准不直接规定好,还要交给编译 器决定这麽麻烦?答案是为了弹性与相容性。不同的平台之下每种 型态适合的大小都不一样,比如说桌上型电脑跟手机多半就不会相 同;但是标准是大家都要遵守的。如果硬在标准中规定好一切,那 很可能就必须放弃某些平台。另外,就算在同一个平台下,由於种 种考量,每一家编译器定义的方式也可能不一样。交给编译器决定 的好处是,只要我的程式码符合公定标准,就可以在所有地方的流 通,每次跨平台的时候只要重新编译一次就好了,完全不必更动任 何一行程式码。 4. unsigned 表示所修饰的变数没有正负号的差别。由於将原本纪录正负的位元也拿 纪录数值了,所以可以储存比原本大一倍的数值。 5. return 从目前所在的函式立刻跳回到之前做出呼叫的函式中。(对 main() 来 说,则是回到作业系统。)除了标示成 void 的函式外,跳回去的时候 必须夹带一个变数,作为此函式执行的结果。 6. public 表示以下的成员对外公开,所有函式都可以存取这些成员变数,或是呼 叫这些成员函式。 7. struct 将各种型态的变数或函式组合起来,称此集合为一个结构,可以当成型 态使用。struct 为 class 的前身,两者的差别是 struct 中所有的成 员皆为 public。 P.S. 这题也有很多人错,struct 当然可以有函式啊,事实上它也是有 建构子与解构子的。 8. double 倍精准浮点数,是一种型态,与 float 大致相同,但容量为其两倍。 9. void 这个关键字有三种用法,当它在函式的前面时,表示这个函式没有回传 值;当它放在函式的传入值清单中时,表示这个函式不需要传入值;当 它作为一个指标的型态时,表示这是一个通用指标。一个被宣告成 void* 的指标可以指到任何型态的变数(const 变数除外),但是在它转型之 前没有办法被解读。通用指标可以转型成任何一种指标。 10. break 从 do、while、for、switch 中跳出来。 P.S. 终於打完这题了......看来老师跟我说解答第一题略过果然是相当有见 地.....@@ 不过我看这题普遍答得都不太理想,所以我还是写一下.... 基本上不用太担心,老板的指示是只要有沾到边就给分,我是写来厘清 观念的。 第二题:(10分) 下列叙述执行後变数 A, B, C, D, E 之值分别为何? int x[10] = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20}; int A, B, C, D, E; A = x[7]; B = 20*x[1] + x[2]; C = *x; D = *(x + 4); x++; E = *(x + 3); Ans: A = 16 B = 86 C = 2 D = 10 E = 10 P.S. 偷偷吐嘈一下,老师少一个分号,扣一分。 第三题:(10分) 下列叙述执行後的输出为何? #include <iostream.h> main() { int a; static char c[] = "Programming with C++ can be great fun!"; for(a=0; c[a]!='\0'; a++) { if((a%3) == 0) cout << c[a]; } } Ans:Pgmnwh+c e n 第四题:(10分) 下列程式片段执行後的输出为何? char s1[50] = 'JACK'; char s2[50] = 'MARY'; char s3[50]; strcpy(s3, s2); cout << s3 << endl; cout << strlen(s1) + strlen(s2) << endl; strcat(s3, " and "); cout << s3 << endl; strcat(s3, s1); cout << s3 << endl; cout << s1 << " and " << s2 << endl; Ans: MARY 8 MARY and MARY and JACK JACK and MARY 第五题:(10分) 请设计一个程式其功能为输出一个九九乘法表於档案内。输出的档案名称为: EXAM2004.TXT。 HINT: 你可能会用到下列之C++指令 ofstream outFile("EXAM2004.TXT", ios::out); Ans: #include "stdafx.h" #include <fstream> #include <iostream> using namespace std; void main() { ofstream outFile("EXAM2004.TXT", ios::out); // 宣告一个 out file stream, // 并准备写入 "EXAM2004.TXT" 这个档案 // 输出九九乘法表 for(int i=1; i<=9; i++) { for(int j=1; j<=9; j++) outFile << i << "x" << j << " = " << i*j << endl; outFile << endl; } // 结束档案 outFile.close(); } 第六题:(10分) 请设计一个程式,由键盘读入一个20x20的整数二维阵列,然後分别计算二维 阵列两条对角线元素的总合,将结果输出到萤幕上。 Ans: #include "stdafx.h" #include <iostream> using namespace std; void main() { cout << "请输入 20x20 的整数阵列 (400个耶!?请加油....)" << endl; int matrix[20][20]; // 20x20 的矩阵 int sum1 = 0; // 主对角线和 int sum2 = 0; // 另一条对角线和 for(int i=0; i<20; i++) for(int j=0; j<20; j++) { // 读入矩阵的值 cout << "A[" << i << "][" << j << "] = "; cin >> matrix[i][j]; // 如果在主对角线上就累计 if(i == j) sum1 += matrix[i][j]; // 如果在另一条对角线上就累计 if(i+j == 19) sum2 += matrix[i][j]; } cout << "辛苦了!两条对角线的和分别如下:" << endl << sum1 << "(左上到右下)" << endl << sum2 << "(右上到左下)" << endl; } 第七题:(10分) 请写一个程式将一字串的所有旋转後的字串组合输出至电脑萤幕,每次只能 旋转一个字元。如字串"rotate"产生所有的旋转组合为: rotate, otater, tatero, aterot, terota, erotat Ans: #include "stdafx.h" #include <iostream> using namespace std; void main() { char str[100]; // 字串 int len = 0; // 字串长度 int i, j; // loop counter cout << "输入一个字串:"; cin >> str; len = strlen(str); // 开始旋转,方法是将字串从中间切开,然後两个子字串交换位置。 // 要产生所有组合的话,只要切的位置从最左边不断往右移就好了。 for(i=0; i<len; i++) { // 输出後半段的字串 for(j=i; j<len; j++) cout << str[j]; // 输出前半段的字串 for(j=0; j<i; j++) cout << str[j]; cout << endl; } } P.S. 老板是说用 char 阵列就好,不过基本上字串应该用 string 才对。 下面补上 string 的写法,我觉得你们应该有能力可以看懂了。 这样写的好处是不用担心输入太长会爆掉,而且运算方便。 #include "stdafx.h" #include <iostream> #include <string> void main() { std::string str; int len; std::cout << "输入一个字串:"; std::cin >> str; len = str.length(); for(int i=0; i<len; i++) std::cout << str.substr(i, len) << str.substr(0, i) << std::endl; } 第八题:(15分) 设计一个程式,输入国内某网站进行棒球选手网路票选结果的 N 个 球员(N<50)姓名与得票数,将结果以图形表现出来,图形以 1000 票为一个单位转换成一个星号,不足 1000 票者则舍去不计,将各球 员的得票数如下面之格式输出於萤幕。 ============================================================= 球员 累计票数 绘图 ============================================================= 陈致远 20650 ******************** 张泰山 15874 *************** 谢佳贤 9718 ********* 彭政闵 6871 ****** 蔡泓泽 5849 ***** … … … ============================================================= Ans: #include "stdafx.h" #include <iostream> #include <iomanip> using namespace std; void main() { char name[50][100] = {{""}}; // 球员姓名(请注意二维阵列括号要两层) int vote[50]; // 票数 int num = 0; // 几个球员 int i; // 回圈计数器 for(i=0; i<50; i++) { // 姓名 cout << "请输入球员姓名,或输入 \"-1\" 终止:"; cin >> name[i]; // name 是个 50 列 100 行的矩阵 // name[i] 的意思是第 i 列 // -1 就终止 if(name[i][0]=='-' && name[i][1]=='1') break; // 票数 cout << "请输入该球员的票数:"; cin >> vote[i]; // 累计球员数 num++; } // 画表格 for(i=0; i<60; i++) cout << "="; cout << endl << setw(10) << "球员" << setw(15) << "累计票数" << "\t绘图" << endl; for(i=0; i<60; i++) cout << "="; cout << endl; for(i=0; i<num; i++) { // 显示姓名与票数 cout << setw(10) << name[i] << setw(15) << vote[i] << "\t"; // 画星星 for(int j=0; j<(vote[i]/1000); j++) cout << "*"; cout << endl; } for(i=0; i<60; i++) cout << "="; cout << endl; } 第九题:(15分) 请以物件导向的观念设计一个程式计算长方形的周长与面积。 在此程式中你需要设计一个 Rectangle 的类别来记录与处理资 料。程式由使用者输入长方形的长与宽,分别计算出此长方形的 周长与面积输出至电脑萤幕。程式的要求如下: 1. 长方形的长、宽、周长与面积为 Rectangle 类别的内部 (private)资料,其读写需要由类别的成员函式来完成。 2. 分别设计设定长宽与计算周长与面积的函式,并将其设计 为 Rectangle 类别中的 public 成员函式。 3. 程式连续执行,至使用者输入结束指令後(自行设计)终止。 Ans: #include "stdafx.h" #include <iostream> using namespace std; class Rectangle { public: void SetLength(float l); // 设定长 void SetWidth(float w); // 设定宽 float GetArea(){return length*width;} // 回传面积 // 因为这函式实在太短了,而且我想偷懒,所以打在这里; // 不过这种写法很糟糕,平常还是尽量不要的好。 float GetAround(){return (2*length + 2*width);} // 回传周长 private: float length; float width; }; void Rectangle::SetLength(float l) { length = l; } void Rectangle::SetWidth(float w) { width = w; } void main() { float le, wi; // 矩形长宽 Rectangle rect; // 矩形 while(1) { // 读取长宽 cout << "请输入矩形的长:"; cin >> le; cout << "请输入矩形的宽:"; cin >> wi; // 设定长宽 rect.SetLength(le); rect.SetWidth(wi); // 显示面积周长 cout << "该矩形面积 = " << rect.GetArea() << endl << "该矩形周长 = " << rect.GetAround() << endl << endl; // 继续? char tmp; cout << "继续吗?(Y/N)"; cin >> tmp; if(tmp=='n' || tmp=='N') // N 就跳出 break; cout << endl; } } 就这样了。这次考题根本就大放水,而且老板说改松一点, 基本上我根本就昧着良心在改......@@ 原始分数平均就有 6x,8x 分的一卡车........ -- 「唉...好吧,我长话短说,」 「你...比妲己强吗?」 「我绝对不会输她」 「因为我不会和她打!!!!!!!!!!!」 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.166.73.37 ※ 编辑: SuperBEAR 来自: 218.166.73.37 (01/21 03:50)
1F:→ jrshin:推~昧着良心 推 218.35.83.51 01/21
2F:→ jrshin:老师特地交代 所以我作业7成绩平移30~50分 推 218.35.83.51 01/21
3F:→ coldshawn:第六和第八题都用不到矩阵阿 推218.164.109.178 01/21
4F:→ SuperBEAR:不用也可以写的出来没错,不过一般而言, 推 218.166.73.37 01/21
5F:→ SuperBEAR:这种东西不会要人家用键盘输入,而且多半 推 218.166.73.37 01/21
6F:→ SuperBEAR:还会要做别的事情,所以存起来比较好 推 218.166.73.37 01/21
※ 编辑: SuperBEAR 来自: 218.166.73.37 (01/21 12:36)
7F:→ st3001:突然发现签名档 推推太公望XD 推 218.184.78.145 01/31
8F:→ sima:你好空虚喔~ 推 140.112.25.184 02/01
9F:→ wendychang:害我在想怎麽过了这麽久推文数又变多了... 推 218.174.158.16 02/01







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BabyMother站内搜寻

TOP