วันศุกร์ที่ 29 มิถุนายน พ.ศ. 2555

คำสั่งในภาษาซี — Presentation Transcript


คำสั่งในภาษาซี — Presentation Transcript

  • 1. คำสั่ งในภำษำซี
  • 2. คำสั่ งในภำษำซีคำสั่ ง printf( ); ่ เป็ นคาสั่งที่ใช้ในการแสดงผลข้อมูลที่อยูใน รู ปของตัวแปร ค่าคงที่ และนิพจน์ออกทาง หน้าจอ รู ปแบบ 1 printf(“ข้อความ”); ตัวอย่าง printf(“maerim”); ความหมาย แสดงข้อความ maerim ทางจอภาพ

  • 3. คำสั่ งในภำษำซีรู ปแบบ 2 printf(“รหัสรู ปแบบ”,ตัวแปร);ตัวอย่าง printf(“%d”,num);ความหมาย แสดงค่าตัวแปร num ในรู ปแบบจานวนเต็มรู ปแบบ 3 printf(“ข้อความ รหัสรู ปแบบ”,ตัวแปร);ตัวอย่าง printf(“Area of Triangle is :%f”,area);ความหมาย แสดงข้อความ Area of Triangle is : ค่าที่เก็บในตัวแปร area ในรู ปของเลขทศนิยม

  • 4. คำสั่ งในภำษำซีรู ปแบบ 4 printf(“รหัสรู ปแบบ การจองพื้นที่ จุดทศนิยม”,ตัวแปร);ตัวอย่าง printf(“%5.2f”,area); ่ความหมาย แสดงค่าที่เก็บอยูในตัวแปร area โดยจองพื้นที่ไว้ 5ช่อง ทศนิยม 2 ตาแหน่ง
  • 5. คำสั่ งในภำษำซีคำสั่ ง scanf( ); เป็ นคาสั่งที่ใช้ในการรับข้อมูลจาก แป้ นพิมพ์มาเก็บไว้ในตัวแปร รู ปแบบ scanf(“รหัสรู ปแบบ”,&ตัวแปร); ตัวอย่าง scanf(“%d”,&num); ความหมาย รับค่าตัวเลขจานวนเต็มมาเก็บไว้ในตัวแปร num
  • 6. คำสั่ งในภำษำซีคำสั่ ง getch( ); เป็ นคาสั่งที่ใช้ในการรอรับการกดแป้ นพิมพ์ หนึ่งครั้งละ 1 อักขระ แต่ไม่ปรากฏ อักษรบนจอภาพ รู ปแบบ getch( );
  • 7. กำรใช้ คำสั่ งในกำรแสดงผล ค่ ำคำสั่ ง ควำมหมำย a ส่ งเสี ยงบิ๊ป (Beep) b เหมือนการกดคีย ์ Backspace f ขึ้นหน้าใหม่ n ขึ้นบรรทัดใหม่ r เหมือนการกดคีย ์ Enter t เหมือนการกดคีย ์ Tab
  • 8. กำรใช้ คำสั่ งในกำรแสดงผล ค่ ำคำสั่ ง ควำมหมำย แสดงเครื่ องหมาย ’ แสดงเครื่ องหมาย ‘ ” แสดงเครื่ องหมาย “ ? แสดงเครื่ องหมาย ?
  • 9. กำรใช้ คำสั่ งในกำรแสดงผลเช่ น printf(“maerim n”); printf(“school”);ผลลัพธ์ maerim school
  • 10. คำสั่ งในภำษำซีคำสั่ ง if เป็ นคาสั่งที่ใช้ในการตรวจสอบเงื่อนไข ถ้าเงื่อนไข เป็ นจริ งจะทางานตามประโยคคาสั่งภายในวงเล็บ ปี กกา แต่ถาเป็ นเท็จจะข้ามไปทาชุดคาสังถัดไป ้ ่ ซึ่ งประโยคคาสังภายในวงเล็บปี กกาอาจมีเพียง ่ คาสั่งเดียว หรื อหลายคาสั่ง ถ้ามีคาสั่งเดียวจะไม่ใส่ เครื่ องหมายปี กกาเปิ ดและปิ ด
  • 11. คำสั่ งในภำษำซีรู ปแบบที่ 1 if(เงื่อนไข) { คาสั่งที่ 1; คาสั่งที่ 2; คาสั่งที่ n; }
  • 12. คำสั่ งในภำษำซีตัวอย่าง if(mark>=50) { printf(“Pass”); }ความหมาย ถ้า mark มีค่ามากกว่าหรื อเท่ากับ 50 แสดง ข้อความ Pass
  • 13. คำสั่ งในภำษำซีรู ปแบบที่ 2 if(เงื่อนไข) { คาสั่งที่ 1; } else { คาสั่งที่ 2; }
  • 14. คำสั่ งในภำษำซีตัวอย่าง if(mark>=50) { printf(“Pass”); } else{ printf(“No Pass”); }
  • 15. คำสั่ งในภำษำซีความหมาย ถ้า mark มีค่ามากกว่าหรื อเท่ากับ 50 จะแสดง ข้อความ Pass ถ้า mark มีค่าน้อยกว่า 50 จะแสดงข้อความ NoPass

