วันเสาร์ที่ 30 กันยายน พ.ศ. 2560

ภาษาซีเบื้องต้น ตอนที่ 7 : โจทย์ปัญหา printf scanf (5 ข้อ)

โจทย์ปัญหา printf scanf 5 ข้อ 

1.เขียนโปรแกรมรับค่าสกุลเงินดอลลาร์ และแปลงเป็นสกุลเงินบาท  (กำหนดให้ 1 ดอลลาร์ = 37.50 บาท)
ตัวอย่าง output     
Input  money  of  US  Dollas  : 50
Covert  to Thai  Baht              : 1875.00

2.เขียนโปรแกรมเพื่อรับข้อมูลชื่อ  เพศ  อายุ และเกรดเฉลี่ย
ตัวอย่าง output     
Enter first name : Name
Enter gender (M/F) : M
Enter age : 18
Enter  grade : 3.25

Name : Name
Gender : M
Age : 18
Grade : 3.25

3.เขียนโปรแกรมบวกเลข 3 จำนวนและให้โปรแกรมแสดงค่าเฉลี่ยด้วย โดยรับค่าจากผู้ใช้โปรแกรม
ตัวอย่าง output     
Enter number1 : 10
Enter number2 : 20
Enter number3 : 30
Sum = 60    Average = 20.00

4.เขียนโปรแกรมหาพื้นที่ของรูปสี่เหลี่ยม โดยรับค่าความกว้างและความยาว 
ตัวอย่าง output     
Enter x  : 3
Enter y  : 5
***** Area *****
         15.000

5.เขียนโปรแกรมหาคำตอบของสมการ Ax2+Bx+C=0 โดยเขียนโปรแกรมรับค่าตัวเลข A, B, C (ให้ใช้ math.h)
ตัวอย่าง output     
AX^2 + BX + C = 0
Enter number A : 6
Enter number B : 7
Enter number C : 2

Answer of 6X^2 + 7X + 2 =0
Answer1 = -0.50
Answer2 = -0.67


------------------เฉลย (เดี่ยวมาเพิ่มคำอธิบายอีกที) ---------------------------
1. 
#include<stdio.h>
#include<conio.h>
main()
{
      float money;
     
      printf("Input money of US Dollar : ");
      scanf("%f",&money);
      printf("Convert to Thai baht : %.2f",money*37.50);
      getch();
}


2.
#include<stdio.h>
#include<conio.h>
main()
{
      char first[10],gender;
      int age;
      float grade;
     
      printf("Enter first name: ");
      scanf("%s",first);
      printf("Enter gender (M/F): ");
      scanf("%s",&gender);
      printf("Enter age: ");
      scanf("%d",&age);
      printf("Enter grade: ");
      scanf("%f",&grade);

      printf("\nName : %s\n",first);
      printf("Gender : %c\n",gender);
      printf("Age : %d\n",age);
      printf("Grade : %.2f\n",grade);
     
      getch();
}

3.

#include<stdio.h>
#include<conio.h>
main()
{
     int  number1, number2, number3, sum; //sum=0
     float avg;
     printf("Enter  number1: ");
     scanf("%d",&number1);
     printf("Enter  number2: ");
     scanf("%d",&number2);
     printf("Enter  number3: ");
     scanf("%d",&number3);
    
     sum=number1+number2+number3;
     avg = sum/3;
    
     printf("Sum=%d Average=%.2f",sum,avg);
     getch();

}

4.
#include<stdio.h>
#include<conio.h>
main()
{
     float  x, y;
     printf("Enter x: ");
     scanf("%f",&x);
     printf("Enter y: ");
     scanf("%f",&y);
     printf("***** Area *****\n");
     printf("      %.3f",x*y);
     getch();
}

5.
#include<stdio.h>
#include<conio.h>
#include<math.h>
main()
{
      float a,b,c,x1,x2;
     
      printf("AX^2+BX+C=0\n");
      printf("Enter number A : ");
      scanf("%f",&a);
      printf("Enter number B : ");
      scanf("%f",&b);     
      printf("Enter number C : ");
      scanf("%f",&c);
     
      x1=(-b+sqrt(b*b-4*a*c))/(2*a);
      x2=(-b-sqrt(b*b-4*a*c))/(2*a);
     
      printf("\nAnswer of %.0fX^2+%.0fX+%.0f=0\n",a,b,c);
      printf("Answer 1 = %.2f\n",x1);
      printf("Answer 2 = %.2f\n",x2);           
      getch();
}



