Thứ Ba, 17 tháng 12, 2013

Cấu trúc trong C

Posted by Unknown Thứ Ba, tháng 12 17, 2013, under | No comments

I. Lý thuyết :
1. Định nghĩa :
Trong lập trình, đôi khi các kiểu dữ liệu cơ sở chưa đủ mềm dẻo để cho cái bài toán thực tế. Các sự vật, hiện tượng trong thực tế rất phức tạp và có nhiều tình nhất khác nhau. Người lập trình có thể định nghĩa các kiểu dữ liệu mới có cấu trúc phù hợp với từng bài toán cụ thể  - Struct (1 loại kiểu dữ liệu có cấu trúc) trong ngôn ngữ lập trình C.
2. Cách khai báo :
Các cách khai báo "struct" :
C1:
struct TênCấuTrúc
{
    KiểuDữLiệu1  ThànhPhần1;
    KiểuDữLiệu2  ThànhPhần2;
    ...
    KiểuDữLiệun  ThànhPhầnn;
};
C2:
typedef struct
{
    KiểuDữLiệu1  ThànhPhần1;
    KiểuDữLiệu2  ThànhPhần2;
    ...
    KiểuDữLiệun  ThànhPhầnn;
}TênCấuTrúc;
C3:
struct TênCấuTrúc
{
    KiểuDữLiệu1  ThànhPhần1;
    KiểuDữLiệu2  ThànhPhần2;
    ...
    KiểuDữLiệun  ThànhPhầnn;
};
typedef struct TênCấuTrúc TênCấuTrúcMới;
3. Ví dụ :

struct hocsinh
{
    char *HoTen;
    int NamSinh;
    float DiemTB;
};

struc phanso
{
    int Tu;
    int Mau;
};
typedef struct phanso PhanSo;

Ví dụ minh họa :
// cau_truc_voi_phan_so.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<iostream>
#include <stdio.h>
#include <conio.h>
#include <math.h>
struct PhanSo
{
int tu;
int mau;
} a;
void Nhap(PhanSo &ps)
{
printf("\t Nhap vao phan tu so: ");
scanf_s("%d", &a.tu);
printf("\t Nhap vao phan mau so: ");
scanf_s("%d", &a.mau);
ps = a;
}
void Xuat(PhanSo a);
void Xuat(PhanSo a)
{
printf("%d/%d", a.tu, a.mau);
}
int UCLN(int a, int b)
{
a = abs(a);
b = abs(b);
if (a == b) return a;
while (a != b)
if (a > b)
a -= b;
else
b -= a;
return a;
}
void ToiGian(PhanSo &ps)
{
ps.tu = a.tu / UCLN(a.tu, a.mau);
ps.mau = a.mau / UCLN(a.tu, a.mau);
}
void TinhTong(PhanSo a, PhanSo b)
{
PhanSo c;
if (a.mau==b.mau)
{
c.tu = a.tu + b.tu;
c.mau = a.mau;
}
else
{
c.tu = a.tu * b.mau + b.tu * a.mau;
c.mau = a.mau * b.mau;
}
printf("\n \n Tong hai phan so la : ");
Xuat(c);
}
void TinhHieu(PhanSo a, PhanSo b)
{
PhanSo c;
if (a.mau == b.mau)
{
c.tu = a.tu - b.tu;
c.mau = a.mau;
}
else
{ c.tu = a.tu * b.mau - b.tu * a.mau;
c.mau = a.mau * b.mau;
} printf("\n \n Hieu cua hai phan so la :");
Xuat(c);
}
int _tmain(int argc, _TCHAR* argv[])
{
PhanSo ps, ps2;
// Nhap vao phan so thu nhat va toi gian no
printf("\n------------------------------------------");
printf("\n Nhap vao phan so thu 1: \n");
Nhap(ps);
ToiGian(ps);
printf("\n Phan so toi gian la: ");
Xuat(ps);
printf("\n------------------------------------------");
printf("\n------------------------------------------");
// Nhap vao phan so thu hai va toi gian no
printf("\n  Nhap vao phan so thu 2: \n");
Nhap(ps2);
ToiGian(ps2);
printf("\n Phan so toi gian la: ");
Xuat(ps2);
printf("\n------------------------------------------");
// Tinh Tong
TinhTong(ps, ps2); TinhHieu(ps, ps2); _getch();
return 0;
}



II. Bài tập :


Chủ Nhật, 15 tháng 12, 2013

Con trỏ trong C

Posted by Unknown Chủ Nhật, tháng 12 15, 2013, under | No comments

