You are on page 1of 197

CHNG 1 CC THAO TC VO RA C BN V CC CU LNH C CU TRC 1.1.

CU HI
1. Cho bit s cc bc lp nh nht ca cu lnh while v lnh do...while? 2. Gi s s l mt cu lnh c cu trc v e1, e2, e3 l cc biu thc, c s khc nhau g gia on m: for (e1;e2;e3) s; v on m: e1; while (e2) { e; e3; } 2. Cho bit gi tr ca x sau khi thc hin cu lnh sau: for (x = 0; x < 100, x++) ; 3. Cho bit gi tr ca x sau khi thc hin cu lnh sau: for (ctr = 2; ctr < 10; ctr += 3) ; 5. C bao nhiu k t X c in ra sau khi thc hin on m: for (x = 0; x < 10; x++) for (y = 5; y > 0; y--) puts("X"); 6. Cho bit im sai trong on m sau: record = 0; while (record < 100) { printf( "\nRecord %d ", record ); printf( "\nGetting next number..." ); } 7. Cho bit im sai trong on m sau: for (counter = 1; counter < 10; counter++); printf("\nCounter = %d", counter ); 8. S khc nhau gia lnh break v lnh continue l g? 9. Vng lp v hn l g? lm th no to n? 1

10. Hai s kin g lm kt thc vic chy chng trnh? 11. Hm exit() dng lm g? 12. Cu lnh lm cho iu khin chng trnh chuyn n bc lp k tip trong mt lnh lp. 13. Cu lnh chuyn iu khin chng trnh n cui vng lp. 14. C im g sai trong on m sau? switch( answer ) { case 'Y': printf("You answered yes"); break; case 'N': printf( "You answered no"); } 15. C im g sai trong on m sau? switch( choice ) { default: printf("You did not choose 1 or 2"); case 1: printf("You answered 1"); break; case 2: printf( "You answered 2"); break; } 16. Vit li cu trn bng cch dng lnh if. 17. Vit mt vng lp v hn do...while. TR LI: 1. S vng lp nh nht ca lnh while c th thc hin l 0 v s vng lp nh nht ca lnh do...while c th thc hin l 1. 2. Khng c s khc nhau gia hai on m tr khi s cha cu lnh continue. V d cu lnh for sau y s lp 4 ln v kt thc nhng cu lnh while s lp v hn: for (i = 0; i<4; i++) if (i = =2) continue; i = 0; while (i<4) { if (i = = 2) continue; i++; } 2

3. x = 100. 4. ctr = 11. 5. 50 k t X. 6. Chng trnh khng bao gi dng 7. Du ; khng th t cui lnh for 8. Khi gp lnh break, vic x l s lp tc thot khi lnh for, do...while hoc while chc lnh break. Khi gp lnh continue th bc lp k tip ca vng lp s thc hin ngay. 9. Vng lp v hn thc thi vnh vin. C th to ra vng lp v hn bi cc cu lnh for, do...while, hoc while vi iu kin kim tra lun ng 10. Vic thc thi chng trnh s kt thc khi t n cui hm main() hoc khi hm exit() c gi. 11. Hm exit() lm kt thc chng trnh. Mt gi tr phi c truyn cho hm exit(). Gi tr ny c tr v cho h iu hnh. 12. continue; 13. break; 14. Khng c g sai. 15. Thiu cu lnh break sau trng hp default. 16. if( choice == 1 ) printf("You answered 1"); else if( choice == 2 ) printf( "You answered 2"); else printf( "You did not choose 1 or 2"); 17. do { /* cc cu lnh */ } while ( 1 );

1.2. BI TP
Bi 1. Vit chng trnh nhp d liu cho cc bin kiu int, long int, float, chui, sau hin th ra mn hnh. #include <stdio.h> #include <conio.h> void main() 3

{ int a; long int b; float x; char st[10]; printf("\n Vao du lieu tu ban phim "); printf("\n a = "); scanf("%d",&a); printf("\n b = "); scanf("%ld",&b); printf("\n x = "); scanf("%f",&x); printf("\n Nhap vao mot chuoi :");scanf("%s",st); printf("\n a :%10d\n b :%10ld\n x :%10.2f",a,b,x); printf("\n Chuoi da nhap :%s",st); getch(); } Bi 2. Vit chng trnh minh ha vic khai bo v khi gn cc bin. #include<stdio.h> #include<conio.h> void main() { int a = 20 ; /* Khai bao va khoi dau cac bien */ int b = 15; float x = 25.678; clrscr(); printf("\n1:%d %f\n",a,x); printf("2:%4d %10f\n",b,x); printf("3:%2d %3f\n",a,x); printf("4:%10.3f %10d\n",x,b); printf("5:%-5d %f\n",a,x); printf("6:%*d\n",b,b); printf("7:%*.*f\n",12,5,x); printf("8:%x :%8x :\n",a,a); printf("9:%o :%8o :\n",a,a); getch(); } Bi 3. Cho bit kt qu ca chng trnh sau y: #include<stdio.h> #include<conio.h> 4

void main() { int m = 3,p = 5; int a1,a2,a3,a4,a5; float x1,x2,x3,x4; clrscr(); printf("\n Tim gia tri gan cho cac bien "); a1 = m<p; a2 = m == p; a3 = p%m + p>m; a4 = m*(p>m ? m:p); a5 = m*(p<m ? p:p); x1 = p/m; x2 = (float)p/m; x3 = (p +0.5)/m; x4 = (int)(p+0.5)/m; printf("\n printf("\n printf("\n printf("\n printf("\n printf("\n printf("\n printf("\n printf("\n getch(); } a1 a2 a3 a4 a5 x1 x2 x3 x4 = = = = = = = = = %d ",a1); %d ",a2); %d ",a3); %d ",a4); %d ",a5); %10.3f ",x1); %10.3f ",x2); %10.3f ",x3); %10.3f ",x4);

Bi 4. Cho bit kt qu ca chng trnh sau y: #include <stdio.h> #include <conio.h> void main() { int a = 10, b = 5,c = 10, d; clrscr(); printf("\n Minh hoa phep toan tang giam \n"); d=a== (b=c); 5

printf(" A :a =%d a=b=c=5; a+=b+=c; printf(" B :a =%d c=a<b?a++ :b++; printf(" C :a =%d c=a>b?a++ :b++; printf(" D :a =%d getch(); }

b =%d c =%d d =%d\n",a,b,c,d);

b =%d c =%d \n",a,b,c); b =%d c =%d \n",a,b,c); b =%d c =%d \n",a,b,c);

Bi 5. Cho bit kt qu ca chng trnh sau y: #include<stdio.h> #include<conio.h> void main() { int a,b,c; clrscr(); printf(" \n Chuong trinh minh hoa toan tu logic \n "); a = 5; b = 2; /* Truong hop 1 */ c = (a++ >b ) || ( b++ != 3); printf("A : a = %d b = %d c = %d\n",a,b,c); a = 5; b = 2 ; /* Truong hop 2 */ printf(" B : a = %d b = %d c = %d\n",a,b,c); a = 5; b = 2 ; /* Truong hop 3 */ c = (++a == 3)&&( ++b == 3); printf(" C : a = %d b = %d c = %d\n",a,b,c); a = 5; b = 2; /* Truong hop 4 */ c = (++a == 6)&& ( ++b == 3); printf(" D : a = %d b = %d c = %d\n",a,b,c); getch(); } Bi 6. Vit chng trnh khai bo mt bin kiu int, mt hng h 8 c gi tr 345 v mt hng h 16 c gi tr A9, sau nhp d liu cho bin v hin th ra mn hnh gi tr ca bin h 8, 16 v gi tr ca cc hng h 16. #include <stdio.h> 6

#include <conio.h> void main() { long int i; const j = 0345, k = 0XA9; clrscr(); printf("\nNhap so nguyen he 10 : "); scanf("%d",&i); printf("\n Chuyen sang he 8 la : %o",i); printf("\n Chuyen sang he 16 la : %X",i); printf("\n Hang nguyen he 8 : %7d",j); printf("\n Hang nguyen he 16 : %7d",k); getch(); } Bi 7. Vit chng trnh tm s ln nht v nh nht trong 3 s thc. #include <stdio.h> #include <conio.h> void main() { float x,y,z,max,min; clrscr(); printf("\nNhap vao 3 so "); scanf("%f%f%f",&x,&y,&z); max=(x>y)?x:y; max=(max>z)?max:z; min=(x>y)?y:x; min=(min>z)?z:min; printf("\nSo lon nhat la %f",max); printf("\nSo nho nhat la %f",min); printf("\nDay la 5 tieng chuong !\a\a\a\a\a"); getch(); } Bi 8. Vit chng trnh tm xy #include <stdio.h> #include <math.h> #include <conio.h> void main() 7

{ double x,y,z; /* khai bao 3 bien kieu double*/ clrscr(); printf("- Cho biet gia tri cua X= "); scanf("%lf",&x); printf("- Cho biet gia tri cua Y= "); scanf("%lf",&y); z=pow(x,y); /* Tinh x luy thua y va gan cho z */ /* In ket qua */ clrscr(); printf("KET QUA X LUY THUA Y \n"); printf("X= %8.2f \n",x); printf("Y= %8.2f \n",y); printf("X luy thua y = %8.2f",z); getch(); } Bi 9. Vit chng trnh tnh c = a /b, vi a v b l hai s nguyn, c s thc. Nu ta p kiu a sang thc th kt qu th no? #include <conio.h> #include <iostream.h> #include <iomanip.h> void main() { int a,b; float c; clrscr(); cout<<"\nNhap hai so nguyen a,b: \n "; cin>>a>>b; c=a/b; cout<<"\nThuong cua a va b la :"<<setw(4)<<c<<'\n'; c=float(a)/b; cout<<setiosflags(ios::showpoint)<<setprecision(3); cout<<"\nThuong cua a va b la :"<<c; getch(); } Bi 10. Vit chng trnh tm c = a/b, vi a,b,c nguyn, hin th cc s h 8, 16 v 10. 8

#include <conio.h> #include <iostream.h> void main() { int a,b,c; clrscr(); cout<<"\nNhap hai so nguyen a,b: \n"; cin>>a>>b; c = a/b; //chia nguyen cout<<"\n a/b viet o he 8 : "<< oct<<c; cout<<"\n a/b viet o he 16 : "<<hex<<c; cout<<"\n a/b viet o he thap phan "<<dec<<c; getch(); } Bi 11. Vit chng trnh nhp im thi t bn phm v hin th kt qu : km nu im t 0 n 3; Yu nu im l 4; Trung bnh nu im t 5 n 6; Kh nu im t 7 n 8; Gii nu im t 9 n 10. #include<stdio.h> #include<conio.h> void main() { int diem; clrscr(); printf ("\n Chuong trinh phan loai hoc sinh theo diem "); tt: printf ("\n VAO SO LIEU "); printf("\n diem = "); scanf("%d",&diem); if(( diem >= 0) && (diem <= 3)) printf(" Kem \n"); else if( diem == 4) printf(" Yeu \n"); else if(( diem >= 5) && (diem <= 6)) printf(" Trung binh \n"); else if( diem >= 7 && diem <= 8) printf(" Kha \n"); else if (( diem >= 9) && (diem <= 10)) printf(" Gioi \n"); 9

else printf(" Vao sai \n"); printf("\n tiep tuc 1 / stop scanf(" %d", &diem); if ( diem == 1) goto tt; getch(); }

0 : ");

Bi 12. Vit chng trnh nhp im thi t bn phm v hin th kt qu : km nu im 0, 1, 2 hoc 3; Yu nu im l 4; Trung bnh nu im 5 hoc 6; Kh nu im 7 hoc 8; Gii nu im 9 hoc 10. #include <stdio.h> #include <conio.h> void main() { int diem; clrscr(); tt: printf(" Vao du lieu \n"); printf("\n diem = "); scanf("%d", &diem); switch( diem ) { case 0 : case 1 : case 2 : case 3 : printf(" Kem \n ");break; case 4 : printf(" Yeu \n ");break; case 5 : case 6 : printf(" Trung binh \n ");break; case 7 : case 8 : printf(" Kha \n ");break; case 9: case 10 : printf(" Gioi \n");break; default : printf(" Vao sai \n"); } printf("\n De tiep tuc, bam 1 / De dung, bam scanf("%d", &diem); if (diem == 1) goto tt; 10

0 : ");

getch(); } Bi 13. C 3 loi giy bc 100, 200, 500. Vit chng trnh in cc phng n kt hp cc loi giy bc trn cho ra 10000. #include <stdio.h> #include <conio.h> #define ST 10000 void main() { int sopa; /* so phuong an */ int t500; int t200; int t100; clrscr(); sopa = 0; for ( t500 = 0 ; t500 <= ST/500 ; t500++) for ( t200 = 0 ; t200 <= ST/200 ; t200++) for ( t100 = 0 ; t100 <= ST/10 ; t100++) if ( 100*t100 + 200*t200 +500*t500 == 1000) { sopa ++; printf("\n Tien 10000 d = "); if( t100 ) printf(" %2d X 100 d ",t100); if( t200 ) printf(" %2d X 200 d ",t200); if( t500 ) printf(" %2d X 500 d ",t500); printf("\n"); } printf("\n Co tat ca %d phuong an de co 1000 d ",sopa); getch(); }

Bi 14. C 5 loi giy bc 1000, 2000, 5000, 10000, 20000. Vit chng trnh hin th cc phng n kt hp cc loi giy bc trn cho ra 1000000. /* Tim phuong an doi tien */ #include <stdio.h> #include <conio.h> 11

#define TONGSOTIEN 1000000 void main() { clrscr(); long i, j, k, l, m, count=0; clrscr(); for (i=0; i<=TONGSOTIEN/1000; i++) for (j=0; j<=TONGSOTIEN/2000; j++) for (k=0; k<=TONGSOTIEN/5000; k++) for (l=0; l<=TONGSOTIEN/10000; l++) for (m=0; m<=TONGSOTIEN/20000; m++) if ((i*1000 + j*2000 + k*5000 + l*10000 + m*20000) == TONGSOTIEN) printf("\n%5ld : %5ld%5ld%5ld%5ld%5ld", ++count, i, j, k, l, m); getch(); } Bi 15. Vit chng trnh tnh v v tng nghch o ca n s t nhin u tin /* Chuong trinh minh hoa su dung do while */ #include <stdio.h> #include <conio.h> void main() { int n; float tong; int i; clrscr(); do { printf("\ Nhap n = "); scanf("%d",&n); } while (n<1); for ( i = 1,tong = 0;i <= n; i++) tong += (float)1/i; printf("\n Tong nghich dao %d so dau tien = %f",n,tong); getch(); } 12

Bi 16. Vit chng trnh tm v in ra cc s (<=1000) tha tnh cht: s bng tng cc c s ca n. V d: 6 = 1 + 2 + 3. #include <stdio.h> #include <conio.h> void main() { int i,tong,dem,j; clrscr(); printf("\nCac so tim duoc la : "); for (i=0;i<1000;i++) { tong=0; for (j=1;j<i;j++) if (i%j==0) tong +=j; if (tong==i) printf("\n%d ",i); } getch(); } Bi 17. Vit chng trnh tm cc s nguyn t nh hn s N cho trc. #include <stdio.h> #include <math.h> #include <conio.h> void main() { clrscr(); int n, i, j; printf("\nNhap gia tri N : "); scanf("%d", &n); printf("\nCac so nguyen to nho hon %d la : \n",n); for (i=2; i<n; i++) { for (j=2; j<=sqrt(i); j++) 13

if (i%j == 0) goto tt; printf("%d ",i); tt:; } getch(); } Bi 18. Vit chng trnh tm cc s nguyn t thuc on [a,b] cho trc. #include <stdio.h> #include <conio.h> #include <math.h> void main() { int i,j,a,b,k; clrscr(); printf("\nChuong trinh tim so nguyen to"); printf("\nNhap vao hai so nguyen duong"); scanf("%d%d",&a,&b); printf("\nCac so nguyen to trong doan [%d,%d] :\n",a,b); for (i=a;i<=b;i++) { for (j=2;j<=(int)sqrt(i);j++) if (i%j==0) goto tt; printf("%d\t",i); tt: ; } getch(); } x0

la

Bi 19. Vit chng trnh tnh cn bc 2 ca s a cho trc theo cng thc lp sau:

= a, xn+1 = (xn + a/xn)/2

Qu trnh lp s dng khi x n +1 x n < . Vi l s b cho trc. #include <stdio.h> #include <conio.h> #include <math.h> void main() 14

{ double a,xn,c; int i; tt:printf("\nNhap vao mot so a= "); scanf("%lf",&a); if(a<0) { printf("\nKhong the tinh can bac 2 cua so am\n"); printf("\nBam phim bat ky de nhap lai"); getch(); goto tt; } if(a==0) { xn=0; goto kq; } xn=a; do { c=xn; xn=(xn*xn+a)/(2*xn); } while (fabs((xn-c)/c) > 1e-5); kq:printf("\n Can bac hai cua a=%8.2f la : %8.4f ",a,xn); printf("\n\n Tiep tuc nua khong ?(tiep=1,khong=0)"); scanf("%d",&i); if(i==1) goto tt; }

15

CHNG 2 HM 2.1. CU HI
1. Dng u tin ca nh ngha hm gi l g, n bao gm cc thng tin th no? 2. Hm c th tr v bao nhiu gi tr? 3. Nu mt hm khng tr v gi tr, kiu g c th dng khai bo hm? 4. S khc nhau gia nh ngha hm v nguyn mu hm? 5. Bin a phng l g? im c bit ca n? 6. Hm main() nn t u? 7. Vit mt tiu hm c tn l do_it() c 3 i s kiu char v tr v kiu float. 8. Vit mt tiu hm c tn l print_a_number() c 1 i s kiu int v khng tr v iu g. 9. Tm im sai trong on m sau v sa li cho ng: #include <stdio.h> void print_msg( void ); main() { print_msg( "This is a message to print" ); return 0; } void print_msg( void ) { puts( "This is a message to print" ); return 0; } 10. Tm im sai trong nh ngha hm sau y: int twice(int y); { return (2 * y); } 11. Xem chng trnh sau y: #include <stdio.h> int x, y, z; int larger_of( int , int ); 16

main() { puts("Enter two different integer values: "); scanf("%d%d", &x, &y); z = larger_of(x,y); printf("\nThe larger value is %d.", z); return 0; } int larger_of( int a, int b) { if (a > b) return a; else return b; } Hy vit li hm larger_of() trong chng trnh ny m ch dng mt cu lnh return duy nht. 12. Vit mt hm nhn hai i s kiu int v tr v gi tr tch ca chng. 13. Vit mt hm nhn hai i s kiu int, hm tr v gi tr l thng ca php chia i th nht cho i th hai nu i th hai khc khng. 14. Vit chng trnh c dng hm tm trung bnh ca 5 s thc c nhp vo t bn phm. 15. Vit chng trnh c dng mt hm quy tnh ly tha ca 3 TR LI: 1. Dng u tin ca nh ngha hm l dng tiu hm, n cha tn hm, kiu tr v ca hm v danh sch tham s ca hm 2. Mt hm c th tr v hoc mt gi tr hoc khng tr v gi tr no. 3. Hm khng tr v g c nn khai bo void. 4. Mt nh ngha hm l mt hm hon chnh, bao gm tiu v cc cu lnh ca hm. nh ngha hm xc nh nhim v ca hm khi hm x l. Nguyn mu hm l mt dng n, ng nht vi dng tiu nhng kt thc bng du chm phy. Nguyn mu bo cho chng trnh dch tn hm, kiu tr v v danh sch tham s. 5. Bin a phng c khai bo bn trong hm v c lp vi cc bin khc trong chng trnh. 6. Hm main() nn l hm u tin trong danh sch cc hm ca chng trnh 7. float do_it(char a, char b, char c) 17

8. void print_a_number( int a_number ) 9. C hai li: - Hm print_msg() c khai bo void nhng n tr v gi tr. - Li gi hm print_msg() c truyn tham s. Chng trnh nn sa li nh sau: #include <stdio.h> void print_msg (void); main() { print_msg(); return 0; } void print_msg(void) { puts( "This is a message to print" ); } 10. Khng c du chm phy cui tiu hm. 11. Hm larger_of c sa li nh sau: int larger_of( int a, int b) { int save; if (a > b) save = a; else save = b; return save; } 12. int product( int x, int y ) { return (x * y); } 13. int divide_em( int a, int b ) { int answer = 0; if( b == 0 ) 18

answer = 0; else answer = a/b; return answer; } 14. #include <stdio.h> float v, w, x, y, z, answer; float average(float a, float b, float c, float d, float e); main() { puts("Enter five numbers:"); scanf("%f%f%f%f%f", &v, &w, &x, &y, &z); answer = average(v, w, x, y, z); printf("The average is %f.\n", answer); return 0; } float average( float a, float b, float c, float d, float e) { return ((a+b+c+d+e)/5); } 15. #include <stdio.h> int three_powered( int power main() { int a = 4; int b = 9; printf( "\n3 to the power of three_powered(a) ); printf( "\n3 to the power of three_powered(b) ); return 0; } int three_powered( int power { if ( power < 1 )

);

%d is %d", a, %d is %d\n", b,

19

return( 1 ); else return( 3 * three_powered( power - 1 )); }

2.2. BI TP
Bi 1. Vit chng trnh c dng hm tm s ln nht trong 3 s thc. # include <stdio.h> # include <conio.h> float max3s(float,float,float); //khai bao prototype void main() { float x,y,z; int s; printf("\n Nhap 3 so tuy y : "; scanf("%f%f%f,&x,&y,&z); printf("\nSo lon nhat la :%f",max3s(x,y,z)); getch(); } float max3s(float a,float b,float c) { float max; max=a>b?a:b; return (max>c?max:c); } Bi 2. Vit chng trnh c dng hm kim tra nm nhun. #include <iostream.h> #include <conio.h> int isLeapYear(int y) { return y % 4 == 0 && (y % 100 != 0 || y % 400 == 0); } void main() { int n; do 20

{ cin >> n; if (isLeapYear(n)) cout << n << " la nam nhuan.\n"; else cout << n << " Khong phai nam nhuan.\n"; } while (n>1); } Bi 3. Vit chng trnh c dng hm kim tra s nguyn t. #include <iostream.h> #include <conio.h> #include <math.h> int isPrime(int p) { float sqrtp = sqrt(p); if (p < 2) return 0; if (p == 2) return 1; //2 la so nguyen to dau tien if (p % 2 == 0) return 0; // 2 la so nguyen to chan duy nhat for (int d = 3; d <= sqrtp; d += 2) if (p % d == 0) return 0; return 1; } void main() { clrscr(); int n; cout<<"\n Nhap n = "; cin>>n; for (int i = 1; i < n; i++) if (isPrime(i)) cout << i << ' '; cout << endl; getch(); } Bi 3. Vit chng trnh c dng hm tm s hng th N ca dy s Fibonasi c nh ngha nh sau: 21