คำสั่งเบื้องต้นของภาษา C


คำสั่งเบื้องต้นของภาษา C

คำสั่งเบื้องต้นของภาษา C
1. คำสั่ง scanf() เป็นฟังก์ชันที่รับค่าจากอุปกรณ์นำเข้ามาตรฐาน และนำค่าที่ได้เก็บไว้ในตัวแปรในโปรแกรม รูปแบบคำสั่ง



เมื่อโปรแกรมทำงานถึงฟังก์ชันนี้จะหยุดเพื่อให้ป้อนข้อมูล โดยข้อมูลที่ป้อนจะแสดงบนจอภาพ เมื่อป้อนข้อมูลเสร็จกด Enter ข้อมูลทั้งหมดจะเก็บในตัวแปร var ชนิดของข้อมูลที่กำหนดให้กับตัวแปร var จะถูกกำหนดโดยตัวกำหนดชนิดข้อมูลซึ่งระบุในส่วนของ format code ตัวกำหนดชนิดข้อมูลของฟังก์ชัน scanf() จะเหมือนกับของฟังก์ชันprintf() ฟังก์ชัน scanf() จะทำให้เคอร์เซอร์ ขึ้นบรรทัดใหม่หลังจากกด Enter
ตัวอย่าง

#include "stdio.h"
#include "conio.h" 
void main() 
{
int a,b,c; 
clrscr(); 
printf("Enter three integer numbers : "); 
scanf("%d%d%d",&a,&b,&c); 
printf("a = %d b = %d c = %d \n",a,b,c); 
}

เป็นการป้อนเลขจำนวนเต็ม 3 ตัวให้กับตัวแปร a,b และ c ในการป้อนตัวเลขให้เว้น ช่องว่างระหว่างตัวเลขแต่ละชุดซึ่ง scanf() จะข้อมช่องว่างไปจนกระทั่งพบตัวเลขจึงจะอ่านข้อมูลอีกครั้ง


2. ฟังก์ชั่น printf() 
เป็นฟังก์ชันใช้ พิมค่าข้อมูลไปยังหน้าจอคอมพิวเตอร์



control string อาจจะเป็นตัวอักษร ข้อความหรือตัวกำหนดชนิดข้อมูล (specifier) ซึ่งใช้กำหนดชนิดข้อมูลที่จะพิมพ์ ตัวกำหนดชนิดข้อมูล
ตัวกำหนดชนิดข้อมูล
%c แทนตัวอักษร

%d แทนเลขจำนวนเต็ม
%e แทนเลขในรูปเอกซ์โพเนนเชียล (exponential form)
%f แทนเลขทศนิยม
%0 แทนเลขฐานแปด
%s แทนสตริงก์
%u แทนเลขจำนวนเต็มไม่คิดเครื่องหมาย
%x แทนเลขฐานสิบหก
%p แทนข้อมูลแบบพอยน์เตอร์ (pointer)
%% แทนเครื่องหมาย % 