ภาษาซีเบื้องต้น ตอนที่ 6 : โจทย์เพื่อความเข้าใจ printf scanf

ให้แสดงผลลัพธ์ของโปรแกรม (output) หรือ เขียนโปรแกรมตามที่โจทย์ต้องการ 
ให้ลองคิดดูก่อน อย่าเลื่อนไปดูเฉลยล่างสุด - -*


#Program 1

#include<stdio.h>
#include<conio.h>
main()
{
     printf(“Hello Word”);
     getch();
}


#Program 2 ให้เขียนโปรแกรมแสดงชื่อออกมาทางหน้าจอ โดยในชื่อกับนามสกุลอยู่คนละบรรทัด

#Program 3

#include<stdio.h>
#include<conio.h>
main()
{
     printf(“ABCD”);
     printf(“1234”);
     printf(“Hello”);
     getch();
}


#Program 4

#include<stdio.h>
#include<conio.h>
main()
{
     printf(“ABCD\n”);
     printf(“1234\n”);
     printf(“Hello\n”);
     getch();
}


#Program 5

#include<stdio.h>
#include<conio.h>
main()
{  
     printf(“ABCD\n1234\nHello\n”);
     getch();  
}


#Program 6

#include<stdio.h>
#include<conio.h>
main()
{
     printf(“Name:  %s\n”,”Test”);
     printf(“number:  %d\n”,4);
     getch();
}


#Program 7

#include<stdio.h>
#include<conio.h>
main()
{
     int  number=7; float  GPA=3.5;  char grade= ‘A’;
     printf(“%d\n”,number);
     printf(“%.2f\n”,GPA);
     printf(“%s\n”,&grade);
     getch();
}


#Program 8

#include<stdio.h>
#include<conio.h>
main()
{
     int  number;
     scanf(“%d”,&number);
     getch();
}


#Program 9

#include<stdio.h>
#include<conio.h>
main()
{
     int  number;
     printf(“Enter number (1-100):  ”);
     scanf(“%d”,&number);
     printf(“you input number :  %d”,number);
     getch();
}


#Program 10

#include<stdio.h>
#include<conio.h>
main()
{
     int  score1, score2;
     printf(“Enter  score1:  ”);
     scanf(“%d”,&score1);
     printf(“Enter  score2: ”);
     scanf(“%d”,&score2);
     printf(“Total score: %d”,score1+score2);
     getch();
}


#Program 11

#include<stdio.h>
#include<conio.h>
main()
{
     int  score1, score2;
     printf(“Enter  score1 , score2:  ”);
     scanf(“%d %d”,&score1,&score2);
     printf(“Total score: %d”,score1+score2);
     getch();
}


#Program 12

#include<stdio.h>
#include<conio.h>
main()
{
     int  num;
     num=10;
     printf(“num = %d\n”,num);
     printf(“num++ = %d\n”,num++);
     printf(“num = %d\n\n”,num);

     num=10;
     printf(“num = %d\n”,num);
     printf(“++num = %d\n”,++num);
     printf(“num = %d\n\n”,num);
     getch();
}


------------------------------   เฉลย  --------------------------------
#Program 1
Hello Word

#Program 2
#include<stdio.h>
#include<conio.h>
main()
{
     printf(“ชื่อ\nนามสกุล”);   // ชื่อนามสกุลให้ใส่ชื่อเราเองเป็นภาษาอังกฤษ มี \n ด้วย
     getch();
}

#Program 3
ABCD1234Hello

#Program 4
ABCD
1234
Hello

#Program 5   
ABCD
1234
Hello

// ข้อ4 ข้อ 5 ผลลัพท์เหมือนกัน แต่จำนวนบรรทัดของโปรแกรมต่างกัน

#Program 6
Name:  Test
number:  4

#Program 7
7    
3.50   

#Program 8
10

//หากพิมพ์อะไรไป มันจะแสดงแค่ผลลัพท์อันนั้นที่พิมพ์ เช่น 10

#Program 9

Enter number (1-100): 70
you input number : 70