f0 = f1 = 1, fn+1 = fn + fn-1 (n = 1,2,...) #include <stdio.h> #include <conio.h> int fibo(int n) { int f0=1,f1=1,f2; for(int i=2;i<=n;i++) { f2 = f1 + f0; f0 = f1; f1 = f2; } return f2; } void main() { int n; printf("\nNhap gia tri N : "); scanf("%d", &n); printf("%d", fibo(n)); getch(); } Bi 5. Sa li chng trnh bi 3 nhng dng hm quy. #include <stdio.h> #include <conio.h> int fibo(int n) { if ((n==0) || (n==1)) return 1; else return fibo(n-1)+fibo(n-2); } void main() { int n; printf("\nNhap gia tri N : "); 22

scanf("%d", &n); printf("%d", fibo(n)); getch(); } Bi 6. Vit chng trnh c dng hm quy v khng quy tnh giai tha ca s nguyn n khng m. #include <stdio.h> #include <conio.h> long GiaiThua(n) int n; { long s=1,i; if (n==1 || n==0) return(1); else { for (i=1;i<=n;++i) return(s); } }

s *= i;

long GTDequy(n) int n; { if (n==1||n==0) return(1); else return(n*GTDequy(n-1)); } void main() { int n; tt: printf("\n Cho mot so nho hon 16 n="); scanf("%d",&n); printf("\n Giai thua cua %d la :%20ld\n",n,GiaiThua(n)); printf("\n Giai thua de quy cua%d:%20ld\n",n,GTDequy(n)); 23

printf(" Tiep tuc hoac stop (go 1 hoac 0):"); scanf("%d",&n); printf("\n"); if (n==1) goto tt; getch(); } Bi 7. Vit chng trnh c dng hm gii phng trnh bc hai: ax2 + bx +c = 0 (a khc 0) #include <stdio.h> #include <conio.h> #include <math.h> int ptb2(float a,float b,float c,float *x1,float *x2) { float delta; delta=b*b-4*a*c; if (delta<0) return -1; else if (delta == 0.0) { *x1=-b/(2*a); return 0;} else { *x1 = (-b-sqrt(delta))/(2*a); *x2 = (-b+sqrt(delta))/(2*a); return 1;} } void main() { float a,b,c,x1,x2; int k; printf("\nGiai phuong trinh bac hai"); do { printf("\nNhap he so a = "); scanf("%f",&a); 24

} while (a==0); printf("\nNhap he so b = "); scanf("%f",&b); printf("\nNhap he so c = "); scanf("%f",&c); k= ptb2(a,b,c,&x1,&x2); if (k==-1) printf("\n Phuong trinh vo nghiem"); else if (k==0) printf("\n Phuong trinh co nghiem kep x = %6.2f",x1); else printf("\n Phuong trinh co 2 nghiem phan biet %6.2f %6.2f ", x1,x2); getch(); } Bi 8. Vit chng trnh c dng hm tnh cosx theo cng thc sau: cosx 1
x2 x4 x 2n + + ... + (1) n + ... 2! 4! ( 2n)! x 2n < vi l s b cho trc. (2n)!

n Qu trnh lp s dng khi (1)

#include <conio.h> #include <stdio.h> #include <math.h> double cos(double x) { float tong,ps;long i=1,dau=-1; ps=1.0; tong=1.0; while (fabs(ps) > 0.00001) { ps=ps*x*x/(i*(i+1)); tong=tong+dau*ps; dau=-dau; i=i+2; } return tong; } 25

void main() { int i; double x; printf("\n Nhap goc can tinh cos (radian) "); scanf("%lf",&x); printf("\n Cosin cua %f la %f ",x,cos(x)); getch(); } Bi 9. Vit chng trnh c dng hm tnh sinx theo cng thc sau:
x3 x5 x 2 n +1 n + ... sinx x + + ... + (1) 2! 5! (2n + 1)!
n Qu trnh lp s dng khi (1)

x 2 n +1 < vi l s b cho trc. ( 2n + 1)!

#include <conio.h> #include <stdio.h> #include <math.h> double sin(double x) { float tong,ps; long i=1,dau=-1; ps=x; tong=x; while (fabs(ps) > 0.00001) { ps=ps*x*x/((i+1)*(i+2)); tong=tong+dau*ps; dau=-dau; i=i+2; } return tong; } void main() { double x; printf("\n Nhap goc can tinh sin (radian) "); scanf("%lf",&x); 26

printf("\n Sin cua %f la %f ",x,sin(x)); getch(); } Bi 10. Vit chng trnh c dng hm tnh ex theo cng thc sau:
x 2 x3 xn ex 1 + x + + + ... + + ... 2! 3! n! xn < vi l s b cho trc. Qu trnh lp s dng khi n!

#include <conio.h> #include <stdio.h> #include <math.h> double ex(double x) { float tong,ps; long i=0; ps=tong=1; while (fabs(ps) > 1E-6) { ps=ps*x/(i+1); tong=tong+ps; i=i+1; } return tong; } void main() { double x; printf("\n Nhap x = "); scanf("%lf",&x); printf("\n E mu %lf la %lf ",x,ex(x)); getch(); } Bi 11. Vit chng trnh c dng hm tnh s theo cng thc sau: 1 1 1 n
4 1 + ... + (1) + ... 3 5 2n + 1

27

n Qu trnh lp s dng khi (1)

1 < vi l s b cho trc. 2n + 1

#include <conio.h> #include <stdio.h> #include <math.h> float pi() { float tong=4.0,ps=1.0; long i=1,dau =-1; do { ps=4.0/(2*i+1); tong=tong+dau*ps; dau =-dau; i+=1; } while (ps > 1E-6); return tong; } void main() { clrscr(); printf("\n pi = %f ",pi()); getch(); } Bi 12. Vit chng trnh c dng hm tnh cn bc hai ca mt s khng m. #include <stdio.h> #include <conio.h> #include <math.h> double canhai(double a) { double c,xn; if(a==0) return 0.0; xn=a; do { c=xn; xn=(xn*xn+a)/(2*xn); 28

} while (fabs((xn-c)/c) > 1e-5); return xn; } void main() { double a; int i; tt:printf("\nNhap vao mot so a= "); scanf("%lf",&a); if(a<0) { printf("\nKhong the tinh can bac 2 cua so am\n"); printf("\nBam phim bat ky de nhap lai"); getch(); goto tt; } printf("\n Can bac hai cua a=%8.2f la : %8.4f", a,canhai(a)); printf("\n\n Tiep tuc nua khong ?(tiep=1,khong=0)"); scanf("%d",&i); if(i==1) goto tt; } Bi 13. Vit chng trnh c dng hm tm s nguyn t nh hn s nguyn N. #include <stdio.h> #include <math.h> #include <conio.h> int snt(int n) { for (int i=2; i<=sqrt(n); i++) if (n%i == 0) return 0; return 1; } void main() { 29

clrscr(); int n,i; printf("\nNhap gia tri N : "); scanf("%d", &n); printf("\nCac so nguyen to nho hon %d la : \n",n); for (i=2; i<n; i++) if (snt(i)) printf("%d ",i); getch(); } Bi 14. Vit chng trnh c dng hm in tam gic Pascal ra mn hnh. #include <stdio.h> #include <conio.h> int NhiThuc(int,int); void main() { int n,m,p; printf("\n Chuong trinh in tam giac Pascal\n"); printf(" Cho so m = ");scanf("%d",&m); for (n=1;n<m+1;n++) { for (p=1;p<n+1;p++) { printf("%d ",NhiThuc(n,p)); } printf("\n"); } getch(); } int NhiThuc(int n, int p) { 30 /* nguyen mau ham */

if (p==1 || p==n) return(1); else return(NhiThuc(n-1,p-1)+NhiThuc(n-1,p)); } Bi 15. Vit chng trnh c dng hm tnh S = n du cn #include <stdio.h> #include <conio.h> #include <math.h> /* Ham de quy float tong(int k,int n) { if (n==1) return sqrt(k); else return sqrt(k+tong(k,n-1)); }*/ float tong(int k,int n) { float S=0.0; for(int i=1; i<=n;++i) S = sqrt(k+S); return S; } void main() { clrscr(); int k,n; printf("\nNhap k va n"); scanf("%d%d",&k,&n); printf("\n Tong la : %8.2f ",tong(k,n)); getch(); } Bi 16. Cho bit kt qu ca vic thc hin chng trnh sau: 31
k + k + k + ... + k

#include <iostream.h> #include <conio.h> void f(char *dc="TRUNG TAM",int n=5); void f(char *dc,int n) { for(int i=0;i<n;++i) cout<<"\n" <<dc; } void main() { f(); f("ABC",3); f("DEF"); getch(); } Bi 17. Cho bit kt qu ca vic thc hin chng trnh sau: #include <iostreams.h> #include <stdio.h> #include <string.h> #include <conio.h> int & max(int& a, int& b); void main() { clrscr(); int b =10, a= 7, c= 20; cout << "Max a,b : "<<max(b,a) << endl; max(b,a)++; cout << "Gia tri b va a :"<< b <<" "<<a <<endl; max(b,c)=5; cout << "Gia tri b va a va c :"<<b<<" "<<a <<" "<<c<< endl; } int &max(int &a, int &b) { return a>b ? a:b; } Kt qu trn mn hnh s l : 32

Max a,b : 10 Gia tri cua b va a : 11 7 Gia tri cua b va a va c : 11

Bi 18. Vit chng trnh c dng hm gii h phng trnh bc nht sau: a1x + b1y = c1 a2x + b2y = c2 #include <stdio.h> #include <conio.h> int hptb1(float a1,float b1,float c1,float a2,float b2,float c2,float *x,float *y); void main() { float a1, a2, b1, b2, c1, c2; float x,y; char c; do { clrscr(); printf("\n CHUONG TRINH GIAI HE PHUONG TRINH BAC NHAT (nhan <ESC> de thoat)"); printf ("\n NHAP HE SO"); printf("\n Cua phuong trinh 1 (a1,b1,c1): "); scanf("%f %f %f",&a1,&b1,&c1); printf("\n Cua phuong trinh 2 (a2,b2,c2): "); scanf("%f %f %f",&a2,&b2,&c2); if ( hptb1(a1,b1,c1,a2,b2,c2,&x,&y) == 0) printf("\n he phuong trinh da cho vo nghiem"); else if ( hptb1(a1,b1,c1,a2,b2,c2,&x,&y) == 1) printf("\n he phuong trinh co duy nhat nghiem : (%0.3f, %0.3f)",x,y); else printf("\n he phuong trinh co vo so nghiem"); c=getch(); } while (c!=27); 33

} int hptb1(float a1,float b1,float c1,float a2,float b2,float c2,float *x,float *y) { float d, dx, dy; d= a1*b2-a2*b1; dx = c1*b2 - c2*b1; dy = a1*c2 - c1*a2; if ( d!= 0) { *x= dx/d; *y= dy/d; return(1); } else if ((dx== 0)&& ( dy== 0)) return(2); else return(0); } Bi 19. Vit chng trnh gii bt phng trnh bc hai: ax2 + bx + c > 0 #include <stdio.h> #include <conio.h> #include <math.h> void bptb1(float b, float c ); void bptb2(float a, float b, float c); int nghiem(float a, float b, float c, float *x, float *y); void main() { float a,b,c; char ch; do { clrscr(); printf("\n CHUONG TRINH GIAI BAT PHUONG TRINH BAC HAI (nhan <ESC> de thoat)"); 34

printf("\n Nhap he so (a,b,c): "); scanf("%f %f %f", &a,&b,&c); if (a) bptb2(a,b,c); else bptb1(b,c); ch=getch(); } while (ch!=27); } void bptb1(float b, float c) { if (b>0) printf("\n Nghiem cua bpt la x > %0.3f ", (-c/b)); else if (b<0) printf("\n Nghiem cua bpt la x < %0.3f ", (-c/b)); else if (c>0) printf("\n Bpt vo so nghiem"); else printf("\n Bpt vo nghiem"); } void bptb2(float a, float b, float c) { float x,y,d; if (a>0) { if (nghiem(a,b,c,&x,&y) ==2) printf("\n Bpt vo so nghiem"); else if (nghiem(a,b,c,&x,&y)== 0) printf("\n Bpt vo so nghiem tru x = %0.3f",x ); else printf("\n Bpt co nghiem : x > %0.3f va x < %0.3f", x,y); } else { if ((nghiem(a,b,c,&x,&y)==2)|| (nghiem(a,b,c,&x,&y)== 0)) printf("\n Bpt vo nghiem"); else printf("\n Bpt co nghiem : %0.3f< x < %0.3f", x,y); 35

} } int nghiem(float a, float b, float c, float *x, float *y) { float d = b*b - 4*a*c; if (d<0) return(2); else if (d==0) { *x=*y=-b/(2*a); return(0); } else { *x= (-b-sqrt(d))/(2*a); *y= (-b+sqrt(d))/(2*a); return(1); } } Bi 20. Vit chng trnh c dng hm quy gii bi ton thp H Ni: C n a c sp xp trn mt cc A c kch thc nh dn (ln di nh trn). Yu cu t ra l: Chuyn chng a t cc A sang cc C theo nhng iu kin: - Mi ln ch chuyn mt a. - Khng c tnh hung a ln trn a nh (d ch l tm thi). - c php s dng mt cc B lm cc trung gian t tm a khi chuyn t cc A sang cc C. #include <stdio.h> #include <conio.h> void dichchuyen(int n, int c1, int c2, int c3); void main() { int n; char c; do { clrscr(); printf("\n CHUONG TRINH THAP HA NOI (nhan <ESC> de thoat) "); printf("\n Nhap so dia : "); 36

scanf("%d", &n); dichchuyen(n,1,2,3); c=getch(); } while (c!=27); } void dichchuyen(int n, int c1, int c2, int c3) { if (n==1) printf("\n %10.0d -> %d ", c1,c2); else { dichchuyen(n-1,c1,c3,c2); dichchuyen(1,c1,c2,c3); dichchuyen(n-1, c3,c2,c1); } } Bi 21. Vit chng trnh c dng hm quy tnh xn (theo hai cch). /* Tinh x mu n theo 2 cach */ #include <stdio.h> #include <conio.h> float cach1(float x,int n); float cach2(float x,int n); void main() { float x ; int n; char c; do { clrscr(); printf("\n CHUONG TRINH TINH X MU N (nhan <ESC> de thoat) "); printf("\n Nhap x : "); scanf("%f", &x); do 37

{ printf("\n Nhap n (n>0): "); scanf("%d", &n); } while (n<0); printf("\n %0.3f mu %d bang %0.5f (cach 1)", x,n,cach1(x,n)); printf("\n %0.3f mu %d bang %0.5f (cach 2)", x,n,cach2(x,n)); c=getch(); } while (c!=27); } float cach1(float x,int n) { if (n == 0) return(1); return ( x * cach1(x,n-1)); } float cach2(float x, int n) { if (n == 0) return(1); if ((n % 2) == 0) return(cach2(x,n/2)*cach2(x,n/2)); return(x*(cach2(x,n-1))); } Bi 22. Vit chng trnh c dng hm quy tm c s chung ln nht ca hai s nguyn dng (theo hai cch). #include <stdio.h> #include <conio.h> int cach1(int a, int b); int cach2(int a, int b); void main() { 38

int a, b; char c; do { clrscr(); printf("\n CHUONG TRINH TIM UCLN CUA 2 SO A, B (nhan <ESC> de thoat) "); printf("\n Nhap a, b : "); scanf("%d %d",&a,&b); printf("\n UCLN cua %d va %d la %d (cach1)", a,b,cach1(a,b)); printf("\n UCLN cua %d va %d la %d (cach2)", a,b,cach1(a,b)); c=getch(); } while (c!=27); } int cach1(int a, int b) { if( b==0) return(a); return( cach1(b,a%b)); } int cach2(int a, int b) { if (a==b) return(a); if (a>b) return(a-b,b); return(a,b-a); }

39

Chng 3

mng v con tr 3.1. CU HI


3.1. Cu hi v mng
1. Cc kiu d liu no ca C c th c dng trong mng? 2. iu g xy ra nu chng trnh truy cp n mt phn t c ch s nm ngoi phm vi mng? 3. Mng c khai bo sau y c bao nhiu phn t? int array[2][3][5][8]; Tn ca phn t th 10 l g? 4. Vit cu lnh khai bo mt mng nguyn c 10 phn t v khi to tt c cc phn t l 1. 5. Cho mng sau, vit m khi to tt c cc phn t l 88: int eightyeight[88]; 6. Cho mng sau, vit m khi to tt c cc phn t l 0: int stuff[12][10]; 7. Tm im sai trong on m sau: int x, y; int array[10][3]; main() { for ( x = 0; x < 3; x++ ) for ( y = 0; y < 10; y++ ) array[x][y] = 0; return 0; } 8. Tm im sai trong on m sau: int array[10]; int x = 1; main() { for ( x = 1; x <= 10; x++ ) array[x] = 99; return 0; 40

} 9. Vit chng trnh to ra cc s ngu nhin cho mng a[5][4]. Hin th ra mn hnh cc gi tr ca mng theo tng ct. 10. Vit chng trnh khi to mng mt chiu gm 1000 s ngu nhin. Hin th gi tr trung bnh v gi tr cc phn t mng, v sau mi 10 gi tr hin th th tm dng mn hnh. 11. Vit chng trnh khi to mng mt chiu gm 10 phn t, mi phn t c gi tr bng ch s ca n. 12. Sa li chng trnh cu 9, sau khi hin th cc gi tr khi to, chng trnh s sao chp cc gi tr vo mt mng mi v thm vo 10 cho mi gi tr. Hin th ra mn hnh gi tr cc phn t ca mng mi. TR LI: 1. Tt c kiu d liu ca C. 2. Chng trnh vn c dch v chy nhng to ra kt qu khng d on c. 3. 2*3*5*8 =240. array[0][0][1][1] 4. int array[10] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; 5. int eightyeight[88]; int x; for ( x = 0; x < 88; x++ ) eightyeight[x] = 88; 6. on m nh sau: int stuff[12][10]; int sub1, sub2; for( sub1 = 0; sub1 < 12; sub1++ ) for( sub2 = 0; sub2 < 10; sub2++ ) stuff[sub1][sub2] = 0; 7. Mng c kch thc 10*3 nhng c khi to nh mng kch thc 3*10. C th sa li theo mt trong hai cch: Cch 1: int x, y; int array[10][3]; main() { 41

for ( x = 0; x < 3; x++ ) for ( y = 0; y < 10; y++ ) array[y][x] = 0; /* changed */ return 0; } Cch 2: int x, y; int array[10][3]; main() { for ( x = 0; x < 10; x++ ) /* changed */ for ( y = 0; y < 3; y++ ) /* changed */ array[x][y] = 0; return 0; } 8. Chng trnh ny khi to mt phn t nm ngoi phm vi. Ta khng th khi to cho array[10] v n khng tn ti. Cu lnh for nn sa li theo mt trong nhng cch sau: for( x = 1; x <=9; x++ ) for( x = 0; x <= 9; x++ ) 9. /* Using two-dimensional arrays and rand() */ #include <stdio.h> #include <stdlib.h> /* Declare the array */ int array[5][4]; int a, b; main() { for ( a = 0; a < 5; a++ ) for ( b = 0; b < 4; b++ ) array[a][b] = rand(); /* Now print the array elements */ for ( a = 0; a < 5; a++ ) { for ( b = 0; b < 4; b++ ) printf( "%d\t", array[a][b] ); 42

printf( "\n" ); /* go to a new line */ } return 0; } 10. #include <stdio.h> #include <stdlib.h> int random[1000]; int a, b, c; long total = 0; main() { for (a = 0; a < 1000; a++) { random[a] = rand(); total += random[a]; } printf("\n\nAverage is: %ld\n",total/1000); /* Now display the array elements 10 at a time */ for (a = 0; a < 1000; a++) { printf("\nrandom[%d] = ", a); printf("%d", random[a]); if ( a % 10 == 0 && a > 0 ) { printf("\nPress Enter to continue, CTRL-C to quit."); getchar(); } } return 0; } /* end of main() */ 11. Cch 1: #include <stdio.h> int elements[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int idx; main() 43

{ for (idx = 0; idx < 10; idx++) { printf( "\nelements[%d] = %d ", idx, elements[idx] ); } return 0; } /* end of main() */ Cch 2: #include <stdio.h> int elements[10]; int idx; main() { for (idx = 0; idx < 10; idx++) elements[idx] = idx ; for (idx = 0; idx < 10; idx++) printf( "\nelements[%d] = %d ", idx, elements[idx] ); return 0; } 12. #include <stdio.h> int elements[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int new_array[10]; int idx; main() { for (idx = 0; idx < 10; idx++) new_array[idx] = elements[idx] + 10 ; for (idx = 0; idx < 10; idx++) printf( "\nelements[%d] = %d \tnew_array[%d] = %d", idx, elements[idx], idx, new_array[idx] ); return 0; }

44

3.2. Cu hi v con tr
1. Ton t g c dng xc nh a ch ca mt bin? 2. Ton t g c dng xc nh gi tr v tr c tr bi mt con tr? a ch ca mt bin? 3. Con tr l g? 4. Truy cp gin tip l g? 5. Mng c lu tr trong b nh nh th no? 6. Ch ra hai cch nhn c a ch phn t u tin ca mng data[]. 7. Nu mng c truyn n mt hm, hai cch g nhn bit mng kt thc u? 8. Su ton t g c th thc hin vi con tr? 9. Gi s bn c hai con tr. Nu con tr u tin tr n phn t th ba trong mt mng kiu int, con tr th hai tr n phn t th t. Vic tr con tr th hai cho con tr u cho kt qu g? 10. Gi s cost l mt tn bin. Lm th no khai bo v khi to mt con tr c tn p_cost tr n bin . Lm th no gn gi tr 100 cho bin cost bng cch dng c truy cp trc tip v gin tip. Lm th no in gi tr ca con tr p_cost v gi tr con tr p_cost tr n. 11. Lm th no gn a ch ca bin thc c tn l radius cho mt vin con tr. 12. Hai cch gn gi tr 100 cho phn t th ba ca mng data[]. 13. Vit mt hm c tn l sumarrays() c i s l hai mng, tnh tng gi tr c hai mng v tr v tng . Vit chng trnh minh ha. 14. Vit lnh khai bo bin con tr, khai bo v khi gn con tr tr ti bin, khai bo v khi gn con tr tr n con tr. 15. Xt khai bo float x; float *px = &x; float **ppx = &px; gn 100 cho bin x, ta c th vit nh sau hay khng? *ppx = 100; 16. Vit mt nguyn mu hm vi i l mt mng con tr kiu char v tr v void. 17. Con tr tr n hm l g? 18. Vit mt khai bo con tr tr n hm tr v kiu char v c i l mt mng con tr kiu char. 19. Khai bo sau c g sai: 45