สามารถดัดแปลงเพื่อใช้เป็นตัวกำหนดชนิดข้อมูลอื่นๆได้โดย โมดิฟายเออร์ (modifier) l,h และL โมดิฟายเออร์ l จะสามารถใช้กับตัวกำหนดชนิดข้อมูล %d, %o , %u และ %x เพื่อใช้กับข้อมูลชนิดยาวเช่น %ld หมายถึงข้อมูลชนิดเลขจำนวนเต็มยาวโมดิฟายเออร์ h จะใช้ในลักษณะเดียวกันกับข้อมูลชนิดสั้น เช่น %hd หมายถึง ข้อมูลชนิดเลขจำนวนเต็มสั้นสำหรับข้อมูลชนิดทศนิยมจะมีโมดิฟายเออร์ l และ L โดย l จะหมายถึงข้อมูลชนิดเลขจำนวนจริงละเอียด 2 เท่า ส่วน L จะหมายถึงข้อมูลชนิดเลขจำนวนจริงรายละเอียด 2 เท่า เช่น %lf หมายถึงข้อมูลชนิดเลขจำนวนจริงละเอียด 2 เท่า
ตัวอย่าง
#include 
#include void main(void)
{

int n;clrscr();
n=100;printf("Number = %d",n);
getch();



3. ฟังก์ชัน getchar() ฟังก์ชัน getchar() ใช้สำหรับป้อนตัวอักษรผ่านทางแป้นพิมพ์โดยจะรับตัวอักษรเพียง 1 ตัวเท่านั้น และแสดงตัวอักษรบนจอภาพ รูปแบบคำสั่ง

เมื่อโปรแกรมทำงานถึงคำสั่งนี้จะหยุดเพื่อให้ป้อนตัวอักษร 1 ตัว หลังจากนั้นกด Enter ตัวอักษรที่ป้อนจะถูกเก็บไว้ในตัวแปร ch ซึ่งเป็นชนิดตัวอักษรและเคอร์เซอร์จะขึ้นบรรทัดใหม่ ฟังก์ชัน getchar() กำหนดในไฟล์ stdio.h เช่นเดียวกับฟังก์ชัน scanf() ตัวอย่าง

#include void 
main() 

char ch; 
printf("Type one character "); 
ch = getchar();
printf("The character you type is %c \n",ch); 
printf("The character you typed is "); 
putchar(ch);
}
การใช้ฟังก์ชัน putchar() แทน printf() จะพิมพ์ตัวอักษร 1 ตัว และเคอร์เซอร์จะไม่ขึ้นบรรทัดใหม่ 


4. คำสั่ง getche(); และ getch();คำสั่ง getche(); จะรับตัวอักษร 1 ตัวที่ป้อนทางแป้นพิมพ์
รูปแบบคำสั่ง getche();



ความหมายch หมายถึง ตัวแปรชนิดตัวอักษร
แสดงตัวอักษรบนจอภาพ เมื่อป้อนข้อมูลเสร็จไม่ต้องกด Enter และเคอร์เซอร์จะไม่ขึ้นบรรทัดใหม่ ฟังก์ชัน getch() จะคล้ายกับฟังก์ชัน getche() ต่างกันตรงที่จะไม่แสดงตัวอักษรขณะป้อนข้อมูล ฟังก์ชัน getche() และ getch() กำหนดในไฟล์ conio.h ดังนั้นจะต้องระบุไฟล์ดังกล่าวในโปรแกรม

ตัวอย่าง คำสั่ง getche();
#include "stdio.h"
#include "conio.h"
void main(void)
{
char answer;
clrscr();
printf("Enter A Character : ");
answer=getche();
printf("\n");
printf("A Character is : %c\n",answer);
getch();
}

คำสั่งgetch(); คือฟังก์ชันที่ใช้สำหรับรับข้อมูลชนิดตัวอักษร ผ่านแป้นพิมพ์ 1 ตัวอักษร
รูปแบบคำสั่ง getch();




จะไม่แสดงตัวอักษรบนจอภาพ เมื่อป้อนตัวอักษรเสร็จแล้ว ไม่ต้องกด Enter และเคอร์เซอร์จะไม่ขึ้นบรรทัดใหม่ และเป็นฟังก์ชันที่กำหนดอยู่ในไฟล์ conio.h รูปแบบคำสั่ง ความหมาย
ตัวอย่าง คำสั่ง getch();
#include
#include
void main(void)
{
char answer;
clrscr();
printf("Enter A Character : ");
answer=getch();
printf("\n");
printf("A Character is : ");
putchar(answer);
getch();
}

5. ฟังก์ชัน gets() ฟังก์ชัน gets() ใช้สำหรับข้อมูลชนิดสตริงก์หรือข้อความซึ่งป้อนทางแป้นพิมพ์ รูปแบบคำสั่ง


เมื่อโปรแกรมทำงานถึงคำสั่งนี้จะหยุดเพื่อให้ป้อนข้อความ เมื่อป้อนเสร็จแล้วกด Enter ข้อความ ทั้งหมดจะถูกเก็บไว้ในอาร์เรย์สตริงก์ str โดย carriage return (จากการกด Enter) จะแทนด้วยสตริงก์ศูนย์ ฟังก์ชัน gets() จะทำให้เคอร์เซอร์ขึ้นบรรทัดใหม่ หลังจากกด Enter กำหนดในไฟล์ stdio.h
ตัวอย่าง
#include”stdio.h”
main()
{
char message[50];
printf(“ Enter a message(less than 49 characters)\n”);
gets(message);printf(“ The message you entered is %s\n”,message);
}

การรับข้อมูลในภาษาซี


