ข้อสอบโปรแกรมภาษา C ภาษาจีน 中山大学《C语言程序设计》2020–2021学年第一学期
ในเอกสารนี้เป็นข้อสอบกลางภาควิชาเขียนโปรแกรมภาษาซี ส่วนแบบฝึกหัดที่ครูให้ทำส่งในคาบ ครูเอาโจทย์มาจาก LeetCode (力扣) สามารถเข้าไปลองทำในนั้นได้ครับ 😃
สามารถโหลดเอกสารได้ ที่นี่









ข้อที่ 1 ที่จริงสูตรแปลงจากเซลเซียสเป็นฟาเรนไฮต์คือ F = 9/5(C) + 32 แต่โจทย์ให้มาเป็น F = (C+32)*9/5 ก็เอาตามที่โจทย์ให้มา
#include <stdio.h>
/* 摄氏 (shèshì) = Celsius
* 华氏 (huáshì) = Fahrenheit
* 展幕 (zhǎnmù) = จอภาพ (screen)
*/
int main(){
float c,f;
scanf("%f", &c);
f = (c+32)*9/5;
printf("%.2f", f);
}
ข้อที่ 2 เช็คว่าเลขนั้นมี 5 และ 7 เป็นตัวประกอบหรือไม่
#include <stdio.h>
int main(){
int n;
scanf("%d", &n);
printf( n%5==0 && n%7==0 ? "yes":"no");
}
ข้อที่ 3 เช็คว่าตัวเลขนั้นเป็นจำนวนเฉพาะหรือไม่
#include <stdio.h>
int main(){
int n;
scanf("%d", &n);
int prime=1;
if ( n<=1) printf("NO"); //จำนวนที่น้อยกว่า 0, 0 และ 1 ไม่ใช้จำนวนเฉพาะ
else {
for (int i=2; i<=n/2; i++){ //ให้ตัวเลขนั้นหารกับทุกค่าที่น้อยกว่าหรือเท่ากับครึ่งนึงของมัน
//(ถ้ามากกว่าครึ่งนึงของค่านั้นก็ไม่สามารถหารลงตัว)
if (n%i == 0){
prime = 0; //เปลี่ยนสถานะเป็นไม่ใช่จำนวนเฉพาะ
break;
}
}
printf(prime==1 ? "YES":"NO");
}
}
ข้อที่ 4 เรียงลำดับตัวเลข 15 ตัวจากน้อยไปมาก (สามารถใช้ฟังก์ชั่น qsort() ในการเรียงได้ แต่ปกติตอนสอบจะให้เขียนขึ้นมาเอง) ในที่นี้ใช้ Bubble Sort Algorithm
#include <stdio.h>
#define LEN 15
int main(){
// 1. รับตัวเลข
int a[LEN];
for (int i=0; i<LEN;i++){
scanf("%d", &a[i]);
}
// 2. เรียงตัวเลข
int top=0, temp; // top คือจุดบนสุดที่ตัวเลขลอยไปถึง, temp ไว้เก็บค่าชั่วคราวตอนเปลี่ยนตัวเลขที่จะลอย
/*
* เช็คตัวเลขจากด้านล่าง (บนสุดคือ index ที่ 0 ล่างสุดคือ index ที่ 14)
* เลขที่น้อยกว่าจะลอยขึ้นด้านบนผ่านตัวเลขที่มีค่ามากกว่า จนกว่าจะถึง top หรือตัวเลขที่มีค่าน้อยกว่ามัน
* เลขที่มีค่าน้อยกว่าจะเป็นเลขที่ลอยขึ้นไปแทน
* */
while(top<LEN){
for (int i = LEN-1; i>=top; i--) {
if (i!=0) { // ถ้า i=0 จะเทียบกับ i-1 ไม่ได้
if (a[i] < a[i - 1]) {
temp = a[i - 1];
a[i - 1] = a[i];
a[i] = temp;
}
}
}
top++;
}
// 3. แสดงตัวเลข
for (int i=0; i<LEN; i++){
printf("%d ", *(a+i));
}
}