char *ptr(char *x[]); 20. Gii thch cc khai bo sau: a. int *var1; b. int var2; c. int **var3; 21. Gii thch cc khai bo sau: a. int a[3][12]; b. int (*b)[12]; c. int *c[12]; 22. Gii thch cc khai bo sau: a. char *z[10]; b. char *y(int field); c. char (*x)(int field); 23. Vit mt khai bo con tr tr n hm c i kiu nguyn v tr v bin kiu float. 24 Vit mt khai bo mng con tr tr n hm c i l chui k t v tr v s nguyn. 25. Vit lnh khai bo mng 10 con tr kiu char. 26. C im g sai trong on m sau: int x[3][12]; int *ptr[12]; ptr = x; TR LI: 1. Ton t ly a ch & . 2. Ton t * . 3. Con tr l bin cha a ch ca bin khc. 4. Truy cp gin tip l truy cp n ni dung ca mt bin bng cch dng con tr tr ti bin . 5. Cc phn t mng c lu tr cc vng nh lin tip 6. &data[0] hoc data 7. Cch th nht l truyn chiu di ca mng nh tham s n hm. Cch th hai l dng mt gi tr c bit trong mng, chng hn NULL lm du hiu kt thc mng. 8. Gn, truy cp gin tip, ly a ch, tng, gim v so snh. 9. Hiu hai con tr tr v s phn t gia chng. Trong trng hp ny l 1. Kch thc cc phn t mng l khng lin quan. 10. 46

int *p_cost; p_cost = &cost; Truy cp trc tip: cost = 100; truy cp gin tip: *p_cost = 100; printf( "Pointer value: %d, points at value: %d", p_cost, *p_cost); 11. float *variable = &radius; 12. data[2] = 100; *(data + 2) = 100; 13. #include <stdio.h> #define MAX1 5 #define MAX2 8 int array1[MAX1] = { 1, 2, 3, 4, 5 }; int array2[MAX2] = { 1, 2, 3, 4, 5, 6, 7, 8 }; int total; int sumarrays(int x1[], int len_x1, int x2[], int len_x2); main() { total = sumarrays(array1, MAX1, array2, MAX2); printf("The total is %d\n", total); return 0; } int sumarrays(int x1[], int len_x1, int x2[], int len_x2) { int total = 0, count = 0; for (count = 0; count < len_x1; count++) total += x1[count]; for (count = 0; count < len_x2; count++) total += x2[count]; return total; } 14. float x; float *px = &x; float **ppx = &px; 15. Lnh gn s gn 100 cho px thay v x, sa li nh sau: 47

**ppx = 100; 16. void func1(char *p[]); 17. Con tr n hm l mt bin lu gi a ch ca hm trong b nh. 18. char (*ptr)(char *x[]); 19. Khng sai. Dng ny ny l mt nguyn mu hm tr v con tr kiu char. 20. a. var1 l con tr kiu int b. var2 l bin nguyn. c. var3 l con tr tr n con tr kiu int. 21. a. a l mng 36 (3 * 12) phn t nguyn. b. b l con tr tr n mng 12 phn t nguyn. c. c l mng 12 con tr nguyn. 22. a. z l mng 10 con tr k t. b. y l hm c i l field kiu int v tr v con tr kiu k t. c. x l con tr tr n hm c i l fied kiu int v tr v k t. 23. float (*func)(int field); 24. int (*menu_option[10])(char *title); 25. char *ptrs[10]; 26. ptr c khai bo l mng 12 con tr kiu nguyn, khng phi l con tr tr n mng 12 phn t nguyn. Sa li l: int x[3][12]; int (*ptr)[12]; ptr = x;

3.3. Cu hi v lp lu tr bin
1. S khc nhau quan trng nht gia lp lu tr a phng v lp lu tr ngoi l g? 2. V tr ca bin nh hng n lp lu tr ca n nh th no? 3. Khi nh ngha mt bin a phng, hai ty chn g nh hng i vi thi gian tn ti ca bin? 4. Chng trnh c th khi to cc bin tnh v t ng khi chng c nh ngha. Vic khi to thc hin khi no.? 5. Bin thanh ghi lun lun c t trong thanh ghi. ng hay sai? 48

6. Bin ton cc khng c khi to cha gi tr g? 7. Bin a phng khng c khi to cha gi tr g? 8. Mt hm cn ghi nhn gi tr ca bin a phng kiu int gia cc ln gi th bin nn c khai bo th no? 9. Vit mt khai bo cho bin thanh ghi kiu int. 10. Sa li chng trnh sau cho khi b li: /* Illustrates variable scope. */ #include <stdio.h> void print_value(void); main() { int x = 999; printf("%d\n", x); print_value(); return 0; } void print_value(void) { printf("%d\n", x); } 11. Vit chng trnh khai bo mt bin ton cc kiu int c tn l var. Khi ti cho bin var mt gi tr no . Chng trnh in gi tr ca var trong mt hm no (khng phi hm main()). C cn phi truyn var nh l tham s ca hm hay khng? 12. Sa li chng trnh v d trn, trong var l bin a phng trong hm main(). Chng trnh vn in gi tr ca var trong mt hm no (khng phi hm main()). C cn phi truyn var nh l tham s ca hm hay khng? 13. Trong chng trnh th bin ton cc v bin a phng trng tn c khng? Vit chng trnh minh ha. 14. C im g sai trong on m sau: void a_sample_function( void ) { int ctr1; for ( ctr1 = 0; ctr1 < 25; ctr1++ ) printf( "*" ); puts( "\nThis is a sample function" ); { 49

char star = `*'; puts( "\nIt has a problem\n" ); for ( int ctr2 = 0; ctr2 < 25; ctr2++ ) { printf( "%c", star); } } } 15. C im g sai trong on m sau: /*Count the number of even numbers between 0 and 100. */ #include <stdio.h> main() { int x = 1; static int tally = 0; for (x = 0; x < 101; x++) { if (x % 2 == 0) /*if x is even...*/ tally++;.. /*add 1 to tally.*/ } printf("There are %d even numbers.\n", tally); return 0; } 16. C im g sai trong on m sau: #include <stdio.h> void print_function( char star ); int ctr; main() { char star; print_function( star ); return 0; } void print_function( char star ) { char dash; for ( ctr = 0; ctr < 25; ctr++ ) 50

{ printf( "%c%c", star, dash ); } } 17. Chng trnh sau cho kt qu g? #include <stdio.h> void print_letter2(void); /* function prototype */ int ctr; char letter1 = `X'; char letter2 = `='; main() { for( ctr = 0; ctr < 10; ctr++ ) { printf( "%c", letter1 ); print_letter2(); } return 0; } void print_letter2(void) { for( ctr = 0; ctr < 2; ctr++ ) printf( "%c", letter2 ); } 18. Vit li chng trnh trn! TR LI: 1. Bin a phng ch hiu lc trong hm m n nh ngha. Bin ngoi tc ng ton b chng trnh. 2. Bin nh ngha trong hm l bin a phng. Bin c nh ngha bn ngoi mi hm l bin ngoi. 3. T ng (mc nh ) hoc tnh. Bin t ng c to ra mi khi hm c gi v b hy b khi hm kt thc. Bin tnh cho php lu gi li gi tr gia cc li gi hm. 4. Bin t ng c khi to mi khi hm c gi. Bin tnh c khi to ch ln u tin hm c gi. 5. Sai. 51

6. Bin ton cc khng c khi to s c t ng khi to l 0. 7. Bin a phng khng c khi to s khng c t ng khi to. 8. Khai bo l bin tnh 9. register int x = 0; 10. /* Illustrates variable scope. */ #include <stdio.h> void print_value(int x); main() { int x = 999; printf("%d", x); print_value( x ); return 0; } void print_value( int x) { printf("%d", x); } 11. V var l bin ton cc, khng cn phi truyn n nh tham s /* Using a global variable */ #include <stdio.h> int var = 99; void print_value(void); main() { print_value(); return 0; } void print_value(void) { printf( "The value is %d\n", var ); } 12. Phi truyn bin var in trong hm khc /* Using a local variable*/ #include <stdio.h> void print_value(int var); 52

main( ) { int var = 99; print_value( var ); return 0; } void print_value(int var) { printf( "The value is %d\n", var ); } 13. Bin ton cc v bin a phng c th trng tn. /* Using a global */ #include <stdio.h> int var = 99; void print_func(void); main( ) { int var = 77; printf( "Printing in function with local and global:"); printf( "\nThe Value of var is %d", var ); print_func( ); return 0; } void print_func( void ) { printf( "\nPrinting in function only global:"); printf( "\nThe value of var is %d\n", var ); } 14. #include <stdio.h> void a_sample_function( ); main() { a_sample_function(); return 0; } void a_sample_function( void ) 53

{ int ctr1; for ( ctr1 = 0; ctr1 < 25; ctr1++ ) printf( "*" ); puts( "\nThis is a sample function" ); { char star = `*'; int ctr2; /* fix */ puts( "\nIt has a problem\n" ); for ( ctr2 = 0; ctr2 < 25; ctr2++ ) { printf( "%c", star); } } } 15. Khng c g sai, nhng nn sa li tt hn. 16. Khng c g sai! 17. Chng trnh s in v hn: X==X==X==X==X==X==X==X==X==X==X==X==X==X==X==X==X==... 18. #include <stdio.h> void print_letter2(void); main() { char letter1 = `X'; int ctr; for( ctr = 0; ctr < 10; ctr++ ) { printf( "%c", letter1 ); print_letter2(); } return 0; } void print_letter2(void) { char letter2 = `='; int ctr; /* this is a local variable */ 54

/* it is different from ctr in main() */ for( ctr = 0; ctr < 2; ctr++ ) printf( "%c", letter2 ); }

3.3. BI TP
Bi 1. Khi to mng cc s ngu nhin t 0 n 127. #include <stdlib.h> #include <stdio.h> #include <conio.h> void main(void) { int a[128],i,j,x,kt; clrscr(); clrscr(); printf("Cac so ngau nhien tu 0 den 127\n\n"); for(i=0; i<128; i++) { do { x= rand() %128; j=0; kt=0; while ((j<=i) && !kt) { if (x==a[j]) kt=1; else j=j+1; } } while (kt); a[i]=x; } for(i=0;i<128;i++) { printf("%4d",a[i]); if ((i+1) %10 ==0)printf("\n"); } getch(); } 55

Bi 2. Cho bit kt qu ca vic thc hin chng trnh sau: #include <stdio.h> #include <conio.h> void main() { int ar[]={10,15,4,25,3,-4},*p,i; clrscr(); p=&ar[2]; printf("Cac gia tri cua mang:\n\n"); for (i=0;i<6;i++)printf("ar[%d]=%4d\n",i,ar[i]); printf("\nCho biet gia tri cua cac bieu thuc\n\n"); printf("a) *(p+1)= %d\n\n",*(p+1)); printf("b) p[-1]= %d\n\n",p[-1]); printf("c) (ar-p)=%d\n\n",(ar-p)); printf("d) ar[*p++]=%d\n\n",ar[*p++]); printf("e) *(ar+ar[2])=%d\n\n",*(ar+ar[2])); getch(); } Bi 3. Vit chng trnh sp xp mng cc s nguyn c kch thc khng qu 100 v sp xp theo th t tng. /*Sap xep noi bot*/ #include <stdlib.h> #include <stdio.h> #include <conio.h> void main() { int a[100],cs[100],i,j,n,x,kt; clrscr(); do { printf("Kich thuoc cua mang N=");scanf("%d",&n); if (n>100 || n<0) printf("\n nhap lai!"); }while (n>=100 && n<=0); for(i=0; i<n; i++) { x= rand() %n; 56

a[i]=x; } for (i=0;i<n;i++) cs[i]=i; printf("Mang truoc khi sap xep:\n\n"); for (i=0;i<n;i++) { printf("%4d",a[cs[i]]); if ((i+1)% 10 ==0)printf("\n"); } for(i=0;i<n-1;i++) { for(j=i+1;j<n;j++) if (a[cs[i]]>a[cs[j]]) { x=cs[i]; cs[i]=cs[j]; cs[j]=x; } } printf("Mang sau khi sap xep:\n\n"); for (i=0;i<n;i++) { printf("%4d",a[cs[i]]); if ((i+1)% 10 ==0)printf("\n"); } getch(); } Bi 4. Vit chng trnh nhp mt dy n s thc bng cch dng bin con tr, cp pht b nh cho dy ri sp xp theo th t tng dn. #include <stdio.h> #include <conio.h> #include <alloc.h> void main() { int n; 57

printf("\n So phan tu cua day N="); scanf("%d",&n); float *x=(float*)malloc(n*sizeof(float)); for (int i=0;i<n;i++) { printf("\n X[%d]=",i); scanf("%f",x+i); } for(i=0;i<n-1;++i) for (int j=i+1;j<n;++j) if (x[i]>x[j]) { float tg=x[i]; x[i]=x[j]; x[j]=tg; } printf("\n Day sau khi sap xep\n"); for (i=0;i<n;++i) printf("%0.2f ",x[i]); getch(); } Bi 5. Vit chng trnh nhp mt mng thc cp khng qu 20x20 v tm gi tr ln nht trong cc phn t ca mng. #include <conio.h> #include <stdio.h> void main() { float a[20][20],smax; int m,n,i,j,imax,jmax; clrscr(); puts(" Cho biet so hang va so cot cua ma tran: "); scanf("%d%d",&m,&n); for (i=0;i<m;++i) for (j=0;j<n;++j) { printf("\n a[%d][%d]=",i,j); 58

scanf("%f",&a[i][j]); } smax=a[0][0]; for (i=0;i<m;++i) for(j=0;j<n;++j) if(smax<a[i][j]) smax=a[i][j]; puts("\n\n Ma tran"); for (i=0;i<m;++i) for (j=0;j<n;++j) { if (j==0) puts(""); printf("%6.1f",a[i][j]); } puts("\n\n Phan tu max:"); printf("\n Co gia tri=%6.1f", smax); getch(); } Bi 6. Hy vit mt hm gi l merge_arrays() nhn vo hai mng mt chiu c sp xp v trn chng thnh mt mng cng c sp xp. Khi thc hin, khng c chuyn hai mng vo mt mng ri sp xp li. Hm c tiu nh sau: void merge_arrays(double a[],double b[],double c[], int n, int m) y, a v b l hai mng sp xp v c l mng cha kt qu trn. #include <stdlib.h> #include <stdio.h> #include <conio.h> void merge_arrays(double a[], double b[], double c[],int n, int m); void encoder(double a[], int n); void index(double a[], int n); void display(double a[],int n); main() { double a[100],b[100],c[200]; int n,m; 59

do { clrscr(); printf("Kich thuoc mang A, N=");scanf("%d",&n); if (n>100 || n<0) printf("\n Ban phai nhap lai!"); } while (n>=100 && n<=0); encoder(a,n); do { clrscr(); printf("Kich thuoc mang B, M=");scanf("%d",&m); if (m>100 || m<0) printf("\n Ban phai nhap lai!"); } while (m>=100 && m<=0); encoder(b,m); index(a,n); index(b,m); printf("\n Mang A sau khi sap tang:\n\n"); display(a,n); printf("\n Mang B sau khi sap tang:\n\n"); display(b,m); merge_arrays(a,b,c,n,m); printf("\nMang sau khi tron:\n"); display(c,n+m); getch(); } void merge_arrays(double a[], double b[], double c[],int n,int m) { int i=0,j=0,k=0; while ((i<n)&&(j<m)) { if(a[i]<=b[j]) { c[k]=a[i]; i+=1; } else 60

{ c[k]=b[j]; j+=1; } k+=1; } while (i<n) { c[k]=a[i]; i+=1; k+=1; } while (j<m) { c[k]=b[j]; j+=1; k+=1; } } void encoder(double a[], int n) { int i; for(i=0; i<n; i++)a[i]=rand(); } void index(double a[], int n) { int i,j; double x; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if (a[i]>a[j]) { x=a[i]; a[i]=a[j]; a[j]=x; } } void display(double a[],int n) 61

{ int i; for (i=0;i<n;i++) { printf("%6.1f ",a[i]); if ((i+1)% 20 ==0)printf("\n"); } } Bi 7. Hy vit chng trnh thc hin cc cng vic sau: a) Khi to mng ngu nhin. b) Thng bo ln mn hnh phn t b nht v ln nht trong dy. c) Thng bo ln mn hnh tng cc s m v trung bnh cng cc s dng ca dy trn d) Nhp vo mt s nguyn x. Thng bo ln mn hnh s nguyn x c trong dy trn hay khng. e) Kim tra xem dy trn c sp xp tng dn cha, nu cha th tin hnh sp xp dy n tng dn v in dy sau khi sp xp ra mn hnh. #include <stdlib.h> #include <stdio.h> #include <conio.h> void encoder(int a[], int n); void index(int a[], int n); void display(int a[],int n); void min_max(int a[],int n); void sum(int a[],int n); void search(int a[],int n); void test(int a[],int n); void main() { int a[100]; int n; do { clrscr(); printf("Kich thuoc mang A, N=");scanf("%d",&n); if (n>100 || n<0) printf("\n Ban phai nhap lai!"); } while (n>=100 && n<=0); encoder(a,n); display(a,n); 62

min_max( a,n); sum( a,n); search(a,n); test(a,n); getch(); } void encoder(int a[], int n) { int i; printf("\nKhoi tao mang ngau nhien gom %d phan tu. \n",n); for(i=0; i<n; i++)a[i]=rand(); } void index(int a[], int n) { int i,j,x; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if (a[i]>a[j]) { x=a[i]; a[i]=a[j]; a[j]=x; } } void display(int a[],int n) { int i; for (i=0;i<n;i++) { printf("%6d",a[i]); if ((i+1)% 20 ==0)printf("\n"); } } void min_max(int a[],int n) { int i; int min=a[0], max=a[0]; 63

for(i=1;i<n;i++) { if(min>a[i])min=a[i]; if(max<a[i])max=a[i]; } printf("\n Gia tri lon nhat : %d\n",max); printf("\n Gia tri nho : %d\n",min); } void sum(int a[],int n) { int i, count=0; double av; double sum1=0, sum2=0; for(i=0;i<n;i++) { if(a[i]>0){ sum1=sum1+a[i];count+=1; } if(a[i]<0) sum2+=+a[i]; } printf("\n Tong gia tri cac phan tu am : %d\n",sum2); av=sum1/count; printf("\n Trung binh cac so duong : %6.0f\n",av); } void search(int a[],int n) { int x; int i=0; printf("\n NHap gia tri can tim X = ");scanf("%d",&x); while ((i<n)&&(a[i]!=x))i+=1; if (i==n)printf("\n%d Khong co trong day \n",x); else printf("\n %d tim thay o chi so %d\n",x,i); } void test(int a[],int n) { int i=0;; while ((a[i]<=a[i+1])&&(i<n-1))i+=1; if (i!=n-1) 64

{ printf("\n Mang chua duoc sap xep, cho sap xep! \ n" ); index(a,n); } printf("\n Mang sau khi sap xep tang:\n"); display(a,n); } Bi 8. Cho mt mng A gm n phn t nguyn c sp xp (tng dn hoc gim dn). Nhp vo mt s nguyn x, tin hnh chn s x ny vo mng A sao cho th t trong mng khng thay i. #include <stdlib.h> #include <stdio.h> #include <conio.h> void encoder(int a[], int n); void index(int a[], int n); void display(int a[],int n); void insert(int a[],int n,int x); void main() { int a[100]; int n,x; do { clrscr(); printf("Kich thuoc mang A, N=");scanf("%d",&n); if (n>100 || n<0) printf("\n Ban phai nhap lai!"); } while (n>=100 && n<=0); encoder(a,n); index(a,n); printf("\n Mang A sau khi sap xep:\n"); display(a,n); printf("\nNhap gia tri can chen, X=");scanf("%d",&x); n+=1; insert(a,n,x); printf("\nMang sau khi chen %d:\n",x); display(a,n); getch(); 65

} void insert(int a[], int n,int x) { int i=0,j; while ((a[i]<=x)&&(i<n-1))i+=1; if(i!=n-1) for(j=n-1;j>i;a[j--]=a[j-1]); a[i]=x; } void encoder(int a[], int n) { int i; for(i=0; i<n; i++)a[i]=rand(); } void index(int a[], int n) { int i,j; int x; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if (a[i]>a[j]) { x=a[i]; a[i]=a[j]; a[j]=x; } } void display(int a[],int n) { int i; for (i=0;i<n;i++) { printf("%6d",a[i]); if ((i+1)% 10 ==0)printf("\n"); } } Bi 9. Cho mt ma trn A cp m n ca cc s nguyn. Vit chng trnh thc hin cc cng vic sau : a) Thng bo ln mn hnh phn t ln nht v b nht ca ma trn A. 66

b) m xem trong ma trn A c bao nhiu phn t bng vi s nguyn x c nhp t bn phm v thng bo v tr ca chng c) Tin hnh sp xp li ma trn A theo yu cu sau : - Mi hng sp xp tng dn theo hng. - Sp xp gim dn theo tng ca mi hng - In ma trn sau khi sp xp ra mn hnh. #include <stdlib.h> #include <stdio.h> #include <conio.h> void encoder(int a[][50], int n); void index(int a[][50], int n); void display(int a[][50],int n); void count(int a[][50],int n,int x); void min_max(int a[][50],int n); void main() { int a[50][50]; int n,x; do { clrscr(); printf("Kich thuoc mang N=");scanf("%d",&n); if (n>50 || n<0 ) printf("\n Ban phai nhap lai!"); } while (n>=50 && n<=0 ); encoder(a,n); clrscr(); printf("\nMang :\n\n"); display(a,n); printf("\na) Tim gia tri Min va Max \n\n"); min_max(a,n); printf("\nb) Dem so phan tu co gia tri = x\n"); printf("\nNhap gia tri x = ");scanf("%d",&x); count(a,n,x); printf("\nc) Sap xep mang A:\n\n"); index(a,n); printf("\n Mang A sau khi sap xep:\n\n"); display(a,n); 67

getch(); } void min_max(int a[][50],int n) { int min=a[0][0], max=a[0][0],i,j; for (i=0;i<n;i++) for (j=0;j<n;j++) { if(a[i][j]>max) max=a[i][j]; if(a[i][j]<min) min=a[i][j]; } printf("\nGia tri min :%d",min); printf("\nGia tri Max :%d",max); } void count(int a[][50],int n,int x) { int i,j, count=0; printf("\nDanh sach cac phan tu co gia tri = %d\n",x); for (i=0;i<n;i++) for (j=0;j<n;j++) if(a[i][j]==x) { count+=1; printf("\nSo phan tu:%d ",count); printf("Hang :%3d va cot:%3d ",i+1,j+1); } if(count==0)printf("\nKhong co phan tu = %d ",x); } void encoder(int a[][50], int n) { int i,j; for(i=0; i<n; i++) for (j=0;j<n;j++)a[i][j]=rand(); } void index(int a[][50], int n) { int i,j,t=1,k; while (t==1) { 68

t=0; k=a[0][0]; for (i=0;i<n;i++) for (j=0;j<n;j++) { if(k>a[i][j])t=1; k=a[i][j]; } if(t>=1) { for(i=0;i<n;i++) { for(j=0;j<n-1;j++) if(a[i][j]>a[i][j+1]) { k=a[i][j]; a[i][j]=a[i][j+1]; a[i][j+1]=k; } if(i<n-1) if(a[i][n-1]>a[i+1][0]) { k=a[i][n-1]; a[i][n-1]=a[i+1][0]; a[i+1][0]=k; } } } } } void display(int a[][50],int n) { int i,j; for (i=0;i<n;i++) { for (j=0;j<n;j++)printf("%6d",a[i][j]); printf("\n"); } 69

} Bi 10. Vit chng trnh in tt c phng n chia n vin bi cho m ngi. #include <stdio.h> #include <conio.h> int a[100]; int i,j,m,n; void inkq() { j+=1; printf("\n Cach thu %d : ",j); for (i=1;i<=n;i++) printf("%d ",a[i]); } void chia(int m, int n) { a[n] +=1; if (m>1) chia(m-1,n); else inkq(); a[n] -=1; if (n>1) chia(m,n-1); } void main() { clrscr(); do { printf("\n Cho so bi m = "); scanf("%d",&m); printf("\n Cho so nguoi n = "); scanf("%d",&n); } while (m<=0 || n<=0); for (i=1;i<=n;i++) a[i]=0; j=0; chia(m,n); getch(); } 70