การรับข้อมูลในภาษาซี จะใช้การเรียกฟังก์ชั่นที่มีมากับภาษาซีมาทำงาน การรับข้อมูลจากคีย์บอร์ดสามารถทำได้โดยการเรียกใช้ฟังก์ชั่น scanf( ) ซึ่งเป็นฟังก์ชั่นมาตรฐานสำหรับรับข้อความจากคีย์บอร์ด โดยสามารถรับข้อมูลได้ทุกประเภท ไม่ว่าจะเป็นจำนวนเต็ม ( int) ทศนิยม ( float) อักขระ ( char) หรือข้อความก็ตาม รูปแบบการเรียกใช้คำสั่ง scanf( ) มีดังนี้
scanf (“format “,&variable);
format : การใช้รหัสควบคุมรูปแบบ เพื่อกำหนดชนิดของข้อมูลที่จะรับเข้ามาจากคีย์บอร์ด โดยรหัสควบคุมรูปแบบจะใช้ชุดเดียวกับรหัสควบคุมรูปแบบของคำสั่ง printf( )
variable : ตัวแปรที่จะใช้เก็บค่าข้อมูลที่รับเข้ามาจากคีย์บอร์ด โดยชนิดของตัวแปรจะต้องตรงกับรหัสรวบคุมรูปแบบที่กำหนดไว้ นอกจากนี้หน้าชื่อของตัวแปรจะต้องนำหน้าด้วยเครื่องหมาย & เว้นตัวแปรสตริงสำหรับเก็บข้อความเท่านั้นที่ไม่ต้องนำหน้าด้วยเครื่องหมาย &
ตัวอย่างที่ 1
int speed;สร้างตัวแปรชนิด int สำหรับเก็บค่าตัวเลขจำนวนเต็ม
printf("Enter wind speed : ");แสดงข้อความให้กรอกค่าความเร็วลมเป็นจำนวนเต็ม
scanf("%d",&speed);รับค่าความเร็วลมเข้ามาเก็บไว้ในตัวแปร speed
ตัวอย่างที่ 2
char answer;สร้างตัวแปรชนิด   char สำหรับเก็บอักขระ
printf("Enter Figure (Y : N)  : ");แสดงข้อความให้ป้อนอักขระ Y  หรือ N
scanf("%c",&answer);รับอักขระเข้ามาเก็บไว้ในตัวแปร   answer

ตัวอย่างที่ 3
char name[10];สร้างตัวแปรสตริงสำหรับเก็บข้อความ
printf("Enter your name = ");แสดงข้อความให้ป้อนชื่อ
scanf("%s",name);รับชื่อเข้ามาเก็บไว้ในตัวแปร name สังเกตจะไม่ใส่เครื่องหมาย & ตัวแปรชนิดข้อความ
ตัวอย่างที่ 4
#include <stdio.h>
#include <conio.h>
void main( )
{
  clrscr( );
  int x,y,sum;
  printf("Enter The Length is : ");
  scanf ("%d",&x);
  printf("Enter The Width is : ");
  scanf ("%d",&y);
  sum = x*y;
  printf("The area is :%d",sum);
getch();
}


ผลลัพธ์โปรแกรม
Enter The Length is   : 15
Enter The Width is     : 5
The area is             : 75

ตัวอย่างภาษาซี


ตัวอย่างภาษาซี 1

::ภาษาC::...++โปรแกรมคิดเกรด++...

#include <conio.h>
#include <stdio.h>
void main()
{
int score;
char grade;
printf("Enter score : ");
scanf("%d",&score);
clrscr();
if (score > 100)
grade = 'E';
else if (score >= 80)
grade = 'A';
else if ((score >= 70) && (score < 80))
grade = 'B';
else if ((score >= 50) && (score < 70))
grade = 'C';
else if ((score >= 40) && (score < 50))
grade = 'D';
else grade = 'E';
printf("You got %cn",grade);
getch();
}



::ภาษาC::...++โปรแกรมเกรดเฉลี่ยแบบไม่วนลูปจร้า รับแค่ 3 วิชาเท่าน้านนน++...


#include <conio.h>
#include <stdio.h>
void main()
{
float cr1,sc1,sum1=0,cr2,sc2,sum2=0,cr3,sc3,sum3=0,credit3=0;
clrscr();
textcolor(14);
gotoxy(25,5);
cprintf("<<<<<<<..PROGRAM GPA..>>>>>>>n");
printf("n");
printf("n");

printf("::Subject1::n");
printf("n");
printf("Credit : ",cr1);
scanf("%f",&cr1);
printf("Grade : ",sc1);
scanf("%f",&sc1);
sum1=sum1+(cr1*sc1);
printf("n");
printf("------------------------n");

printf("n");
printf("::Subject2::n");
printf("n");
printf("Credit : ",cr2);
scanf("%f",&cr2);
printf("Grade : ",sc2);
scanf("%f",&sc2);
sum2=sum2+(cr2*sc2);
printf("n");

printf("------------------------n");

printf("n");
printf("::Subject3::n");
printf("n");
printf("Credit : ",cr3);
scanf("%f",&cr3);
printf("Grade : ",sc3);
scanf("%f",&sc3);
sum3=sum3+(cr3*sc3);
credit3=cr1+cr2+cr3;
printf("n");

printf("------------------------n");
printf("Average of grade = %.2fn",(sum1+sum2+sum3)/credit3);
printf("------------------------n");
getch();
}