//หากพิมพ์อะไรไปมันจะเอาค่านั้นเก็บไว้ในตัวแปร แล้ว printf มันจะแสดงอีกครั้ง

#Program 10
Enter  score1: 10
Enter  score2: 20
Total score: 30

#Program 11
Enter  score1 , score2: 10 20 
Total score: 30

//ข้อ 10 กับ ข้อ 11 เป็นโปรแกรมบวกเลข2จำนวนเหมือนกัน แต่ต่างกันที่การรับข้อมูล (scanf)
//ข้อ 10 รับทีละค่า ข้อ 11 รับทีเดียว 2 ค่าในบรรทัดเดียวโดยต้องเว้นวรรค  
//หากไม่เว้นวรรคพิมพ์ 10 แล้ว Enter โปรแกรมก็ยังไม่แสดงผลต้องพิมพ์อีกจำนวน


#Program 12
num = 10
num++ = 10
num = 11

num = 10 
++num = 11
num = 11

//ข้อนี้แสดงให้เห็นความแตกต่างของเครื่องหมาย ++ ที่อยู่หน้าและหลังตัวแปร
//หากอยู่หลังตัวแปรค่าจะเปลี่ยนหลังจากเรียกตัวแปรนั้นอีกครั้ง 
//หากอยู่หน้าตัวแปรค่าจะเปลี่ยนทันทีในรอบนั้น
//จะเจอช่วง คำสั่ง while do-while for
//เครื่องหมาย ++ หน้าหรือหลังตัวแปรอยู่ในเรื่องนิพจน์และการดำเนินการ 





ภาษาซีเบื้องต้น ตอนที่ 5 : คำสั่งการรับและแสดงผล ฟังก์ชั่นคณิตศาสตร์

printf คือคำสั่งการแสดงผล 

         สามารถเขียนได้ 3 รูปแบบที่เจอบ่อยๆ ดังนี้  

รูปแบบ
ฟังก์ชั่น printf
Output (ผลลัพท์)
1
printf(“Hello”);
Hello
printf(“Satreeislam\nYala”)
Satreeislam
Yala
2
printf(“%d”,20);
20
printf(“number : %d”,20);
number : 20
printf(“%s”,”School”);
School
3
int num1=2,num2=5;
float number=10.2;
char sex=’F’;

printf(“%d”,num1);
printf(“%d”,num2);
printf(“%d %d”,num1,num2);
printf(“%d %d”,num2,num1);
printf(“%d”,num1+num2);
printf(“%.2f”,number);
printf(“%c”,sex);





2
5
2 5
5 2
7
10.20
F

อธิบาย 
รูปแบบที่ 1 คือ มีข้อความอยู่ภายในเครื่องหมาย " "        
                          เช่น printf(“Hello”);    ผลลัพท์ (output) ที่ได้ คือ Hello 
                              printf(“Satreeislam\nYala”) ผลลัพท์ (output) ที่ได้ คือ Satreeislam 
                                                                                                                     Yala
                              จะเห็นว่ามี 2 บรรทัดเพราะว่ามีอักขระควบคุมการแสดงผลอยู่คือ   \n 
                               \n ใช้สำหรับให้ข้อความข้างหลังต่อจาก n ขึ้นบรรทัดใหม่
                              ซึ่ง \ ต่างๆมีมากกว่านี้อีก ดังรูป แต่ที่ใช้บ่อยๆคือ  \n  
                              
                                                                                                       อ้างอิง
                              
รูปแบบที่ 2 คือ เจอ % ต่างๆ (%d %s %c %f ) ในเครื่องหมาย " " 
      int ใช้กับ %d   char  ใช้กับ %c  %s  float  ใช้กับ  %f  %.2f  %.3f   double ใช้กับ %f  %lf
     เช่น printf(“%d”,20);  ให้เอา 20 ไปแทนที่ %d    output จะได้ 20 
            printf(“number : %d”,20); ให้เอา 20 ไปแทนที่ %d เหมือนเดิม แต่หากมีข้อความ  
             อะไรก็ให้แสดงข้อความนั้นด้วยเหมือนรูปแบบที่ 1 output จะได้ number : 20 
             printf(“%s”,”School”); เอาข้อความไปแทนที่ตรง %s output จะได้ School                       
                        
                           คำถาม ? หาก printf(“%d”,Cat);  หรือ printf(“%s”,20); จะเกิดอะไรขึ้น 
                                  โปรแกรม error หรือเกิดอะไรขึ้นกับผลลัพท์ ? ..  ลองคิดดู 