Bi 11. Vit chng trnh lit k tt c cc hon v ca tp {1,2,...,n} #include <stdio.h> #include <conio.h> #define MAX 10 int mang[MAX], n; void swap (int *x, int *y) { int tmp; tmp = *x; *x = *y; *y = tmp; } void hoanvi(int k) { int j; if (k==1) { printf("\n"); for (j=0; j<n; j++) printf("%d ", mang[j]); } else for (j=k-1; j>=0; j--) { swap(&mang[k-1], &mang[j]); hoanvi(k-1); swap(&mang[j], &mang[k-1]); } } void main() { clrscr(); int i; 71

printf("\nCho biet so phan tu (N < 10) : "); scanf("%d", &n); for (i=0; i<n; i++) mang[i] = i; hoanvi(n); getch(); } Bi 12. Nhp dy s thc t bn phm, sp xp dy theo th t tng dn v hin th ra mn hnh. #include <iostream.h> #include <conio.h> #include <stdio.h> void nhapds(double *a,int n) { for(int i=0;i<n;++i) { cout<<"\n Phan tu thu "<<i<<":"; cin>>a[i]; } } void hv(double &x,double &y) { double tam=x;x=y;y=tam; } void sapxep(double *a,int n) { for(int i=0;i<n-1;++i) for(int j=i+1;j<n;++j) if(a[i]>a[j]) hv(a[i],a[j]); } void main() { double x[100]; int i,n; 72

clrscr(); cout<<"\n nhap so phan tu N = "; cin>>n; nhapds(x,n); sapxep(x,n); cout<<"\nCac phan tu mang sau khi sap xep :"; for(i=0;i<n;++i) printf("\n%6.2f",x[i]); getch(); } Bi 13. Vit chng trnh sau nhp mt mng thc kch thc khng qu 20x20, in mng nhp v cc phn t ln nht v nh nht trn mi hng ca mng. #include <iostream.h> #include <conio.h> #include <stdio.h> #include <iomanip.h> void nhapmt(float a[20][20],int m,int n) { for(int i=0;i<m;++i) for(int j=0;j<n;++j) { cout<<"\n a["<<i<<","<<j<<"]="; cin>> a[i][j]; } } void inmt(float a[20][20],int m,int n) { cout<<setiosflags(ios::showpoint)<<setprecision(1); cout<<"\nMang da nhap : "; for(int i=0;i<m;++i) for(int j=0;j<n;++j) { if(j==0) cout<<"\n"; cout<<setw(6)<<a[i][j]; } } void maxminds(float *x,int n,int &vtmax,int &vtmin) 73

{ vtmax=vtmin=0; for(int i=1;i<n;++i) { if(x[i]>x[vtmax]) if(x[i]<x[vtmin]) }

vtmax=i; vtmin=i;

} void main() { float a[20][20]; int m,n; clrscr(); cout<<"\n Nhap so hang va so cot : "; cin>>m>>n; nhapmt(a,m,n); inmt(a,m,n); float *p=(float*) a; int vtmax,vtmin; for(int i=0;i<m;++i) { p=((float*)a)+i*20; maxminds(p,n,vtmax,vtmin); printf("\n Hang %d phan tu max=%6.1f tai cot %d",i,p[vtmax],vtmax); printf("\n Phan tu min=%6.1f tai cot %d",p[vtmin],vtmin); } getch(); } Bi 14. Vit chng trnh sp xp tng dn cc phn t ca mt mng cc s nguyn theo phng php quick sort #include <iostream.h> # include <conio.h> int a[5]; void sapxep(int l,int r); 74

void main() { int i; clrscr(); for (i=0;i<5;i++) { cout<<"a["<<i<<"]="; cin>>a[i]; } sapxep(0,4); for (i=0;i<5;i++) cout <<a[i]<<"\t"; getch(); } void sapxep(int l,int r)

{ int i,j,x,y; i=l;j=r;x=a[(l+r)/2]; do { while (a[i] < x) i=i+1; while (x < a[j] ) j=j-1; if (i<=j) { y=a[i]; a[i]=a[j]; a[j]=y; i++; j--; } } while (i<=j); if (l<j) 75

sapxep(l,j); if (i<r) sapxep(i,r); } Bi 15. Vit chng trnh tnh tng theo hng ca ma trn cp 3x5. #include <iostream.h> #include <conio.h> void tongh(int a[][5],int m,int n,int *th); void main() { clrscr(); int b[3][5]; int h[3]; int x; int i,j,m,n; cout<<"\n nhap m va n : ";cin>>m>>n; for (i=0;i<m;++i) for (j=0;j<n;++j) { cout<<"\n b["<<i<<j<<"]="; cin>>b[i][j]; } tongh(b,m,n,h); for (i=0;i<m;++i) cout<<"\n tong hang "<<i<<" "<<h[i]; getch(); } void tongh(int a[][5],int m,int n,int *th) { int i,j; for (i=0;i<m;++i) { th[i]=0; for (j=0;j<n;++j) th[i]+=a[i][j]; } } Bi 16. Cho bit kt qu vic thc hin chng trnh sau: 76

#include <iostream.h> #include <conio.h> void main() { clrscr(); int x=10; int *px; px=&x; //con tro px tro toi bien x cout<<"\ndia chi cua bien x la :"<<&x; cout<<"\ndia chi cua con tro px la :"<<&px; cout<<"\nnoi dung cua bien x la :"<<x; //10 cout<<"\nnoi dung cua px (chua dia chi bien x) la :"<<px; cout<<"\nGia tri ma px tro den :"<<*px; //10 getch(); } Bi 17. Cho bit kt qu vic thc hin chng trnh sau: #include <iostream.h> #include <conio.h> void main() { clrscr(); int k,a[10],*p,*q; for (k=0;k<10;k++) a[k]=3*k+5; p=a; //p tro toi a q=p; //q tro toi vung ma p tro toi, tuc la tung phan tu mang a for (k=0;k<3;k++) cout<<*(q+k)<<' '; //5 8 11 p=q+2; //huong p toi vung co dia chi q tro toi cong them 2 - pt thu 3 la 11 cout<<"\n"; for (k=0;k<3;k++) cout<<*(p+k)<<' '; // 11 14 17 getch(); } Bi 18. Cho bit kt qu ca vic thc hin chng trnh sau: 77

# include <stdio.h> # include <conio.h> next(); extern int a=1,b=2,c=3; /* khai bao bien ngoai */ main() { clrscr(); printf("\nGia tri a = %d b = %d va c = %d ",a, b,c); next(); getch(); } next() { printf("\nGia tri a = %d b = %d va c = %d ",a, b,c); } /*ket qua in ra : Gia tri a=1 b=2 va c=3 Gia tri a=1 b=2 va c=3 */ Bi 19. Cho bit kt qu ca vic thc hin chng trnh sau y: #include <stdio.h> #include <conio.h> void func(int i, int j, int k); int a = 2, b = 4, c = 'D'; main() { clrscr(); printf("\nTrong ham main : a = %d, b = %d, c = %d",a,b,c); func(a, b, c); printf("\nSau lan goi ham thu nhat : a = %d, b = %d, c = %d",a,b,c); func(a, b, c); printf("\nSau lan goi ham thu hai : a = %d, b = %d, c = %d",a,b,c); getch(); return 0; 78

} void func(int i, int j, int k) { static x ; a=a+2; i *= 3 + x ; j = i * x++ ; k = (i + j) % 2 ; printf("\nTrong ham : a = %d, b = %d, c = %d", i, j, k); } Bi 20. Gii thch cch thc hot ng ca con tr hm trong chng trnh sau y: #include <stdio.h> #include <conio.h> #include <iostream.h> enum bool {false, true}; void void void void void nhap(int &x, int &y); bp(int &x, int &y); lp(int &x, int &y); hv(int &x, int &y); hienthi(int a, int b);

void main() { void (*pf)(int &, int &); bool thoat = false; int a=2, b=4; int chon; clrscr(); while (thoat == false) { printf("\n (0) Thoat (1)Nhap (2)Binh phuong (3)Lap phuong (4)Hoan vi \n"); scanf("%d",&chon); switch (chon) { case 1: pf = nhap;break; case 2: pf = bp;break; case 3: pf = lp;break; case 4: pf = hv;break; default: thoat = true;break; } 79

if (thoat) break; hienthi(a,b); pf(a,b); hienthi(a,b); } getch(); } void hienthi(int x, int y) { printf("\n a = %d, b = %d \n",x,y);} void bp(int &x, int &y) { x *= x; y *= y; } void lp(int &x, int &y) { x = x*x*x; y = y*y*y; } void hv(int &x, int &y) { int tam =x; x = y; y = tam; } void nhap(int &x, int &y) { printf("\n Nhap gia tri moi cua a : "); scanf("%d",&x); printf("\n Nhap gia tri moi cua b : "); scanf("%d",&y); } 80

Tr li: Chng trnh nh ngha 4 hm tnh bnh phng, ly tha ba, nhp liu. Cc hm ny c cng kiu tr v l void v c cng s tham s l hai tham chiu ti s nguyn int. Trong hm main khai bo mt con tr hm pf tr ti mt hm c kiu tr v l void v c hai tham s l hai tham chiu ti s nguyn int. Chng trnh yu cu ngi s dng chn mt trong 5 s, ty theo s nhp vo m con tr hm pf gi thc hin hm thch hp. Bi 21. Vit li chng trnh trn nhng khng s dng con tr hm. #include <stdio.h> #include <conio.h> #include <iostream.h> enum bool {false, true}; void void void void void nhap(int &x, int &y); bp(int &x, int &y); lp(int &x, int &y); hv(int &x, int &y); hienthi(int a, int b);

void main() { bool thoat = false; int a=2, b=4; int chon; clrscr(); while (thoat == false) { printf("\n (0) Thoat (1)Nhap (2)Binh phuong (3)Lap phuong (4)Hoan vi \n"); scanf("%d",&chon); switch (chon) { case 1: hienthi(a,b); nhap(a,b); hienthi(a,b); break; case 2: hienthi(a,b); 81

bp(a,b); hienthi(a,b); break; case 3: hienthi(a,b); lp(a,b); hienthi(a,b); break; case 4: hienthi(a,b); hv(a,b); hienthi(a,b); break; default: thoat = true;break; } if (thoat) break; } getch(); } void hienthi(int x, int y) { printf("\n a = %d, b = %d \n",x,y);} void bp(int &x, int &y) { x *= x; y *= y; } void lp(int &x, int &y) { x = x*x*x; y = y*y*y; } void hv(int &x, int &y) 82

{ int tam =x; x = y; y = tam; } void nhap(int &x, int &y) { printf("\n Nhap gia tri moi cua a : "); scanf("%d",&x); printf("\n Nhap gia tri moi cua b : "); scanf("%d",&y); } Bi 22. Gii thch cch thc hot ng ca mng con tr hm trong chng trnh sau y: #include <stdio.h> #include <conio.h> #include <iostream.h> void nhap(long &x, long &y); void bp(long &x, long &y); void lp(long &x, long &y); void hv(long &x, long &y); void hienthi(long a, long b); void main() { const max = 5; void (*pfa[max])(long &, long &); long a=1, b=2; int chon; clrscr(); for(int i=0;i<max;i++) { printf("\n (1)Nhap (2)Binh phuong (3)Lap phuong (4)Hoan vi \n"); scanf("%d",&chon); switch (chon) 83

{ case 1: pfa[i] = nhap;break; case 2: pfa[i] = bp;break; case 3: pfa[i] = lp;break; case 4: pfa[i] = hv;break; default:pfa[i] = 0; } } for(i=0;i<max;i++) { pfa[i](a,b); hienthi(a,b); } getch(); } void hienthi(long x, long y) { printf("\n a = %ld, b = %ld \n",x,y);} void bp(long &x, long &y) { x *= x; y *= y; } void lp(long &x, long &y) { x = x*x*x; y = y*y*y; } void hv(long &x, long &y) { long tam =x; x = y; y = tam; } void nhap(long &x, long &y) 84

{ printf("\n Nhap gia tri moi cua a : "); scanf("%ld",&x); printf("\n Nhap gia tri moi cua b : "); scanf("%ld",&y); } Bi 23. Gii thch cch thc hot ng ca tham s hm l con tr hm trong chng trnh sau y: #include <stdio.h> #include <conio.h> #include <iostream.h> enum bool {false, true}; void void void void void nhap(int &x, int &y); bp(int &x, int &y); lp(int &x, int &y); hv(int &x, int &y); hienthi(void (*)(int &, int &), int &, int &);

void main() { void (*pf)(int &, int &); bool thoat = false; int a=2, b=4; int chon; clrscr(); while (thoat == false) { printf("\n (0) Thoat (1)Nhap (2)Binh phuong (3)Lap phuong (4)Hoan vi \n"); scanf("%d",&chon); switch (chon) { case 1: pf = nhap;break; case 2: pf = bp;break; case 3: pf = lp;break; case 4: pf = hv;break; default: thoat = true;break; } 85

if (thoat) break; hienthi(pf,a,b); } getch(); } void hienthi(void (*pf)(int &, int &),int &x, int &y) { printf("\n a = %d, b = %d \n",x,y); pf(x,y); printf("\n a = %d, b = %d \n",x,y); } void bp(int &x, int &y) { x *= x; y *= y; } void lp(int &x, int &y) { x = x*x*x; y = y*y*y; } void hv(int &x, int &y) { int tam =x; x = y; y = tam; } void nhap(int &x, int &y) { printf("\n Nhap gia tri moi cua a : "); scanf("%d",&x); printf("\n Nhap gia tri moi cua b : "); scanf("%d",&y); } 86

Bi 24. Vit chng trnh c s dng hm vi tham s l con tr hm tnh max (x2, y2). Hm tnh max ny c khai bo nguyn mu nh sau: float lonnhat(float (*f)(float),float (*g)(float),float x); #include <stdio.h> #include <conio.h> float bp(float x); float lp(float x); float lonnhat(float (*f)(float),float (*g)(float),float x); void main() { float x,t; clrscr(); printf("\n Nhap x="); scanf("%f",&x); printf("\n %.2f binh phuong = %.2f",x,bp(x)); printf("\n %.2f lap phuong = %.2f",x,lp(x)); t = lonnhat(bp,lp,x); printf("\n Max la : %.2f",t); getch(); } float lonnhat(float (*f)(float),float (*g)(float),float x) { return (((*f)(x)>(*g)(x))?(*f)(x):(*g)(x)); } float bp(float x) { return (x*x); } float lp(float x) { return (x*x*x); } 87

Bi 25. Vit chng trnh c s dng hm vi tham s l con tr hm tnh:


S = 1 + x + ( x ) 2 + ... + ( x ) n

#include <stdio.h> #include <conio.h> #include <math.h> float lt(float x,int n); float f(float x,int n,float (*g)(float,int)); void main() { int n; float x,t; printf("\n Nhap x = : "); scanf("%f",&x); printf("\n Nhap so nguyen khong am n = "); scanf("%d",&n); t = sqrt(x); printf("\n Tong luy thua : %f",f(t,n,lt)); getch(); } float lt(float x,int n) { int i; float s; if (n==0) return (1.0); for (s=1,i=1;i<=n;i++) s*=x; return (s); } float f(float x,int n,float (*g)(float,int)) { int i; 88

float s; for (s=0.0,i=0;i<=n;i++) s+=(*g)(x,i); return (s); }

89

CHNG 4 CHUI K T

4.1. CU HI
1. Phm vi gi tr ca cc k t trong bng m ASCII? 2. nh ngha chui? 3. Ti sao lu tr mt chui gm n k t ta cn mt mng k t gm n+1 phn t. 4. C bao nhiu byte c dng trong b nh cho mi bin c khai bo sau y: a. char *str1 = { "String 1" }; b. char str2[] = { "String 2" }; c. char string3; d. char str4[20] = { "This is String 4" }; e. char str5[20]; 5. Vi khai bo: char *string = "A string!"; Hy cho bit cc gi tr sau: a. string[0] b. *string c. string[9] d. string[33] e. *string+8 f. string 6. Vit dng lnh khai bo mng k t v khi to chui: "Pointers are fun!". 7. Tng t cu trn nhng khng dng mng 8. Vit dng lnh cp pht vng nh lu chui 80 k t v nhp chui t bn phm vo vng nh . 9. Vit hm sao chp mt mng k t sang mt mng khc. 10. Vit mt hm nhn vo hai chui, m s k t trong mi chui v tr v mt con tr tr ti chui di hn. 11. C im g sai khng trong khai bo sau : char a_string[10] = "This is a string"; 12. C im g sai khng trong khai bo sau : char *quote[100] = { "Smile, Friday is almost here!" }; 13. C im g sai khng trong khai bo sau : char *string1; char *string2 = "Second"; 90

string1 = string2; 14. C im g sai khng trong khai bo sau : char string1[]; char string2[] = "Second"; string1 = string2; TR LI: 1. Cc gi trong bng m ASCII c phm vi t 0 n 255. T 0 n 127 l cc k t chun, v t 128 n 255 l cc k t m rng. 2. Mt chui l mt dy cc k t kt thc bng k t null. 3. lu k t kt thc chui l null. 4. a. 9 byte (8 byte cho chui v 1 byte cho k t null) b. 9 byte c. 1 byte d. 20 byte e. 20 byte 5. a. A b. A c. 0 (NUL) d. This is beyond the end of the string, so it could have any value. e. ! f. This contains the address of the first element of the string. 6. char array[18] = "Pointers are fun!"; 7. char *array = "Pointers are fun!"; 8. char *ptr; ptr = malloc(81); gets(ptr); 9. #include <stdio.h> #define SIZE 10 void copyarrays( int [], int []); main() 91

{ int ctr=0; int a[SIZE] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int b[SIZE]; /* values before copy */ for (ctr = 0; ctr < SIZE; ctr ++ ) { printf( "a[%d] = %d, b[%d] = %d\n", ctr, a[ctr], ctr, b[ctr]); } copyarrays(a, b); /* values after copy */ for (ctr = 0; ctr < SIZE; ctr ++ ) { printf( "a[%d] = %d, b[%d] = %d\n", ctr, a[ctr], ctr, b[ctr]); } return 0; } void copyarrays( int orig[], int newone[]) { int ctr = 0; for (ctr = 0; ctr < SIZE; ctr ++ ) { newone[ctr] = orig[ctr]; } } 10. #include <stdio.h> #include <string.h> /* function prototypes */ char * compare_strings( char *, char *); main() { char *a = "Hello"; char *b = "World!"; char *longer; 92

longer = compare_strings(a, b); printf( "The longer string is: %s\n", longer ); return 0; } char * compare_strings( char * first, char * second) { int x, y; x = strlen(first); y = strlen(second); if( x > y) return(first); else return(second); } 11. Chui c khai bo l mng 10 phn t nhng n c khi to bi chui ln hn 10 phn t. 12. Vic khi to l sai. Sa li char *quote hoc char quote[100]. 13. Khng. 14. Khng th gn mt mng cho mt mng khc.

4.2. BI TP
Bi 1. Vit chng trnh b k t a trong mt chui. #include <iostream.h> #include <conio.h> #include <stdio.h> void main() { int i,j; char x[80]; cout<<"\nnhap mot chuoi : "; gets(x); for (i=j=0;x[i]!=NULL;i++) if (x[i]!='a') { x[j]=x[i]; j++; } 93

x[j]= NULL; cout<<"\nChuoi ky tu sau khi bo ky tu a la :"; puts(x); getch(); } Bi 2. Vit chng trnh trch chui con bn tri ca mt chui. #include <iostream.h> #include <conio.h> #include <stdio.h> void main() { clrscr(); char ten[25], *tentro; tentro=ten; int i,sokytu; cout<<"\n nhap mot chuoi ky tu : "; gets(ten); cout<<"\nban muon trich bao nhieu ky tu :"; cin>>sokytu; for (i=0;i<sokytu;i++) cout<<*tentro++; getch(); } Bi 3. Cu hi nh bi 2 nhng c dng hm trch chui con bn tri. #include <stdio.h> #include <conio.h> #include <string.h> char *left(char *st,int n); void main() { char st[80]; int n; printf("\n\t nhap vao mot xau:"); gets(st); printf("\n nhap vao so n="); scanf("%d",&n); 94

printf("\n\t xau ben trai %d ky tu la: %s",n,left(st,n)); getch(); } char *left(char *st,int n) { char *p; int i,j; if(strlen(st)<=n) return(st); i=0; while(i++<n-1) p[i]=st[i]; p[i]='\0'; return(p); } Bi 4. Vit chng trnh trch chui con bn phi ca mt chui. #include <stdio.h> #include <conio.h> #include <string.h> char *right(char *st,int n); void main() { char st[80]; int n; printf("\n\t nhap vao mot xau:"); gets(st); printf("\n nhap vao so n="); scanf("%d",&n); printf("\n Xau copy ben phai %d ky tu la: %s",n,right(st,n)); getch(); } char *right(char *st,int n) { char *p; int i,j; if(strlen(st)<=n) return(st); 95

i=strlen(st)-n; j=0; while(st[i]) p[j++]=st[i++]; p[j]='\0'; return(p); } Bi 5. Vit chng trnh trch chui con trong mt chui. #include <stdio.h> #include <conio.h> #include <string.h> char *copy(char s[],int m,int n); char *copy(char s[],int m,int n) { int i,j,k; char p[100]; j=0; if((m<=0)&&(n<=0)) return(NULL); i=m; if(m==0) k=n-1; else k=n+1; while (s[i] && (i<=k)) p[j++]=s[i++]; p[j]='\0'; return(p); } void main() { char s[80],*p; int m,n; clrscr(); fflush(stdin); printf("\n\t chuong trich copy chuoi,cac chi so tinh tu 0:\n"); 96