::ภาษาC::...++โปรแกรมเกรดเฉลี่ยแบบวนลูปจร้า โดยใช้ Do-While++...



<<<หาเกรดเฉลี่ยเท่าไร่ก็ได้ ถ้าจะหยุดใส่ให้ใส่ตรงเกรดเป็นเลข 0>>>


#include <conio.h>
#include <stdio.h>
void main()
{
float a,b,ab=0,sum=0,j=0;
clrscr();
do
{
printf("Grade : ",a);
scanf("%f",&a);
printf("Credit : ",b);
scanf("%f",&b);
ab=a*b;
sum=sum+ab;
j=j+b;
}
while(a!=0);
printf("Average of Grade : %.2fn",sum/j);
getch();
}

ตัวอย่าง code ภาษาซี โปรแกรมหน่วงเวลา 

#include <stdio.h>
#include <pic1684.h>

void delay(int pause){
int loop,i;
for(loop=pause;loop>=0;--loop){
for(i=255;i>0;--i){
}
}
}

void main(void){

do{
PORTB = 0x55;
delay(255);
PORTB = 0xAA;
delay(255);
}while(1);

}

ประวัติของภาาาซี


ประวัติของภาาาซี

[แก้]การพัฒนาช่วงแรก

การเริ่มต้นพัฒนาภาษาซีเกิดขึ้นที่เบลล์แล็บส์ของเอทีแอนด์ทีระหว่าง พ.ศ. 2512–2516 [2] แต่ตามข้อมูลของริตชี ช่วงเวลาที่เกิดความสร้างสรรค์มากที่สุดคือ พ.ศ. 2515 ภาษานี้ถูกตั้งชื่อว่า "ซี" เพราะคุณลักษณะต่าง ๆ ต่อยอดมาจากภาษาก่อนหน้าคือ "บี" ซึ่งจากข้อมูลของเคน ทอมป์สัน (Ken Thompson) กล่าวว่าภาษาบีเป็นรุ่นที่แยกตัวออกจากภาษาบีซีพีแอลอีกทอดหนึ่ง
จุดเริ่มต้นของภาษาซีผูกอยู่กับการพัฒนาระบบปฏิบัติการยูนิกซ์อย่างใกล้ชิด ซึ่งเดิมพัฒนาด้วยภาษาแอสเซมบลีบนหน่วยประมวลผลพีดีพี-7โดยริตชีและทอมป์สัน โดยผสมผสานความคิดหลากหลายจากเพื่อนร่วมงาน ในตอนท้ายพวกเขาตัดสินใจที่จะย้ายระบบปฏิบัติการนั้นลงในพีดีพี-11 แต่ภาษาบีขาดความสามารถบางอย่างที่จะใช้คุณลักษณะอันได้เปรียบของพีดีพี-11 เช่นความสามารถในการระบุตำแหน่งที่อยู่เป็นไบต์ จึงทำให้เกิดการพัฒนาภาษาซีรุ่นแรกขึ้นมา
รุ่นดั้งเดิมของระบบยูนิกซ์บนพีดีพี-11ถูกพัฒนาขึ้นด้วยภาษาแอสเซมบลี เมื่อประมาณ พ.ศ. 2516 ภาษาซีเพิ่มชนิดข้อมูล struct ทำให้ภาษาซีเพียงพออย่างมีประสิทธิภาพ ซึ่งเคอร์เนลยูนิกซ์ส่วนใหญ่ถูกเขียนด้วยภาษาซี นี้ก็เป็นเคอร์เนลหนึ่งของระบบปฏิบัติการที่พัฒนาด้วยภาษาอื่นนอกเหนือจากภาษาแอสเซมบลี (ระบบอื่นเช่นมัลติกส์เขียนด้วยภาษาพีแอล/วัน เอ็มซีพีสำหรับเบอร์โรส์ บี5000เขียนด้วยภาษาอัลกอล ในปี พ.ศ. 2504)

[แก้]ภาษาเคแอนด์อาร์ซี

