Chủ Nhật, 4 tháng 1, 2015

KIỂU CẤU TRÚC struct TRONG NGÔN NGỮ LẬP TRÌNH C

KIỂU CẤU TRÚC TRONG NGÔN NGỮ LẬP TRÌNH C

kiểu cấu trúc là dạng dữ liệu thường được định nghĩa để mô tả dữ liệu trong lập trình c có nhiều thành thược nhiều kiểu dữ liệu khác nhau
kiểu dữ liệu thành phần cso thể là cá kiêu dữ liệu cơ bản, thậm chí là cấu trúc, mảng,...
kiểu cấu trúc được định nghĩa thông qua từ kháo struct
cú pháp:
struct <tên cấu trúc>
{
danh sách các thành phần và kiểu dữ liệu cảu chúng
};
có thể dặt lại tên hoặc là làm cho tên ngắn gọn la dùng thêm từ khóa định nghĩa typedef
ví dụ:
typedef struct hocsinh
{
char ten[20];
int *namhoc;
} hs;
các thao tác như mảng, con trỏ,hàm trên biến cấu trúc hoàn toàn giống như biến thông thường
để truy xuất đến 1 phần tử của cấu trúc ta dùng toán tử chấm "." và dùng toán tử "->" đối với thành phần và biến con trỏ.
ví dụ:
hs ok;
ok.ten="Tran khanh toan";
ok->namhoc = 2015;
không nên dùng toán tử & đối thành phần cấu trúc
ví dụ:
struct hocvien
{
char ten[20];
int *diem;
};
hociven hv;
hocvien *hv2;
truy xuất như sau:
hv.ten="Tran Khanh Toan";
hv->diem = 8;
hv2[1].ten = "Tran Khanh Toan";
hv2[2]->diem = 9;
ví dụ minh họa:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>

typedef struct tagHOCSINH
{
char sHoTen[50];
float fVan, fToan;
float fDTB;
}HOCSINH, *PTR_HOCSINH;

void NhapHS(PTR_HOCSINH phs, int stt);
void XuatHS(HOCSINH hs, int stt);
void main()
{
int i, nSoHS;
PTR_HOCSINH pDSHS;
printf("So luong hoc sinh: ");
scanf_s("%d", &nSoHS);
pDSHS = (PTR_HOCSINH)calloc(nSoHS, sizeof(HOCSINH));
if (pDSHS == NULL) return;
for (i = 0; i<nSoHS; i++)
NhapHS(&pDSHS[i], i);
for (i = 0; i<nSoHS; i++)
XuatHS(pDSHS[i], i);
if (pDSHS) free(pDSHS);
_getch();
}
void NhapHS(PTR_HOCSINH phs, int stt)
{
char hoten[50];
float van, toan;
_flushall();
printf("\nHoc sinh thu %d:", stt + 1);
printf("\nHo Ten: ");
gets_s(hoten);
printf("Diem van: ");
scanf_s("%f", &van);
printf("Diem toan: ");
scanf_s("%f", &toan);
strcpy_s(phs->sHoTen, hoten);
phs->fVan = van;
phs->fToan = toan;
phs->fDTB = (float)(van + toan) / 2;
}
void XuatHS(HOCSINH hs, int stt)
{
printf("\n\nHoc sinh thu %d: %s",
stt + 1, hs.sHoTen);
printf("\nVan %.1f, Toan %.1f. DTB %.1f",
hs.fVan, hs.fToan, hs.fDTB);
}

Thứ Tư, 31 tháng 12, 2014

hàm malloc cập phát bộ nhớ động

hàm malloc, alloc,  realloc, free, cấp phát và giải phóng bộ nhớ động trong lập trình c

  1. biến động được tạ ra khi chạy chương trình. thông qua con trỏ bộ nhớ được cấp phát và quản lý
  2. các thao tác trên bộ nhớ và con trỏ nằm trong thư viện stdlib.halloc.h
  3. các hàm cấp phát và giai phóng bộ nhớ: maaloc, alloc, realloc, free
  4.  chứa năng của hàm malloc là cấ phát 1 vùng nhớ có kích thowcs size
    ví dụ: int *p;
    p=(int *)malloc(100);
    p=(int *)malloc(80*sizeof(int));
  5. hàm free dùng để giải phóng bộ nhớ đã cấp phát.
    free(p);
  6. ví dụ:
    #include<stdio.h>
    #include<conio.h>
    #include<stdlib.h>
    #include<string.h>
    void mian()
    {
    char *s;
    s=(char*)malloc(10);
    strcpy(s,"HELLO");
    puts(s);
    free(s);
    }
  7. hàm calloc cấp phát bộ nhớ nitems*size byte
    void *calloc(size_t nitems,size byte);
  8. hàm realloc điêuchỉnh lai kích thước đã cấp phát là block size byte
    void *realloc(void *block,sizebyte);
  9. khởi tạo mảng cấp phát động
    int *a=(int *)malloc(n*sizeof(int)):
    int *a=(int*)calloc(n,sizeof(int));
  10. kiểm tra cấp phát thành công
    if(a!=NULL)
    {
    //làm việc với mảng
    free(a);//giai phóng
    }
  11. cấp phât động mảng 2 chiều
    int **a=(int**)malloc(hàng*sizeof(int*));
    for(int i=0;i<n;i++)
    a[i]=(int*)malloc(cột*sizeof(int));