printf("\n nhap vao mot chuoi:");gets(s); printf("\t\t nhap vi tri dau m= ");scanf("%d",&m); printf("\t\t nhap so ky tu can copy n = "); scanf("%d",&n); p=copy(s,m,n); if(p==NULL) printf("\n\t xau ket qua la NULL"); else printf("\n\t xau ket qua la:%s",copy(s,m,n)); getch(); } Phin bn khc: /* Trich chuoi con */ #include <stdio.h> #include <conio.h> #include <string.h> void trichchuoi(char *s, char *kq,int n, int m); void main() { char *s, *kq, ch; int n, m; do { clrscr(); printf("\n CHUONG TRINH TRICH CHUOI CON TU CHUOI DA CHO, TU VI TRI n VOI m KI TU "); printf("\n (nhan <ESC> de thoat)"); printf("\n "); fflush(stdin); printf(" \n Nhap chuoi ban dau : "); gets(s); printf (" \n Tu vi tri :"); scanf("%d", &n); printf("\n Lay may ki tu :"); scanf("%d", &m); trichchuoi(s,kq,n,m); 97

printf("\n Chuoi con duoc lay ra la :"); puts(kq); ch=getch(); } while (ch!=27); } void trichchuoi(char *s, char *kq,int n, int m) { int i,t; for (t=0; t<m; t++) *(kq+t)=*(s+n+t-1); *(kq+t)= '\0'; } Bi 6. Vit chng trnh xa chui con trong mt chui. #include <stdio.h> #include <conio.h> #include <ctype.h> #include <string.h> char *delst(char s[],int m,int n); void main() { char st[100],*s; int m,n; tt:fflush(stdin); textcolor(15); textbackground(1); clrscr(); printf("\n\n hay nhap vao mot chuoi :"); gets(st); printf("\n\t vi tri bat dau xoa m= "); scanf("%d",&m); printf("\t nhap so ky tu can xoa n= "); scanf("%d",&n); s=delst(st,m,n); if(s[0]==0) printf("\n\t chuoi sau khi xoa la chuoi rong:"); 98

else printf("\t chuoi sau khi xoa la: %s",s); getch(); printf("\n\n\t Co tiep tuc khonf c/k ? : "); if(toupper(getch())=='C') goto tt; } char *delst(char s[],int m,int n) { char p[100];int i,j; if(s[0]==0) return(0); if(m<=0 && n<=0) return(s); if(n<=0 || m>strlen(s)) return(s); if(m<0) m=0; i=j=0; while(s[i]) { if(i<m||(i>=m+n)) p[j++]=s[i]; i++; } p[j]='\0'; return(p); } Bi 7. Vit chng trnh in cc t ca chui trn mi dng . #include <stdio.h> #include <conio.h> #include <string.h> void main() { char s[50]; int i, len; printf("\nNhap vao mot chuoi : "); 99

gets(s); len = strlen(s); i = 0; while (i<len) { while (s[i] == ' ' && i<len) i++; while (s[i] != ' ' && i<len) putc(s[i++], stdout); putc('\n', stdout); } getch(); } Bi 8. Cng cu hi bi 7 nhng c dng hm. #include <stdio.h> #include <conio.h> #include <string.h> void in(char *p); void trichchuoi(char *s,char *kq,int n, int m); void main() { char *p,ch; do { clrscr(); printf("\n CHUONG TRINH IN CAC TU CUA CHUOI THEO TUNG DONG "); printf("\n (nhan <ESC> de thoat)"); printf("\n "); fflush(stdin); printf("\n Nhap chuoi can in :"); gets(p); printf("\n Sau khi tach : \n"); in(p); 100

ch=getch(); } while (ch!=27); } void trichchuoi(char *s, char *kq,int k, int m) { int i,t; for (t=0; t<m; t++) *(kq+t)=*(s+k+t-1); *(kq+t)= '\0'; } void in (char *p) { char *kq; int n=0,m,k; k=strlen(p); while (n<(strlen(p)+1)) { m=0; while (p[n] == ' ') n++; k = n+1; while (p[n++] != ' ') m++; trichchuoi(p,kq,k,m); puts(kq); } } Bi 9. Vit chng trnh tm v tr mt chui con trong mt chui cho. #include <stdio.h> #include <conio.h> void main() { char chuoi_lon [125], chuoi_con [10]; int i, j; printf("\nNhap vao chuoi lon : "); gets(chuoi_lon); 101

printf("\nNhap vao chuoi can tim : "); gets(chuoi_con); i = 0; while (chuoi_lon[i] != 0) { j = 0; while (chuoi_lon[i++] == chuoi_con[j++] && chuoi_lon[i-1] != 0 && chuoi_con[j-1] != 0) ; if (chuoi_lon[i-1] != 0 && chuoi_con[j-1] == 0) printf("\nTim thay tai vi tri %d", i-j); } getch(); } Bi 10. Vit chng trnh ghp hai chui thnh mt chui. #include <iostream.h> #include <conio.h> #include <stdio.h> void main() { int i,j; char *x,*t; //hay char x[20,t[20]; cout<<"\nnhap chuoi thu nhat : ";gets(x); cout<<"\nnhap chuoi thu hai : ";gets(t); for (i=j=0;x[i]!='\0';i++) ; //lenh rong do x[i++]=t[j++]; while (t[j]!='\0'); x[i]='\0'; cout<<"\nChuoi ghep la :"<<x; getch(); } Bi 11. Cng cu hi bi 10, nhng c dng hm. #include <stdlib.h> #include <stdio.h> 102

#include <conio.h> #include <string.h> char *strcat(char *str1,char *str2); void main() { char str1[100],str2[100]; printf("\n Nhap chuoi 1 : ");gets(str1); printf("\n Nhap chuoi 2 : ");gets(str2); printf("\n Chuoi sau khi ghep :%s",strcat(str1,str2)); getch(); } char *strcat(char *str1,char *str2) { int i=0,j=0,k=0; char str[200]; while(str1[i])str[k++]=str1[i++]; while(str2[j])str[k++]=str2[j++]; str[k]='\0'; return str; } Bi 12. Vit chng trnh nhp vo tn ca khng qu 50 hc sinh, sp xp v in ra theo th t tng. Chng trnh s dng mt hm nhp d liu, mt hm so snh chui v mt hm hin th kt qu sp xp. //Sap xep chuoi, khong dung ham mau strcmp() #include <conio.h> #include <stdlib.h> #include <stdio.h> void nhap(char *p[],int n) { for(int i=0;i<n;i++) { fflush(stdin); p[i]=(char *)calloc(10,sizeof(char)); printf("\nNhap Ten :"); gets(p[i]); } } 103

int strcmp(char *x,char *t) { while (*x==*t && *x!=NULL) { *x++; *t++; } if (*x==NULL && *t==NULL) return (0); else return *x - *t; } /* Phien ban 2 cua ham strcmp() int strcmp(char *s, char *t) { int i; for (i = 0; s[i] == t[i]; i++) if (s[i] == '\0') return 0; return s[i] - t[i]; }*/ /* Phien ban 3 cua ham strcmp() int strcmp(char *s, char *t) { for ( ; *s == *t; s++, t++) if (*s == '\0') return 0; return *s - *t; }*/ void sapxep(char *p[], int n) { char *tam; int i,j; tam=(char *)calloc(10,sizeof(char)); for (i=0;i<n-1;i++) for (j=i+1;j<n;j++) if (strcmp(p[i],p[j]) >0) { tam=p[i]; 104

p[i]=p[j]; p[j]=tam; } } void hienthi(char *p[],int n) { for (int i=0; i<n; i++) printf("\n\r %2d. %s",i+1,p[i]); } void main() { int n; char *a[50]; printf("\nNhap so hoc sinh :"); scanf("%d",&n); nhap(a,n); sapxep(a,n); hienthi(a,n); getch(); } Bi 13. Vit chng trnh o ngc chui. #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <string.h> char *dnchuoi(char *s) { char *tmp, i; i = 0; tmp = (char *)malloc(strlen(s)+1); while (i<strlen(s)) *(tmp+i) = *(s + strlen(s) - i++ - 1); *(tmp+i) = 0; return tmp; 105

} void main() { char hello[] = "Truong Dai hoc Khoa hoc"; char *s; printf("\nChuoi ban dau = %s", hello); s = dnchuoi(hello); printf("\nChuoi dao nguoc = %s", s); getch(); } Bi 14. Vit chng trnh kim tra chui c i xng hay khng? #include <stdio.h> #include <conio.h> #include <string.h> void main() { char chuoi[125]; int i = 0, j; printf("\nNhap vao chuoi kiem tra : "); gets(chuoi); j = strlen(chuoi) - 1; while(chuoi[i++] == chuoi[j--]) ; if (--i>=++j) printf("Chuoi doi xung"); else printf("Chuoi khong doi xung"); getch(); } Bi 15. Cu hi nh bi 14 nhng c dng hm? #include <stdio.h> #include <conio.h> #include <string.h> void daoxau(char *s,char *kq); 106

int kiemtra(char *s, char *kq); void main() { char *s,*kq,ch; do { clrscr(); printf("\n CHUONG TRINH KIEM TRA MOT CHUOI CO DOI XUNG KHONG ? "); printf("\n (nhan <ESC> de thoat)"); printf("\n "); fflush(stdin); printf("\n Nhap chuoi can kiem tra :"); gets(s); daoxau(s,kq); if (kiemtra(s,kq)) printf("\n Chuoi da cho doi xung "); else printf("\n Chuoi da cho khong doi xung"); ch=getch(); } while (ch!=27); } void daoxau(char *s, char *kq) { int i,n,t=0; n=strlen(s)-1; for ( i=n; i>=0 ; i--) { *(kq+t) = *(s+i); t++; } *(kq+t)='\0'; } int kiemtra(char *s, char *kq) { 107

if (stricmp(s,kq)==0) }

return(1);

Bi 16. Vit chng trnh loi b cc khong trng tha trong mt chui. #include <stdio.h> #include <conio.h> #include <string.h> void void { lamgon(char *chuoi); main()

*s,ch; do { clrscr(); printf("\n CHUONG TRINH XOA CAC KY TU TRANG THUA TRONG CHUOI (nhan <ESC> de thoat)"); printf("\n"); printf("\n nhap chuoi :"); gets(s); lamgon(s); printf("\n chuoi sau khi lam gon :"); puts(s); ch=getch(); } while (ch!=27); } void { lamgon( int char *chuoi)

char

j,n,t; n=strlen(chuoi); t=strstr(chuoi," ")-chuoi; while (t>=0) { for (j=t+1; j< n-1; j++) *(chuoi + j ) = *(chuoi +j+1); *(chuoi+j) ='\0'; 108

t=strstr(chuoi," if (t>=n)

n-=1; ")-chuoi; break; }

if for *(chuoi+j)

( (j=0 =

*(chuoi)==' ; *(

if *(chuoi }

(*(chuoi +n)

') { j<n-1; j++) chuoi +j+1); *(chuoi+j)='\0'; n -=1; } +n)==' ') = '\0';

Bi 17. Nhp mt chui t bn phm, kt thc khi bm Ctrl-Z v Enter. m s t trong cc dng nhp. Dng tiu ca hm m s t nh sau: int NumberWords(char szString[]) /* Dem tu trong chuoi nhap tu ban phim. */ #include <stdio.h> #include <string.h> #include <conio.h> #define TRUE 1 #define FALSE 0 int NumberWords(char * pString); #define BIGEST_LINE 256 char szInput[BIGEST_LINE]; void main() { clrscr(); int i; printf("Nhap chuoi va ket thuc bang Ctrl \n\n"); while (gets(szInput)) { printf("Chuoi '%.50s' co so tu la %2d \n",szInput,NumberWords(szInput)); 109

} printf("\n"); } int NumberWords(char szString[]) { int i; int nBlank = TRUE; int nCount = 0; for (i = 0; szString[i]; i++) { if (szString[i] != ' ') { if (nBlank) { ++nCount; } nBlank = FALSE; } else { nBlank = TRUE; } } return(nCount); } Bi 18. Cng cu hi bi 17 nhng dng tiu m s t nh sau: int NumberWords(char * pString) #include <stdio.h> #include <string.h> #include <conio.h> #define TRUE 1 #define FALSE 0 int NumberWords(char * pString); #define BIGEST_LINE 256 char szInput[BIGEST_LINE]; void main() 110

{ clrscr(); int i; printf("Nhap chuoi ky tu, de ket thuc chuong trinh bam Ctrl Z \n\n"); while (gets(szInput)) { printf("Chuoi '%.50s' co so tu la %2d \n",szInput,NumberWords(szInput)); } printf("\n"); } int NumberWords(char * pString) { int nBlank = TRUE; int nCount = 0; do { if (*(pString) && *(pString) != ' ') { if (nBlank) { ++nCount; } nBlank = FALSE; } else { nBlank = TRUE; } } while(*(pString++)); return(nCount); } Bi 19. Vit chng trnh in cc dng c nhp vo t bn phm, kt thc bng cch bm Ctrl-Z v Enter. #include <stdio.h> 111

#include <string.h> #include <conio.h> #define MAX_CHARACTERS 32767 #define MAX_LINES 1000 #define BIGEST_LINE 128 char szInput[BIGEST_LINE]; char szBuffer[MAX_CHARACTERS]; char *pBuffer[MAX_LINES]; int nBufferPointer = {0}; int nLine = 0; void main() { int i; printf("Go vao mot so dong, ket thuc nhan Ctrl Z\n"); while (gets(szInput)) { if ((nBufferPointer + strlen(szInput)) > MAX_CHARACTERS) { // Dong qua dai, xin nhap lai!. break; } pBuffer[nLine] = &szBuffer[nBufferPointer]; strcpy(pBuffer[nLine], szInput); nBufferPointer += strlen(szInput) + 1; if (++nLine >= MAX_LINES) { // Qua nhieu dong, xin nhap lai! break; } } for (i = 0; i < nLine; i++) { printf("Dong %d '%s'\n", i, pBuffer[i]); } printf("\n"); getch(); } 112

Bi 20. Vit chng trnh tm v thay th mt chui con trong mt chui cho. /* Tim kiem va thay the chuoi con trong mot chuoi lon s : chuoi lon s1 : chuoi con s2 : chuoi se thay the De chac chan khong bi loi thi chuoi s phai co kha nang chua du */ #include <stdio.h> #include <string.h> #include <conio.h> char *str_str(char *s, char *s1, char *s2) { int len = strlen(s); int len1 = strlen(s1); int len2 = strlen(s2); int i=0, j, luu; if (len1!=0) while (i<len) { if (s[i] == s1[0]) { j = 0; luu = i; while ((s[luu++] == s1[j++]) && (j < len1)) ; if (j==len1) { memmove(&s[i+len2], &s[i+len1],len-i-len1+1); memcpy(&s[i],s2,len2); len = len + len2 - len1; i += len2; } else i ++; } else i++; } return s; 113

} void main() { char s[255], s1[20], s2[20]; printf("Nhap vao chuoi lon : "); gets(s); printf("Nhap vao chuoi tim : "); gets(s1); printf("Nhap vao chuoi thay the : "); gets(s2); str_str(s, s1, s2); printf("Chuoi sau khi tim va thay the la : %s", s); getch(); } Bi 21. Vit chng trnh tm s dng, s t, s k t ca mt chui. Chui c nhp vo t bn phm v kt thc bng cch bm Ctrl-Z v Enter. #include <stdio.h> #include <ctype.h> #include <conio.h> void main() { int sokytu=0, dautu = 0, sotu=0, sodong=1; char c; puts("\n"); printf("\n Nhap vao mot so dong (ket thuc bam Ctrl-Z va Enter \n"); do { c = getchar(); if (c != '\n' && c != EOF) sokytu++; if (isalnum(c) && dautu == 0) { sotu++; dautu=1; } if (!isalnum(c) && dautu == 1) dautu = 0; 114

if (c == '\n') sodong++; } while (c != EOF); printf("\n\nSo dong : %d", sodong); printf("\nSo tu : %d", sotu); printf("\nSo ky tu : %d", sokytu); getch(); } Bi 22. Vit chng trnh tm nhng ngi c h nguyn trong mt mng cc chui. #include #include #include #define <stdio.h> <conio.h> <string.h> maxn 40

int nhap(char mang[][80]); void lamgon( char *chuoi); void in(char mang[][80],int n); void main() { char mang[maxn][80]; int tam; clrscr(); printf("\n CHUONG TRINH TIM TAT CA NHUNG NGUOI CO HO NGUYEN"); printf("\n"); tam=nhap (mang); printf("\n Nhung nguoi co ho Nguyen la :"); in(mang,tam); getch(); } int nhap(char mang[][80]) { 115

int n=0; printf("\n Nhap ten ( <ENTER> de ngung nhap)"); while (n<maxn) { printf(" \n ten thu %d:",n+1); gets(mang[n]); if (strlen(mang[n]) == 0) break; lamgon(mang[n]); n++; } return(n); } void lamgon( char *chuoi) { int j,n,t; n=strlen(chuoi); t=strstr(chuoi," ")-chuoi; while (t>=0) { for (j=t+1; j< n-1; j++) *(chuoi + j ) = *(chuoi +j+1); *(chuoi+j) ='\0'; n-=1; t=strstr(chuoi," ")-chuoi; if (t>=n) break; } if ( *(chuoi)==' ') { for (j=0 ; j<n-1; j++) *(chuoi+j) = *( chuoi +j+1); *(chuoi+j)='\0'; n -=1; } if (*(chuoi +n)==' ') *(chuoi +n) = '\0'; } 116

void in(char mang[][80], int tam) { int i=0,j=0,t; char s[6]; for (i=0;i<tam; i++) { for (t=0; t<6; t++) { s[t]=mang[i][j]; j++; } s[t] = '\0'; if (stricmp(s,"nguyen") == 0) printf("\n %s",mang[i]); } } Bi 23. Vit chng trnh tm t di nht trong chui. #include <stdio.h> #include <conio.h> #include <string.h> #include <ctype.h> char *max(char s[]); void main() { char s[80],*p; int m,n; tt: clrscr(); fflush(stdin); printf("\n\t\t chuong trih tim maxword cau xau:\n"); printf("\n nhap vao mot xau:");gets(s); if(s==NULL) printf("\n\t xau rong "); else printf("\n\t tu dai nhat la :%s",max(s)); getch(); printf("\n\t\t tiep tuc khong c/k ? :"); 117

if(toupper(getche())=='C') goto tt; } char *max(char s[]) { char p[100],q[100]; int i,j,k,max=0; i=0; while(s[i]) { j=0; if((s[i]!=' ')&&(s[i]!='\t')) { while (s[i]!='\0') { if((s[i]==' ')||(s[i]=='\t')) break; p[j++]=s[i++]; } p[j]='\0'; if (strlen(p)>max) {max=strlen(p); strcpy(q,p); } } else i++; } return q; }

118

CHNG 5 KIU CU TRC

5.1. CU HI
1. S khc nhau gia cu trc v mng? 2. on m sau lm vic g? struct address { char name[31]; char add1[31]; char add2[31]; char city[11]; char state[3]; char zip[11]; } myaddress = { "Bradley Jones","RTSoftware","P.O. Box 1213","Carmel", "IN", "46032-1213"}; 3. Gi s bn khai bo mt mng cu trc v ptr l mt con tr tr n phn t u tin ca mng. Lm th no ptr tr sang phn t th hai ca mng. 4. C im g sai trong on m sau? struct { char zodiac_sign[21]; int month; } sign = "Leo", 8; 5. C im g sai trong on m sau? /* setting up a union */ union data{ char a_word[4]; long a_number; }generic_variable = { "WOW", 1000 }; TR LI: 1. Cc phn t mng c cng kiu d liu, cn cu trc cha cc phn t d liu c th c kiu khc nhau. 2. Khai bo v khi gn bin cu trc myaddress. 3. ptr++; 4. on m l sai, sa li nh sau: struct { 119

char zodiac_sign[21]; int month; } sign = {"Leo", 8}; 5. Ti mt thi im, duy nht mt bin kiu union c th c s dng. V vy on m ny sai. C th sa li: /* setting up a union */ union data{ char a_word[4]; long a_number; }generic_variable = { "WOW" };

5.2. BI TP
Bi 1. Vit chng trnh nhp vo ngy, thng nm v cho bit s th t ca ngy trong nm. #include <iostream.h> #include <conio.h> #include <stdio.h> int ngay[2][12]={ {31,28,31,30,31,30,31,31,30,31,30,31}, {31,29,31,30,31,30,31,31,30,31,30,31}}; struct date { int ngay; int thang; int nam; }; int ngaynam(date *p); int isdate(date *p); void main() { date d; printf("\nNhap ngay thang nam :"); scanf("%d%d%d",&d.ngay,&d.thang,&d.nam); if (isdate(&d)) printf("\nDo la ngay thu : %d ",ngaynam(&d)); else printf("\nNhap sai ngay!"); getch(); 120

} int isdate(date *p) { int m,n,k; m=p->ngay; n=p->thang; k=p->nam; if (n==1 || n==3 ||n==5 || n==7 || n==8 ||n==10 || n==12) return ((m<=31) && (m>0)); else if (n==4 || n==6 ||n==9 || n==11) return ((m<=30) && (m>0)); else if ((n==2) && (k % 4 == 0 && k % 100 != 0 || k % 400 == 0)) return ((m<=29) && (m>0)); else return ((m<=28) && (m>0)); } int ngaynam(date *p) { int i,j,k,s; s=p->ngay; k=p->nam; j=((k % 4 == 0 && k % 100 != 0) || k % 400 == 0); for (i=0;i<p->thang-1;i++) s+=ngay[j][i]; return (s); } Bi 2. Vit chng trnh nhp vo ngy, thng nm v hin th ra mn hnh ngy, thng, nm ca ngy k tip. #include <iostream.h> #include <conio.h> #include <stdio.h> void getdate(struct date *pd); void incdate(struct date *pd); 121

int isdate(date *p); struct date { int ngay; int thang; int nam; }; void main() { struct date dt; date d; printf("\nNhap ngay thang nam :"); scanf("%d%d%d",&d.ngay,&d.thang,&d.nam); if (isdate(&d)) incdate(&d); else printf("\nNhap sai ngay!"); getch(); } int isdate(date *p) { int m,n,k; m=p->ngay; n=p->thang; k=p->nam; if (n==1 || n==3 ||n==5 || n==7 || n==8 ||n==10 || n==12) return ((m<=31) && (m>0)); else if (n==4 || n==6 ||n==9 || n==11) return ((m<=30) && (m>0)); else if ((n==2) && (k % 4 == 0 && k % 100 != 0 || k % 400 == 0)) return ((m<=29) && (m>0)); else return ((m<=28) && (m>0)); } 122

void incdate(struct date *pd) { int nngay,m; m=pd->thang; nngay=(m==4||m==6||m==9||m==11)?30:(m==2)?28+ pd->nam % 4 == 0 && (pd->nam % 100 != 0 || pd->nam % 400 == 0):31; if (++pd->ngay>nngay) { pd->ngay=1; if (++pd->thang>12) { pd->thang=1; pd->nam=(pd->nam-pd->nam%100)+(pd->nam+1)%100; } } printf("\nNgay hom sau la :%d %d %d",pd->ngay,pd->thang,pd>nam); getch(); } Bi 3. Vit chng trnh thc hin cc php ton trn phn s: cng, tr, nhn, chia phn s. #include <stdio.h> #include <conio.h> #include <math.h> int USCLN(int a, int b) { a = abs(a); b = abs(b); while (a != 0 && b != 0) if (a > b) a -= b; else b -= a; if (a == 0) 123