เมื่อ พ.ศ. 2521 ไบรอัน เคอร์นิกัน (Brian Kernighan) และเดนนิส ริตชี ได้ตีพิมพ์หนังสือเล่มแรกชื่อ เดอะซีโปรแกรมมิงแลงกวิจ (The C Programming Language) [9] ซึ่งเป็นที่รู้จักในกลุ่มโปรแกรมเมอร์ภาษาซีว่า "เคแอนด์อาร์" (K&R อักษรย่อของผู้แต่งทั้งสอง) หนังสือเล่มนี้ทำหน้าที่เป็นข้อกำหนดของภาษาอย่างไม่เป็นทางการมาหลายปี ภาษาซีรุ่นดังกล่าวจึงมักถูกอ้างถึงว่าเป็น ภาษาเคแอนด์อาร์ซี (K&R C) ส่วนหนังสือที่ปรับปรุงครั้งที่สองครอบคลุมมาตรฐานแอนซีซีที่มีขึ้นทีหลัง [1]
ภาษาเคแอนด์อาร์ซีได้แนะนำคุณลักษณะหลายประการเช่น
  • ไลบรารีไอ/โอมาตรฐาน
  • ชนิดข้อมูล long int (จำนวนเต็มขนาดยาว)
  • ชนิดข้อมูล unsigned int (จำนวนเต็มไม่มีเครื่องหมาย)
  • ตัวดำเนินการกำหนดค่าแบบประสมในรูปแบบ =ตัวดำเนินการ (เช่น =-) ถูกเปลี่ยนเป็น ตัวดำเนินการ= (เช่น -=) เพื่อลดปัญหาความกำกวมเชิงความหมาย อย่างเช่นกรณี i=-10 ซึ่งจะถูกตีความว่า i =- 10 แทนที่จะเป็นอย่างที่ตั้งใจคือ i = -10
แม้ว่าหลังจากการเผยแพร่มาตรฐานของภาษาซีเมื่อ พ.ศ. 2532 ภาษาเคแอนด์อาร์ซีถูกพิจารณาว่าเป็น "ส่วนร่วมต่ำสุด" อยู่เป็นเวลาหลายปี (ความสามารถในการแปลรหัสจำนวนหนึ่งเป็นคำสั่งซึ่งทำงานได้บนเครื่องใดก็ตามเป็นอย่างน้อย) ซึ่งโปรแกรมเมอร์ภาษาซีต้องจำกัดความสามารถของพวกเขาในกรณีที่ต้องการให้ระบบสามารถใช้ได้กับหลายเครื่องมากที่สุด เนื่องจากตัวแปลโปรแกรมเก่า ๆ ก็ยังคงมีการใช้งานอยู่ และการเขียนภาษาซีแบบเคแอนด์อาร์อย่างระมัดระวังสามารถเข้ากันได้กับภาษาซีมาตรฐานเป็นอย่างดี
ในภาษาซีรุ่นแรก ๆ เฉพาะฟังก์ชันที่คืนค่าไม่เป็นจำนวนเต็ม จำเป็นต้องประกาศไว้ก่อนการนิยามฟังก์ชันหากมีการเรียกใช้ อีกนัยหนึ่งคือ ฟังก์ชันที่ถูกเรียกใช้โดยไม่มีการประกาศมาก่อน ถือว่าฟังก์ชันนั้นจะคืนค่าเป็นจำนวนเต็มหากค่าของมันถูกใช้งาน ตัวอย่างเช่น
long int SomeFunction();
/* int OtherFunction(); */
 
/* int */ CallingFunction()
{
    long int test1;
    register /* int */ test2;
 
    test1 = SomeFunction();
    if (test1 > 0)
        test2 = 0;
    else
        test2 = OtherFunction();
 
    return test2;
}
จากตัวอย่างข้างต้น การประกาศ int ที่ถูกคัดออก สามารถละเว้นได้ในภาษาเคแอนด์อาร์ซี แต่ long int จำเป็นต้องประกาศ
การประกาศฟังก์ชันของภาษาเคแอนด์อาร์ซีไม่มีการระบุข้อมูลเกี่ยวกับอาร์กิวเมนต์ที่ใช้ ดังนั้นจึงไม่มีการตรวจชนิดข้อมูลพารามิเตอร์ของฟังก์ชัน แม้ว่าตัวแปลโปรแกรมบางตัวจะแสดงข้อความเตือน ถ้าฟังก์ชันถูกเรียกใช้ภายในโดยมีจำนวนอาร์กิวเมนต์ที่ผิด หรือถ้าฟังก์ชันถูกเรียกใช้หลายครั้งจากภายนอกโดยมีชนิดข้อมูลของอาร์กิวเมนต์ต่างกัน เครื่องมือภายนอกอาทิ ลินต์ (lint) ของยูนิกซ์ถูกพัฒนาขึ้นเพื่อให้สามารถตรวจสอบความคงเส้นคงวาของฟังก์ชันที่ใช้งานข้ามไฟล์รหัสต้นฉบับหลายไฟล์
หลายปีถัดจากการเผยแพร่ภาษาเคแอนด์อาร์ซี คุณลักษณะที่ไม่เป็นทางการหลายอย่างก็ถูกเพิ่มเข้ามาในภาษา ซึ่งรองรับโดยตัวแปลโปรแกรมจากเอทีแอนด์ทีและผู้ผลิตรายอื่น คุณลักษณะที่เพิ่มเหล่านี้เช่น
  • ฟังก์ชัน void
  • ฟังก์ชันที่คืนค่าเป็นชนิดข้อมูล struct หรือ union (แทนที่จะเป็นตัวชี้)
  • การกำหนดค่าให้กับชนิดข้อมูล struct
  • ชนิดข้อมูลแจงนับ (enumerated type)