I .Lý thuyết :
1. Định nghĩa:
Con trỏ  là một biến(như bạn khai báo biến thông thường), nhưng biến này đặc biệt ở chỗ là nó lưu trữ địa chỉ của vùng nhớ mà nó trỏ tới.
- Bạn muốn con trỏ trỏ tới một biến (thì con trỏ sẽ lưu trữ địa chỉ của biến đó, một số hexa mà bộ nhớ cấp phát )
- Bạn muốn con trỏ trỏ tới một mảng thì nó lưu trữ địa chỉ của phần tử đầu tiên của mảng đó.
- Bạn muốn con trỏ trỏ tới một hàm thì con trỏ sẽ lưu trữ địa chỉ của hàm đó (lát mình chỉ cách dùng)
- Bạn muốn con trỏ trỏ tới một struct(hình như khi học tới con trỏ thì chưa học tới cái này thì phải – lát mình chỉ)
- Bạn muốn con trỏ trỏ tới người yêu của thằng nào đó thì lưu trữ địa chỉ nhà em nó .
- Con trỏ có thể trỏ tới con trỏ ….

và kiểu của con trỏ bạn có thể dùng là (int, char, array, structure, function, hay con trỏ).

2. Ví dụ minh họa :
VD 1: con trỏ với biến :
code :
// con_tro.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<conio.h>
void main()
{
int *p;// khai bao bien con tro p
int i = 40; // khai bao bien i co gia tri 40
p = &i;// gan bien i vao bien con tro
printf("\n Gia tri cua bien con tro :%d", *p);
printf("\n Dia chi o nho cua bien con tro :%d", p);
printf("\n");
_getch();
}

VD 2: con tro với mảng :
code :
// con_tro.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<conio.h>
void main()
{
int arr[] = { 1, 98, 17, 10 };
int *pointer;
pointer = &arr[0];
for (int i = 0; i<4; ++i)
{
printf("\n Gia tri cua phan tu thu %d la: %d", i+1, *(pointer++));
}
printf("\n--------------------------------\n");
for (int i = 0; i<4; ++i)
{
printf("\n Dia chi cua phan tu thu %d la : %d",i+1,  (pointer++) );
}
_getch();
}
VD 3: con trỏ với hàm
code:
// con_tro_ham.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<malloc.h>
#include<conio.h>
void in_put(int *a, int n)
{
int i;
for (i = 0; i< n; i++)
{
printf("\n Nhap phan tu a[%d]= ", i + 1);
scanf_s("%d", (a + i));
}
}
void out_put(int *a, int n)
{
printf("\n Cac phan tu mang vua nhap :");
for (int i = 0; i<n; i++)
printf("%d ", *(a + i));
}
void main()
{
int *a, n;
printf("\n Nhap so phan tu cua mang : ");
scanf_s("%d", &n);
a = (int *)malloc(n*sizeof(int));
in_put(a, n);
    out_put(a, n);
_getch();
}



VD 4: con trỏ với cấu trúc


Thứ Bảy, 14 tháng 12, 2013

Mảng trong C

Posted by Unknown Thứ Bảy, tháng 12 14, 2013, under | No comments

I. Mảng ( array ):
Là tập hợp gồm các phần tử, mỗi phần tử thì có chỉ số riêng để xác định vị trí của phần tử đó . Chỉ số phần tử là số tự nhiên  ( N), chỉ số đầu tiên là 0 .
Mảng có 2 loại :
 . Mảng một chiều : biểu diễn tập hợp ,có 1 chỉ số ( một dòng ) :0-> n, n là số tự nhiên.
 VD : a[0]= 11. a[1]= 1 , ...
 . Mảng nhiều chiều : biểu diễn tập hợp, có 2 chỉ số ( dòng, cột) : 0 ->n, n là số tự nhiên .
 VD: a[0][0] =2, a[1][2]= 5, ...
Cách khai báo mảng:
Mảng một chiều : kiểu_dữ_liệu  tên_mảng[số_phần_tử];
VD: khai báo mảng số nguyên a có 10 phần tử : int a[10]; và phần tử thứ 5 có giá trị bằng 67 : a[4]=67 ( vì phần tử thứ nhất có chỉ số bằng 0, nên phần tử thứ 5 có chỉ số bằng 4 ).
Mảng nhiều chiều : kiểu_dữ_liệu  tên_mảng[số_phần_tử_cột][số_phần_tử_dòng];
VD: khai báo mảng số nguyên a có 5 phần tử cột ( 5 cột ), 4 phần tử ở dòng ( 4 dòng) : int a[5][4]; và phần tử thứ 5 có giá trị bằng 67 : a[4][0]=67 ( vì phần tử thứ nhất có chỉ số cột bằng 0 chỉ số dòng bằng 0 : a[0][0] , nên phần tử thứ 5 có chỉ số bằng [4][0] ).
   *Mảng một chiều là biểu diễn tập hợp trong Toán học.
   *Mảng nhiều chiều là biểu diễn ma trận trong Toán học.