return b; else return a; } int BSCNN(int a, int b) { return a * b / USCLN(a, b); } struct PHANSO { int tuso, mauso; }; PHANSO uocluoc(PHANSO a) { PHANSO c; c.tuso = a.tuso / USCLN(a.tuso, a.mauso); c.mauso = a.mauso / USCLN(a.tuso, a.mauso); return c; } PHANSO cong(PHANSO a, PHANSO b) { PHANSO c; c.tuso = a.tuso * b.mauso + a.mauso * b.tuso; c.mauso = a.mauso * b.mauso; c = uocluoc(c); return c; } PHANSO tru(PHANSO a, PHANSO b) { PHANSO c; c.tuso = a.tuso * b.mauso - a.mauso * b.tuso; c.mauso = a.mauso * b.mauso; c = uocluoc(c); 124

return c; } PHANSO nhan(PHANSO a, PHANSO b) { PHANSO c; c.tuso = a.tuso * b.tuso; c.mauso = a.mauso * b.mauso; c = uocluoc(c); return c; } PHANSO chia(PHANSO a, PHANSO b) { PHANSO c; c.tuso = a.tuso * b.mauso; c.mauso = a.mauso * b.tuso; c = uocluoc(c); return c; } void print(PHANSO a) { printf("%d/%d", a.tuso, a.mauso); } void main() { clrscr(); PHANSO a, b, c; printf("\nNhap phan so scanf("%d%d", &a.tuso, printf("\nNhap phan so scanf("%d%d", &b.tuso, a : "); &a.mauso); b : "); &b.mauso);

printf("\nToi gian a ta duoc : "); 125

a = uocluoc(a); print(a); printf("\nToi gian b ta duoc : "); b = uocluoc(b); print(b); printf("\nTong cua hai phan so = "); c = cong(a, b); print(c); printf("\nHieu cua hai phan so = "); c = tru(a, b); print(c); printf("\nTich cua hai phan so = "); c = nhan(a, b); print(c); printf("\nThuong cua hai phan so = "); c = chia(a, b); print(c); getch(); } Bi 4. qun l im thi cho mt lp hc Tin hc Vn phng, ngi ta cn qun l cc thng tin sau v mi hc vin: HoLot Ten Ngaysinh Noisinh D_WIN D_WORD D_EXCEL TONGDIEM X_LOAI Chui k t (30) Chui k t (30) Chui k t (8) Chui k t (40) 0..10 0..10 0..10 0..30 Chui k t (20) /* H lt */ /* Tn */ /* Ngy sinh */ /* Ni sinh */ /* imWindows,im trn */ /* im Word, im trn */ /* im Excel, im trn */ /* Tng im */ /* Xp loi */

Hy lp chng trnh thc hin cc cng vic sau : Nhp thng tin ca hc vin khi n ghi danh. (Ch nhp HoLot, Ten v Ngaysinh). 126

Nhp im cc mn sau khi thi xong: C th nhp im cho bt k mn no ti mi thi im. In danh sch hc vin ra mn hnh, theo dng sau: ST T 1 2 . . H V TN HC NGSIN NI SINH VIN H L Vn Hong Anh 20/03/75 27 Nguyn V Vit Ha 02/03/75 Hu ....... . . . . . . . 32 L Li ....... ....... ............ ............ GHI CH ___________ ___________ ........... ...........

X l d liu theo yu cu sau: * Tnh TONGDIEM = D_WIN + D_WORD + D_EXCEL * Cn c vo TONGDIEM xp loi nh sau: Gii nu Kh T.Bnh nu nu TONGDIEM 24 18 TONGDIEM < 24 TONGDIEM < 18

In kt qu thi ca cc hc vin ra mn hnh theo dng sau: STT H V TN IM TNG XP LOI

#include #include #include #include #include #include

<stdio.h> <conio.h> <string.h> <alloc.h> <stdlib.h> <ctype.h>

struct hocvien { char holot[30],ten[30],ngaysinh[8]; char noisinh[40],x_loai[20]; int d_win,d_word,d_excel,tongdiem; }; hocvien *p; int n; 127

void void void void void void void

lamgon( char *chuoi); viethoa(char *chuoi); nhap1(); nhap2(); in1(); xuli(); in2();

void main() { char ch; clrscr(); flushall(); printf("\n CHUONG TRINH QUAN LY DIEM CUA LOP TIN HOC VAN PHONG "); printf("\n Nhap so hoc vien : "); scanf("%d", &n); p=(hocvien *) malloc(n * sizeof(hocvien)); if (p==NULL) { printf("\n Khong du bo nho"); exit(1); } do { clrscr(); printf("\n Chon cong viec :"); printf("\n 1 - Nhap thong tin cua hoc vien (holot,ten,ngaysinh)."); printf("\n 2 - Nhap diem cua hoc vien."); printf("\n 3 - In danh sach hoc sinh."); printf("\n 4 - Xu ly du lieu va xep loai."); printf("\n 5 - In danh sach hoc sinh va diem."); printf("\n Nhan <ESC> de thoat."); ch=getch(); if ( ch=='1') nhap1(); else if (ch=='2') nhap2(); 128

else else else } while }

if (ch=='3') in1(); if (ch=='4') xuli(); if (ch=='5') in2(); (ch!=27);

void lamgon( char *chuoi) { int j,n,t; n=strlen(chuoi); t=strstr(chuoi," ")-chuoi; while (t>=0) { for (j=t+1; j< n-1; j++) *(chuoi + j ) = *(chuoi +j+1); *(chuoi+j) ='\0'; n-=1; t=strstr(chuoi," ")-chuoi; if (t>=n) break; } if ( *(chuoi)==' ') { for (j=0 ; j<n-1; j++) *(chuoi+j) = *( chuoi +j+1); *(chuoi+j)='\0'; n -=1; } if (*(chuoi +n)==' ') *(chuoi +n) = '\0'; }

void viethoa(char *chuoi) { int i; 129

if (isalpha(chuoi[0])) if(chuoi[0]>=97) chuoi[0]-=32; for (i=1; i<strlen(chuoi);i++) if (isalpha(chuoi[i]) &&(chuoi[i-1] ==' ')&&(chuoi[i]>=97)) chuoi[i]-=32; } void nhap1() { int i=1; hocvien hv; clrscr(); flushall(); do { clrscr(); printf("\n 1 - Nhap thong tin cua hoc vien (holot,ten,ngaysinh)."); printf("\n\n Hoc vien thu %d :",i); printf("\n\n Ho lot :"); fflush(stdin); gets(hv.holot); lamgon(hv.holot); viethoa(hv.holot); strcpy(p[i].holot,hv.holot); printf("\n Ten :"); fflush(stdin); gets(hv.ten); lamgon(hv.ten); viethoa(hv.ten); strcpy(p[i].ten,hv.ten); printf("\n Noi sinh :"); flushall(); fflush(stdin); gets(hv.noisinh); 130

lamgon(hv.noisinh); viethoa(hv.noisinh); strcpy(p[i].noisinh,hv.noisinh); printf("\n Ngay sinh :"); fflush(stdin); gets(hv.ngaysinh); //xau p[i].noisinh da nhap tro thanh xau rong! strcpy(p[i].ngaysinh,hv.ngaysinh); i+=1; } while (i<=n); } void nhap2() { int i; char c,s; do { clrscr(); printf("\n 2 - Nhap diem cua hoc vien (win, word, excel)."); printf("\n (Nhan <ESC> de thoat)\n"); printf("\n a_Diem win."); printf("\n b_Diem word."); printf("\n c_Diem excel."); c=getch(); for( i=1; i<n+1; i++) { clrscr(); printf("\n Hoc vien thu %d :",i); printf("\n\n Ho lot : %s",p[i].holot); printf("\n Ten : %s",p[i].ten); if (c=='a') { printf("\n\n Diem win :"); fflush(stdin); scanf("%d",&p[i].d_win); 131

} else if (c=='b') { printf("\n\n Diem word :"); fflush(stdin); scanf("%d",&p[i].d_word); } else if (c=='c') { printf("\n\n Diem excel :"); fflush(stdin); scanf("%d",&p[i].d_excel); } } } while (c!= 27); } void in1() { int i,j; clrscr(); printf("\n DANH SACH HOC VIEN \n"); printf("\n |-------------------------------------------------------------------------|"); printf("\n | STT | HO VA TEN HOC VIEN | NGAY SINH | NOI SINH | GHI CHU |"); printf("\n |-------------------------------------------------------------------------|"); for (i=1;i<n+1;i++) printf("\n | %3d | %-17s%9s| %8s | %-14s | | ",i,p[i].holot,p[i].ten,p[i].ngaysinh,p[i].noisinh); printf("\n |-------------------------------------------------------------------------|"); getch(); 132

} void xuli() { int i; for (i=1; i<n+1; i++) { p[i].tongdiem= p[i].d_win+p[i].d_word+p[i].d_excel; if (p[i].tongdiem>=24) strcpy(p[i].x_loai,"Gioi"); else if (p[i].tongdiem>=18) strcpy(p[i].x_loai, "Kha"); else strcpy(p[i].x_loai,"Trung binh"); } clrscr(); gotoxy(15,10); printf(" DA XU LY XONG"); getch(); } void in2() { int i,j; clrscr(); printf("\n DANH SACH HOC VIEN \n"); printf("\n |------------------------------------------------------------------------|"); printf("\n | STT | HO VA TEN HOC VIEN | DIEM | TONG | XEP |"); printf("\n | | | WIN | WORD | EXCEL | DIEM | LOAI |"); printf("\n |------------------------------------------------------------------------|"); for (i=1;i<n+1;i++) printf("\n | %3d | %-17s%9s|%3d |%4d |%5d | %3d | %10s| 133

",i,p[i].holot,p[i].ten,p[i].d_win,p[i].d_word,p[i].d_excel ,p[i].tongdiem,p[i].x_loai); printf("\n |------------------------------------------------------------------------|"); getch(); } Bi 5. Vit li chng trnh gii bi tp 4, dng danh sch lin kt, c b sung chc nng tm kim sinh vin. #include <conio.h> #include <stdlib.h> #include <stdio.h> #include <alloc.h> #include <string.h> #include <ctype.h> #define vedong printf(" --------------------------------------------------------------------------\n") #define xuongdong printf("\n") struct data { char holot[30],ten[30],ngaysinh[30],noisinh[40],xeploai[20]; int dwin,dword,dexcel,tongdiem,stt; }; struct tro { struct tro *next; data dl; }; char* viethoa(char *s); void nhapds(tro **list); void inds(tro *list); void noi(tro *p,tro**,tro**); void nhapnd( data *nut); 134

void tongdiem_xeploai(data *nut); void Nhapdiem(); void innd(data nut); void ndiem(data *nut); void nhapdiem(); void diemsv(); void timkiem( tro *list); void indsdiem(tro *list); int tim(char *s,tro *list); void inttin(data nut); void hoanvi1(data*nut1, data *nut2); void hoanvi2(int *t1, int *t2); tro* sapxep(tro *list); /******************************************/ /* vung chua bien toan cuc*/ unsigned int tongcong=1; tro *ds,*end=NULL; int ktra=0, check;//check dem so lan nhap diem /*******************************************/ /* chuong trinh chinh*/ void main() { char ch; ds=NULL; nhan: clrscr(); printf(" Chuong trinh quan li hoc vien"); printf("\n Chon mot trong cac chuc nang sau"); printf("\n ++++++++++++++++++++++++++++++++++++++++ +++++"); printf("\n + 1.Nhap danh sach + "); printf("\n + 2.In danh sach + "); printf("\n + 3.Nhap diem cho sinh vien + "); 135

printf("\n + 4.In danh sach co diem + "); printf("\n + 5.Tim kiem mot hoc vien + "); printf("\n + Nhan esc de thoat +"); printf("\n ++++++++++++++++++++++++++++++++++++++++ +++++"); printf("\n"); fflush(stdin); ch= getch(); if (ch=='1') { nhapds(&ds);goto nhan;} else if (ch=='2') { ds=sapxep(ds);inds(ds);getch();goto nhan;} else if (ch=='3') { diemsv();goto nhan;} else if (ch=='4') { indsdiem(ds);goto nhan;} else if (ch=='5') { timkiem(ds);goto nhan;} else if( int(ch)==27) { printf("\nTam biet!"); getch();} else { clrscr(); putchar(7); printf("\n\n Ban da chon nham phim! vui long chon lai"); getch(); goto nhan; } }

136

/******************************************************** **************/ char* viethoa(char *t) {int i; char *s; s=(char*)malloc(30); strcpy(s,t); for( i=0;i<strlen(s);i++) s[i]=toupper(s[i]); s[i]='\0'; return(s); } /********************************************************* *************/ void noi(tro*p,tro **dau,tro** cuoi) { if (*dau==NULL) { (*dau)=p; (*cuoi)=p; } else { (*cuoi)->next=p; (*cuoi)=p; } } /******************************************************** **************/ void nhapnd( data *nut) { clrscr(); printf("\n\n + Nhap hoc du lieu hoc vien %d: ",tongcong); flushall(); printf("\n\n - Ho lot :"); gets( nut->holot); printf(" - Ten :"); gets( nut->ten); printf(" - Noi sinh :"); gets( nut->noisinh); 137

printf(" - Ngay sinh :"); flushall(); gets(nut->ngaysinh); } /*************************************************/ void innd(data nut) { printf("\n +DU LIEU:\n\n"); vedong; printf("\n + Ma so: %d",nut.stt); printf("\n + Holot: %s",nut.holot); printf("\n + Ten : %s",nut.ten); printf("\n + Ngay sinh: %s",nut.ngaysinh); printf("\n + Noi sinh: %s",nut.noisinh); xuongdong; vedong; } /*************************************************/ void inttin(data nut) { printf("\n +DU LIEU:\n\n"); vedong; printf("\n + Ma so : %d",nut.stt); printf("\n + Holot : %s",nut.holot); printf("\n + Ten : %s",nut.ten); printf("\n + Ngay sinh : %s",nut.ngaysinh); printf("\n + Noi sinh : %s",nut.noisinh); printf("\n\n\n\n + Diem win : %d",nut.dwin ); printf("\n + Diem word : %d",nut.dword ); printf("\n + Diem excel : %d",nut.dexcel); printf("\n + Diem tong cong : %d",nut.tongdiem ); printf("\n + Xep loai : %s",nut.xeploai ); xuongdong; vedong; } /*************************************************/ 138

void ndiem(data *nut) { int diem=0; printf(" + diem word:"); scanf("%d",&diem);(*nut).dword=diem; printf(" + diem excel:"); scanf("%d",&diem);(*nut).dexcel=diem; printf(" + diem win:"); scanf("%d",&diem);(*nut).dwin=diem;; } /*************************************************/ void tongdiem_xeploai(data *nut) { (*nut).tongdiem=(*nut).dwin+ (*nut).dexcel+ (*nut).dword; if ((*nut).tongdiem >= 24) strcpy( (*nut).xeploai,"Gioi"); else if (((*nut).tongdiem >=18)&& ((*nut).tongdiem < 24)) strcpy( (*nut).xeploai,"Kha"); else strcpy( (*nut).xeploai,"Trung binh"); } /*************************************************/

void nhapds(tro **list) { tro *p;char ch; printf("\n\nban dang o trong chuong trinh nhap du lieu cho hoc vien"); while (1) { p=(tro*)malloc(sizeof(tro)); p->next=NULL; nhapnd(&p->dl); 139

p->dl.dword=p->dl.dwin= p->dl.dexcel=p->dl.tongdiem=1; strcpy(p->dl.xeploai,"null"); p->dl.stt=tongcong++; noi(p,list,&end); printf("nhan phim ESC de cham dut viec nhap du lieu"); ch=getch(); if (ch==27){ printf("\n\n+ da nhap xong du lieu-Nhan phim bat ki de tiep tuc\n\n"); getch(); break; } } } /********************************************************* *************/ void Nhapdiem() { tro*tam;char ch;int n,dem; tam=ds; check=0; tt: clrscr(); dem=1; printf("BAN DANG O TRONG CHUONG TRINH NHAP DIEM TUNG SINH VIEN\n\n"); printf(" chu y: danh sach co + %d hoc vien:\n\n", tongcong-1); vedong; printf("BAN CO MUON XEM LAI DANH SACH SINH VIEN KHONG? CK\n\n"); flushall(); ch= getch(); if (toupper(ch)=='C') { inds(ds); printf("++NHAN MOT PHIM DE TIEP TUC NHAP DIEM\n\n"); getch(); } 140

printf("\n\nHAY NHAP SO THU TU HOC VIEN CAN NHAP DIEM:"); scanf("%d",&n); if( (n<1)||(n>tongcong-1)) { printf("KHONG TIM THAY HOC VIEN NAY- DANH SACH CHI CO %d SV\n\n",tongcong-1); printf("CO LAM LAI KHONG? C-K:"); ch=getch(); if( toupper(ch)=='C') goto tt; else goto kt; } clrscr(); vedong; while (dem!= n) {dem++;tam=tam->next;} printf("\n\n DAY LA DU LIEU SINH VIEN %d MA BAN MUON NHAP DIEM\n\n",n); innd(tam->dl); printf("\n\nBAT DAU NHAP DIEM\n\n"); vedong; ndiem(&tam->dl); tongdiem_xeploai(&tam->dl); ++check; if( check==(tongcong-1)) { printf("\nda nhap du du lieu cho %d hoc vien\n\n",check); goto kt; } vedong; printf(" + da nhap diem cho hoc vien %s- co lam tiep khong C-K:",viethoa(tam->dl.ten)); flushall(); ch= getch(); if (toupper(ch)=='C') goto tt; else goto kt; kt: printf("\n\nKET THUC\n\n"); getch(); } 141

/*************************************************/ void nhapdiem() { tro *tam;int i=1; tam=ds; clrscr(); vedong; printf("\n\n CHUONG TRINH NHAP DIEM CHO HOC VIEN\n\n"); vedong; while (tam!=NULL) {printf(" + %-2d. Nhap diem hoc vien : %s \n\n",i+ +,viethoa(tam->dl.ten)); ndiem(&tam->dl); tongdiem_xeploai(&tam->dl); tam=tam->next; vedong; } printf("\n\nDA NHAP XONG- NHAN PHIM BAT KI DE KET THUC\n\n"); getch(); } /*************************************************/ void inds(tro *list) { tro *tam; tam=list; clrscr(); vedong; printf("| DAY LA DANH SACH SINH VIEN |\n"); vedong; printf("|STT| HOTEN va TEN HOC VIEN | NGAY SINH | NOI SINH |GHI CHU|\n"); vedong; while (tam!=NULL)

142

{printf("|%-1d |%-15s%-13s |%-10s |%-8s |-------|\n",tam->dl.stt,tam->dl.holot,tam->dl.ten,tam>dl.ngaysinh,tam->dl.noisinh); tam=tam->next;} vedong; } /*************************************************/ void diemsv() { char ch; tt: clrscr(); printf("\n\nDAY LA CHUONG TRINH NHAP DIEM CHO HOC VIEN\n\ n"); printf("\n chon mot trong cac chuc nang sau"); printf("\n +++++++++++++++++++++++++++++++++++++++ ++++++"); printf("\n + 1.Nhap diem theo yeu cau + "); printf("\n + 2.nhap diem cho toan bo hoc vien + "); printf("\n +++++++++++++++++++++++++++++++++++++++ ++++++"); printf("\n"); fflush(stdin); ch= getch(); if (ch=='1'){ Nhapdiem(); ktra=2;} else if (ch=='2'){ nhapdiem(); ktra=1;} else { clrscr(); putchar(7); printf("\n\n Ban da chon nham phim! vui long chon lai"); getch(); goto tt; }

143

} /*************************************************/ void indsdiem(tro *list) { tro *tam; tam=list; clrscr(); if( ktra==2) printf("\n\n + nhung nguoi co xep loai 'null' la chua nhap du du lieu\n\n"); vedong; printf("| DAY LA DANH SACH HOC VIEN |\n"); vedong; printf("|STT| HOTEN va TEN HOC VIEN | DIEM | TONG | XEP |\n"); printf("| | |--------------------| | |\n"); printf("| | | WIN | WORD|EXCEL | DIEM | LOAI |\n"); vedong; if(ktra==0) printf(" +DANH SACH NAY CHUA NHAP DU LIEU: DIEM va XEP LOAI\n\n" ); else { while (tam!=NULL) { printf("|%-1d |%-15s%-13s | %-4d | %-2d | %4d |%-5d |%-7s |\n",tam->dl.stt,tam->dl.holot,tam>dl.ten,tam->dl.dwin,tam->dl.dword,tam->dl.dexcel,tam>dl.tongdiem,tam->dl.xeploai); tam=tam->next; } vedong; } getch(); 144

} /*************************************************/ int tim(char *s,tro *list) { tro *tam; tam=list; while((strcmp(s,"")!=0)&& (strcmp(tam->dl.ten,s)! =0)&&(tam!=NULL)) tam=tam->next; if (tam!=NULL) return(1); else return(0); } /*************************************************/ void timkiem( tro *list) { tro *tam; char *s=(char*)malloc(30);int t,dem=0;char ch; tam=list; tt: clrscr(); printf(" +DAY LA CHUOGN TRINH TIM KIEM THONG TIN MOT HOC VIEN\n\n"); vedong; if (tam!=NULL) { printf("\n +BAN HAY NHAP MOT TRONG SO CAC THONG TIN SAU DAY:\n\n"); printf("+ Ma so hoc viensv\n\n"); printf("+ Ten hoc vien\n\n"); vedong; printf("\n\n + NHAP THONG TIN:"); fflush(stdin); gets(s); dem=atoi(s); dem=int(dem); t=tim(s,list); if ( ((dem!=0) && (dem>(tongcong-1) ))|| ( (dem==0) &&(t==0)) ) { printf("Khong co hoc vien nay- Xem lai thong tin dua vao\n\n"); goto kt; } 145

else { if( (dem!=0)&&(dem<=tongcong-1)) while (tam->dl.stt!=dem) tam=tam->next; else if (t==1) while (strcmp(tam->dl.ten,s)!=0) tam=tam->next; clrscr(); printf(" +thong tin ma ban can tim la\n\n"); vedong; inttin(tam->dl); } printf("tiep tuc: C-K"); ch=getch(); if (toupper(ch)=='C') goto tt; else goto kt; kt: printf("\nKET THUC\n\n"); } else{ printf("DANH SACH RONG"); } getch(); } /*************************************************/ void hoanvi1(data*nut1, data *nut2) { data nut; nut=*nut1; *nut1=*nut2; *nut2=nut;} /*************************************************/ void hoanvi2(int *t1, int *t2) { int t; t=*t1; *t1=*t2; *t2=t;} /*************************************************/ tro* sapxep(tro *list) 146

{ tro *tam,*tiep; tam=list; while (tam->next!=NULL) { tiep=tam->next; while (tiep !=NULL) { if( ((strcmp(tiep->dl.ten,tam>dl.ten)==0)&&(strcmp(tiep->dl.holot ,tam->dl.holot) <0)) ||(strcmp(tiep->dl.ten,tam->dl.ten)<0)) { hoanvi1(&tam->dl,&tiep->dl); hoanvi2(&tam->dl.stt,&tiep->dl.stt); } tiep=tiep->next; } tam=tam->next; } return(list); }

Bi 6. Hy vit mt hm c hai i s l hai con tr, mi con tr tr n mt danh sch lin kt, v ni hai danh sch li vi nhau, ni danh sch th hai sau danh sch th nht. #include #include #include #include <stdio.h> <conio.h> <ctype.h> <stdlib.h>

struct tro { int so; struct tro *next; }; tro *dau1,*dau2; tro *taodanhsach(); 147

void noi(); void in(tro *dau); void main() { tro *dau; clrscr(); printf("\n\n Nhap danh sach 1 :\n"); dau1 =taodanhsach(); printf("\n\n Nhap danh sach 2 :\n"); dau2 =taodanhsach(); clrscr(); printf("\n\n Danh sach 1 :\n"); in(dau1); clrscr(); printf("\n\n Danh sach 2 :\n"); in(dau2); noi(); printf("\n danh sach sau khi noi :\n"); in(dau1); } tro *taodanhsach() { tro *p,*dau; int i=1,tam; char ch; dau=NULL; do { printf("\n So thu %d (nhan 0 de thoat) :",i++); scanf("%d",&tam); if (tam!=0) { p=(tro *)calloc(1, sizeof (tro)); if (p ==NULL) { 148

printf("\n Cap phat co loi.\n"); exit(1); } p->so =tam; p->next =dau; dau=p; } }while (tam!=0); printf("\n\n\n da tao xong"); getch(); return (dau); } void in(tro *dau) { tro *p; p=dau; if (dau==NULL ) return; else while (p!=NULL) { printf("%3d",p->so); p = p->next; } getch(); } void noi() { tro *p; p=dau1; while (p->next!=NULL) p = p->next; p->next=dau2; p=dau2; printf("\n\n da noi xong "); 149

getch(); } Bi 7. Mt stack l loi danh sch c bit c cc tnh cht sau : Vic b sung phn t c thc hin cui danh sch. Vic loi b phn t cng c thc hin cui danh sch.

Vit chng trnh minh ha cc thao tc b sung v loi b trn stack. #include <stdio.h> #include <conio.h> #include <stdlib.h> struct tro { int so; struct tro *next; }; tro *dau,*cuoi,*dau1; tro *pushing() //them phan tu { tro *p; int i=1,tam; char ch; dau=NULL; clrscr(); do { printf("\n Nhap so thu %d (nhan 0 de thoat) :",i++); scanf("%d",&tam); if (tam!=0) { p = (tro *)calloc(1, sizeof (tro)); if (p == NULL) { printf("\n Cap phat co loi.\n"); exit(1); 150

} p->so =tam; if (dau!=NULL) cuoi->next=p; else dau=p; cuoi=p; } }while (tam!=0); return(dau); } void in(tro *dau) { tro *p=dau; while (p!=NULL) { printf("%3d",p->so); p=p->next; } getch(); } int so_phan_tu(tro *dau) { int so=0; tro *p=dau; while (p!=NULL) { so+=1; p=p->next; } return(so); } void poping(int n,int m) { tro *p; //lay phan tu

151

p=dau; int i=1,dem=0; if (n>so_phan_tu(dau)) { printf("\n vi tri sai"); exit(2); } while ((p!=NULL)&&(i<n)) { i += 1; p = p->next; } while ((p!=NULL) && (dem<m)) { printf("%3.d",p->so); dem+=1; p=p->next; } if (dem<m) { printf("\n ko du m phan tu"); getch(); } getch(); } void main() { int m,n; dau=pushing(); printf("\n\n danh sach duoc tao la :"); in(dau); printf("\n\n can lay may phan tu : "); scanf("%d",&m); printf("\n tai vi tri thu may : "); scanf("%d", &n); 152

printf("\n\n danh sach cac phan tu duoc lay : \n"); poping(n,m); } Bi 8. Stack c gi l hng i theo kiu vo trc ra sau (FILO - First In Last Out) bi v phn t u tin y vo stack th lun lun c ly ra cui cng. Dng push() v pop() v cc hm khc nu cn, hy vit mt chng trnh c vo mt dng, xt xem n c tnh cht: khi c xui hay ngc u cho ra cng mt kt qu khng ? V d: Able was I ere I saw Elba. #include #include #include #include <stdio.h> <conio.h> <stdlib.h> <string.h>