ส่วนขยายที่เพิ่มขึ้นอย่างมากและการขาดข้อตกลงในเรื่องไลบรารีมาตรฐาน อีกทั้งความนิยมในภาษาและข้อเท็จจริงที่ว่าไม่เพียงแต่ตัวแปลโปรแกรมยูนิกซ์เท่านั้นที่พัฒนาขึ้นตามข้อกำหนดของเคแอนด์อาร์ ทั้งหมดนำไปสู่ความสำคัญของการทำให้เป็นมาตรฐาน

ลักษณะเฉพาะของภาษาซี


ลักษณะเฉพาะของภาษาซี

ภาษาซีมีสิ่งอำนวยสำหรับการเขียนโปรแกรมเชิงโครงสร้าง และสามารถกำหนดขอบข่ายตัวแปรและเรียกซ้ำ เช่นเดียวกับภาษาโปรแกรมเชิงคำสั่งส่วนใหญ่ในสายตระกูลภาษาอัลกอล ในขณะที่ระบบชนิดตัวแปรแบบอพลวัตช่วยป้องกันการดำเนินการที่ไม่ได้ตั้งใจ รหัสที่ทำงานได้ทั้งหมดในภาษาซีถูกบรรจุอยู่ในฟังก์ชัน พารามิเตอร์ของฟังก์ชันส่งผ่านด้วยค่าของตัวแปรเสมอ ส่วนการส่งผ่านด้วยการอ้างอิงจะถูกจำลองขึ้นโดยการส่งผ่านค่าตัวชี้ ชนิดข้อมูลรวมแบบแตกต่าง (struct) ช่วยให้สมาชิกข้อมูลที่เกี่ยวข้องกันสามารถรวมกันและจัดการได้ในหน่วยเดียว รหัสต้นฉบับของภาษาซีเป็นรูปแบบอิสระ ซึ่งใช้อัฒภาค (;) เป็นตัวจบคำสั่ง (มิใช่ตัวแบ่ง)
ภาษาซียังมีลักษณะเฉพาะต่อไปนี้เพิ่มเติม
  • ตัวแปรอาจถูกซ่อนในบล็อกซ้อนใน
  • ชนิดตัวแปรไม่เคร่งครัด เช่นข้อมูลตัวอักษรสามารถใช้เป็นจำนวนเต็ม
  • เข้าถึงหน่วยความจำคอมพิวเตอร์ในระดับต่ำโดยแปลงที่อยู่ในเครื่องด้วยชนิดตัวแปรตัวชี้ (pointer)
  • ฟังก์ชันและตัวชี้ข้อมูลรองรับการทำงานในภาวะหลายรูปแบบ (polymorphism)
  • การกำหนดดัชนีแถวลำดับสามารถทำได้ด้วยวิธีรอง คือนิยามในพจน์ของเลขคณิตของตัวชี้
  • ตัวประมวลผลก่อนสำหรับการนิยามแมโคร การรวมไฟล์รหัสต้นฉบับ และการแปลโปรแกรมแบบมีเงื่อนไข
  • ความสามารถที่ซับซ้อนเช่น ไอ/โอ การจัดการสายอักขระ และฟังก์ชันทางคณิตศาสตร์ รวมอยู่ในไลบรารี
  • คำหลักที่สงวนไว้มีจำนวนค่อนข้างน้อย
  • ตัวดำเนินการแบบประสมจำนวนมาก อาทิ +=-=*=++ ฯลฯ
