KHÁI NIỆM CƠ BẢN CTạo 1 project FileNewProjectVisual C++CLR Console Applicationnhập tênOK Viết chương trình nhỏ: /* Nhập vào 2 số nguyên... getschar*, putschar*: nhập, xuất biến
Trang 1KHÁI NIỆM CƠ BẢN C
Tạo 1 project
FileNewProjectVisual C++CLR Console Applicationnhập tênOK Viết chương trình nhỏ:
/* Nhập vào 2 số nguyên Tính và in ra tổng của chúng */
#include <conio.h>
{
printf( "Nhap a=" ); // hàm xuất ra màn hình
scanf( "%d" , &a); // hàm nhập theo dịa chỉ biến a
printf( "Nhap b=" ); // %d: chỉ thị đặc tả
// cho biến kiểu int scanf( "%d" , &b);
sum=a+b; // phép gán =
printf( "Tong: %d + %d = %d" , a, b, sum);
getch( ); // hàm nhận ký tự trực tiếp từ bộ đệm } // kết thúc hàm chính
- Bấm F6 để compile
- Bấm Ctrl+F5 để chạy chương trình
Kiểu ký tự: char, unsigned char
Kiểu số nguyên: int, unsigned, long, unsigned long, long
Kiểu dấu chấm động: float, double, long double
Kiểu void
Trang 2 HẰNG
Cách định nghĩa hằng trong chương trình:
Cách 1:
#define <tên hằng> <giá trị>
Cách 2:
const <kiểu> <tên hằng> = <giá trị>;
Ví dụ:
#define PI 3.1415
const float PI = 3.1415;
#include <stdafx.h>
#include <stdio.h>
#include <conio.h>
#define PI 3.1415;
void main()
{
const float pi = 3.1415;
printf( "%f" ,pi);
printf( "\n" ); // xuống dòng
float a=PI;
printf( "%f" ,a);
}
CÁC PHÉP TOÁN SỐ HỌC
Phép chia của hai số nguyên cho ra kết quả là số nguyên.
VD: float f = 5/2; // cho kết quả f = 2
Phép toán phẩy (,): thứ tự thực hiện ở vế phải là từ trái sang phải.
VD:
int m, t, h;
m=(t=2,h=t*t+3);
/* sẽ cho t=2, h=7 và m=7 */
int a, b=2;
b=(a=3,(5*b)+(a*=b));
/* b=16 a=6 */
CÁC PHÉP THAO TÁC TRÊN BIT
Gồm AND(&), OR(|), XOR(^), Dịch trái(<<), Dịch phải (>>), lấy phần bù (~)
Các phép toán này cho phép xử lý từng bit của một số nguyên (không
dùng cho kiểu float và double)
Ví dụ:
unsigned char a = 135; // a2 = 10000111
unsigned char b = 50; // b2 = 00110010
Trang 3unsigned char c;
c = a&b; // c10 = 2; c2 = 00000010
c = a|b; // c10 = 183, c2 = 10110111
c = a^b; // c10 = 181, c2 = 10110101
c = a>>3; // c10 = 16, c2 = 00010000
c = a<<4; // c10 = 112, c2 = 01110000
c = a>>n; // Û c = a / 2n,
c = a<<n; // Û c = a * 2n
// n : số bit dịch chuyển
PHÉP TOÁN BÙ BIT ~
~1=0
~0=1
Ví dụ:
char a = 52; // a2=00110100
char b = ~a; // b2=01001011, b10 = 75
CÁC PHÉP TOÁN QUAN HỆ
Bao gồm các phép toán so sánh:
==, !=, >, >=, <, <=
So sánh giá trị của các toán hạng cho ra kết quả 0 (sai) hoặc 1 (đúng).
Ví dụ:
int a = 3, b = 5, f;
f = a * 2 > b; // f = 1
CÁC PHÉP TOÁN LOGIC
Bao gồm các toán tử:
NOT (!), AND (&&) và OR (||)
Dùng kết hợp các biểu thức thành một biểu thức logic
Kết quả của các phép toán này có giá trị:
0 (sai) hoặc 1 (đúng).
Ví dụ:
x y x&&y x||y !x !!x
Chú ý : !!x có thể có giá trị khác x
CHUYỂN ĐỔI KIỂU DỮ LIỆU
Chuyển đổi kiểu dữ liệu tự động: Khi hai toán hạng trong một phép toán
khác kiểu dữ liệu thì kiểu dữ liệu thấp được nâng thành kiểu dữ liệu cao trước khi tính toán
Ví dụ:
Trang 4float f, x = 5;
int y = 2;
f = x/y; // f = 2.5
Vì x kiểu float nên y sẽ tạm thời được chuyển sang kiểu float để thực hiện phép chia x/y
Chuyển đổi kiểu “bắt buộc”: chuyển đổi kiểu bất kỳ sang kiểu mong muốn, gọi
là ép kiểu
Cú pháp khai báo: (<KiểuDL>) <biểu thức>
Ví dụ:
float f1, f2;
int x = 5, y = 2 ;
f2 = (float)x/y; // f2 = 2.5
f1 = 2 vì x và y cùng kiểu int, nên x/y → kết quả kiểu int
CÁC PHÉP TĂNG GIẢM MỘT ĐƠN VỊ: ++,
Ví dụ:
int n = 5, x;
// tăng n lên 1 rồi gán cho x
x = ++n; // n = n+1 = 6; x = n = 6
// gán n cho x rồi mới tang n lên 1
x = n++; // x = n = 5; n = n+1 = 6
Phép toán ++, chỉ thao tác trên các biến có giá trị nguyên.
CÂU LỆNH GÁN =
Dạng 1: Biến = <biểu thức>;
Dạng 2: Biến <toán tử> = <biểu thức>;
Với <toán tử> là một trong các phép toán:
+, -, *, /, %, &, |, ^, <<, >>
Ví dụ:
int c, a=3, b=4;
int so = 10;
c = a+b; // dạng 1, c=3+4=7
so += 5; // dạng 2: so=so+5=15
a = b = c = 0;
Trang 5a = a % n ó a % = n;
a = a + 1 ó a + = 1; a ++; ++a;
a = a – 1 ó a - = 1; a ; a;
TOÁN TỬ ĐIỀU KIỆN (?)
Cú pháp khai báo
<điều kiện>?<biểu thức 1>:<biểu thức 2>;
Kết quả của biểu thức
nhận <biểu thức 1> nếu điều kiện có giá trị khác 0 (điều kiện
đúng),
ngược lại, nhận <biểu thức 2>.
Ví dụ:
int a = 7, b = 10;
int min, max;
min = (a<b)? a : b; // min = a = 7
max = (a>b)? a : b; // max = b = 10
CÁC HÀM NHẬP XUẤT TRONG stdio.h
scanf(…), printf(…): Nhập, xuất giá trị cho biến theo kiểu đã được định
dạng
gets(char*), puts(char*): nhập, xuất biến kiểu chuỗi ký tự ra màn hình.
getchar(), putchar() : nhập, xuất ký tự ra màn hình
Ví dụ:
float f;
scanf(“%f”,&f)
printf(“Gia tri cua f = %0.2f”, f);
char str[10]; // biến chuỗi ký tự
gets(str); // hoặc scanf(“%s”,str);
puts(str); // hoặc printf(“%s”,str);
char ch;
ch = getchar();
Trang 6%d
%ld
%o
%x
%u
%lu
%f
%lf
%lf
%s
char
int
long int
int
int
unsigned int
unsigned long
float
double
long double
mảng ký tự
Đặc tả ký tự Đặc tả số nguyên Đặc tả số nguyên dài Đặc tả số nguyên ở hệ bát phân Đặc tả số nguyên ở hệ thập lục phân Đặc tả số nguyên không dấu
Đặc tả số nguyên dài không dấu Đặc tả số thực
Đặc tả số thực Đặc tả số thực Đặc tả chuỗi ký tự
'\0' “NULL”– ứng với giá trị nguyên 0 trong bảng mã
ASCII (khác với số 0)
'\f' LF(sang trang)
#include <stdafx.h>
#include <stdio.h>
#include <conio.h>
void main()
{
char ch;
do{
ch=getch();
if (ch==0) // Nhấn phím đặc biệt {
ch=getch(); // Nhận mã lần thứ 2
if (ch == 59)
break; // Nếu ch == F1: thoát
// khỏi vòng do while
Trang 7}
} while (1);
}
CÁC CÂU LỆNH TRÊN C
KHÁI NIỆM VỀ CÂU LỆNH
Mỗi câu lệnh thực hiện một chức năng nào đó (như lệnh gán, lệnh xuất dữ liệu ra màn hình), câu lệnh có thể được viết trên một hoặc nhiều dòng và được kết thúc bằng dấu chấm phẩy (;)
Ví dụ:
cv=2*r*M_PI;
printf("\nChu vi = %10.2f \ \nDien tich = %10.2f",cv,dt);
CÚ PHÁP KHAI BÁO LỆNH IF
Dạng 1:
if (biểu thức ĐK) <khối lệnh>;
Dạng 2:
if (biểu thức ĐK) <khối lệnh 1>;
else <khối lệnh 2>;
VÍ DỤ MINH HỌA
Cho 3 số nguyên a, b và c, xuất giá trị 3 số đó ra màn hình theo thứ tự tăng dần
max = a; min = b;
if (a<b)
max = b;
min = a;
}
if (c>max) max = c;
else if (c<min) min = c;
mid = (a+b+c) - (max + min);
printf(“%d %d %d”, min, mid, max);
CÚ PHÁP KHAI BÁO LỆNH SWITCH
switch (Biểu thức)
{
case n1: <các câu lệnh>; <break>;
case n2: <các câu lệnh>; <break>;
case nk: <các câu lệnh>; <break>;
[default: <các câu lệnh>;
<break>;]
}
Trang 8 ni: các hằng số nguyên hoặc ký tự
Nếu giá trị của biểu thức = ni Þ thực hiện câu lệnh sau case ni.
Nếu giá trị biểu thức khác tất cả các giá trị ni Þ thực hiện câu lệnh sau default nếu
có hoặc thoát khỏi switch
Khi chương trình đã thực hiện xong câu lệnh của case ni nào đó thì nó sẽ thực
hiện luôn các câu lệnh thuộc case bên dưới nó mà không xét lại điều kiện (do các
ni được xem như các nhãn)
Do đó để chương trình thoát khỏi lệnh switch, sau khi thực hiện xong một trường hợp, ta dùng lệnh break.
In ra màn hình học lực của học sinh theo thang điểm như sau: Từ 0 -> 3: Kém, 4: Yếu, 5-> 6: Trung bình, 7 -> 8: Khá, 9 -> 10: Giỏi
switch(diem)
{
case 0: case 1: case 2: case 3:
printf(“Kem\n”); break;
case 4: printf(“Yeu\n”); break;
case 5: case 6:
printf(“Trung binh\n”); break;
case 7: case 8: printf(“Kha\n”); break;
case 9: case 10:
printf(“Gioi\n”); break;
default: printf(“Nhap diem sai\n”);
} // Kết thúc switch
CÚ PHÁP KHAI BÁO LỆNH FOR
for (<biểuthức1>; <biểuthức2>;
<biểuthức3>) <Khối lệnh>;
Hoạt động:
1 Tính giá trị của <biểuthức1>
2 Tính giá trị của <biểuthức2>
3 Nếu giá trị <biểuthức2> khác 0
Þ thực hiện <khối lệnh>
Ngược lại
Þ thoát khỏi lệnh for
4 Tính giá trị <biểuthức3> rồi lặp lại bước 2
VÍ DỤ MINH HỌA
#include <stdio.h>
#include <conio.h>
void main()
{
int n, i;
Trang 9printf(“Nhap gia tri n: ”);
scanf(“%d”, &n);
printf(“Cac uoc so cua %d la: ”, n);
for (i =1; i <= n; i++)
if ( !n%i ) // !n%i ó n%i=0
printf(“%3d”, i );
getch();
}
CÚ PHÁP KHAI BÁO LỆNH WHILE
while (biểu thức) <khối lệnh>;
Ý nghĩa:
Nếu giá trị của biểu thức còn khác 0 (còn đúng) thì còn thực hiện <khối lệnh>.
VÍ DỤ MINH HỌA
In ra màn hình tất cả các ước số của n:
i = n;
while (i) // i ! = 0
{
if ( !n%i ) // n%i = 0
printf(“%3d”, i );
i ;
}
Vòng lặp while sẽ thực hiện đến khi i = 0 thì dừng.
do
{
<khối lệnh>;
}while (biểu thức);
Ý nghĩa:
Thực hiện <khối lệnh> cho đến khi giá trị của biểu thức bằng 0 (sai) thì dừng.
VÍ DỤ MINH HỌA
Viết đoạn chương trình nhập giá trị của x nằm trong khoảng từ 1->6:
int x;
do {
printf(“Nhap gia tri cua x:”);
Trang 10scanf(“%d”, &x);
} while (x<1 || x>6);
Nhập giá trị của x, nếu x<1 hoặc x>6 thì yêu cầu nhập lại