รูปแบบที่ 3 คือ มีการประกาศตัวแปร แล้ว printf เรียกใช้ %ต่างๆ ข้างหลังจะไม่มีค่าโดยตรงแต่เป็นตัวแปรแทน        วิธีการคือ ดูว่าตัวแปรนั้นเก็บค่าอะไรไว้แล้วมาแสดงตามปกติ 
 เช่น  printf(“%d”,num1); ให้ดูว่า ตัวแปร num1 มีค่าอะไรจากด้านบนที่ประกาศ 
        (int  num1=2) num1 เท่ากับ 2 เพราะฉะนั้นเอา 2 ไปแทนที่ %d output จะได้ 2
        printf(“%d %d”,num1,num2); การแสดงผลสามารถ แสดงทีเดียว 2 ค่าได้ โดยใช้ 
          %d %d 2 ครั้ง แต่ด้านหลังเมื่อมีการแสดงผล 2 ค่า ด้านหลังต้องมีตัวแปร2ตัว คั่น
          ด้วยเครื่องหมาย ,    output จะได้ 2 5 
        printf(“%d %d”,num2,num1); หากมีการสลับค่าแบบนี้ให้ดูดีๆ  output จะได้ 5 2
        printf(“%d”,num1+num2);   การแสดงผล สามารถเอาค่าของ2ตัวแปรมาบวก 
         กันได้ (ลบ คูณ หาร ทำได้หมด) output จะได้ 7
         printf(“%.2f”,number); ข้อนี้เป็นการแสดงตัวเลขทศนิยม ให้ดูตรงที่ ตัวเลขหน้าf 
         หากมีเลขใดก็หมายถึงทศนิยมตำแหน่งนั้น  output จะได้ 10.20
        printf(“%c”,sex); %c คือข้อความ(อักขระ)ตัวเดียว หาก %s คือ ข้อความมากกว่า 1  
        sex ค่าตัวแปลคือ F  output จะได้ F

scanf คือคำสั่งการรับข้อมูล
                เมื่อมีการประกาศตัวแปรใดๆ ตัวอย่างเช่น int number; (ประกาศตัวแปรชื่อว่า number เป็นชนิดตัวแปรแบบจำนวนเต็ม) หากไม่มีการกำหนดค่าตั้งแต่ต้นว่าตัวแปร number = เท่าไร  (เช่น int number=2;) ค่าตัวแปรนั้นๆจะยังไม่มีค่า ดังนั้นผู้ใช้โปรแกรมต้องกำหนดเอง โดยใช้ฟังก์ชั่น scanf  พื่อรับค่าเข้ามาในโปรแกรม

ฟังก์ชั่น scanf
Input
Output
int  number;
printf(“Enter number: ”)
scanf(“%d”,&number);



10

Enter number:
Enter number: 10
อธิบาย 
 int  number;                         //ประกาศตัวแปรชื่อว่า number เป็นชนิดจำนวนเต็ม
printf(“Enter number: ”)      // แสดงข้อความว่า Enter number :
scanf(“%d”,&number);       // รับค่าจำนวนเต็มเพราะเป็น %d มาเก็บไว้ในตัวแปร number จากด้านบน
                                             //คือใส่เลข10 ตัวแปร number จึงมีค่าเป็น 10 

ทำไมต้องมี printf ก่อน scanf เสมอ ?
เพราะผู้ใช้ที่ไม่ได้เขียนโปรแกรมไม่รู้ เมื่อรันโปรแกรมจะมี _ กระพริบๆ โปรแกรมนี้ให้ทำอะไรต่อ
printf จึงจำเป็นต้องใช้เพื่อแสดงข้อความในโปรแกรมให้ผู้ใช้ทำอะไร (ใส่ตัวเลขหรือข้อความหรืออย่างอื่น) 