โครงสร้างการเขียน คล้ายภาษาบีมากกว่าภาษาอัลกอล ตัวอย่างเช่น
  • ใช้วงเล็บปีกกา { ... } แทนที่จะเป็น begin ... end ในภาษาอัลกอล 60 หรือวงเล็บโค้ง ( ... ) ในภาษาอัลกอล 68
  • เท่ากับ = ใช้สำหรับกำหนดค่า (คัดลอกข้อมูล) เหมือนภาษาฟอร์แทรน แทนที่จะเป็น := ในภาษาอัลกอล
  • เท่ากับสองตัว == ใช้สำหรับเปรียบเทียบความเท่ากัน แทนที่จะเป็น .EQ. ในภาษาฟอร์แทรนหรือ = ในภาษาเบสิกและภาษาอัลกอล
  • ตรรกะ "และ" กับ "หรือ" แทนด้วย && กับ || ตามลำดับ แทนที่จะเป็นตัวดำเนินการ ∧ กับ ∨ ในภาษาอัลกอล แต่ตัวดำเนินการดังกล่าวจะไม่ประเมินค่าตัวถูกดำเนินการทางขวา ถ้าหากผลลัพธ์จากทางซ้ายสามารถพิจารณาได้แล้ว เหตุการณ์เช่นนี้เรียกว่าการประเมินค่าแบบลัดวงจร (short-circuit evaluation) และตัวดำเนินการดังกล่าวก็มีความหมายต่างจากตัวดำเนินการระดับบิต & กับ 

วันพฤหัสบดีที่ 28 มิถุนายน พ.ศ. 2555

โครงสร้างของโปรแกรมภาษาซี และตัวอย่าง
โปรแกรมในภาษาซีทุกโปรแกรมจะประกอบด้วยฟังก์ชันอย่างน้อย หนึ่งฟังก์ชัน คือ ฟังก์ชัน main โดยโปรแกรมภาษาซีจะเริ่มทำงานที่ฟังก์ชัน main ก่อน ในแต่ละฟังก์ชันจะประกอบด้วย
  1. Function Heading
    ประกอบด้วยชื่อฟังก์ชัน และอาจมีรายการของ argument (บางคนเรียก parameter) อยู่ในวงเล็บ
  2. Variable Declaration
    ส่วนประกาศตัวแปร สำหรับภาษาซี ตัวแปรหรือค่าคงที่ทุกตัว ที่ใช้ในโปรแกรมจะต้องมีการประกาศก่อนว่าจะใช้งานอย่างไร จะเก็บค่าในรูปแบบใดเช่น interger หรือ real number
  3. Compound Statements
    ส่วนของประโยคคำสั่งต่างๆ ซึ่งแบ่งเป็นประโยคเชิงซ้อน (compound statement) กับ ประโยคนิพจน์ (expression statment) โดยประโยคเชิงซ้อนจะอยู่ภายในวงเล็บปีกกาคู่หนึ่ง { และ } โดยในหนึ่งประโยคเชิงซ้อน จะมีประโยคนิพจน์ที่แยกจากกันด้วยเครื่องหมาย semicolon (;) หลายๆ ประโยครวมกัน และ อาจมีวงเล็บปีกกาใส่ประโยคเชิงซ้อนย่อยเข้าไปอีกได้ ซึ่งนักศึกษาจะได้เห็นต่อไป
ข้างล่างนี้คือตัวอย่างโปรแกรมง่ายๆ ในภาษาซี
โปรแกรมที่ 1: Hello
#include <stdio.h>
main()
{
    printf(" Hello. This is my first program. \n") ;       /*  This is  a comment  */
    return 0 ;
}

บรรทัดแรกนั้นเราเรียก Compiler Directives คือเป็นคำสั่งที่บอก compiler ว่ามีไฟล์อะไรที่จำเป็นต่อการ compile บ้าง ซึ่งในที่นี้ เราต้องการไฟล์ที่ชื่อ "stdio.h" ซึ่งทำหน้าที่เรียกใช้งาน Standard I/O Library ซึ่งฟังก์ชันที่เราเรียกใช้งานในโปรแกรมข้างบนคือ printf นั่นเอง
บรรทัดต่อมาบอกว่าโปรแกรมนี้มีฟังก์ชัน main โดยไม่ต้องการ argument ใดๆ โดย compound statement ถูกบรรจุในวงเล็บปีกกา { ...... }
บรรทัดต่อมามีการเรียกใช้ฟังก์ชัน printf จาก Standard I/O Library โดย argument ของฟังก์ชันนี้ก็คือประโยค " Hello. This is my first program." นักศึกษาสังเกตว่ามีชุดอักขระ \n ซึ่งเป็นชุดอักขระพิเศษหมายถึงการขึ้นบรรทัดใหม่
นี่คือชุดอักขระพิเศษต่างๆ และ ความหมาย