V. CÁC BÀI TẬP MINH HỌA Bài
4. BÀI TẬP MINH HOẠ Bài
Bài 1
Viết hàm đệ qui để tính tổng sau: S=1+2+3+...+n /*Chương tình tính tổng S bằng hàm đệ qui*/ #include<stdio.h> int tongs(int n); main() { int n;
printf("Nhap vao so n de tinh tong: "); scanf("%d",&n);
/*In ra ket qua */
printf("\ntong S:=%d",tongs(n)); } int tongs(int n) { if (n==1) return 1; else return n+tong(n-1); } Bài 2
/*Chương trình minh họa tìm ước số chung lớn nhất bằng phương pháp đệ qui*/ #inclde<stdio.h>
int uscln(int n,int m) void main()
{
int so1,so2;
printf("Nhap so thu nhat:\n"); scanf("%d",&so1); printf("Nhap so thu hai :\n"); scanf("%d",&so2); printf("USCLN la %d",uscln(so1,so2));
return; }
{ int r; r=n-m; if (r==0) return m; else return uscln(m,r); } Bài 3
/*Chương trình dùng kỹ thuật đệ qui để in ra số theo thứ tự ngược */ #inclde<stdio.h>
void daochuso(unsigned so); void main()
{
unsigned so;
printf("Nhap vao mot so duong:"); scanf("%u",&so); daochso(so);
return; }
void daochuso(unsigned so) { printf("%u",so%10); if (so/10==0) return; else return daochuso(so/10); }
VI. CÁC BÀI TẬP MINH HỌABài 1 Bài 1
/*Chương trình minh họa cách tạo, mở một file và nhập một kí tự vào file */ #include <stdio.h>
main() {
FILE *file_pointer; /* Ðây là con trỏ file. */ /* Khởi tạo tập tin myfile.dta và gán địa chỉ của nó đến con trỏ File file_pointer: */
file_pointer = fopen("MYFILE.DTA","w"); /* Nhập một kí tự vào flie đã mở: */
putc('C', file_pointer); /* Ðóng File vừa tạo. */ fclose(file_pointer); }
Bài 2
/*Chương trình minh họa cách mở một File đã tồn tại trên đĩa để đọc*/ #include <stdio.h>
{
FILE *file_pointer; /* Ðây là con trỏ File. */ Char file_character; /* Kí tự được đọc từ file. */
/* Mở file đang tồn tại (myfile.dta) và gán địa chỉ của nó đến con trỏ file file_pointer: */ file_pointer = fopen("MYFILE.DTA","r");
/* Nhập kí tự đầu tiên từ file đã mở: */ file_character = getc(file_pointer); /* Xuất kí tự lên màn hình. */ printf("Kí tự là %c\n", file_character); /* Ðóng file đã tạo. */ fclose(file_pointer); } Bài 3
/*Chương trình minh họa cách nhập một chuỗi kí tự? vào file*/ #include <stdio.h>
main() {
FILE *file_pointer; /*Ðây là con trỏ File. */ char file_character; /* Kí tự được đọc từ file. */
/* Tạo file myfile.dta và gán địa chỉ của nó đến con trỏ file_pointer: */ file_pointer = fopen("MYFILE.DTA","w");
/* Nhập một chuỗi dữ liệu vào file đã mở : */ while((file_character = getche()) != '\r')
file_character = putc(file_character, file_pointer); /* Ðóng file vừa tạo. */
fclose(file_pointer); }
Bài 4
/* Chương trình minh họa cách đọc một chuỗi kí tự từ file đã tồn tại trên đĩa*/ #include <stdio.h>
main() {
FILE *file_pointer; /* Ðây là con trỏ File. */ char file_character; /* kí tự được đọc từ file. */
/* Mở file đang tồn tại (myfile.dta) và gán địa chỉ của nó đến con trỏ file file_pointer: */ file_pointer = fopen("MYFILE.DTA","r");
while((file_character = getc(file_pointer)) != EOF) printf("%c", file_character); /* Ðóng file đã tạo. */ fclose(file_pointer); } Bài 5
/*Chương trình? Sao chép hai tập tin:*/ #include <stdio.h>
#include <conio.h> main(int n,char *parm[]) { FILE *f1,*f2; char c; clrscr(); if (n!=3) exit(); ? f1=fopen(parm[1],"rt");
if (f1==NULL) { printf("Khong co file %s tren dia ",parm[1]); exit();} ? f2=fopen(parm[2],"wt");
if (f2==NULL)
{ printf("Duong dan khong hop le? %s tren dia ",parm[2]); exit();} while (!feof(f1)) { c=fgetc(f1); ? fputc(c,f2); } fclose(f1); fclose(f2); getch(); } Bài 6
/*Chương trình tổng quát minh họa cách khởi tạo, nhập, xuất dữ liệu trên file */ #include <stdio.h>
main() {
char selection[2]; /* Chọn lựa. */ char file_name[13]; /* Tên file. */
char user_choice[2]; /* Chọn chế độ kích hoạt. */ int selection_value; /*? Chọn giá trị. */
int file_character; /* Kí tự File được lưu. */ FILE *file_pointer; /* Con trỏ File. */ /* Hiện thị các mục chọn. */
printf("Chọn một trong các mục sau:\n");
printf("1] Tạo một File mới. 2] Viết đè lên một file đã tồn tại.\n"); printf("3] Cộng thêm dữ liệu mới đến file đã tồn tại.\n");
printf("4] Nhập dữ liệu từ file đang tồn tại.\n"); /* Nhập các giá trị. */
do { printf("Lựa chọn của bạn => "); gets(user_choice); selection_value = atoi(user_choice); switch(selection_value) {
case 1 : /* Tạo một file mới. */
case 2? : strcpy(selection, "w"); /* Viết chồng lên dữ liệu đã có. */ break;
case 3? : strcpy(selection, "a"); /* Cập nhập dữ liệu đến file đang tồn tại. */ break;
case 4 : strcpy(selection, "r"); /* Nhập dữ liệu từ file đang tồn tại.*/ break;
default : {
printf("Ðiều này không được chọn.\n"); selection_value = 0;
} }
} while(selection_value == 0); /* Nhập file từ người sử dụng. */ printf("Nhập tên của file => ");
gets(file_name);
/* Mở file để vận hành. */
if((file_pointer = fopen(file_name, selection)) == NULL) {
printf("Khong the mo duoc file %s!", file_name); exit(-1);
}
/* Viết hoặc đọc từ file. */ switch(selection_value) {
case 1 : break; case 2 : case 3 : {
printf("Vào chuỗi để lưu: \n");
while((file_character = getche()) != '\r')
file_character = putc(file_character, file_pointer); }
break; case 4 : {
while((file_character = getc(file_pointer)) != EOF) printf("%c", file_character);
} break; }
fclose(file_pointer); }
Bài 7
/*Chương trình minh họa con trỏ file và kiểu cấu trúc*/ #include <stdio.h>
typedef struct {
char part_name[15]; /* Tên. */ int quantity; /* Số lượng. */ float cost_each; /* Ðơn giá. */ } parts_structure;
main() {
parts_structure parts_data; /* biến cấu trúc. */ FILE *file_pointer; /* Con trỏ File. */
/* Mở một file để viết. */
file_pointer = fopen("B:PARTS.DTA","wb"); /*Nhập dữ liệu bởi người sử dụng chương trình. */ do { printf("\nName of part => "); gets(parts_data.part_name); printf("Number of parts => "); scanf("%d", &parts_data.quantity); printf("Cost per part => ");
scanf("%f", &parts_data.cost_each); /* Viết cấu trúc đến file đâ mở. */
fwrite(&parts_data, sizeof(parts_data), 1, file_pointer); /* Thực hiện lặp cho nhiều lần nhập. */
printf("Add more parts (y/n) => "); } while (getche() == 'y');
/* Ðóng file. */ fclose(file_pointer); }
Bài 8
/*Chương trình sau đây liệt kê tên các tập tin có trong một thư mục và trong tất cả các thư mục con của nó.*/
#include <conio.h> #include <dir.h> #include <dos.h> char bs[]="\\*.*",name[50],ext[3]; # define attr\ (FA_RDONLY|FA_HIDDEN|FA_SYSTEM|FA_LABEL|FA_DIREC|FA_ARCH) int sf,nn;
void scandir(char *dir); main()
{
struct ffblk *ff; char dirname[50]; clrscr();
printf("Ten thu muc muon xem : "); gets(dirname);
scandir(dirname); getch();
clrscr(); }
void scandir(char *dir) { char d1[80],d2[80]; int first=1,s; struct ffblk f; sprintf(d1,"%s%s",dir,bs); printf("\n\n%s",d1); getch(); while (1) { if (first) { s=findfirst(d1,&f,attr); first=0; } else s=findnext(&f); if (s!=0) return; if(f.ff_name[0]=='.') continue; if (f.ff_attrib==FA_DIREC) { sprintf(d2,"%s\\%s",dir,f.ff_name); scandir(d2); } else { ++sf; printf("\n%15s %15d %10d ",f.ff_name,f.ff_fdate,f.ff_ftime); if (sf%20==0)
{ printf("\nBam enter xem tiep "); getch();
} } } }