Code:
type name[=giá trị khởi tạo];
Code:
int a; long b=10;
Code:
int a,b=10,c,d;
Code:
const type name=giátrị;
Code:
const float pi=3.14;
Code:
dest=source;
Code:
int a,b=10; const int c=12; a=b; //ok a=10. a=11;//ok a=11. 11=a;//false 11 không phải là biến. c=12;// false c là một hằng số không thể thay đổi được.
Code:
int a=0,b=1,c=2; a=12+1; //lấy 12+1=13 rồi gán cho a, kết quả(kq) a=13. a=b+c; //lấy biến giá trị b cộng giá tri c tức 1+2 rồi gán cho a, kq a=3. a=c+10; //lấy biến c cộng 10 rồi gán cho a, kq a=12. a=a+10; //lấy biến a cộng 10 rồi gán cho a,kq a=12+10=22. a=a+a; //lấy biến a cộng cho a rồi gán cho a,kq=22+22=44.
Code:
#include#include int main() { float a,b,c; printf("Chuong trinh tinh tong hai so\n") printf("Ban hay nhap vao so thu nhat :"); scanf("%f",&a); printf("Ban hay nhap vao so thu hai :"); scanf("%f",&b); c=a+b; printf("\nKet Qua của phep cong: %f+%f=%f",a,b,c); return 0; }
Phép toán nhân *
Chương trình sau cho phép bạn nhập hai số sau đó in ra kết quả tích của hai số đó.
[b]Phép toán chia /[b]
Phép chia số nguyên:
kết quả của phép toán là lấy phần nguyên của phép toán.
Ví dụ: 5/2 ta được 2 dư 1. Kết quả(kq) ta được 2.
Chú ý: Phép toán này chỉ thực được hiện trên tập số nguyên.
Vậy: Nếu ta có n=a*b+c thì phép toán chia nguyên của n/b=a và n/a=b.
Chương trình sau sẽ cho phép nhập vào hai số sau đó lấy phần nguyên của kết quả phép chia.
Code:
inta,b; a=2*20; //lấy 2 nhân với 20 rồi gán vào cho a, kết quả (kq) a=40. b=a*2; //lấy a=40 nhân với 2 rồi gán vào b, kq b=80. a=a*a; // lấy a=40 nhân với a=40 rồi gán lại cho a, kq a=1600
Code:
#include#include int main() { float a,b,c; printf("Chuong trinh tinh tich hai so\n") printf("Ban hay nhap vao so thu nhat :"); scanf("%f",&a); printf("Ban hay nhap vao so thu hai :"); scanf("%f",&b); c=a*b; printf("\nKet Qua của phep nhan: %f*%f=%f",a,b,c); return 0; }
Code:
#include#include int main() { int a,b,c; printf("Chuong trinh tinh tong hai so\n"); printf("Ban hay nhap vao so thu nhat :"); scanf("%d",&a); printf("Ban hay nhap vao so thu hai :"); scanf("%d",&b); c=a/b; printf("\nKet Qua của phép chia nguyên: %d-%d=%d",a,b,c); return 0; }
Code:
#include#include int main() { float a,b,c; printf("Chuong trinh tinh tong hai so\n"); printf("Ban hay nhap vao so thu nhat :"); scanf("%f",&a); printf("Ban hay nhap vao so thu hai :"); scanf("%f",&b); c=a/b; printf("\nKet Qua của phep chia so thuc: %f / %f=%f",a,b,c); return 0; }
Code:
#include#include int main() { int a,b,c; printf("Chuong trinh tinh tong hai so\n"); printf("Ban hay nhap vao so thu nhat :"); scanf("%d",&a); printf("Ban hay nhap vao so thu hai :"); scanf("%d",&b); c=a%b; printf("\nKet Qua của phép chia nguyên: %d %% %d=%d",a,b,c); return 0; }
Các phép toán luận lý
Các phép toán luận lý có hai kết quả trả về là đúng hay sai, giá trị đúng là 1, giá trị sai là 0.
Phép toán so sánh bằng ==
Phép so sánh hai biểu thức A và B ký hiệu A==B là một mệnh đề. Mệnh đề này có giá trị là đúng(bằng 1) nếu biểu thức A bằng biểu thức B, ngược lại mệnh đề này sẽ có giá trị false (bằng 0).
Ta có thể lấy giá trị của kết quả phép toán so sánh bằng cách gán giá trị trả về của phép so sánh vào một biến cụ thể.
Chương trình cho phép bạn nhập vào 2 số và in ra giá trị đúng sai của biểu thức so sánh hai số.
Code:
int a,b; a=1; b=2; b==a;//có giá trị là sai (0) a==1;//có giá trị là đúng (1) 2==b;//có giá trị là đúng. 2==2;//có giá trị là đúng.
Code:
int a; a=(1==2);//Mệnh đề 1==2 là một mệnh đề sai,a sẽ được gán kết quả là a=0. a=(a==0);//mệnh đề a==0 là một mệnh đề đúng do đó kết quả a=1.
Code:
#include#include int main() { int a,b,c; printf("Chuong trinh tinh tong hai so\n"); printf("Ban hay nhap vao so thu nhat :"); scanf("%d",&a); printf("Ban hay nhap vao so thu hai :"); scanf("%d",&b); c=(b==a); printf("\nKet Qua cua phep so sanh: (%d == %d)=%d",a,b,c); return 0; }
Phép so sánh không bằng !=
Phép so sánh A!=B là một mệnh đề, mệnh đề này đúng(bằng 1) khi A khác B (hay A không bằng B) và có giá trị sai (bằng 0) khi A==B.
Ta có thể lưu giá trị của phép so sánh không bằng vào biến.
Chương trình cho phép bạn nhập vào hai số, in ra giá trị đúng sai của phép toán so sách khác nhau giữa hai số.
Code:
int a,b; a=1; b=2; 1!=2; //Mệnh đề 1 khác 2 có giá trị đúng (1). a!=b;//Mệnh đề a khác b có giá trị đúng. 2!=b;//Mệnh đề 2 khác b có giá trị sai (0).
Code:
inta; a=(1!=2);//1 khác 2 là một mệnh đề đúng do đó biến a sẽ có giá trị 1. a=(1!=a);//1 khác a (a=1) là một mệnh đề sai do đó biến a sẽ có giá trị là 0.
Code:
#include#include int main() { int a,b,c; printf("Chuong trinh tinh tong hai so\n"); printf("Ban hay nhap vao so thu nhat :"); scanf("%d",&a); printf("Ban hay nhap vao so thu hai :"); scanf("%d",&b); c=(b!=a); printf("\nKet Qua cua phep so sanh: (%d != %d)=%d",a,b,c); return 0; }
Phép toán so sánh lớn hơn >, lớn hơn bằng >=, nhỏ hơn <>
Phép toán Or ||
Cho A B là các mệnh đề mệnh phép toán A or B (A||B) có kết quả là một mệnh đề, và mệnh đề này chỉ sai khi và chỉ khi A và B cùng là hai mệnh đề sai.
Ta có bảng chân trị sau:
ví dụ:
Code:
1>2; //Mệnh đề(MĐ) có giá trị Sai. 1>=2; //MĐ có giá trị Sai. 1<2;>
Code:
A \ B 0 1 0 0 1 1 1 1
Code:
(1<2)||(1==2); 1="=" 1="=" 1="=" 1="=" 1="=">
Phép toán and &&
Hai mệnh đề A và B, phép toán and hai mệnh đề A và B (A&&B) là một mệnh đề,mệnh đề này có giá trị là đúng khi và chỉ khi A và B là hai mệnh đề đúng.
bảng chân trị
ví dụ:
Các cấu trúc điều khiển trong C
Cấu trúc tuần tự:
Gọi A B là hai đoạn mã trong C.
Code:
A/B 0 1 0 0 0 1 0 1
Code:
int a; a=(1==1)&&(0<1); 1="=" a="1;" a="(1">2)&&(1==1);// Do mệnh đề 1>2 là mệnh đề sai nên kết quả a=0;
Code:
A; B;
Code:
#includeint main(){ int i; printf("Ban nhap vao mot so nguyen"); scanf("%d",&1); printf("So nguyen cua ban vua nhap co gia tri la %d",i); return 0; }
Code:
if(A) { S1; }
Code:
#includeint main(){ int a,abs; printf("Ban hay nhap vao mot so"); scanf("%d",&a); asb=a; if(a<0) { abs=-1*a; } printf("|%d|=%d",a,asb); return 0; }
Code:
inta,b; a=1; b=2; if(a=b) { printf("a va b bang nhau vi:%d=%d",a,b); }
Cấu trúc if else
Cú pháp của cấu trúc này như sau:
Thứ tự thực hiện của cấu trúc này như sau:
Nếu mệnh đề A là một mềnh đề đúng hay giá trị của A là khác 0(Nếu A không phải là mệnh đề) thì nhóm lệnh S1 được thực hiện ngược lại thì lệnh S2 sẽ được thực hiện.
Chương trình Giải Phương trình dạng Ax+B=0;
Cấu trúc switch :
Dạng :
Code:
if(A) { S1; } else { S2; }
Code:
#includeint main() { float A,B; printf("Ban nhap vao theo yeu cau sau:\n"); printf("Nhap vao he so A="); scanf("%f",&A); printf("Nhap vao he so B="); scanf("%f",&B); if(A==0) //Nếu bạn nhập A bằng 0 thì khối lệnh trong if được thực hiện. { if(B==0)// trường hợp này A==0 và B==0 pt có vô số nghiệm { printf("Phương trình trên có vô số nghiệm"); } else //trường hợp này A==0 và B!=0 pt sẽ vô nghiệm { printf("Phuong trinh trên vô nghiệm"); } } else //trường hợp này A!=0 nghịêm pt là -B/A { printf("phuong trinh tren co nghiem x=%f",-B/A); } return 0; }
Code:
switch(biến/biểu thức) { case: Lệnh 1; break; case : Lệnh 2; break; ...... case : lệnh n; break; [default] :lệnh(n+1); }
Vòng lặp.
Cấu trúc lặp với while
Cấu trúc while sẽ làm việc như sau:
Trong khi Mệnh đề A còn đúng hay giá trị A khác 0(nếu A không phải mệnh đề) thì câu lệnh S sẽ được thực hiện.
Câu lệnh S sẽ được thực hiện lặp đi lặp lại đến khi A sai hay khác 0.
Đọan mã tính giai thừa của một số.
do ............while()
Code:
while(A) { S; }
Code:
#includeint main() { long i=1,kq=1,n; printf("Ban muon tinh giai thua cua so nao ? n="); scanf("%d",&n); while(i<=n) { kq=kq*i; i++; } printf("ket qua %d!=%d",n,kq); return 0; }
Code:
do { S; }while(A)
Code:
S; while(A) { S; }
Cấu trúc lặp với for()
Vòng lặp for có dạnh như sau:
Vòng lặp này rất khó giải thích tuy nhiên thông thường chúng được thực hiện với ý nghĩa như sau:
thao tác thực hịên:
Đầu tiên X được thực hịên sau đó nếu Y là một mệnh đề đúng hay có giá trị khác 0 thì S sẽ được thực hiện sau đó Z sẽ được thực hiện. Và S sẽ được thực hịên đến khi Y sai hay Y có giá trị 0.
Nếu như vậy tại sao tôi lại nói là khó giải thích vì for có thể có những trường hợp sau:
tức thiếu 1 trong X,Y,Z, hay thiếu hết(nhưng phải có đủ 2 dấu 2 chấm) thì vẫn không bị coi là lỗi cú pháp.
Ví dụ
tuy nhiên việc này là vô nghĩa ta không nên sử dụng theo kiểu này.
Ví dụ trương trình tính giai thừa của một số nguyên:
Câu lệnh break
Các bạn đã thấy tác dụng của break trong phần cấu trúc switch, ngòai ra break còn có tác dụng là thóat khỏi vòng lặp ngay lập tức.
ví dụ đọan code sau cho phép bạn nhập một dãy các ký tự kết thúc là phím enter.
Code:
for(X,Y,Z) { S; }
Code:
int i; for(i=1;i<10;i=i+1) { S; }
Code:
for(X;Y;) for(X;;) for(;;)
Code:
#includeint main() { for(;;) { break; } return 0; }
Code:
#includeint main() { unsigned int n, i; unsigned long kq=1; printf("Ban nhap vao so nguyen duong"); scanf("%d",&n); if (n<0 ) return 1; for(i=1;i<=n;i++) { kq=kq*i; } printf("ket qua %d!= %d",n,kq); return 0; }
Code:
char ch; while(1) { ch=getchar(); if(ch==13) break; }
Code:
KDL *TênBiến;
Code:
int *x;
Code:
int *a; double *b; if(sizeof(a)==sizeof(b)) { printf("hai bien nay co kich thuong bang nhau"); }
Code:
TênBiếnTrỏ=&TênBiếnThường;
Code:
int *ptr; int a=1; ptr=&a;
Code:
int *ptr; int a=1,b=2; ptr=&a; //.............. ptr=&b;
Code:
int a; int *ptr=&a;
Code:
int a=2,*b=&a; printf("Noi dung cua bien a la :%d",*b);
Code:
int a=2,*ptr=&a; *ptr=3; printf("Noi dung cua bi thay doi bang:%d",a);
Mối tương quan giữa biến trỏ và mảng
Khi ta khai báo một mảng thì tên mảng chính là tên biến trỏ và biến trỏ này luôn trỏ đến vị trí ô nhớ đầu tiên của mảng.
Và biến trỏ này là biến trỏ hằng tức nó luôn trỏ tới vị trí đầu tiên của mảng, ta không thể thay đổi cho biến trỏ này trỏ đến biến khác.
Ta có thể dùng biến trỏ để trỏ đến bất cứ phần từ nào trong mảng
tại sao tôi không dùng ptr=&a; như tôi đã đề cập ở trên a là một hằng con trỏ luôn chứa địa chỉ của biến a[0], do để ptr trỏ đến phần tử đầu tiên của mảng ta chỉ cần gán ptr=a;tức ptr=&a[0], nếu bạn thích thì bạn cũng co thể viết lại là ptr=&a[0].
Và từ đây ptr có thể thao tác tương tự như là một mảng để lấy giá trị của phần tử thứ i trong a thông qua ptr ta chỉ vịêc viết ptr[i].
Code:
int a[5]={1,2,3,4,5}; printf("giá trị a[0] là: %d",*a);
Code:
int*ptr; ptr=a; printf("gia tri a[0] là:%d",*ptr);
Code:
int a[5]={1,2,3,4,5} int *ptr=a; for(int i=0;i<5;i++) printf("%d",ptr[i]);
Cộng biến trỏ với một số nguyên
Khi ta cộng biến trỏ tới một số nguyên tức ta đã thay đổi cho biến trỏ tham chiếu tới một biến khác. Còn biến trỏ này trỏ tới đâu ta có công thức tính như sau:
Đầu tiên ta khai báo một biến trỏ sau đó cho nó trỏ tới một biến.
khi ta thực hiện phép toán cộng ptr với một biến nguyên i tức
thì lúc này ptr sẽ tham chiếu tới vùng nhớ có địa chỉ là ptr+sizeof(KDL)*i;
Vùng nhớ này nếu ta không biết nó là gì thì không nên thay đổi giá trị của nó rất nguy hiển cho chương trình.
Ví dụ:
Như tôi đã nói ở trên khi ta làm thay đổi giá trị của một biến trỏ đến bằng phép toán cộng tức ta đã cho biến trỏ tham chiếu tới một vùng nhớ mới ta sẽ gặp nguy hiểm nếu không xác định được biến trỏ đang trỏ tới đâu vậy câu hỏi đặt ra là phép toán cộng cho biến trỏ sẽ giúp được gì cho chúng ta?
Thông thường phép toán này làm việc với một biến trỏ, trỏ đến mảng sẽ có hiệu lực rất hay.
Ví dụ khi ta khai báo một mảng a 7 phần tử và một biến trỏ , chỉ đến ô nhớ đầu của a như sau:
Code:
KDL *ptr, x; //KDL :kiểu dữ liệu ptr=&x;
Code:
ptr=ptr+i
Code:
#includeint main() { int *ptr,a; ptr=&a; printf("ptr hien tai dang chi toi dia chi la %d",ptr); printf("\nDo lon cua kieu du lieu la %d byte",sizeof(a)); ptr=ptr + 2; printf("\nSau khi cong 2 vao thi ptr chi toi dia chi la %d",ptr); return 0; }
Code:
int a[7], *ptr=a; for(int i=0;i<7;i++) a[i]=i;
Code:
ptr=ptr+1;
Code:
#includeint main() { int a[7], *ptr=a,i; printf("mang a ban dau co gia tri la:"); for(i=0;i<7;i++) { printf("%d ",a[i]); } for(i=0;i<7;i++) { *ptr=i; ptr++; } printf("\nNoi dung cua mang a sau khi khoi tao la"); for(i=0;i<7;i++) { printf("%d ",a[i]); } return 0; }
Điều chú ý giữa biến trỏ và mảng
khi ta khai báo một mảng
Do đó ta có ví dụ chương trình sau:
Code:
int a[9];
Code:
thì câu lệnh: a[i]=i[a] với i là một số nguyên. Chứng minh : giả sử a[i]=i[a] (1) do trình biên dịch hiểu a[k]=*(a+k) do đó (1) <==> *(a+i)=*(i+a) Đẳng thức đúng./
Code:
#includeint main() { int a[10],i; for(i=0;i<10;i++) i[a]=i; printf("Noi dung cua mang a la :"); for(i=0;i<10;i++) printf(" %d", a[i]); return 0; }
Không có nhận xét nào:
Đăng nhận xét