KIỂU FILE TRONG LẬP TRÌNH C

KIỂU FILE TRONG LẬP TRÌNH C
file là 1 tập hợp thông tin được lưu dưới 1 cái tên chung *.txt, *.exe
khai báo: file *tên biến; ở đây là biến con trỏ
file *open(char *tên file,char *kiểu mở);
kiểu mở là 1 trong các chuổi sau đây:
"rb":read only
"wb":write
"ab":thêm vào cuối file
"r+b":đọc và ghi
"w+b":tạo file mới để ghi và đọc
"a+b":mowrvaf thêm vào cuối file
ví dụ:
f=open("t1.txt","w+b");
đóng tập tin fclose(f);
fcloseall(f);
kiểm tra đọc đến cuối file chưa.
dùng hàm:
feof(f)=0 nếu chưa và  =1 nếu đã hết;
đọc ghi số nguyên lên file
putw(k,f);//ghi số nguyên k lên file file f
getw(f);trả về 1 số nguyên đọc được từ file f
đọc ghi 1 mẫu tin lên file
fread(*p,int size,int n,f);//đọc n mẫu tin có kích thước size, kết quả lưu vào biến con trỏ p
ví dụ:
int k;
fread(&k,2,1,f);
if(!feof(f)) printf("k=%d",k);
fwrite(*p,int size,n,f);//ghi n mẫu tin có kích thước size từ địa chỉ p lên file f
di chuyển con trỏ định vị nội dung file
rewind(f);//về đầu tập tin
fseek(f,k,vtri);
vtri:(nơi xuất phát) cụ thể là:
seek_set(hay 0):từ đầu file
seek_cur(hay 1):từ vị trí hiện tại
seek_end(hay 2):cuối file
ý nghĩa: 
dời con trỏ định vị nội dung đi k bytetinhs từ vtri
k>0:hướng di chuyển về cuối tập tin
k<0:hướng di chuyển về đầu tập tin
ftell(f): trả về vị số thứ tự byte nơi con trỏ đang đứng
áp dụng tính số phần tử của file
fseek(f,0,seek_end);
long n=ftell(f);

Chủ Nhật, 28 tháng 12, 2014

sắp xếp chẵn trước, lẻ sau và tăng dần - bài tập c


//sắp xếp các phần tử của mảng sao cho các phần tử chẵn đứng trước, các phần tử lẻ đúng sau đông thời cũng sắp xếp tăng dần
#include<stdio.h>
#include<conio.h>
int a[10] = { 1, 5, 4, 8, 2, 9, 8, 6, 3, 9 };
int n = 10;
void sapxep(int a[], int n)
{
int i, j;
for (i = 0; i < n - 1;i++)
for (j = i + 1; j < n;j++)
if ((a[i] % 2 != 0 && a[j] % 2 == 0) 
|| (a[i] % 2 == 0 && a[j] % 2 == 0 && a[i]>a[j]) 
|| (a[i] % 2 != 0 && a[j] % 2 != 0 && a[i]>a[j]))
{
int t = a[i];
a[i] = a[j];
a[j] = t;
}
}
void xuatmang(int a[], int n)
{
for (int i = 0; i < n; i++) printf(" %d ", a[i]);
}
void main()
{
sapxep(a, n);
xuatmang(a, n);
printf("\n");
}

viết hàm tính sin(x) - bài tập lập trình c


//viết hàm tính sin(x)
#include<stdio.h>
#include<conio.h>
#include<math.h>
double sin(double x)
{
double ps = x, i = 1, tong = x,dau=-1;
while (fabs(ps) > 0.00001)
{
ps = ps*x*x / ((i + 1)*(i + 2));
tong += dau*ps;
dau = -dau;
}
return tong;
}
void main()
{
double x;
printf("x="); scanf_s("%lf", &x);
printf("%lf\n", sin(x));
}

Bài đăng phổ biến