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