ฟังก์ชั่นคณิตศาสตร์

           เนื่องจากว่า การบวกลบคูณหาร.ในภาษาซี  ใช้แค่ประกาศ #include<stdio.h> ก็เพียงพอแล้ว
 แต่หากต้องการทำมากกว่านั้น เช่น หาค่ารากที่สอง ยกกำลัง หาค่า sin con tan หาค่า log ต่างๆ อื่นๆที่เกี่ยวข้องกับการคำนวณ จำเป็นต้อง #include<math.h>

ตัวอย่าง เช่น 2 ยกกำลัง 5 เท่ากับเท่าไร 
 ใน math.h จะต้องเรียกใช้คำสั่งที่มีชื่อว่า  pow   อ้างอิง

#include <stdio.h>
#include <math.h>
#include <conio.h>
main ()
{
   printf("2 ^ 5 = %.2f", pow(2, 5));
   getch();

}

ผลลัพท์จะได้ (output) 32.00

..........................................................................................................................................................
         หลังจากจบ2 คำสั่งนี้ เราสามารถเขียนโปรแกรมอะไรก็ได้มีมีการรับค่าแล้วมาคำนวณ 
..........................................................................................................................................................
แบบฝึกหัด1 ให้เขียนโปรแกรมจำนวนสองจำนวนบวกกัน โดยจำนวนสองจำนวนรับค่าจากผู้ใช้
แบบฝึกหัด2 ให้เขียนโปรแกรมหาพื้นที่วงกลม รัศมีให้รับค่าจากผู้ใช้ และแสดงพื้นที่อยู่ในรูปทศนิยมสองตำแหน่ง








เฉลย 
แบบฝึกหัด1 
แนวคิด   รับค่าจากผู้ใช้ 2 จำนวน แสดงว่าต้องมีการเก็บค่าซึ่งต้องประกาศตัวแปรอย่างน้อย 2 ตัวแปร
               รับค่าจากผู้ใช้ แสดงว่าต้องมีการใช้ฟังก์ชั่น scanf

โปรแกรม
อธิบาย
#include<stdio.h>   
เรียกใช้ไฟล์ stdio.h
#include<conio.h>
เรียกใช้ไฟล์ conio.h
main()
ฟังก์ชั่น main
{
เริ่มฟังก์ชั่น main
     int  number1, number2;
ประกาศตัวแปร number1 number2 ชนิดจำนวนเต็ม
     printf(“Enter  number1:  ”);
แสดงข้อความ  Enter  number1: 
     scanf(“%d”,&number1);
รับค่าจากผู้ใช้ เก็บในตัวแปร number1
     printf(“Enter  number2: ”);
แสดงข้อความ  Enter  number2:
     scanf(“%d”,&number2);
รับค่าจากผู้ใช้ เก็บในตัวแปร number2
printf(“Sum = %d”,number1+number2);
แสดงข้อความ  Sum = และแสดงค่า number1+number2
     getch();
ให้ผู้ใช้กดปุ่มใดๆเพื่อออกจากโปรแกรม
}
จบฟังก์ชั่น main

แนวคิด
  
แบบฝึกหัด2
                สูตรพื้นที่วงกลม =
               รับค่ารัศมีจากผู้ใช้ แสดงว่าต้องมีการเก็บค่าซึ่งต้องประกาศตัวแปรอย่างน้อย 1 ตัวแปร
               รับค่าจากผู้ใช้แสดงว่าต้องมีการใช้ฟังก์ชั่น scanf

               แสดงในรูปทศนิยมสองตำแหน่ง %.2f

โปรแกรม
อธิบาย
#include<stdio.h>   
เรียกใช้ไฟล์ stdio.h
#include<conio.h>
เรียกใช้ไฟล์ conio.h
main()
ฟังก์ชั่น main
{
เริ่มฟังก์ชั่น main
     float  R;
ประกาศตัวแปร R ชนิดจำนวนทศนิยม
     printf(“Enter  R of Circle:  ”);
แสดงข้อความ  Enter  R of Circle: 
     scanf(“%f”,&R);
รับค่าจากผู้ใช้ เก็บในตัวแปร R
     printf(“Area Circle = %.2f ”,3.14*R*R);
แสดงข้อความ  Area Circle R= และแสดงค่ารัศมี R และคำนวณพื้นที่วงกลมจาก 3.14*R*R

     getch();
ให้ผู้ใช้กดปุ่มใดๆเพื่อออกจากโปรแกรม
}
จบฟังก์ชั่น main