typedef struct danhsach { char kitu; struct danhsach *next; }tro; tro *dau,*cuoi,*dau1; tro *pushing(char *chuoi) //them phan tu { tro *p; char *s; int i=0; dau=NULL; s=chuoi; clrscr(); do { if (s[i]!='\0') { p=(tro *)calloc(1, sizeof (tro)); if (p ==NULL) { 153

printf("\n Cap phat co loi.\n"); exit(1); } p->kitu =s[i]; if (dau!=NULL) cuoi->next=p; else dau=p; cuoi=p; } i+=1; } while (s[i]!='\0'); return(dau); } void in(tro *dau) { tro *p=dau,*q,*dau1; dau1=NULL; while (p!=NULL) { printf("%c",p->kitu); p=p->next; } getch(); } tro *pop() //lay phan tu { tro *p,*q,*tam; p=dau; tam=NULL; while (p!=NULL) { q=(tro *)calloc(1, sizeof (tro)); if (q==NULL) { 154

printf("\n Cap phat co loi.\n"); exit(1); } q->kitu =p->kitu; q->next =tam; tam=q; p=p->next; } return(tam); } int so_sanh(tro *dau,tro *dau1) { tro *p,*q; p=dau; q=dau1; while (p!=NULL) if (p->kitu==q->kitu) { p=p->next; q=q->next; } else return(0); return(1); } void main() { int m,n; char *chuoi; clrscr(); printf("\n Nhap xau can kiem tra : "); gets(chuoi); dau=pushing(chuoi); printf("\n\n danh sach duoc tao la :"); in(dau); dau1=pop(); 155

printf("\n\n danh sach nguoc la : "); in (dau1); if (so_sanh(dau,dau1)) printf("\n\n Xau da cho doi xung"); else printf("\n\n Xau da cho khong doi xung"); getch(); } Bi 9. Vit chng trnh thc hin cc yu cu: - To mt danh sch lin kt n, d liu ca mi phn t l mt chui k t. - To hm quy in ra gi tr d liu ca mi phn t trong danh sch lin kt. #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <string.h> struct tro { char s[30]; tro *next; }; tro *dau; tro *taodanhsach() { clrscr(); tro *p,*dau; int i=1,tam; char st[30]; dau=NULL; do { printf("\n Nhap du lieu :",i++); fflush(stdin); gets(st); if (strcmp(st,"")) { 156

p=(tro *)calloc(1, sizeof (tro)); if (p ==NULL) { printf("\n Cap phat co loi.\n"); exit(1); } strcpy(p->s,st); p->next =dau; dau=p; } } while (strcmp(st,"")); printf("\n\n\n da tao xong"); getch(); return (dau); } void dequy(tro *dau) { tro *p; p=dau; if (p->next==NULL) printf("\n %s",p->s); else { dequy(p->next); printf("\n %s",p->s); } } void main() { dau=taodanhsach(); dequy(dau); getch(); }

157

Bi 10. Vit chng trnh minh ha vic thng k cc t kha ca C c nhp vo t bn phm. S dng gii thut tm kim t kha trn mt mng bng phng php chia i. #include <stdio.h> #include <ctype.h> #include <string.h> #define MAXWORD 100 #define BUFSIZE 100 char buf[BUFSIZE]; /* buffer for ungetch */ int bufp = 0; /* next free position in buf */ int getword(char *, int); int binsearch(char *, struct key *, int); const int NKEYS = 11; struct key { char *word; int count; }keytab[] = {"auto", 0, "break", 0, "case", 0, "char", 0, "const", 0, "continue", 0, "default", 0, "unsigned", 0, "void", 0, "volatile", 0, "while", 0 }; /* count C keywords */ void main() { int n,dem=0; char word[MAXWORD]; while (getword(word, MAXWORD) != EOF) if (isalpha(word[0])) if ((n = binsearch(word, keytab, NKEYS)) >= 0) keytab[n].count++; printf("\nThong ke cac tu khoa da nhap vao: \n"); for (n = 0; n < NKEYS; n++) if (keytab[n].count > 0) 158

{ dem++; printf("%4d %s\n", keytab[n].count, keytab[n].word); } if (dem==0) printf("\nKhong co tu khoa nao da nhap vao! \n"); } /* binsearch: Tim tu khoa trong khoang tab[0]...tab[n-1] */ int binsearch(char *word, struct key tab[], int n) { int cond; int low, high, mid; low = 0; high = n - 1; while (low <= high) { mid = (low+high) / 2; if ((cond = strcmp(word, tab[mid].word)) < 0) high = mid - 1; else if (cond > 0) low = mid + 1; else return mid; } return -1; } /* getword: doc tu khoa tu ban phim */ int getword(char *word, int lim) { int c,getch(void); void ungetch(int); char *w = word; while (isspace(c = getch())) ; if (c != EOF) *w++ = c; if (!isalpha(c)) { *w = '\0'; return c; } for ( ; --lim > 0; w++) if (!isalnum(*w = getch())) { ungetch(*w); break; } *w = '\0'; return word[0]; 159

} int getch(void) { return (bufp > 0) ? buf[--bufp] : getchar(); } void ungetch(int c) { if (bufp >= BUFSIZE) printf("Qua nhieu ky tu \n"); else buf[bufp++] = c; } Bi 11. Vit li chng trnh ca bi tp 10, trong s dng con tr trong hm tm kim t kha trn mt mng. #include <stdio.h> #include <ctype.h> #include <string.h> #define MAXWORD 100 #define BUFSIZE 100 char buf[BUFSIZE]; /* buffer for ungetch */ int bufp = 0; /* next free position in buf */ int getword(char *, int); struct key *binsearch(char *, struct key *, int); const int NKEYS = 11; struct key { char *word; int count; }keytab[] = {"auto", 0, "break", 0, "case", 0, "char", 0, "const", 0, "continue", 0, "default", 0, "unsigned", 0, "void", 0, "volatile", 0, "while", 0 }; /* count C keywords */ void main() { char word[MAXWORD]; struct key *p; 160

int dem=0; while (getword(word, MAXWORD) != EOF) if (isalpha(word[0])) if ((p=binsearch(word, keytab, NKEYS)) != NULL) p->count++; for (p = keytab; p < keytab + NKEYS; p++) if (p->count > 0) {dem++; printf("%4d %s\n", p->count, p->word); } if (dem==0) printf("\nKhong co tu khoa nao da nhap vao! \n"); }
/* binsearch: Tim tu khoa trong khoang tab[0]...tab[n-1] */

struct key *binsearch(char *word, struct key *tab, int n) { int cond; struct key *low = &tab[0]; struct key *high = &tab[n]; struct key *mid; while (low < high) { mid = low + (high-low) / 2; if ((cond = strcmp(word, mid->word)) < 0) high = mid; else if (cond > 0) low = mid + 1; else return mid; } return NULL; } /* getword: doc tu khoa tu ban phim */ int getword(char *word, int lim) { int c,getch(void); void ungetch(int); char *w = word; 161

while (isspace(c = getch())) ; if (c != EOF) *w++ = c; if (!isalpha(c)) { *w = '\0'; return c; } for ( ; --lim > 0; w++) if (!isalnum(*w = getch())) { ungetch(*w); break; } *w = '\0'; return word[0]; } int getch(void) { return (bufp > 0) ? buf[--bufp] : getchar(); } void ungetch(int c) { if (bufp >= BUFSIZE) printf("Qua nhieu ky tu \n"); else buf[bufp++] = c; }

162

CHNG 6 KIU TP TIN

6.1. CU HI
1. S khc nhau gia stream vn bn v stream nh phn l g? 2. Chng trnh ca bn phi lm g trc khi n c th truy cp n mt file? 3. Khi m mt file vi hm fopen(), cn phi ch nh thng tin g v hm ny tr v gi tr g? 4. Hai phng thc tng qut c thng tin trong file? 5. Gi tr EOF l g? Khi no EOF c dng? 6. Lm th no kim tra tnh trng ca cui file trong mode vn bn v mode nh phn? 7. B nh v file l g? Lm th no c th thay i n.? 8. Khi mt file c m ln u tin, b nh v file tr vo u? 9. Vit m ng tt c stream file. 10. Ch ra hai cch chuyn b nh v file v u file. 11. C g sai trong on m sau? FILE *fp; int c; if ( ( fp = fopen( oldname, "rb" ) ) == NULL ) return -1; while (( c = fgetc( fp)) != EOF ) fprintf( stdout, "%c", c ); fclose ( fp ); TR LI: 1. Stream vn bn thc hin t ng vic chuyn i gia k t newline (\n) c C dng nh du kt thc dng, thnh cp k t CR, LF c DOS dng nh du kt thc dng. Ngc li, stream nh phn khng thc hin vic chuyn i. Tt c cc bye u c a vo v ly ra m khng c s thay i. 2. Dng hm fopen(). 3. Khi dng hm fopen(), phi ch nh tn file cn m v mode m n. Hm open() tr v con tr tr n kiu FILE. 4. Tun t v ngu nhin. 5. EOF l c hiu cui file. N l hng k t -1. EOF c dng i vi file vn bn xc nh khi no th t n im kt thc file. 163

6. Trong mode nh phn phi dng hm feof(). Trong mode vn bn phi tm kim k t EOF hoc dng hm feof(). 7. B nh v file ch nh v tr trong mt file m ti vic c ghi tip theo xy ra. C th thay i b nh v file bng cc hm rewind() v fseek(). 8. B nh v file tr n k t u tin ca file. Mt ngoi l l nu ta m mt file tn ti thm th b nh v file s tr vo cui file. 9. fcloseall(); 10. rewind(fp); and fseek(fp, 0, SEEK_SET); 11. Khng th dng EOF kim tra tnh trng cui file nh phn m phi dng hm feof().

6.2. BI TP
Bi 1. Vit chng trnh thc hin cc yu cu: Nhp 10 s thc vo mt file vn bn c tn l INPUT. c ni dung file INPUT. Tnh tng bnh phng cc s c trong file INPUT. #include <stdio.h> #include <stdlib.h> #include <conio.h> void write() {FILE *f = fopen("input","wt"); /*Ghi vao file van ban 10 so thuc */ for (int i=1; i<=10;i++) { float a; printf("\n Nhap so thu %d: ",i); scanf("%f", &a); fprintf(f,"%f ",a); } fclose(f); } void read() { int i;float a; FILE *f = fopen("input","rt"); printf("\n Noi dung tap tin la : \n\n"); 164

do { fscanf(f,"%f",&a); if (!feof(f)) printf("%.2f ",a); } while (!feof(f)); fclose(f); } float tongbp() { int i;float tong = 0; FILE *f = fopen("input","rt"); do { float a; fscanf(f,"%f",&a); if (!feof(f)) tong+=a*a; }while (!feof(f)); fclose(f); return tong; } void main() { clrscr(); write(); read(); printf("\n Tong binh phuong la %.2f \n ",tongbp()); getch(); } Bi 2. Vit chng trnh thc hin cc yu cu: M tp tin mi v nhp vo mt s mu tin. Mi mu tin bao gm cc trng: h tn, tui, lng. Qu trnh nhp d liu kt thc khi h tn nhp vo l rng. Thm d liu vo tp tin. M tp tin c v hin th ra mn hnh ni dung tp tin.

165

/* Chuong trinh file truy nhap tuan tu */ #include <stdio.h> #include <string.h> #include <stdlib.h> #include <conio.h> #define maxten 30 #define maxtenfile 11 struct HSCB { char hoten[maxten+1]; int tuoi; long luong; } hoso; void void void void Hienthi(HSCB *,int); Nhap(); Indanhsach(); Them();

char tenfile[maxtenfile+1]; FILE *f1; void Nhap() { int i,n; /* Tao file */ printf("\nCho ten file : "); gets(tenfile); if ((f1=fopen(tenfile,"wb"))==NULL) { printf("\nLoi mo file - Chuong trinh ket thuc\n"); exit(1); } /* Vao so lieu */ printf("Vao so lieu , muon thoi thi den muc Ten an Enter\ n"); 166

n = 0; /* Dem so phan tu trong file */ do { printf("Ten : "); gets(hoso.hoten); if (strlen(hoso.hoten)==0) break; /* Ket thuc neu ten la rong */ n++; printf("Tuoi : "); scanf("%d",&hoso.tuoi); printf("Luong : "); scanf("%ld",&hoso.luong); getchar(); /* Xuong dong trong file sau mot nguoi */ printf("\n"); fwrite(&hoso,sizeof(hoso),1,f1); /* Ghi vao file */ } while (1); fclose(f1); printf("\nKet thuc viec tao file va ghi du lieu vao ."); printf("\nTrong file nay co %d phan tu (nguoi)",n); getch(); } void Indanhsach() { /* Hien thi noi dung file */ int n; do { printf("\nCho ten file can doc : "); gets(tenfile); if ((f1=fopen(tenfile,"rb"))==0) printf("\nKhong tim thay file - Cho lai ten\n"); } while (!f1); n = 1; while (fread(&hoso,sizeof(hoso),1,f1)) Hienthi(&hoso,n++); fclose(f1); printf("\nDoc xong danh sach trong file ."); } 167

