chứa nghiệm x1,x2.
Hướng dẫn: định nghĩa hàm với 2 biến con trỏ x1,x2 nhận giá trị trả về của nghiệm. void ptbac2(float a, float b, float c, float *x1,float *x2);
BÀI THỰC HÀNH SỐ 4
(Chương V: DỮ LIỆU KIỂUMẢNG)
1) Viết chương trình nhập vào một mảng các số thực từ bàn phím. Hãy viết chương trình định nghĩa hàm tính số lớn nhất của 2 số thực và sử dụng hàm này để tìm số lớn nhất trong mảng nói trên.
Hướng dẫn: xây dựng hàm tìm số lớn nhất của 2 số thực. Nhập vào mảng rồi gọi hàm vừa định nghĩa.
float max_xy(float x,float y) { return x>y?x:y; } void main() { float m[100],max; int n;
printf(“Nhap vao so phan tu n cua mang : “);scanf(“%d”,&n); for(int i=1;i<=n;i++) scanf(“%f”,&m[i]); max=m[1]; for(i=2;i<=n;i++) max=max_xy(max,m[i]); }
2) Viết chương trình trongđó có các hàm: Nhập dãy số, kiểm tra dãy số tăng dần, chèn một số vào vị trí thích hợp trong dãy tăng dần. Trong hàm main() yêu cầu nhập dãy số và một số. Kiểm tra nếu dãy số tăng dần thì chèn số vào vị trí thích hợp trong dãy.
//hàm nhập vào một mảng với số phần tử là n void nhap(int n,float a[])
{ for(int i=1;i<=n;i++) for(int i=1;i<=n;i++) { printf(“a[%d]= “,i); scanf(“%f”,&a[i]); } } //hàm xuất mảng void xuat(int n,float a[]) {
for(int i=1;i<=n;i++) printf(“%.1f “,a[i]); }
//hàm kiểm tra một mảng có tăng dần hay không? Nếu tăng dần thì trả về ‘C’ (có), ngược lại //trả về ‘K’ (không)
char ktra_tangdan(float a[]) { for(int i=1;i<n;i++) for(int j=i+1;j<=n;j++) if(a[j]<a[i]) break; if(j<=n) return ‘K’; else return ‘C’; }
//hàm chèn một số vào vị trí thích hợp: chỉ cho biết số cần chèn, và chính số đó sẽ quyết định vị trí chèn trong mảng tăng dần.
void chen(float x,float a[]) {
int vt=1;
while(vt<=n && a[vt]<=x) vt++; for(int j=n;j>=vt;j--) a[j+1]=a[j]; a[vt]=x; } void main() { float a[100],x; int n; clrscr();
printf(“Nhap vao so phan tu n cua mang : “);scanf(“%d”,&n); nhap(n,a);
xuat(n,a);
if(ktra_tangdan(a)==’C’) printf(“\nMang tang dan!!!”); else
printf(“\nMang khong tang dan!!!”);
printf(“\nNhap vao mot so can chen x= “);scanf(“%f”,&x); chen(x,a);
xuat(n+1,a); }
3) Viết chương trình trongđó có các hàm: Nhập ma trận, In ma trận, Cộng hai ma trận, Nhân hai ma trận. Trong hàm main() yêu cầu nhập hai ma trận A nxn, B nxn , In ra màn hình ma trận A, ma trận B , ma trận tổng, ma trận tích.
void tong_matran(float A[n][n],float B[n][n],float T[n][n]) {
for(int i=1;i<=n;i++) for(int j=1;j<=n;j++)
T[i][j]=A[i][j]+B[i][j]; }
void tich+matran(float A[n][n],float B[n][n],float Ti[n][n]) { for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { float sohang=0; for(int k=1;k<=n;k++) sohang=sohang+A[i][k]*B[k][j]; Ti[i][j]=sohang; } }
BÀI THỰC HÀNH SỐ 4
(Chương VI: DỮ LIỆU KIỂU XÂU KÍ TỰ)
Đối với kiểu dữ liệu xâu ký tự, việc sử dụng thành thạo các hàm thuộc thư viện string.h được xây dựng sẵn trong các phần mềm C là rất cần thiết.
Vào Help chọn Index gõ cụm từ string.h, rồi ấn Enter.
Sau đó click chọn một hàm nào đó cần xem (cấu trúc hàm và cách sử dụng hàm) vàấn Enter. Một màn hình mới sẽ hiện ra cho bằng tiếng Anh mô tả về hàm. Tuy nhiên, đa số sinh viên ngại đọc tiếng Anh, nên có thể hiểu được ý nghĩa và công dụng của hàm bằng cách kéo thanh công cụ xuống dưới đến khi nào gặp mục Example như hình sau:
Sau đó, copy cả đoạn chương trình ví dụ ở trên vào cửa sổ soạn thảo của C và ấn Ctrl-F9 để chạy chương trình. Đến lúc này, với các giá trị nhập vào và kết quả xuất ra màn hình sẽ phần nào giúp chúng ta hiểu được chức năng – công dụng của hàm một cách nhanh nhất.
Việc cấp phát bộ nhớ cho các biến kiểu xâu ký tự trong ngôn ngữ C:
Cách thứ nhất: khai báo theo mảng
char bien[chiều_dài_tối_đa];
lúc này, bộ nhớ sẽ cấp số bytes cho biến bien là chiều_dài_tối_đa + 1 (bytes) để lưu trữ nội dung của chuỗibien, trong đó byte cuối cùng lưu trữ ký tự ‘\0’ để báo hiệu chấm dứt chuỗi ký tự
Cách thứ hai: khai báo theo con trỏ
char *bien;
với khai báo này, trước tiên bộ nhớ cấp phát 2bytes dùng để lưu trữ địa chỉ của biếnbien (và chưa cung cấp nơi để lưu trữ dữ liệu của biến bien này). Lúc này, muốn có chỗ để lưu trữ thì phải sử dụng hàm malloc() hoặc calloc() thuộc thư viện “allloc.h”.
Lưu ý:
Mỗi kí tự của xâu được chứa trong một phần tử của mảng. Để làm việc với phần tử của
xâu kí tự ta gọi qua tên xâu kí tự và chỉ số nó trong xâu theo cú pháp: Tênxâukítự[chỉ
số]; chỉ số này có thể chạy từ 0 tới độ dài cực đại của xâu kí tự. Nếu vị trí đó nằm ngoài
độ dài thực của xâu kí tự thì phần tử đó của xâu kí tự không có gía trị xác định Vì vậy
khi làm việc với xâu ta phải biết được độ dài của xâu bằng cách dùng hàm strlen(xâu).
Vì xâu kí tự là một mảng nên C không cho phép gán hay cộng … các xâu ký tự. Để thực
hiện việc này ta dùng các hàm thuộc thư viện string.h như strcopy,strcat… hoặc gán giá trị ngay trong lúc khai báo.
Một số hàm xử lý chuỗi (xâu) ký tự thông dụng trong thư viện string.h
1) Hàm strcpy()– để sao chép toàn bộ nội dung của chuỗi nguồn vào chuỗi đích
char *strcpy(char *Des,const char *Source)
Ví dụ: char hoten[30];
strcpy(hoten,”Nguyen Van A”); //gán cho biến hoten xâu ký tự “Nguyen Van A” //không được gán: hoten=”Nguyen Van A”;
Lưu ý: không được sử dụng phép gán chuỗi ký tự như hoten=”Nguyen Van A” sau khi đã có dòng khai báo char hoten[30]; mà chỉ có thể vừa khai báo vừa gán giá trị như sau:
char hoten[30]=”Nguyen Van A”;