ถ้าสั่งพิมพ์ list[3] จะแสดงค่าอะไร

Download Report

Transcript ถ้าสั่งพิมพ์ list[3] จะแสดงค่าอะไร

Programming assignments
•
•
•
•
ชื่องาน (subject) : program
เขียนด้ วยภาษา C หรื อ C++
มีทงหมด
ั้
7 ข้ อ
กาหนดส่ง 29 กรกฎาคม 2554
ข้อ 1
• สร้ างฟั งก์ชนั จานวน 3 ฟั งก์ชนั โดยให้ แต่ละฟั งก์ชนั มีการประกาศตัว
แปร array ขนาดใหญ่ แต่ตา่ งกันที่พื ้นที่เก็บข้ อมูลดังนี ้
– ฟั งก์ชนั first ใช้ ตวั แปรแบบ static
– ฟั งก์ชนั second ใช้ ตวั แปรแบบ stack-dynamic
– ฟั งก์ชนั third ใช้ ตวั แปรแบบ heap-dynamic
• ในฟั งก์ชนั่ main ให้ มีการเรี ยกใช้ ฟังก์ชนั ทัง้ 3 เป็ นจานวนหลายครัง้
(>100,000) แสดงเวลาสาหรับการเรี ยกใช้ แต่ละฟั งก์ชนั
เปรี ยบเทียบเวลาและอธิบายผลที่ได้ พร้ อมเหตุผล
ข้อ 2
• กาหนดให้ สร้ าง array 2 มิติที่มีขนาดใหญ่ (>100x100)
• ทาการบวกค่าของสมาชิกทุกตัวใน array แล้ วแต่ผล
• โดยเปรี ยบเทียบเวลาของ 2 วิธีตอ่ ไปนี ้
– เข้ าถึงโดยใช้ subscript
– เข้ าถึงโดยใช้ pointer และใช้ การคานวณหาตาแหน่งใน array โดยใช้
การคานวณ mapping function
• วิธีใดมีประสิทธิภาพในแง่เวลาดีกว่า
• นศ.คิดว่าวิธีใดมี reliability ดีกว่า เพราะเหตุใด
ข้อ 3
• ทดสอบโปรแกรมในภาษา C ต่อไปนี ้ โดยกาหนดให้
– a และ b เป็ น non-local variable
– ฟั งก์ชนั fun ทาการเพิ่มค่า a อีก 10 และ return ค่า a
a = 10;
b = a + fun();
printf(“function call on the right, b=%d\n",b);
a = 10;
b = fun()+a;
printf(" function call on the right, b= %d\n",b);
• อภิปรายผลที่ได้
ข้อ 4
•
•
•
•
สร้ าง overloaded operator ในภาษา C++ โดย
กาหนดชนิดข้ อมูลขึ ้นใหม่สาหรับ string
นา string 2 สายมาเชื่อมต่อกันด้ วยการใช้ เครื่ องหมาย “+”
ทดสอบโดยการสร้ าง string และเรี ยกใช้ operator นี ้
ข้อ 5
• จาก pseudocode ต่อไปนี ้ จงเขียนโปรแกรมโดยคาสัง่ ทาซ ้า
k = (j+13)/27
loop:
if k>10 then goto out
k = k+1
i = 3*k-1
goto loop
out: …..
ข้อ 6
• จาก pseudocode ที่เขียนด้ วย syntax ภาษา C ต่อไปนี ้
จงเขียนฟั งก์ชนั ที่ทาการส่งผ่าน parameter โดยใช้ วิธี
– Passed by value
– Passed by reference
• ระบุคา่ ที่ได้ ของตัวแปร list หลังจากการทางาน
void fun(int first, in second)
{ first += first; second += second; }
void main() {
int list[2] = {1,3};
fun(list[0], list[1]);
}
ข้อ 7
• สร้ าง generic function สาหรับการหาค่า max ของตัวแปร 2 ตัว
• โดยสร้ างเป็ น template เพื่อทาการเปรี ยบเทียบและคืนค่าที่มากที่สดุ
1. int list[5] = { 1, 2, 3, 4, 5 } ;
ถาสั
้ ่ งพิมพ ์ list[3] จะแสดงคาอะไร
่
4
2. int list[5] = { 1 } ;
ถาสั
้ ่ งพิมพ ์ list[0] และ list[4] จะแสดง
ค
าอะไร
1
และ
0
่
3. ถา้ interger ใช้เนื้อที่ 2 ไบตในการ
์
เก็บขอมู
้ ล ตัวแปร list จะใช้
เนื้อทีเ่ ก็บขอมู
้ ลกีไ่ บต ์
4. ถาอยากทราบจ
านวนสมาชิ
้
10
ไบต ์ กของตัว
แปร list จะใช้คาสั่ งอะไร
คาแนะนา ใช้คาสั่ ง sizeof
sizeof(list)/sizeof(int)
5. char s[ ] = “517321”;
7 ไบต ์
ตั
ว
อั
ก
ษรใช
เนื
้
อ
ที
่
1
ไบต
ตั
ว
แปร
s
้
์
6. enum Day
ใช
่ ไี่ บตในการเก็
บขอมู
้เนื้อทีก
้ ล
์
{Sun,Mon,Tue,Wed,Thu,Fri,Sat}
;
Day d = Sun;
ถาใช
คาสั่ ง printf(“%d”, d); ในภาษา
้
้
ค
าสั
่
ง
าใช
7.
ถ
d++;
ในภาษา
C
จะ
้
้
C จะแสดงคาอะไร
0
่
คอมไพลผ
อไม่
่
์ านหรื
ถาคอมไพล
ผ
วแปร d มีคา่
้
่
์ านตั
8. ถาใช
่ ง dd++;
ในภาษา
C++
้
้คผาสั
อะไร
มี
ค
1
หรื
อ
Mon
าน
า
่
่
จะคอมไพลผ
อไม่
่
์ านหรื
ถาคอมไพล
ผ
วแปร d มีคา่
้
่
์ านตั
อะไร ไมผ
มี
่ านเพราะไม
่
่ coercion
9. union un{ถาตั
้ วอักษรใช้เนื้อที่ 1
ไบต ์
int x;
float r; Integer ใช้เนื้อที่ 2 ไบต ์
char c; Float ใช้เนื้อที่ 4 ไบต ์
4 ไบต ์
}
u;
10. union u_color{char r; char g; char b;
} rgb;
ตัวแปร U ใช้เนื้อทีก
่ ไี่ บต ์
rgb.r = 'r'; rgb.g = 'g'; rgb.b = 'b';
ในการเก็บขอมู
ล
้
printf("%c %c %c", rgb.r, rgb.g,
rgb.b);
แสดงผลทีไ่ ดจากค
าสั่ ง printf
้
จงอธิบายความหมายของคาตอไปนี
้ พรอม
่
้
ยกตัวอยาง
่
1. Coercion
2. Casting
3. Operator overloading
จงอธิบายความหมายของคาตอไปนี
้ พรอม
่
้
ยกตัวอยาง
่
4. Precedence rules
5. Associativity rules
6. Functional side effect