void Them() {/* Them du lieu vao cuoi file */ int n; do { printf("\nCho ten file can them du lieu : "); gets(tenfile); if ((f1=fopen(tenfile,"ab"))==0) printf("\nKhong tim thay file - Cho lai ten\n"); } while (!f1); do { printf("Ten : "); gets(hoso.hoten); if (strlen(hoso.hoten)==0) break; n++; printf("Tuoi : "); scanf("%d",&hoso.tuoi); printf("Luong : "); scanf("%ld",&hoso.luong); getchar(); /* Xuong dong trong file sau mot nguoi printf("\n"); fwrite(&hoso,sizeof(hoso),1,f1); /* Ghi vao file }while (1); fclose(f1); printf("\nKet thuc viec ghi them du lieu vao cuoi file."); getch(); } void Hienthi(HSCB *hoso,int so) { int i; printf("\nSo ho so : %d\n",so); printf("Ten : %s\n",hoso->hoten); printf("Tuoi : %d\n",hoso->tuoi); printf("Luong : %ld\n",hoso->luong); 168

*/ */

} void main() { clrscr(); Nhap(); Indanhsach(); Them(); Indanhsach(); getch(); } Bi 3. Tng t bi 1, nhng b sung cc thao tc trn tp tin: tu sa v thm mu tin mi. /* Chuong trinh file truy nhap tuan tu - : tao,xem,sua,them vao cuoi file,cho phep chon ten file */ #include #include #include #include <stdio.h> <conio.h> <string.h> <stdlib.h>

#define maxten 30 #define maxtenfile 40 struct HSCB { char ten[maxten+1]; int tuoi; long luong; } hoso; char tenfile[maxtenfile+1]; FILE *f1; int n, /* so ho so */ ngoai; /* so > so ho so */ long sohoso,vitri; /* vi tri hien tai trong file char dong[maxtenfile+1]; 169

*/

void void void void

TaoFile(void); Hienthi(struct HSCB *,int); Sua(HSCB *); Them(void);

void main() { int i; /* Mo file */ printf("\n********** MO FILE ***********\n"); do { printf("\nCho ten file can mo : "); gets(tenfile); if ((f1=fopen(tenfile,"wt"))==NULL) printf("\nLoi mo file - Cho lai ten file\n"); }while (!f1); TaoFile(); /* Hien thi noi dung file */ do { printf("\n******* XEM NOI DUNG FILE ***********\n"); printf("\nTen file dang soan : %s\n",tenfile); printf("\nCho ten file (neu la file dang soan thi an Enter): "); gets(dong); /* Cho ten moi */ if (strlen(dong)) strcpy(tenfile,dong); if ((f1=fopen(tenfile,"rt"))==0) printf("\nKhong tim thay file - Cho lai ten\n"); } while (!f1); n = 1; while (fread(&hoso,sizeof(hoso),1,f1)) { Hienthi(&hoso,n++); getchar(); 170

} fclose(f1); printf("\nDoc xong danh sach trong file.\n\n"); /* Sua du lieu trong file */ do { printf("\n**** SUA CHUA NOI DUNG FILE *****\n"); printf("\nTen file dang soan : %s\n",tenfile); printf("\nCho ten file (neu la file dang soan thi an Enter): "); gets(dong); /* Cho ten moi */ if (strlen(dong)) strcpy(tenfile,dong); if ((f1=fopen(tenfile,"r+t"))==0) printf("Khong tim thay file tren dia\n"); } while(!f1); fseek(f1,0,2); sohoso = ftell(f1) / sizeof(hoso); /* Tim va sua ho so */ do { do { printf("\nCho so ho so can sua (go 0 de stop) : "); scanf("%d",&n); getchar(); /* De nhay qua ki tu cuoi \n */ ngoai = n<0 || n>sohoso; } while (ngoai); if (n==0) break; /* Khong sua ra khoi vong lap */ vitri = (n-1)*sizeof(hoso); /* Tinh vi tri cua ho so can sua */ fseek(f1,vitri,0); /* Dinh vi con tro den ho so */ fread(&hoso,sizeof(hoso),1,f1); /* Doc mot ho so vao bo nho */ 171

Hienthi(&hoso,n); /* Hien thi noi dung ho so o bo nho */ Sua(&hoso); /* Sua ho so o bo nho */ fseek(f1,vitri,0); fwrite(&hoso,sizeof(hoso),1,f1); /* Ghi ho so da sua vao file */ }while(1); fclose(f1); printf("\nDa sua xong\n\n"); /* Xem lai noi dung file da sua */ printf("\n****** XEM LAI NOI DUNG FILE *********\n"); if ((f1=fopen(tenfile,"rt"))!=0) n = 1; while (fread(&hoso,sizeof(hoso),1,f1)) { Hienthi(&hoso,n++); getchar(); } fclose(f1); printf("\nDoc xong danh sach trong file .\n\n"); getch(); /* Them du lieu vao cuoi file */ do { printf("\n*** THEM DU LIEU VAO CUOI FILE *****\n"); printf("\nTen file dang soan : %s\n",tenfile); printf("\nCho ten file (neu la file dang soan thi an Enter): "); gets(dong); /* Cho ten moi */ if (strlen(dong)) strcpy(tenfile,dong); if ((f1=fopen(tenfile,"at"))==0) /* Mo file de them vao cuoi */ printf("Khong tim thay file tren dia\n"); } while(!f1); Them(); 172

/* Hien thi noi dung file */ do { printf("\n******* XEM NOI DUNG FILE ***********\n"); printf("\nTen file dang soan : %s\n",tenfile); printf("\nCho ten file (neu la file dang soan thi an Enter): "); gets(dong); /* Cho ten moi */ if (strlen(dong)) strcpy(tenfile,dong); if ((f1=fopen(tenfile,"rt"))==0) printf("\nKhong tim thay file - Cho lai ten\n"); }while (!f1); n = 1; while (fread(&hoso,sizeof(hoso),1,f1)) { Hienthi(&hoso,n++); getchar(); } fclose(f1); printf("\nDoc xong danh sach trong file.Enter to stop !"); getch(); } void TaoFile(void) { int i; printf("Vao so lieu , muon thoi thi den muc Ten an Enter\ n"); n = 0; /* Dem so phan tu trong file */ do { printf("Ten : "); gets(hoso.ten); if (strlen(hoso.ten)==0) break; /* Ket thuc neu ten la rong */ n++; 173

printf("Tuoi : "); scanf("%d",&hoso.tuoi); printf("Luong : "); scanf("%ld",&hoso.luong); getchar(); /* Xuong dong trong file sau mot nguoi */ printf("\n"); fwrite(&hoso,sizeof(hoso),1,f1); /* Ghi vao file */ }while (1); fclose(f1); printf("\nKet thuc viec tao file va ghi du lieu vao ."); printf("\nTrong file nay co %d phan tu (nguoi)",n); getch(); } void Hienthi(HSCB *hoso,int so) { int i; printf("\nSo ho so : %d\n",so); printf("Ten : %s\n",hoso->ten); printf("Tuoi : %d\n",hoso->tuoi); printf("luong : %ld\n",hoso->luong); } void Sua(HSCB *hoso) { int i; printf("Sua chua so lieu , go Enter neu khong sua\n"); printf("Ten : "); gets(dong); /* Cho ten moi */ if (strlen(dong)) strcpy(hoso->ten,dong); printf("Tuoi gets(dong); if (strlen(dong)) printf("luong gets(dong); : "); /* Cho tuoi moi */ hoso->tuoi = atoi(dong); : "); /* Cho so moi 174 */

if (strlen(dong)) }

hoso->luong = atoi(dong);

void Them(void) { int i; printf("Vao so lieu , muon thoi thi den muc Ten an Enter\ n"); do { printf("Ten : "); gets(hoso.ten); if (strlen(hoso.ten)==0) break; /* Ket thuc neu ten la rong */ n++; printf("Tuoi : "); scanf("%d",&hoso.tuoi); printf("luong : "); scanf("%ld",&hoso.luong); getchar(); /* Xuong dong trong file sau mot nguoi */ printf("\n"); fwrite(&hoso,sizeof(hoso),1,f1); /* Ghi vao file */ } while (1); fclose(f1); printf("\nKet thuc viec them du lieu vao cuoi file."); getch(); } Bi 4. M mt tp tin vn bn, tnh kch thc v thng k s ln xut hin cc ch ci trong tp tin vn bn . #include <stdio.h> #include <stdlib.h> #include <dos.h> #include <conio.h> int a[254]; void main() 175

{ FILE *f; unsigned char c; char tap_tin[79]; int k; long kich_thuoc; int dong=1; for (k=0; k<254; k++) a[k]=0; clrscr(); printf("\nDOC TAP TIN VAN BAN VA VA THONG KE CHU"); printf("\n-Cho biet ten tap tin can doc: "); gets(tap_tin); f=fopen(tap_tin,"rt"); if (f==NULL) { perror("\nKhong doc duoc, vi: "); printf("\nBam phim bat ky de ket thuc"); getch(); exit(1); } else printf("\nNoi dung tap tin : \n"); while (!feof(f)) { c=fgetc(f); putchar(c); a[c]++; } kich_thuoc=ftell(f); printf("\n-Kich thuoc tap tin: %ld bytes",kich_thuoc+1); printf("\n\tBam phim bat ky de thong ke chu"); getch(); fclose(f); printf("\nThong ke cac chu trong tap tin\n"); 176

for (c='A'; c<='z'; c++) { printf("-Chu: %c -Tan so: %3d\n",c,a[c]); dong+=1; if (dong==24) { printf("\nBam phim bat ky de xem tiep\n"); getch(); dong=1; } } printf("\n Bam phim bat ky de ket thuc"); getch(); } Bi 5. Bi ton qun l sinh vin. Vit chng trnh thc hin cc yu cu: Nhp d liu cc sinh vin vo mt danh sch lin kt n, trng d liu ca mi nt bao gm: H lt, tn, im ton, im tin. Sau lu d liu vo mt tp tin c tn DULIEU.DAT In danh sach sinh vin va nhp M tp tin DULIEU.DAT tu sa cc mu tin. c ni dung tp tin DULIEU.DAT vo danh sch lin kt n (sau khi tu sa) v hin th ra mn hnh cc mu tin.
/********************************************************************* QUAN LI SINH VIEN /**********************************************************************/ #include<conio.h>

#include<stdio.h> #include<alloc.h> #include<string.h> #include<ctype.h> #define vedong printf(" --------------------------------------------------------------------------") #define xuongdong printf("\n")

177

struct data { char *holot,*ten; char nt[30]; unsigned int dtoan, dtin; float dtb; unsigned int stt; }; struct tro { data dl; tro *next; }; void nhap(); void in(tro *list); void noi(tro *p); void nhapnd( data *nut); void luufile(); void docfile(); void suadoi(); void fsuadoi(); /******************************************/ /* vung chua bien toan cuc*/ unsigned int tongcong=1; tro *ds,*cuoi,*tfile,*tcuoi; /*******************************************/ /* chuong trinh chinh*/ void main() { char ch; ds=NULL; nhan: clrscr(); printf("\n Chuong trinh quan li sinh vien"); printf("\n Chon mot trong cac chuc nang sau"); printf("\n +++++++++++++++++++++++++++++++++++++++ ++++++"); printf("\n + 1.Nhap danh sach + "); 178

printf("\n dau) + "); printf("\n doi)+ "); printf("\n + "); printf("\n +"); printf("\n ++++++"); printf("\n"); ch= getch();

+ 2.In danh sach + 3.Doc ds tu file

(ds nhap vao ban (ds sau khi co sua

+ 4.Sua du lieu file + Nhan esc de thoat

+++++++++++++++++++++++++++++++++++++++

if (ch=='1') {nhap();goto nhan;} else if (ch=='2') { in(ds);goto nhan;} else if (ch=='3') { docfile();goto nhan;} else if (ch=='4') { suadoi();goto nhan;} else if( int(ch)==27) {printf("\nKET THUC!"); remove("dulieu.dat"); getch();} else { clrscr(); putchar(7); printf("\n\n Ban da chon nham phim! vui long chon lai"); getch(); goto nhan; } } 179

/********************************************************* *************/ void nhapnd( data *nut) { unsigned int diem; clrscr(); printf("\n\n + Nhap hoc du lieu sinh vien %d: ",tongcong); flushall(); printf("\n\n - Ho lot:"); nut->holot=(char *)malloc(15); gets( nut->holot); printf(" - Ten:"); nut->ten=(char *)malloc(15); gets( nut->ten); printf(" - Ngay thang nam sinh :"); flushall(); gets(nut->nt); printf(" flushall(); scanf("%u",&diem); (*nut).dtoan=diem;

- Diem toan :");

// xuongdong; printf(" - Diem tin:"); flushall(); scanf("%u",&diem); (*nut).dtin=diem; //xuongdong; (*nut).dtb =float(((*nut).dtin+ (*nut).dtoan)) /2; } /*************************************************/ void nhapsua( data *nut) { unsigned int diem; clrscr(); printf("BAN HAY SUA THONG TIN\n\n"); flushall(); printf("\n\n - Ho lot:"); 180

nut->holot=(char *)malloc(15); gets( nut->holot); printf(" - Ten:"); nut->ten=(char *)malloc(15); gets( nut->ten); printf(" - Ngay thang nam sinh :"); flushall(); gets(nut->nt); printf(" - Diem toan :"); flushall(); scanf("%u",&diem); (*nut).dtoan=diem; // xuongdong; printf(" - Diem tin:"); flushall(); scanf("%u",&diem); (*nut).dtin=diem; //xuongdong; (*nut).dtb =float(((*nut).dtin+ (*nut).dtoan)) /2; } /*************************************************/ /*noi mot nut vao cuoi danh sach*/ void noi(tro *p) { if(ds==NULL) {cuoi=p; ds=p; } else {cuoi->next=p; cuoi=p;} } / *********************************************************** **/ void luufile() { FILE *f; tro *dau; 181

printf("Chuong trinh nay se luu du lieu vao file DULIEU.DAT\n"); f=fopen("dulieu.dat","wb"); dau =ds; while (dau!= NULL) { fwrite(&dau->dl,sizeof(data),1,f); dau=dau->next; } fclose(f); putchar(7); printf("\nBAN DA GHI XONG DU LIEU"); getch(); } / *********************************************************** / /* nhap danh sach*/ void nhap( ) { int ch; tro *p; data tam; clrscr(); printf("\n DAY LA CHUONG TRINH NHAP DU LIEU CHO DANH SACH"); tt: p= ( tro *)( malloc(sizeof(tro))); nhapnd(&p->dl); p->dl.stt=tongcong++; p->next=NULL; noi(p); printf("\nNhan ESC de cham dut viec nhap du lieu\n -Nhan phim bat ki de tiep tuc"); ch=getch(); if( ch!=27) goto tt; else { clrscr(); vedong; printf("\n\n Ban da nhap xong du lieu"); 182

printf("\nchung toi se luu du lieu nay vao file DULIEU.DAT\n"); vedong;xuongdong; luufile(); getch();} } /*************************************************/ void in ( tro *list) { tro *tam;data q; tam=list; clrscr(); vedong;xuongdong; printf("| DAY LA DANH SACH SINH VIEN |"); xuongdong; vedong; xuongdong; printf("|STT| HOTEN | NG/THANG/NAM | D.TIN | D.TOAN | DTB |"); xuongdong; vedong; xuongdong; if (tam ==NULL) printf(" DANH SACH RONG\n NEN CHON 1 DE NHAP DS DA!\n"); else while (tam!=NULL) { printf("|%-1d |%-10s %-10s |%-12s |%-6d | %6d | %-8.1f|",tam->dl.stt,tam->dl.holot,tam->dl.ten,tam>dl.nt,tam->dl.dtin,tam->dl.dtoan,tam->dl.dtb); xuongdong; tam=tam->next;} vedong; getch(); }

183

/ *********************************************************** *************/ void fsuadoi() { FILE *f; tro *p;int ch,n,i; tfile=NULL; f=fopen("dulieu.dat","rb"); fseek(f,0,SEEK_END); n=ftell(f); n=n/sizeof(data); rewind(f); for (i=1;i<=n;i++) { p=(tro*)malloc(sizeof(tro)); p->next=NULL; fread(&p->dl,sizeof(data),1,f); {if (tfile==NULL) {tfile=p; tcuoi=p; } else {tcuoi->next=p; tcuoi=p; } } } fclose(f); } / *********************************************************** *************/ void docfile() { FILE *f; tro *p;int ch,n,i; tfile=NULL; clrscr(); 184

printf("Chuong trinh nay doc du lieu tu file DULIEU.DAT\ n\n"); f=fopen("dulieu.dat","rb"); if (f==NULL) {printf("\n + FILE NAY CHUA TON TAI\n + NEN CHON 1 DE NHAP DL CHO DS\n + NHAN PHIM BAT KI DE TIEP TUC");getch();} else { fseek(f,0,SEEK_END); n=ftell(f); n=n/sizeof(data); printf(" CAC THONG TIN FILE:\n"); printf(" File luu du lieu la : DULIEU.DAT\n"); printf(" File co %d phan tu",n); rewind(f); for (i=1;i<=n;i++) { p=(tro*)malloc(sizeof(tro)); p->next=NULL; fread(&p->dl,sizeof(data),1,f); {if (tfile==NULL) {tfile=p;tcuoi=p;} else {tcuoi->next=p;tcuoi=p;} } } fclose(f); printf("\nBan co muon xem danh sach nay khong - C/K: "); ch=getch(); if( toupper(ch)=='C')in(tfile); else {printf("\nBam mot phim bat ki de tro lai dau chuong trinh"); getch();} } } / *********************************************************** **************/ void suadoi() 185

{ FILE *f;int ch,stt,n; data tam; f=fopen("dulieu.dat","r+b"); if( f==NULL){ clrscr(); vedong; printf("\n\n\n\n CHUA CO DU LIEU -KHONG THE SUA DOI"); printf("\n\n\n NHAN PHIM BAT KI DE TRO VE DAU CHUONG TRINH\n"); vedong;xuongdong; getch();} else { fseek(f,0,SEEK_END); n=ftell(f); n=n/sizeof(data); clrscr(); printf("Chuong trinh nay se sua doi du lieu\n\n"); printf(" CAC THONG TIN FILE:\n"); printf(" File luu du lieu la : DULIEU.DAT\n"); printf(" File co %d phan tu\n\n\n",n); printf("\nBan co muon xem lai danh sach sinh vien khongC-K:"); printf("\n(GHI CHU :Ban nen xem lai danh sach de biet thu tu sv muon sua\n sau khi xem xong nhan mot phim bat ki de tiep tuc sua doi)"); ch=getch(); if( toupper(ch)=='C') {fsuadoi(); in(tfile);} printf("\n Ban muuon sua doi sinh vien thu may:"); scanf("%d",&stt); if (stt>n ) {printf("\n\n\n\ Danh sach chi co %d sinh vien_ cho nen khong tim thay sinh vien nay\n",n); printf("nhan phim bat ki de tro ve dau chuong trinh_ de chon chuc nang khac\n"); getch(); } else 186

clrscr(); printf("Chao mung den chuong trinh sua doi\n\n"); printf("\nDay la thong tin cua sinh vien ban muon sua doi"); fseek(f,(stt-1)*sizeof(data),SEEK_SET); fread(&tam,sizeof(data),1,f); n=ftell(f); n=n/sizeof(data); printf(" \n + Sinh vien thu: %d",n); printf(" \n + Ho lot : %s",tam.holot); printf(" \n + Ten : %s",tam.ten); printf(" \n + Ngay sinh : %s",tam.nt); printf(" \n + Diem tin : %d",tam.dtin); printf(" \n + Diem toan : %d",tam.dtoan); printf("\nBan co muon sua nhung noi dung tren lai khong- C-K :"); ch=getch(); if( toupper(ch)=='C') { nhapsua(&tam); tam.stt=n; fseek(f,(stt-1)*sizeof(data),SEEK_SET); fwrite(&tam,sizeof(data) ,1,f); printf("\n BAN DA SUA DOI XONG"); getch(); } else { printf("\nTam biet !-Nhan phim bat ki de tro ve dau chuong trinh- va chon chuc nang khac"); getch(); } } } fclose(f); } Bi 6. Vit chng trnh o ngc ni dung ca mt file vn bn. #include<stdio.h> #include<conio.h> #include<dos.h> 187

void docfile(int c,FILE *fp) { if (c!=EOF) docfile(getc(fp),fp); putc(c,stdout); if (wherey()>20) {getch();clrscr();} } / *--------------------------------------------------------------------------*/ void main() { FILE *fp; char filename[80]; int c; textcolor(10); textbackground(1); clrscr(); printf("\n\tCHUONG TRINH DAO NGUOC NOI DUNG FILE DUA RA STDOUT"); window(1,3,80,25); printf("\n\tNhap ten file: "); fflush(stdin); gets(filename); if((fp=fopen(filename,"r"))==NULL) { cprintf("\n\tFile %s khong mo duoc",filename); getch(); return 0; } clrscr(); printf("\n\t\t\tNOI DUNG FILE %s:\n",filename); window(3,5,80,25); c=getc(fp); docfile(c,fp); fclose(fp); getch(); } 188

Bi 7. Vit chng trnh in ni dung file vn bn, ch in cc k t ch ci v ch s. Tn file l i s ca hm main. #include<stdio.h> #include<conio.h> #include<dos.h> int kt(char *s) {int i,dem; for(i=0,dem=0;s[i]&&dem<2;i++) if((s[i]<='z'&&s[i]>='a')||(s[i]<='Z'&&s[i]>='A')|| (s[i]<='9'&&s[i]>='0')||(s[i]==' ')) dem++; return (dem>=2)?1:0; } / *--------------------------------------------------------------------------*/ main(int agrc,char *agrv[]) { FILE *fp; char s[100]; textcolor(10); textbackground(1); clrscr(); printf("\n\tCHUONG TRINH XUAT CAC DONG TRONG FILE CO DANG KY TU IN DUOC"); window(1,3,80,25); if (agrc==1) { printf("\n\tkhong co tham so"); getch(); return 0; } while(--agrc>0) { if((fp=fopen(*++agrv,"r"))==NULL) { cprintf("\n\tFile %s khong mo duoc",*agrv); 189

continue; } clrscr(); printf("\n\t\t\tNOI DUNG FILE %s:\n",*agrv); window(3,5,80,25); while(fgets(s,100-1,fp)!=NULL) {if (kt(s)) fputs(s,stdout); if (wherey()>20) { getch(); clrscr(); } } fclose(fp); window(1,3,80,25); } getch(); return 0; } Bi 8. Vit mt chng trnh thc hin cc yu cu sau: - Cho php son tho vn bn trn DOS. - Cc chc nng c bn: m file mi, m file c, lu file, thot, tr gip. #include #include #include #include #include #include #include void void void void void <dos.h> <process.h> <string.h> <fstream.h> <stdio.h> <iostream.h> <conio.h>

starting(); typing(); openfile(char *); newfile(char *); print(char i[],int x,int y); 190

char char char char

ch ; s[20]; xs[20]; ys[20];

void main() { clrscr(); textmode(BW40); print(" MY NOTEPAD ",3,14);

textmode(BW80); starting(); typing(); getch(); } void starting() { textcolor(1); textbackground(WHITE); clrscr(); for(int i=0 ;i<45;i++) {if(i==0||i==44) cout<<"||"; else if(i==4) cout<<" ctrl+O(Open file)"; else if(i==24) cout<<" ctrl+n(New file)"; else cout<<"=";} gotoxy(80,24); cout<<endl; for( i=0 ;i<37;i++) {if(i==0||i==47) cout<<"||"; else if(i==4) cout<<" ctrl+s(save file)"; 191

else if(i==16) cout<<" ctrl+k(Help)"; else if(i==26) cout<<"ctrl+q(Quit)"; else cout<<"=";} } void typing() { int i=0; char *p=new char[2000]; step1 : int row=2 ,col=1; while(ch!=19) { gotoxy(col,row); step2: if(col==79) {col=1;row++;} else if (row==24) goto step1; int a; ch=getch(); if(ch == 0) ch = getch(); a=ch; // Chuyen doi ky tu sang ma ascii

switch(a) { case 13 : row=row++;col=1; // Enter de sang dong moi gotoxy(col,row); ch='\n'; break; case 8 : if(col==1) {row--;col=78;} else 192 // backspace

{col--; cout<<" i--; } continue; case 9 :

";

col=col+8; // tab if(col>79) {row++;col=col-79;} continue; //phim mui ten len

case 72 : row--; continue; case 77 : col++; continue; case 75 : col--; continue; case 80 : row++; continue;

//phim mui ten qua phai //phim mui ten qua trai //phim mui ten xuong

case 14 : clrscr(); //Tao file moi Ctrl+n cout<<"Nhap vao ten duong dan: "; gets(s); newfile(s); starting(); break; case 15 : clrscr(); //Mo file da co Ctrl+o cout<<"Nhap vao ten duong dan de mo file: " ; gets(xs); starting(); openfile(xs); continue; clrscr(); 193

case 11 :

gotoxy(20,3); cout<<"~`~`~`~`~ TRO GIUP ~`~`~`~`~"; gotoxy(20,4); cout<<"CAC PHIM SAU DUOC DUNG TRONG SOAN THAO: "; int za=10; for(int i=0;i<46 ;i++ ) { gotoxy(za,5); cout<<"=";za++;} za=6; for(i=0;i<15;i++) { gotoxy(10,za); cout<<"|"<<endl; za++;} za=10; for( i=0;i<46 ;i++ ) { gotoxy(za,21); cout<<"="; za++;} za=6; for(i=0;i<15;i++) { gotoxy(56,za); cout<<"|"<<endl; za++;} gotoxy(13,6); cout<<" 1-Mo file da co bam Ctrl + o "; gotoxy(13,8); cout<<" 2-Tao file moi bam Ctrl+n " ; gotoxy(13,10); cout<<" 3-Di chuyen ca phim mui ten (up,down,right,left)" ; gotoxy(13,12); cout<<" 4-Back Space "; gotoxy(13,14); cout<<" 5-Luu file (Ctrl+s)"; gotoxy(13,16); 194

cout<<" 6-Sang dong moi (Enter) "; gotoxy(13,18); cout<<" 7-Thoat Ctrl+q "; gotoxy(13,20); cout<<"Bam phim tuy y de quay ve " ; getch(); clrscr(); starting(); continue;

case 17 : clrscr(); gotoxy(24,6); cout<<"Cam on da su dung Notepad. "; cout<<endl; gotoxy(24,8); cout<<"Hen gap lai!"; getch(); exit(0); } cout<<ch; p[i]=ch; col++; i++; p[i]='\0'; } clrscr(); cout<<"Enter the path where you want to save the file "; gets(ys); int j=0; ofstream f1(ys,ios::out); while(p[j]!='\0') {f1.write((char*)&p[j],sizeof(p[j])); j++;} f1.close(); 195

delete [] p; exit(0); } void newfile(char *s) { ofstream file(s,ios::out); file.close(); } void openfile(char *xs) { char ch; int col=3,row=2; gotoxy(col,row); ifstream file(xs,ios::in); while( file.read((char*)&ch,sizeof(ch))) cout<<ch; file.close(); } void print(char i[],int x,int y) { char far* ptr=(char far*) 0xB8000000+(160*x)+(2*y) ; for(int a=0; i[a]!='\0'; a++) { *ptr=i[a]; *(ptr+1)=16; ptr=ptr+2; delay(250); } ptr=ptr+2; }

196

MC LC
CHNG 1 CC THAO TC VO RA C BN V CC CU LNH C CU TRC

1.1. CU HI.........................................................................1 1.2. BI TP...........................................................................3 2.1. CU HI.......................................................................16 2.2. BI TP.........................................................................20 3.1. CU HI.......................................................................40
3.1. Cu hi v mng..................................40 3.2. Cu hi v con tr...............................45 3.3. Cu hi v lp lu tr bin......................48

3.3. BI TP.........................................................................55 4.1. CU HI.......................................................................90 4.2. BI TP.........................................................................93 5.1. CU HI.....................................................................119 5.2. BI TP.......................................................................120 6.1. CU HI.....................................................................163 6.2. BI TP.......................................................................164

197

You might also like