Bai giang ngon ngu lap trinh C -
(c) Nguyen Quang Huy 12/2000
1
Trêng®¹ihäcb¸chkhoahµnéi
Trêng®¹ihäcb¸chkhoahµnéi
Ng«n ng÷ lËp tr×nh
C
Ngêiso¹n:NguyÔnQuangHuy
12/2000
Bai giang ngon ngu lap trinh C -
(c) Nguyen Quang Huy 12/2000
2
Ch¬ng1
Ch¬ng1
C¬b¶nvÒng«nng÷c
C¬b¶nvÒng«nng÷c
Tæng quan vÒ ng«n ng÷ C
CÊu tróc chung cña mét ch ¬ng tr×nh C
C¸c thµnh phÇn c¬ b¶n cña ng«n ng÷
C¸c kiÓu d÷ liÖu c¬ b¶n
C¸c cÊu tróc lÖnh c¬ b¶n trong C
Vµo ra trong C
Bai giang ngon ngu lap trinh C -
(c) Nguyen Quang Huy 12/2000
3
TængquanvÒng«nng÷c
TængquanvÒng«nng÷c
Do B.W.Kerninghan & D.M.Ritchie (1970) ph¸t triÓn t¹i
Bell lab.
T¹i sao l¹i sö dông C?
•
NNLT v¹n n¨ng.
•
TÝnh kh¶ chuyÓn (portability).
•
§é thÝch nghi cao, tÝnh mÒm dÎo, NNLT chuyªn
nghiÖp.
•
TÝnh hiÖu qu¶.
Bai giang ngon ngu lap trinh C -
(c) Nguyen Quang Huy 12/2000
4
CÊutrócchungcñamétch¬ngtr×nhC
CÊutrócchungcñamétch¬ngtr×nhC
#include <stdio.h>
#include <conio.h>
/* Ch ¬ng tr×nh chÝnh */
void main()
{
printf(“Hello, world!\n”);
/* §îi Ên mét phÝm */
getch();
}
PhÇn dÉn h íng biªn dÞch
PhÇn khai b¸o
PhÇn ch ¬ng tr×nh chÝnh
Bai giang ngon ngu lap trinh C -
(c) Nguyen Quang Huy 12/2000
5
Cácthànhphầncơbảncủangônngữ
Cácthànhphầncơbảncủangônngữ
Bộ chữ viết:
phân biệt chữ hoa và chữ th ờng
Tên:
quy tắc đặt tên
Từ khoá: asm, break, case, char, const, continue, if,
Các kiểu dữ liệu cơ bản
Các biến
Các hằng
Biểu thức
Bai giang ngon ngu lap trinh C -
(c) Nguyen Quang Huy 12/2000
6
C¸ckiÓud÷liÖuc¬b¶n
C¸ckiÓud÷liÖuc¬b¶n
KiÓu Ph¹m vi KÝch th íc
char 0 255 1 byte
int -32768 32767 2 bytes
long -2147483648 2147484647 4 bytes
unsigned 0 65535 2 bytes
float 3.4e-38 3.4e+38 4 bytes
double 1.7e-308 1.7e+308 8 bytes
Bai giang ngon ngu lap trinh C -
(c) Nguyen Quang Huy 12/2000
7
Khaib¸obiÕn
Khaib¸obiÕn
<KiÓu_d÷_liÖu><TªnbiÕn>[=<Gi¸trÞ>];
•
Gi¸ trÞ cña biÕn cã thÓ ® îc khëi g¸n khi khai b¸o.
VÝ dô:
int i, j;
float f;
char ch, ch1 = ‘A’, ch2 = ‘\n’;
double eps = 1E-6;
Bai giang ngon ngu lap trinh C -
(c) Nguyen Quang Huy 12/2000
8
Khaib¸oh»ng
Khaib¸oh»ng
•
H»ng t îng tr ng:
#define<tªn_h»ng><gi¸_trÞ>
VÝ dô:
#define MAX 100;
#define ECHO "DHBK Hanoi"
•
H»ng biÕn:
const<tªn_kiÓu><tªn_h»ng>=<gi¸_trÞ>;
VÝ dô:
const long MAX = 100L;
const char ECHO[30] = "DHBK Hanoi";
Bai giang ngon ngu lap trinh C -
(c) Nguyen Quang Huy 12/2000
9
Biểuthức(1/5)
Biểuthức(1/5)
Các phép toán số học: +, -, *, /, %, -
Các phép toán quan hệ: >, <, >=, <=, ==, !=
Các phép toán logic: &&, ||, !
Các phép toán thao tác bit: &, |, ^, <<, >>, ~
Thao tác số học
Thao tác logic
Phép toán tăng giảm: ++,
Phân biệt ++n; và n++;
Bai giang ngon ngu lap trinh C -
(c) Nguyen Quang Huy 12/2000
10
BiÓuthøc(2/5)
BiÓuthøc(2/5)
•
To¸n tö g¸n:
<BiÕn>=<BiÓu_thøc>;
•
BiÓu thøc g¸n:
<BiÕn>=<BiÓu_thøc>
VÝ dô: int a = b = 5;
•
BiÓu thøc g¸n rót gän:
<BiÕn>=<BiÕn><op><BiÓu_thøc>
<BiÕn><op>=<BiÓu_thøc>
VÝ dô: i = i + exp; > i += exp;
Bai giang ngon ngu lap trinh C -
(c) Nguyen Quang Huy 12/2000
11
BiÓuthøc(3/5)
BiÓuthøc(3/5)
•
BiÓu thøc ®iÒu kiÖn:
Bt1?Bt2:Bt3
VÝ dô:
max = (a>b) ? a : b;
•
PhÐp to¸n lÊy ®Þa chØ biÕn:
&<BiÕn>
VÝ dô:
int n;
scanf("%d",&n);
Bai giang ngon ngu lap trinh C -
(c) Nguyen Quang Huy 12/2000
12
BiÓuthøc(4/5)
BiÓuthøc(4/5)
•
ChuyÓn ®æi kiÓu tù ®éng:
char->int->long->float->double->longdouble
•
PhÐp to¸n chuyÓn ®æi kiÓu:
(<KiÓu>)<BiÓu_thøc>
VÝ dô:
int n = (int) 10.24;
•
Thø tù u tiªn cña c¸c to¸n tö:
Bai giang ngon ngu lap trinh C -
(c) Nguyen Quang Huy 12/2000
13
BiÓuthøc(5/5)
BiÓuthøc(5/5)
To¸n tö Thø tù kÕt hîp
(), [], -> Tr¸i sang ph¶i
~, ++, , (type) Ph¶i sang tr¸i
*, /, % Tr¸i sang ph¶i
+, - Tr¸i sang ph¶i
<<, >> Tr¸i sang ph¶i
<, <=, >, >= Tr¸i sang ph¶i
& Tr¸i sang ph¶i
| Tr¸i sang ph¶i
^ Tr¸i sang ph¶i
&& Tr¸i sang ph¶i
|| Tr¸i sang ph¶i
==, !=, +=, -= Ph¶i sang tr¸i
Bai giang ngon ngu lap trinh C -
(c) Nguyen Quang Huy 12/2000
14
CáccấutrúclệnhcơbảntrongC
CáccấutrúclệnhcơbảntrongC
Câu lệnh đơn: <Lệnh>;
Câu lệnh ghép: { }
Cấu trúc tuần tự
Cấu trúc điều kiện
Cấu trúc lặp
Bai giang ngon ngu lap trinh C -
(c) Nguyen Quang Huy 12/2000
15
CÊutróc®iÒukiÖn(1/2)
CÊutróc®iÒukiÖn(1/2)
•
C©u lÖnh if :
if (BiÓu thøc) <LÖnh>;
hoÆc:
if (BiÓu thøc) <LÖnh 1>;
else <LÖnh 2>;
VÝ dô:
if (a<b) max=b;
else max=a;
Bai giang ngon ngu lap trinh C -
(c) Nguyen Quang Huy 12/2000
16
CÊutróc®iÒukiÖn(2/2)
CÊutróc®iÒukiÖn(2/2)
•
C©u lÖnh SWITCH :
switch (BiÓu_thøc_nguyªn){
case N1 : Lenh1;
case N2 : Lenh2;
[default : Lenh;]
}
VÝ dô:
switch (ch){
case 1 :
case 2 : printf("1 ou 2"); break;
case 3 : printf("3"); break;
default : printf("greater than 3");
}
Bai giang ngon ngu lap trinh C -
(c) Nguyen Quang Huy 12/2000
17
CÊutróclÆp(1/3)
CÊutróclÆp(1/3)
•
C©u lÖnh FOR:
for ( Bt1; Bt2; Bt3 ) Lenh;
VÝ dô: tÝnh N!
long Gt,i,N;
Gt = 1;
for (i=1; i<=N; i++)
Gt *= i;
Bai giang ngon ngu lap trinh C -
(c) Nguyen Quang Huy 12/2000
18
Cấutrúclặp(2/3)
Cấutrúclặp(2/3)
Câu lệnh WHILE:
while (<Biểu thức đk>) Lenh;
Ví dụ: đọc một dãy 20 số nguyên từ bàn phím
int day[20];
int chiso = 0;
while (chiso<20)
{
printf(\nSo thu %d :,chiso);
scanf(%d,&day[chiso]);
chiso++;
}
Bai giang ngon ngu lap trinh C -
(c) Nguyen Quang Huy 12/2000
19
CÊutróclÆp(3/3)
CÊutróclÆp(3/3)
•
C©u lÖnh DO WHILE :
do Lenh1;
while (<BiÓu thøc ®k>);
VÝ dô: TÝnh tÝch v« h íng cña hai vect¬ X,Y:
int X[MAXL], Y[MAXL], chiso=0;
tichvohuong = 0;
do {
tichvohuong += X[chiso]*Y[chiso];
} while (++chiso < MAXL);
Bai giang ngon ngu lap trinh C -
(c) Nguyen Quang Huy 12/2000
20
VµoratrongC(1/5)
VµoratrongC(1/5)
•
Vµo ra qua c¸c kªnh xuÊt/nhËp (I/O streams):
Gi¸ trÞ > Kªnh xuÊt > Khu«n d¹ng > ThiÕt bÞ ra
ThiÕt bÞ vµo > Kªnh vµo > Khu«n d¹ng > BiÕn
•
Th viÖn c¸c hµm vµo ra: stdio.h vµ conio.h
#include <stdio.h>
#include <conio.h>
•
Hµm printf() vµ scanf()
Bai giang ngon ngu lap trinh C -
(c) Nguyen Quang Huy 12/2000
21
VàoratrongC(2/5)
VàoratrongC(2/5)
Hàm printf():
printf(<format> [,<arguments>, ] );
<format>: xâu định dạng
<arguments>: các tham số t ơng ứng
Ví dụ:
printf("n = %d\n", -10); /* > -10 */
printf("n = %u\n", -10); /* > 65526 */
printf("A : %4c\n", 'A'); /* > A */
printf("A : %d\n", 'A'); /* > 65 */
printf("f = %4.2f", 123.4); /* > 123.40 */
Bai giang ngon ngu lap trinh C -
(c) Nguyen Quang Huy 12/2000
22
VµoratrongC(3/5)
VµoratrongC(3/5)
§Þnh d¹ng KiÓu Ghi chó
%d int Sã nguyªn
%i int HÖ 10 cã dÊu
%o int HÖ 8 kh«ng dÊu
%u int Sè nguyªn kh«ng dÊu
%x int HÖ 16 kh«ng dÊu
%X int HÖ 16 kh«ng dÊu
%e, %E float, double DÊu chÊm ®éng
%f, %lf float, double DÊu phÈy tÜnh
%g. %G float, double DÊu phÈy tÜnh hoÆc ®éng
%c char Ký tù
%s char * X©u ký tù
Bai giang ngon ngu lap trinh C -
(c) Nguyen Quang Huy 12/2000
23
VàoratrongC(4/5)
VàoratrongC(4/5)
Hàm scanf():
scanf(<format>, {<address>, } );
<format>: xâu định dạng
< address>: địa chỉ của các tham số t ơng ứng
Ví dụ:
int n;
long l;
float f;
double d;
printf("Nhập các giá trị cho các biến n,l,f,d:");
scanf("%d%ld%f%lf", &n, &l, &f, &d);
Bai giang ngon ngu lap trinh C -
(c) Nguyen Quang Huy 12/2000
24
VµoratrongC(5/5)
VµoratrongC(5/5)
§Þnh d¹ng KiÓu Ghi chó
%d int Sã nguyªn
%o int HÖ 8 kh«ng dÊu\
%x int HÖ 16 kh«ng dÊu
%c char Ký tù
%s char * X©u ký tù
%f float
%lf double
%ld long
Bai giang ngon ngu lap trinh C -
(c) Nguyen Quang Huy 12/2000
25
VÝdô1
VÝdô1
:TÝnhtænghaisè
:TÝnhtænghaisè
#include <stdio.h>
int main()
{
int a, b, c;
printf("Enter the first value:");
scanf("%d", &a);
printf("Enter the second value:");
scanf("%d", &b);
c = a + b;
printf("%d + %d = %d\n", a, b, c);
return 0;
}