Giáo trình Lập trình cơ bản - Nguyễn Thị Thu Hà
Mục tiêu:
- Hiểu được lịch sử phát triển của ngôn ngữ C;
- Biết được những ứng dụng thực tế của ngôn ngữ lập trình C;
- Thao tác thành thạo trên môi trường phát triển C;
- Sử dụng được hệ thống trợ giúp của phần mềm C;
- Chủ động tìm hiểu các tính năng của ngôn ngữ C.
1. Giới thiệu của ngôn ngữ C:
1.1 Lịch sử phát triển:
C là ngôn ngữ lập trình cấp cao, được sử dụng rất phổ biến để lập trình hệ thống
cùng với Assembler và phát triển các ứng dụng.
Vào những năm cuối thập kỷ 60 đầu thập kỷ 70 của thế kỷ XX, Dennish Ritchie
(làm việc tại phòng thí nghiệm Bell) đã phát triển ngôn ngữ lập trình C dựa trên ngôn ngữ
BCPL (do Martin Richards đưa ra vào năm 1967) và ngôn ngữ B (do Ken Thompson
phát triển từ ngôn ngữ BCPL vào năm 1970 khi viết hệ điều hành UNIX đầu tiên trên
máy PDP-7) và được cài đặt lần đầu tiên trên hệ điều hành UNIX của máy DEC PDP-11.
Năm 1978, Dennish Ritchie và B.W Kernighan đã cho xuất bản quyển “Ngôn
ngữ lập trình C” và được phổ biến rộng rãi đến nay.
Lúc ban đầu, C được thiết kế nhằm lập trình trong môi trường của hệ điều hành
Unix nhằm mục đích hỗ trợ cho các công việc lập trình phức tạp. Nhưng về sau, với
những nhu cầu phát triển ngày một tăng của công việc lập trình, C đã vượt qua khuôn khổ
của phòng thí nghiệm Bell và nhanh chóng hội nhập vào thế giới lập trình để rồi các công
ty lập trình sử dụng một cách rộng rãi. Sau đó, các công ty sản xuất phần mềm lần lượt
đưa ra các phiên bản hỗ trợ cho việc lập trình bằng ngôn ngữ C và chuẩn ANSI C cũng
được khai sinh từ đó.
Ngôn ngữ lập trình C là một ngôn ngữ lập trình hệ thống rất mạnh và rất “mềm7
dẻo”, có một thư viện gồm rất nhiều các hàm (function) đã được tạo sẵn. Người lập trình
có thể tận dụng các hàm này để giải quyết các bài toán mà không cần phải tạo mới. Hơn
thế nữa, ngôn ngữ C hỗ trợ rất nhiều phép toán nên phù hợp cho việc giải quyết các bài
toán kỹ thuật có nhiều công thức phức tạp. Ngoài ra, C cũng cho phép người lập trình tự
định nghĩa thêm các kiểu dữ liệu trừu tượng khác. Tuy nhiên, điều mà người mới vừa học
lập trình C thường gặp “rắc rối” là “hơi khó hiểu” do sự “mềm dẻo” của C. Dù vậy, C
được phổ biến khá rộng rãi và đã trở thành một công cụ lập trình khá mạnh, được sử dụng
như là một ngôn ngữ lập trình chủ yếu trong việc xây dựng những phần mềm hiện nay.
Trang 1
Trang 2
Trang 3
Trang 4
Trang 5
Trang 6
Trang 7
Trang 8
Trang 9
Trang 10
Tải về để xem bản đầy đủ
Tóm tắt nội dung tài liệu: Giáo trình Lập trình cơ bản - Nguyễn Thị Thu Hà
o; printf("CHUONG CHINH DOI MOT SO TU CO SO 10 SANG CO SO 16 /n"); printf("So can chuyen:"); scanf("%d",&so); printf("So chuyen:%s",doiCoSo(so)); getch(); } 3. Viết chương trình đọc và 2 số nguyên và in ra kết quả của phép (+), phép trừ (-), phép nhân (*), phép chia (/). Nhận xét kết quả chia 2 số nguyên. #include #include int main () { int so1, so2; float thuong; clrscr(); printf("\n Nhap vao 2 so nguyen "); scanf("%d%d",&so1,&so2); printf("\n %d + %d =%d",so1, so2, so1+so2); printf("\n %d - %d =%d",so1, so2, so1-so2); printf("\n %d * %d =%d",so1, so2, so1*so2); if (so2!=0) { thuong=float(so1)/float(so2); printf("\n %d / %d =%f", so1, so2, thuong); } else printf("Khong chia duoc cho 0"); getch(); return 0; } 59 4. Viết chương trình nhập vào bán kính hình cầu, tính và in ra diện tích, thể tích của hình cầu đó. Hướng dẫn: S = 4πR2 và V = (4/3)πR3. #include #include int main () { int bk; clrscr(); printf(" nhap vao ban kinh cua hinh cau: "); scanf("%d",&bk); printf(" Dien tich cua ban cau la: %.2f\n",4*3.14*bk*bk); printf(" The tich cua ban cau la : %.2f\n",(4/3)*3.14*3*bk); getch(); return 0; } 5. Viết chương trình nhập vào một số a bất kỳ và in ra giá trị bình phương (a2), lập phương (a3) của a và giá trị a4. #include #include int main () { int a; clrscr(); printf(" nhap vao mot so a bat ki: "); scanf("%d",&a); printf(" Binh phuong cua so a la %d:\n",a*a); printf(" Lap phuong cua so a la :%d\n",a*a*a); printf(" Gia tri a^4 la : %d\n",a*a*a*a); getch(); return 0; } 6. Viết chương trình đọc từ bàn phím 3 số nguyên biểu diễn ngày, tháng, năm và xuất ra màn hình dưới dạng "ngay/thang/nam" (chỉ lấy 2 số cuối của năm). #include #include int main () { int ngay,thang,nam; clrscr(); printf(" Nhap vao 3 so : ngay, thang, nam"); scanf("%d%d%d",&ngay,&thang,&nam); if(ngay==0|| ngay>31) printf("nhap sai ngay ! moi kiem tra lai ngay\n"); else if (thang==0||thang>12) printf("nhap sai thang ! moi kiem tra lai thang\n"); else if (nam==0||nam>100) printf("nhap sai nam ! moi kiem tra lai nam\n"); else 60 printf("ban vua nhap ngay,thang,nam:%d:%d:%d",ngay,thang,nam); getch(); return 0; } 7. Viết chương trình nhập vào số giây từ 0 đến 86399, đổi số giây nhập vào thành dạng "gio:phut:giay", mỗi thành phần là một số nguyên có 2 chữ số. Ví dụ: 02:11:05 #include #include void main() { int giay,phut,gio; printf("Nhap giay: "); scanf("%d",&giay); gio=giay/3600; giay=giay%3600; phut=giay/60; giay=giay%60; printf("\nSau khi chuyen: "); char a[3],b[3],c[3]; if (gio<10) printf("0%d:",gio); else printf("%d:",gio); if (phut<10) printf("0%d:",phut); else printf("%d:",phut); if (gio<10) printf("0%d",giay); else printf("%d",giay); getch(); } Hàm if: 1. Viết chương trình nhập vào số nguyên dương, in ra thông báo số chẵn hay lẻ. Hướng dẫn: Nhập vào số nguyên dương x. Kiểm tra nếu x chia chẵn cho hai thì x là số chẵn (hoặc chia cho 2 dư 0) ngược lại là số lẻ. #include #include int main () { int a; clrscr(); printf(" nhap vao mot so a bat ki: "); scanf("%d",&a); 61 if(a%2==0) printf("So nhap vao la so chan\n"); else printf("So nhap vao la so le\n"); getch(); return 0; } 2. Viết chương trình nhập vào 4 số nguyên. Tìm và in ra số lớn nhất. Hướng dẫn: Ta có 4 số nguyên a, b, c, d. Tìm 2 số nguyên lớn nhất x, y của 2 cặp (a, b) và (c, d). Sau đó so sánh 2 số nguyên x, y để tìm ra số nguyên lớn nhất. #include #include main() { int a,b,c,d,max1,max2; printf("\n nhap so thu nhat="); scanf("%d",&a); printf("\n nhap so thu hai="); scanf("%d",&b); printf("\n nhap so thu ba="); scanf("%d",&c); printf("\n nhap so thu tu="); scanf("%d",&d); if(a>b) max1=a; else max1=b; if(c>d) max2=c; else max2=d; if (max1>max2) printf("so lon nhat trong 4 so la:%d",max1); else printf("so lon nhat trong 4 so la:%d",max2); getch(); } 3. Viết chương trình giải phương trình bậc 2: ax2 + bx + c = 0, với a, b, c nhập vào từ bàn phím. Hướng dẫn: Nhập vào 3 biến a, b, c. Tính Delta = b*b - 4*a*c Nếu Delta < 0 thì Phương trình vô nghiệm Ngược lại Nếu Delta = 0 thì x1 = x2 = - b/(2*a) Ngược lại x1 = (- b - sqrt(Delta))/(2*a) 62 x2 = (- b + sqrt(Delta))/(2*a) Hết Nếu Hết Nếu #include #include #include void main () { clrscr(); float a,b,c,delta; printf("ban hay nhap a,b,c vao "); scanf("%f%f%f",&a,&b,&c);// cac he so cua pt bac 2 if (a!=0) { delta=b*b-4*a*c; if (delta>0) { printf("phuong trinh co 2 nghiem: "); printf("x1=%.2f",(-b-sqrt(delta))/(2*a)); printf(" x2=%.2f",(-b+sqrt(delta))/(2*a)); } else //TH a0 va delta <=0 { if (delta==0) { printf("phuong trinh co nghiem kepn"); printf("x=%.2f",-b/(2*a)); } else printf("phuong trinh vo nghiem "); } } else // (If a==0) { if (b!=0) // a luc nay =0 { printf("phuong trinh co 1 nghiemn"); printf("x=%.2f",-c/b); } else // a=0 va b=0 { if (c!=0) printf("phuong trinh khong xac dinh"); else printf("phuong trinh vo so nghiem"); } } 63 getch(); } 4. Viết chương trình nhập vào giờ phút giây (hh:mm:ss). Cộng thêm số giây nhập vào và in ra kết quả dưới dạng hh:mm:ss. Hướng dẫn: Nhập vào giờ phút giây vào 3 biến gio, phut, giay và nhập và giây công thêm vào biến them: Nếu giay + them < 60 thì giay = giay + them Ngược lại giay = (giay + them) - 60 phut = phut + 1 Nếu phut >= 60 thì phut = phut - 60 gio = gio + 1 Hết nếu Hết nếu #include #include main() { clrscr(); int h,m,s,t; printf("\nnhap vao gio, phut, giay:"); scanf ("%d%d%d",&h,&m,&s); printf("\nnhap them giay muon cong vao :"); scanf ("%d",&t); if (s+t<60) s=s+t; else { s=(s+t)-60; m=m+1; } if (m>=60) { m=m-60; h=h+1; } printf("\gio : phut : giay sau khi cong vao la: %d:%d:%d",h,m,s); getch(); } 5. Viết chương trình nhập vào 3 số nguyên rồi in ra màn hình theo thứ tự tăng dần. #include #include void sapxep(int &x,int &y) 64 { int t; if (x>y) { t=x; x=y; y=t; } } main() { int a,b,c; printf("\n nhap so thu nhat="); scanf("%d",&a); printf("\n nhap so thu hai="); scanf("%d",&b); printf("\n nhap so thu ba="); scanf("%d",&c); sapxep(a,b); sapxep(a,c); sapxep(b,c); printf("Ba so a,b,c da dc sap xep la:%d %d %d",a,b,c); getch(); } Vòng lặp 1. Viết chương trình tính tổng bậc 3 của N số nguyên đầu tiên. #include #include main() { int n,k,s=0; printf("Nhap vao so N :"); scanf("%d",&n); s=0; for(k=1;k<=n;k++) s=s+(k*k*k); printf("Tong bac 3 cac so dau tien cua n: %d.\n",s); getch(); } 2. Viết chương trình nhập vào một số nguyên rồi in ra tất cả các ước số của số đó. #include #include void main() { clrscr(); 65 int n,i; printf("nhap so nguyen n:"); scanf("%d",&n); printf("cac uoc so cua %d la:",n); for(i=1;i<=n;i++) if(n%i==0) printf("%3d;",i); getch(); } 3. Viết chương trình vẽ một tam giác cân bằng các dấu * #include #include void main() { clrscr(); int n,i,j; printf("nhap chieu cao tam giac:"); scanf("%d",&n); for(i=1;i<=n;i++) { for(j=1;j<=n-i;j++) printf(" "); for(j=1;j<=2*i-1;j++) printf("*"); printf("\n"); } getch(); } 4. Viết chương trình tính tổng nghịch đảo của N số nguyên đầu tiên theo công thức S = 1 + 1/2 + 1/3 + + 1/N 5. Viết chương trình tính tổng bình phương các số lẻ từ 1 đến N. #include #include int n,i,s; int main() { printf("nhap vao so nguyen n: "); scanf("%d",&n); //nhap vao so nguyen n s=0; //khoi tao tong, gan gia tri cua tong ban dau bang 0 for(int i=1;i<=n;i=i+2) s=s+i*i; //cho i chay tu 1 den n, moi lan tang i 2 don vi, cong tong voi i binh phuong printf("/n Tong binh phuoc cac so le la:%d",s); getch(); } 6. Viết chương trình nhập vào N số nguyên, tìm số lớn nhất, số nhỏ nhất. #include 66 #include int max,min,i,n; int a[100]; void main() { printf("nhap vao so phan tu cua mang:"); scanf("%d",&n); for(int i=0;i<n;i++) { printf("nhap phan tu thu:%d ",i); scanf("%d",&a[i]); } max=a[0]; min=a[0]; for(i=0;i<n;i++) { if(max<a[i]) max=a[i]; if(min>a[i]) min=a[i]; } printf("gia tri lon nhat cua mang la: %d\n",max); printf("gia tri nho nhat cua mang la: %d\n",min); getch(); } 7. Viết chương trình nhập vào N rồi tính giai thừa của N. #include #include void main () { int n,i,gt; clrscr(); printf(" nhap vao mot so n bat ki: "); scanf("%d",&n); gt=1; for(i=1;i<=n;i++) gt=gt*i; printf(" Giai thua cua so a la %d:\n",gt); getch(); } 8. Viết chương trình tìm USCLN, BSCNN của 2 số. #include #include int uscln(int a , int b) { if (a < 0) a = -a; if (b < 0) b = -b; if (a == 0) return b; 67 if (b == 0) return a; while (a != b) { if (a > b) a -= b; else b-= a; } return b; } void main() { int a , b; printf(" Nhap so a:"); scanf("%d",&a); printf(" Nhap so b:"); scanf("%d",&b); printf("USCLN = %d\n",uscln(a,b)); printf("BSCNN = %d",(a*b)/uscln(a,b)); getch(); } 9. Viết chương trình vẽ một tam giác cân rỗng bằng các dấu *. #include #include void main () { int n; printf ("Nhap chieu cao cua tam giac : "); scanf ("%d" , &n); n = 2*n-1; for (int i = 1 ; i <= n ; i++) { for (int j = 1 ; j <= n ; j++) { if ( (i == n || i == j || i+j == n+1) && i >= (n/2)+1) printf ("%c" , '*'); else printf (" "); } printf ("\n"); } getch(); } 10. Viết chương trình vẽ hình chữ nhật rỗng bằng các dấu *. #include #include void main () { 68 int n , m; printf ("Nhap chieu rong : "); scanf ("%d" , &n); printf ("Nhap chieu cao : "); scanf ("%d" , &m); for (int i = 1 ; i <= m ; i++) { for (int j = 1 ; j <= n ; j++) { if (i == 1 || i == m || j == 1 || j == n) printf ("%c" , '*'); else printf (" "); } printf ("\n"); } getch(); } 11. Viết chương trình nhập vào một số và kiểm tra xem số đó có phải là số nguyên tố hay không? #include #include void main () { int n; do { printf ("Nhap vao so can kiem tra : "); scanf ("%d" , &n); } while (n < 2); int i = 2; while (n%i != 0) i++; if (n == i) printf ("Do la so NGUYEN TO \n"); else printf ("Khong phai so NGUYEN TO \n"); getch(); } Hàm: 1. Viết hàm tính n! int tong (int n) { int i, s=1; for (i=1;i<=n;i++) s*=i; return s; } 2. Viết hàm tính tổng S = 1+2+.+n. int tong (int n) 69 { int i, s=0; for (i=1;i<=n;i++) s+=i; return s; } 3. Viết hàm kiểm tra số nguyên tố. int ktNgto(int n) { int i,demuoc=1,s; for(i=1;i<=n;i++) { if(i%n==0) demuoc++; } if(demuoc==2) s=1; else s=0; return s; } 4. Viết hàm tính số hạng thứ n trong dãy Fibonacci. #include #include int f(int a) // Fibonacci { if(a==1 || a==2) return a; else return (f(a-1)+f(a-2)); } void main() { int i,n; clrscr(); printf("Nhap vao gia tri cho n : "); scanf("%d",&n); for(i=1;i<=n;i++) printf("%d ",f(i)); getch(); } 5. Viết hàm tìm số lớn nhất trong 2 số. int max (int a,int b) { If(a>b) return a; Else return b; } Mảng và chuỗi: 1. Viết hàm tìm số lớn nhất, nhỏ nhất trong một mảng n số nguyên. 70 int tmax(int a[],int n) { int i,max; max=a[0]; for (i=1;i<n;i++) if (max<a[i]) max=a[i]; return max; } * Hàm tìm số nhỏ nhất int tmin(int a[],int n) { int i,min; min=a[0]; for (i=1;i<n;i++) if (min>a[i]) min=a[i]; return min; } 2. Viết hàm sắp xếp tăng dần, giảm dần của một dãy số cho trước. * Hàm sắp xếp tăng dần void sxtd(int a[],int n) { int i,j,tam; for (i=0;i<n;i++) for (j=i+1;j<n;j++) if (a[i]>a[j]) {tam=a[i]; a[i]=a[j]; a[j]=tam;} } * Hàm sắp xếp giảm dần void sxgd(int a[],int n) { int i,j,tam; for (i=0;i<n;i++) for (j=i+1;j<n;j++) if (a[i]<a[j]) { tam=a[i]; a[i]=a[j]; a[j]=tam; } } 3. Viết hàm tách tên và họ lót từ một chuỗi cho trước. #include #include #include void tach (char s[],char ten[],char lot[]) { int i,j,n; 71 n=strlen(s); for (i=n-1;i>0;i--) if (s[i]==' ') break; for (j=0;j<i;j++) lot[j]=s[j]; lot[i]='\0'; for (j=i+1;j<n;j++) ten[j-i-1]=s[j]; ten[n-i-1]='\0'; } void main(void) { char s[30],ten[20],lot[20]; printf(" nhap ho va ten \n"); gets(s); tach(s,ten,lot); printf (" \n ho va chu lot: \n"); puts(lot); printf(" ten: \n"); puts(ten); getch(); } 4. Viết hàm cắt bỏ khoảng trắng thừa ở giữa, hai đầu. #include #include #include void catbo( char s[]) { int n,i,j=0; char t[30]; n=strlen(s); for (i=0;i<n;i++) if (s[i]!=' ') t[i-j]=s[i]; else j++; t[n-j]='\0'; strcpy(s,t); } void main(void) { char s[30]; printf(" nhap chuoi: \n"); gets(s); catbo(s); puts(s); 72 getch(); } 5. Viết hàm chuyển đổi 1 chuỗi sang chữ thường và 1 hàm chuyển đổi sang chữ HOA. 6. Viết hàm chuyển đổi 1 chuỗi sang dạng Title Case (kí tự đầu của mỗi từ là chữ HOA, Code giải bài 5 và bài 6: #include #include #include #include void t_hoa(char s[]) { int i,n; n=strlen(s); for (i=0;i<n;i++) s[i]=toupper(s[i]); } void t_thuong(char s[]) { int i,n; n=strlen(s); for (i=0;i<n;i++) s[i]=tolower(s[i]); } void hoadd(char s[]) { int i,n; n=strlen(s); s[0]=toupper(s[0]); for (i=1;i<n;i++) s[i]=tolower(s[i]); } void main(void) { char s[30]; printf(" nhap chuoi: \n"); gets(s); t_hoa(s); printf(" chuoi da doi thanh chu hoa: \n"); puts(s); t_thuong(s); printf(" chuoi doi thanh chu thuong: \n"); puts(s); hoadd(s); printf(" chuoi doi thanh chu hoa dau dong con lai thuong: \n"); puts(s); getch(); } 73 các kí tự còn lại chữ thường) 7. Viết chương trình nhập vào 1 chuỗi và in ra chuỗi đảo ngược. #include #include #include void main(void) { char s[30],t[30]; int i,n; printf(" nhap chuoi:\n"); gets(s); n=strlen(s); for (i=0;i<n;i++) t[i]=s[n-i-1]; t[n]='\0'; printf("chuoi dao nguoc: \n"); puts(t); getch(); } Ví dụ: Nhập vào chuỗi "Lap trinh C can ban" In ra "nab nac C hnirt paL" 8. Viết chương trình nhập vào một chuỗi ký tự rồi đếm xem trong chuỗi đó có bao nhiêu chữ 'th'. #include #include #include void main(void) { char s[30]; int n,i,j=0; printf(" nhap chuoi \n "); gets(s); n=strlen(s); for (i=0;i<n-1;i++) if ((s[i]=='t')&&(s[i+1]=='h')) j++; printf("so chu 'th' co trong chuoi: %d \n",j); getch(); }
File đính kèm:
- giao_trinh_lap_trinh_co_ban_nguyen_thi_thu_ha.pdf