II. Hàm (function):
Hàm là một khối lệnh được thực hiện khi nó được gọi từ một điểm khác của chương trình. Dạng thức của nó như sau:
type name ( argument1 , argument2 , ...) statement
trong đó:type là kiểu dữ liệu được trả về của hàm name là tên gọi của hàm.arguments là các tham số (có nhiều bao nhiêu cũng được tuỳ theo nhu cầu). Một tham số bao gồm tên kiểu dữ liệu sau đó là tên của tham số giống như khi khai báo biến (ví dụ int x) và đóng vai trò bên trong hàm như bất kì biến nào khác. Chúng dùng để truyền tham số cho hàm khi nó được gọi. Các tham số khác nhau được ngăn cách bởi các dấu phẩy.statement là thân của hàm. Nó có thể là một lệnh đơn hay một khối lệnh..
VD : hàm cộng hai số nguyên
int cong_hai_so_nguyen( int a, int b)
{
int S; // tong hai so nguyen
S=a+b;
return(S);
}
* Bất kỳ chương trình nào dù nhỏ hay lớn đều có  một hàm là "void main () ".

III. Bài tập áp dụng :

Bài tập 1:  Viết chương trình nhập xuất mảng một chiều, thêm, xóa, sửa phần tử ( dùng hàm ).
code :
// mang_mot_chieu.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <windows.h>
#define size 50
//HAM NHAP MANG
void NhapMang(int arr[], int n)
{
for (int i = 0; i<n; i++)
{
printf("\n Nhap phan tu : arr[%d] = ", i);
scanf_s("%d", &arr[i]);
}
}
//HAM XUAT MANG
void XuatMang(int arr[], int n)
{
for (int i = 0; i<n; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
//HAM THEM 1 PHAN TU VAO MANG
void Them(int arr[], int &n)
{
int vitri, giatri;
do
{
printf("\n Nhap vi tri can them: \n");
scanf_s("%d", &vitri);
} while (vitri<1 || vitri>n);
printf("\n Nhap phan tu can them : arr[%d] = ", vitri);
scanf_s("%d", &giatri);
for (int i = n; i>vitri; i--)
{
arr[i] = arr[i - 1];
}
arr[vitri] = giatri;
n++;
}
//HAM XOA 1 PHAN TU KHOI MANG
void Xoa(int arr[], int &n)
{
int vitri;
do
{
printf("\n Nhap vi tri muon xoa: ");
scanf_s("%d", &vitri);
} while (vitri<1 || vitri>n);
for (int i = vitri; i<n - 1; i++)
{
arr[i] = arr[i + 1];
}
n--;
}
//HAM SUA 1 PHAN TU TRONG MANG
void Sua(int arr[], int n)
{
int vitri;
do
{
printf("\n Nhap vi tri muon sua: ");
scanf_s("%d", &vitri);
} while (vitri<1 || vitri>n);
printf("\n Nhap phan tu can sua : arr[%d] = ", vitri);
scanf_s("%d", &arr[vitri - 1]);
}
void main()
{
printf("\t Bai tap Mang 1 chieu \n");
printf("\t -------------------- \n");
//Khai bao
int arr[size];
int n, dem = 0, tong = 0;
//Nhap du lieu
do
{
printf("\n Nhap so phan tu cua mang: ");
scanf_s("%d", &n);
} while (n <= 0 || n>size);
NhapMang(arr, n);
//Xu ly & xuat du lieu
printf("\n Mang nhap vao la:");
XuatMang(arr, n);
printf("\n Cac phan tu co gia tri chan:");
for (int i = 0; i<n; i++)
{
if (arr[i] % 2 == 0)
{
printf("%d ", arr[i]);
dem++;
tong += arr[i];
}
}
printf("\n");
printf("\n  Co %d phan tu chan trong mang\n", dem);
printf("\n Tong cac phan tu chan la: %d\n", tong);
Them(arr, n);
printf("\n Mang sau khi them vao la: \n");
XuatMang(arr, n);
Xoa(arr, n);
printf("\n Mang sau khi xoa la: \n");
XuatMang(arr, n);
Sua(arr, n);
printf("\n Mang sau khi sua la: \n");
XuatMang(arr, n);
printf("\t--------------------\n");
_getch();
}








Xem Nhiều

Bài đăng phổ biến

Lưu trữ blog

Blog Archive