/*auto readmore*/ /*auto readmore*/ /* an hien script*/ // an hien password /*an hien ma chuong trinh cong tru */ /*Scrollbox thanh cuon*/ /***Nhung CODE***/ /* dòng xanh dòng trắng */ /* https://cdnjs.com/libraries/prism lay thu vien, can vao ten file ma goi 1. copy link vao vi du:prism-python.min.js 2. ten ngon nua la python */ /*=== New posts ===*/ /*header slider*/ /*=== bai viet lien quan===*/ /*===tabcode===*/
Showing posts with label COM108ontap. Show all posts
Showing posts with label COM108ontap. Show all posts

[Tự Học Lập Trình C - Qua Các Bài Tập] COM108_Nhập Môn Lập Trình - Bài 4 - WHILE DO-WHILE - P2 - Ôn Tập

YÊU CẦU


Bài 1:
Viết chương trình nhập vào số lẻ, nếu nhập vào số chẵn thì yêu cầu nhập lại

Bài 2:
Viết chương trình nhập vào số trong khoảng 1 - 5, nếu sai yêu cầu nhập lại

Bài 3:
Viết chương trình nhập vào số nguyên và xuất số đó ra màn hình, tinh tổng các số chẵn vừa nhập, cho đến khi người dùng nhập số 0, xuất tổng ra màn hình.

Bài 4:
Sử dụng switch case kết hợp do while viết chương trình lựa chọn menu:
- 0. Kết thúc chương trình
- 1. Phần quà thứ nhất
- 2. Phần quà thứ nhì
- 3. Phần quà thứ ba
Nếu người dùng nhập vào số:
- 0: Kết thúc chương trình
- 1: Phần thưởng của bạn là $500
- 2: Phần thưởng của bạn là $1000
- 3: Chúc bạn may mắn lần sau

Nếu nhập số không phải là 0 hoặc 1 hoặc 2, hoặc 3 thì yêu cầu nhập lại.


THỰC HIỆN:
Viết chương trình nhập vào số lẻ, nếu nhập vào số chẵn thì yêu cầu nhập lại
#include<stdio.h>
 
int main() {   
	int n; 
	do {
	  	printf("\nNhap vao SO LE n: "); 
		scanf("%d", &n);
	}while (n % 2 == 0); // Nếu nhập vào số chẵn thì yêu câu nhập lại
}
Viết chương trình nhập vào số trong khoảng 1 - 5, nếu sai yêu cầu nhập lại
#include<stdio.h>
 
int main() {   
	int n; 
	do {
	  	printf("\nNhap vao so 1 - 5: "); 
		scanf("%d", &n);
        if (n < 1 || n > 5) 
			printf ("\nNhap lai!");
	}while (n < 1 || n > 5); // nếu < 1 hoặc lớn hơn 5 thì nhập lại
}
Viết chương trình nhập vào số nguyên và xuất số đó ra màn hình, tinh tổng các số chẵn vừa nhập, cho đến khi người dùng nhập số 0, xuất tổng ra màn hình.
#include<stdio.h>
 
int main() {   
	int n; 
	int tong = 0;
	do {
	  	printf("\nNhap vao so tu nhien: "); 
		scanf("%d", &n);
		printf ("%d ", n);
		if (n % 2 == 0)
			tong += n;
	}while (n != 0); 
	
	printf ("\nTong cac SO CHAN vua nhap la: %d", tong);
}
Sử dụng switch case kết hợp do while viết chương trình lựa chọn menu:
- 0. Kết thúc chương trình
- 1. Phần quà thứ nhất
- 2. Phần quà thứ nhì
- 3. Phần quà thứ ba
Nếu người dùng nhập vào số:
- 0: Kết thúc chương trình
- 1: Phần thưởng của bạn là $500
- 2: Phần thưởng của bạn là $1000
- 3: Chúc bạn may mắn lần sau

Nếu nhập số không phải là 0 hoặc 1 hoặc 2, hoặc 3 thì yêu cầu nhập lại.
#include<stdio.h>
 
int main() {   
	int luaChon; 

	do {
	  	printf("\n======Menu======"); 
	  	printf("\n0. Ket thuc chuong trinh"); 
	  	printf("\n1. Phan qua thu NHAT"); 
	  	printf("\n2. Phan qua thu NHI"); 
	  	printf("\n3. Phan qua thu BA");
		printf("\nLua chon cua ban: ");
		scanf("%d", &luaChon);
		switch (luaChon){
			case 0:
				break;
			case 1:
				printf("\nPhan thuong cua ban la $500");
				break;
			case 2:
				printf("\nPhan thuong cua ban la $1000");
				break;
			case 3:
				printf("\nChuc ban may man lan sau!");
				break;
			default:
				printf("\nNhap vao cac so [0-3]");
		}	
	}while (luaChon < 0 || luaChon > 3); 
}

Xong!








[Tự Học Lập Trình C - Qua Các Bài Tập] COM108_Nhập Môn Lập Trình - Bài 3 - IF-ELSE SWITCH-CASE - P2 - Ôn Tập

YÊU CẦU:


Switch-Case căn bản

Bài 1:
Viết chương trình nhập đọc số Interger từ bàn phím, nếu số nhập vào:
  • số 2: thì in ra Thứ hai
  • số 3:               Thứ ba
  • số 4:               Thứ tư
  • số 5:               Thứ năm
  • số 6:               Thứ sáu
  • số 7:               Thứ 7
  • số 8:               Chủ nhật
  • số 1:               Chủ nhật
  • Không phải các số trên: không hợp lệ
Bài 2:
Viết một chương trình nhập 1 tháng trong năm. Hãy cho biết tháng đó là quý mấy của năm. Biết:
  • Tháng 1, 2, 3 quý I.
  • Tháng 4, 5, 6 quý II.
  • Tháng 7, 9, 10 quý III.
  • Tháng 10, 11, 12 quý IV
  • Các trường hợp còn lại: Thông báo tháng không hợp lệ
Ví dụ:
Input: Tháng = 4
Output: "Quý II"


Bài 3:
Viết chương nhập ký tự từ bàn phím. Hãy cho biết ký tự nhập vào có phải là nguyên âm hay không. Biết rằng nguyên âm là: u, e, o, a, i, U, E, O, A, I.

THỰC HIỆN:

Switch-Case căn bản
Viết chương trình nhập đọc số Interger từ bàn phím, nếu số nhập vào:
  • số 2: thì in ra Thứ hai
  • số 3:               Thứ ba
  • số 4:               Thứ tư
  • số 5:               Thứ năm
  • số 6:               Thứ sáu
  • số 7:               Thứ 7
  • số 8:               Chủ nhật
  • số 1:               Chủ nhật
  • Không phải các số trên: không hợp lệ
#include<stdio.h>

int main(){
	int n; 
	printf("\nNhap vao so nguyen duong n: "); scanf("%d", &n);
	switch (n){
		case 2: 
			printf ("\nThu hai"); 
			break;
		case 3: 
			printf ("\nThu ba"); 
			break;
		case 4: 
			printf ("\nThu tu"); 
			break;
		case 5: 
			printf ("\nThu nam"); 
			break;
		case 6: 
			printf ("\nThu sau"); 
			break;
		case 7: 
			printf ("\nThu bay"); 
			break;
		case 1: // không làm gì cả, chương trình tiếp tục thực hiện dòng lệnh bên dưới
		case 8: 
			printf ("\nCHU NHAT"); 
			break;
		
		default: 
			printf ("\nKHONG HOP LE!"); 
			break;
	}	
}
Viết một chương trình nhập 1 tháng trong năm. Hãy cho biết tháng đó là quý mấy của năm. Biết:
  • Tháng 1, 2, 3 quý I.
  • Tháng 4, 5, 6 quý II.
  • Tháng 7, 9, 10 quý III.
  • Tháng 10, 11, 12 quý IV
  • Các trường hợp còn lại: Thông báo tháng không hợp lệ
#include<stdio.h>

int main(){
	int n; 
	printf("\nNhap vao so nguyen duong n (n la so thang): "); scanf("%d", &n);
	switch (n){
		case 1: 
		case 2: 
		case 3: 
			printf ("\nQui I"); 
			break;
		case 4: 
		case 5: 
		case 6: 
			printf ("\nQui II"); 
			break;
		case 7: 
		case 8: 
		case 9: 
			printf ("\nQui III"); 
			break;
		case 10: 
		case 11: 
		case 12: 
			printf ("\nQui IV"); 
			break;
		default: 
			printf ("\nKHONG HOP LE!"); 
			break;
	}	
}
Viết chương nhập ký tự từ bàn phím. Hãy cho biết ký tự nhập vào có phải là nguyên âm hay không. Biết rằng nguyên âm là: u, e, o, a, i, U, E, O, A, I.
#include<stdio.h>

int main(){
	char kyTu; 
	printf("\nNhap vao mot ky tu: "); scanf("%c", &kyTu);
	switch (kyTu){
		case 'u':
		case 'U':
		case 'e':
		case 'E':
		case 'o':
		case 'O':
		case 'a':
		case 'A':
		case 'i':
		case 'I':								
			printf ("\n'%c' la NGUYEN AM!", kyTu); 
			break;
		default: 
			printf ("\nKHONG PHAI nguyen am!"); 
			break;
	}	
}



Xong!

[Tự Học Lập Trình C - Qua Các Bài Tập] COM108_Nhập Môn Lập Trình - Bài 7 - Chuỗi (String) Trong C - P2 - Ôn Tập

NỘI DUNG:
Ôn tập các kiến thức liên quan đến xử lý chuỗi trong C

YÊU CẦU:


Bài 1:
Viết chương trình dạng hàm với các yêu cầu:
Input: Nhập vào chuỗi bất kỳ từ bàn phím
Output:
71.1 Đếm các ký tự là các chữ cái a-z, A-Z trong chuỗi vừa nhập

71.2 Đếm các ký tự số 0-9 trong chuỗi vừa nhập

71.3 Đếm có bao nhiêu ký tự 'h' trong chuỗi (không phân biệt hoa thường)

71.4 Tìm ký tự 'a' trong chuỗi, nếu có trả về trị trí ký đầu tiên tìm thấy

Bài 2:
Xây dựng chương trình đăng nhập bằng username và password 
Input: Nhập username và password (gợi ý: tạo chuỗi userSys và passSys để so sánh chuỗi vừa nhập)
Output:
72.1 Hiển thị thông báo đăng nhập thành công nếu thông tin đăng nhập đúng ngược yêu cầu nhập lại cho đến khi đúng

72.2 
- Hiển thị thông báo đăng nhập thành công nếu thông tin đăng nhập đúng
- Ngược lại thông báo đăng nhập KHÔNG thành công nếu như nhập sai 3 lần.

THỰC HIỆN:

Bài 1:
Viết chương trình dạng hàm với các yêu cầu:
Input: Nhập vào chuỗi bất kỳ từ bàn phím
Output:
Đếm các ký tự là các chữ cái a-z, A-Z trong chuỗi vừa nhập
#include<stdio.h>
// Đếm các ký tự là các chữ cái a-z, A-Z trong chuỗi vừa nhập
int chuCai(char c){
	if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') ) return 1;
	else return 0;
}

int demChuCai_aZ(char s[]){
	int i = 0;
	int dem = 0;
	while (s[i] != '\0'){
		if (chuCai(s[i])) dem ++;
		i++;
	}
	return dem;
}

int main(){
    char a[100];
	printf("\nNhap vao chuoi: ");
	
	fflush(stdin);
	gets(a);
	
	printf("\nCo '%d' CHU CAI trong chuoi '%s'", demChuCai_aZ(a), a);
}
Đếm các ký tự số 0-9 trong chuỗi vừa nhập
#include<stdio.h>
// Đếm các ký tự số 0-9 trong chuỗi vừa nhập
int kyTuSo(char c){
	if ((c >= '0' && c <= '9')  ) return 1;
	else return 0;
}
int demKyTu_09(char s[]){
	int i = 0;
	int dem = 0;
	while (s[i] != '\0'){
		if (kyTuSo(s[i])) dem ++;
		i++;
	}
	return dem;
}
int main(){
    char a[100];
	printf("\nNhap vao chuoi: ");
	
	fflush(stdin);
	gets(a);
    
    printf("\nCo '%d' KY TU SO trong chuoi '%s'", demKyTu_09(a), a);
}
Đếm có bao nhiêu ký tự 'h' trong chuỗi (không phân biệt hoa thường)
#include<stdio.h>
// Đếm có bao nhiêu ký tự 'h' trong chuỗi (không phân biệt hoa thường)
char inHoaKyTu(char c){
	if (c >= 'a' && c <= 'z') c -= 32;
	return c;
}

char inThuongKyTu(char c){
	if (c >= 'A' && c <= 'Z') c += 32;
	return c;
}

int demKyTu(char s[], char c){
	int i = 0;
	int dem = 0;
	while (s[i] != '\0'){
        if ( inHoaKyTu(s[i]) == inHoaKyTu(c)) dem ++;
        // if ( inThuongKyTu(s[i]) == inThuongKyTu(c)) dem ++;
		i++;
	}
	return dem;
}

int main(){
    char c;
    c = 'h'; // thay ký tự cần tìm vào chổ này
    char a[100];
	printf("\nNhap vao chuoi: ");
	
	fflush(stdin);
	gets(a);

    printf("\nCo '%d' KY TU '%c' trong chuoi '%s'", demKyTu(a, c), c, a);
}
Cách-Xử lý chuỗi trước
#include<stdio.h>
#include<string.h>

char inHoaKyTu(char c){
	if (c >= 'a' && c <= 'z') c -= 32;
	return c;
}

char* inHoaChuoi(char s[]){
	int i = 0;
	while (s[i] != '\0'){
		s[i] = inHoaKyTu(s[i]);
		i++;
	}
	return s;
}

char inThuongKyTu(char c){
	if (c >= 'A' && c <= 'Z') c += 32;
	return c;
}

char* inThuongChuoi(char s[]){
	int i = 0;
	while (s[i] != '\0'){
		s[i] = inThuongKyTu(s[i]);
		i++;
	}
	return s;
}

int demKyTu(char s[], char c){
    // xử lý chuỗi trước sau đó mới so sanh
	int i = 0;
	int dem = 0;
    /*
    Hàm tự định nghĩa
    */
    s = inHoaChuoi(s); c = inHoaKyTu(c); 
    // s = inThuongChuoi(s); c = inThuongKyTu(c);
    
    /*
    sử dụng hàm đã xây dựng trong thư viện string.h
    */
    // s = strlwr(s); c = inThuongKyTu(c);
	while (s[i] != '\0'){
        if ( s[i] == c) dem ++;
     	i++;
	}
	return dem;
}

int main(){
    char c;
    c = 'h'; // thay ký tự cần tìm vào chổ này
    char a[100];
	printf("\nNhap vao chuoi: ");
	
	fflush(stdin);
	gets(a);

    printf("\nCo '%d' KY TU '%c' trong chuoi '%s'", demKyTu(a, c), c, a);

}
Tìm kiếm ký tự trong chuỗi, nếu có trả về trị trí ký đầu tiên tìm thấy
#include<stdio.h>
// tìm kiếm ký tự trong chuỗi, nếu có trả về trị trí ký đầu tiên tìm thấy
char inHoaKyTu(char c){
	if (c >= 'a' && c <= 'z') c -= 32;
	return c;
}

char inThuongKyTu(char c){
	if (c >= 'A' && c <= 'Z') c += 32;
	return c;
}

int timViTriKyTu(char s[], char c){
	int i = 0;
	int dem = 0;
	while (s[i] != '\0'){
		
        if ( inHoaKyTu(s[i]) == inHoaKyTu(c)) return i;
    
		i++;
	}
	return dem;
}

int main(){
    char c;
    c = 'a'; // thay ký tự cần tìm
    char a[100];
	printf("\nNhap vao chuoi: ");
	
	fflush(stdin);
	gets(a);
	if (timViTriKyTu(a, c)) {
		printf("\nKy tu '%c' nam vi tri '%d' trong chuoi '%s'", c, timViTriKyTu(a, c), a);
	} else {
		printf("\nKhong tim thay '%c' trong chuoi '%s'", c, a);
	}
    
}

Bài 2:
Xây dựng chương trình đăng nhập bằng username và password 
Input: Nhập username và password (gợi ý: tạo chuỗi userSys và passSys để so sánh chuỗi vừa nhập)
Output:

Hiển thị thông báo đăng nhập thành công nếu thông tin đăng nhập đúng ngược yêu cầu nhập lại cho đến khi đúng
#include<stdio.h>
#include<string.h>
// Hiển thị thông báo đăng nhập thành công nếu thông tin đăng nhập đúng ngược yêu cầu nhập lại cho đến khi đúng
int main(){
	char user[100], pass[100];
	char userSys[] = "admin";
	char passSys[] = "123";
	
	int dem = 0;
	
	do {
		printf ("Nhap vao user: "); gets(user);fflush(stdin);
		printf ("Nhap vao pass: "); gets(pass);
	}while (strcmp(user, userSys) != 0 || strcmp(pass, passSys) != 0 );
	
	printf("\nDang nhap THANH CONG!");
}
- Hiển thị thông báo đăng nhập thành công nếu thông tin đăng nhập đúng
- Ngược lại thông báo đăng nhập KHÔNG thành công nếu như nhập sai 3 lần
#include<stdio.h>
#include<string.h>

int main(){
    /*
    - Hiển thị thông báo đăng nhập thành công nếu thông tin đăng nhập đúng
    - Ngược lại thông báo đăng nhập KHÔNG thành công nếu như nhập sai 3 lần
    */
	char user[100], pass[100];
	char userSys[] = "admin";
	char passSys[] = "123";
	
	int dem = 0;
	int trangThai = 1;
	
	do {
		printf ("Nhap vao user: "); gets(user);fflush(stdin);
		printf ("Nhap vao pass: "); gets(pass);
		dem ++;
        if ((strcmp(user, userSys) != 0 || strcmp(pass, passSys) != 0) && dem < 3 ){
        	printf("\nBan da dang nhap sai -> NHAP LAI!\n");
        }
		if (dem == 3) { // cho phép đăng nhập sai 3 lần
			trangThai = 0;
            printf("\nBan da dang nhap sai %d lan!", dem);
			break;
		}
	}while (strcmp(user, userSys) != 0 || strcmp(pass, passSys) != 0 );
	
	if (trangThai == 1) printf("\nDang nhap THANH CONG!");
	else printf("\nDang nhap THAT BAI!");
}


Xong!

[Tự Học Lập Trình C - Qua Các Bài Tập] COM108_Nhập Môn Lập Trình - Bài 6 - Mảng (Array) Trong C - P2 - Ôn Tập

NỘI DUNG:
Ôn tập về mảng trong C

YÊU CẦU:


Viết chương trình dạng hàm với các yêu cầu:
Input: Nhập vào mảng một chiều gồm n số nguyên, 
Output: 
1.1 Xuất mảng vừa nhập

1.2 Xuất ra các số chia hết cho 3 hoặc chia hết cho 5

1.3 Xuất ra tổng các số chẵn chia hết cho 3 có trong mảng

1.4 Đếm trong mảng có bao nhiêu số chia hết cho 7, và xuất số đếm ra màn hình


THỰC HIỆN:

Yêu cầu 1.1 Xuất mảng vừa nhập
Hàm nhập chuỗi một chiều
void nhapMangMotChieu(int n, int mangMotChieu[]){
	// hàm nhập chuỗi một chiều
	int i;
	for (i = 0 ; i < n ; i++){
		printf("Phan tu thu %d: ", i + 1);
		scanf("%d", &mangMotChieu[i]); 
	}
}
		
Xuất theo hàng dọc
void xuatMangMotChieu(int n, int mangMotChieu[]){
	// xuất theo hàng dọc
	int i;
	for (i = 0 ; i < n ; i++){
		printf("\nPhan tu thu %d: %d ", i + 1, mangMotChieu[i]);	
	}
}
		
Xuất theo hàng ngang
void xuatMangMotChieu_2(int n, int mangMotChieu[]){
	// xuất theo hàng ngang
	int i;
	for (i = 0 ; i < n ; i++){
		printf("%d\t", mangMotChieu[i]);	
	}
}
		
Hàm chính (nhớ In Cờ Lu De <sờ tôi đi ông chấm hờ>)
int main(){
	int n;
	n = 3;
	int mangMotChieu[n];
	printf("\nNhap gia tri cho MANG MOT CHIEU %d phan tu!\n", n);
	nhapMangMotChieu(n, mangMotChieu);
	
	printf("\nCac gia tri trong MANG MOT CHIEU:\n");
//	xuatMangMotChieu(n, mangMotChieu);
	xuatMangMotChieu_2(n, mangMotChieu);
}
		

Xuất ra các số chia hết cho 3 hoặc chia hết cho 5
void chiaHet_3or5(int n, int mangMotChieu[]){
	// Xuất ra các số chia hết cho 3 hoặc chia hết cho 5
	for (int i = 0; i < n; i++){
		if (kiemTraChiaHet(mangMotChieu[i], 3) || kiemTraChiaHet(mangMotChieu[i], 5))
			printf("%d ", mangMotChieu[i]);
	}
}
		
Xuất ra tổng các số chẵn chia hết cho 3 có trong mảng
void tongChanChiaHet_3(int n, int mangMotChieu[]){
	// Xuất ra tổng các số chẵn chia hết cho 3 có trong mảng
	int tong = 0;
	for (int i = 0; i < n; i++){
		if (kiemTraChiaHet(mangMotChieu[i], 2) && kiemTraChiaHet(mangMotChieu[i], 3))
			tong += mangMotChieu[i];
	}
	printf("\nTong cac so CHAN & CHIA HET cho 3: %d", tong);
}
		
Đếm trong mảng có bao nhiêu số chia hết cho 7, và xuất số đếm ra màn hình
void demChiaHet_7(int n, int mangMotChieu[]){
	// Đếm trong mảng có bao nhiêu số chia hết cho 7, và xuất số đếm ra màn hình
	int dem = 0;
	for (int i = 0; i < n; i++){
		if (kiemTraChiaHet(mangMotChieu[i], 7))
			dem ++;
	}
	printf("\nCo '%d' so chia het cho 7", dem);
}
		
Hàm kiểm tra chia hết
int kiemTraChiaHet(int a, int b){
	// hàm kiểm tra chia hết
	if (a % b == 0) return 1;
	return 0;
}
		
Full Code
#include<stdio.h>

void nhapMangMotChieu(int n, int mangMotChieu[]){
	int i;
	for (i = 0 ; i < n ; i++){
		printf("Phan tu thu %d: ", i + 1);
		scanf("%d", &mangMotChieu[i]); 
	}
}

int kiemTraChiaHet(int a, int b){
	// hàm kiểm tra chia hết
	if (a % b == 0) return 1;
	return 0;
}

void chiaHet_3or5(int n, int mangMotChieu[]){
	// Xuất ra các số chia hết cho 3 hoặc chia hết cho 5
	for (int i = 0; i < n; i++){
		if (kiemTraChiaHet(mangMotChieu[i], 3) || kiemTraChiaHet(mangMotChieu[i], 5))
			printf("%d ", mangMotChieu[i]);
	}
}

void tongChanChiaHet_3(int n, int mangMotChieu[]){
	// Xuất ra tổng các số chẵn chia hết cho 3 có trong mảng
	int tong = 0;
	for (int i = 0; i < n; i++){
		if (kiemTraChiaHet(mangMotChieu[i], 2) && kiemTraChiaHet(mangMotChieu[i], 3))
			tong += mangMotChieu[i];
	}
	printf("\nTong cac so CHAN & CHIA HET cho 3: %d", tong);
}
void demChiaHet_7(int n, int mangMotChieu[]){
	// Đếm trong mảng có bao nhiêu số chia hết cho 7, và xuất số đếm ra màn hình
	int dem = 0;
	for (int i = 0; i < n; i++){
		if (kiemTraChiaHet(mangMotChieu[i], 7))
			dem ++;
	}
	printf("\nCo '%d' so chia het cho 7", dem);
}
int main(){
	int n;
	n = 3;
	int mangMotChieu[n];
	printf("\nNhap gia tri cho MANG MOT CHIEU %d phan tu!\n", n);
	nhapMangMotChieu(n, mangMotChieu);
//	chiaHet_3or5(n, mangMotChieu);
//	tongChanChiaHet_3(n, mangMotChieu);
	demChiaHet_7(n, mangMotChieu);
	
}
		

Xong!

[Tự Học Lập Trình C - Qua Các Bài Tập] COM108_Nhập Môn Lập Trình - Bài 5 - P2 Ôn Tập Hàm & Các Bài Toán Liên Quan

NỘI DUNG:
Ôn tập từ bài 1 đến bài 5 dưới dạng viết hàm

YÊU CẦU:

BÀI 0: Input-Output:
0.1
- Input: Nhập số nguyên từ bàn phím
- Output: Xuất số vừa nhập

0.2
- Input: Nhập số thập phân từ bàn phím
- Output: Xuất số vừa nhập

0.3
- Input: Nhập chuỗi từ bàn phím
- Output: Xuất chuỗi vừa nhập

04
- Input: Nhập chuỗi (chấp nhập khoảng trắng) từ bàn phím
- Output: Xuất chuỗi vừa nhập

BÀI 1: Hello
1.1
Viết các hàm theo yêu cầu:
- Xuất ra dòng chữ "Hello"
- Xuất ra dòng chữ "Hello" cộng tên (tên có kiểu dữ liệu là chuỗi, tên là tham số truyền vào)
- Xuất ra dòng chữ "Hello" cộng tên, tuổi (tên, tuổi là các tham số truyền vào)

1.2
Viết hàm (dạng không ra về giá trị, không tham số đầu vào) xuất n dòng chữ "Hello", dùng vòng lặp for để gọi hàm này và xuất ra n chữ hello.

BÀI 2: Max-Min
Xây dựng hàm tìm số lớn nhất trong 2 số
Input: Truyền vào 2 số a, b (có thể gán giá trị trực tiếp hoặc đọc từ bàn phím)
Output: In ra số lớn nhất

BÀI 3: Kiểm tra chẵn, lẻ, chia hết
Xây dựng các hàm:
- Kiểm tra số truyền vào là số chẵn hay số lẻ, trả về kết quả kiểm tra (có thể là 1, 0 hoặc trả về true false). Biết rằng số chẵn là số chia hết cho 2 ( a % 2 == 0)
- Kiểm tra a có chia hết cho b hay không, trả về kết quả ( a % b == 0)
Input:
- Truyền vào a (hàm chẵn lẻ)
- Truyền vào 2 số a, b (hàm chia hết)
Output: Hiển thị thông báo kết quả sau khi gọi hàm

BÀI 4:  Chia hết (sử dụng các hàm đã xây dựng ở bài 3)
4.1
Input: Truyền vào số nguyên n
Output: Xuất tất cả các số lẻ trong khoảng từ 0 đến n;

4.2
Input: Truyền vào số nguyên n
Output: Xuất tất cả các số chia hết cho 3 và 5 trong khoảng từ 0 đến n;

4.3
Input: Truyền vào 2 số nguyên min và max
Output: Xuất tất cả các số chia hết cho 2 hoặc 7 trong khoảng từ min và max;

4.4 
Input: Truyền vào 2 số nguyên min và max
Output: Đếm có bao nhiêu số chia hết cho 3 và là số lẻ trong khoảng từ min và max, in số đếm và các số ra màn hình;

BÀI 5: Số chính
Xây dựng các hàm:
- Kiểm tra chẵn lẻ
- Kiểm tra số chính phương 
Biết rằng: Số chính phương là số tự nhiên có căn bậc hai là một số tự nhiên, hay nó cách khác một số mà giá trị của nó là bình phương của một số tự nhiên. Ví dụ: 4 là số chính phương vì 4 = 2 ^ 2 (2 * 2), 9 = 3 * 3, 16 = 4 * 4,.... để dể hình dung diện tích của hình vuông là số chính phương (diện tích = cạnh * canh).

5.1
- Input: Truyền vào số tự nhiên a
- Output: Xuất ra số đó có phải là số chính phương hay không?

5.2
- Input: Truyền vào số tự nhiên a
- Output: Xuất ra tất cả các số lẻ và là số chính phương trong khoảng từ 0 đến a 

BÀI 6: Số nguyên tố
Xây dựng hàm kiểm tra số nguyên tố (Số nguyên tố là số chia hết cho 1 và chính nó, số 1 không phải là số nguyên tố)

6.1
- Input: Truyền vào số tự nhiên a
- Output: Xuất ra số đó có phải là số nguyên tố hay không?

6.2
- Input: Truyền vào 2 số nguyên min và max
- Output: Xuất ra tất cả các nguyên tố trong khoảng từ min và max;

6.3
- Input: Truyền vào số tự nhiên n
- Output: Xuất ra n số nguyên tố đầu tiên (viết theo dạng truyền vào)


THỰC HIỆN:

BÀI 0: Input-Output:
- Input: Nhập số nguyên từ bàn phím
- Output: Xuất số vừa nhập
#include<stdio.h>
int main(){
	int a;
	printf("\nNhap vao so nguyen n: ");
	scanf("%d", &a);
	
	printf("\nSo vua nhap la: %d", a);
}
- Input: Nhập số thập phân từ bàn phím
- Output: Xuất số vừa nhập
#include<stdio.h>
int main(){
	float a;
	printf("\nNhap vao so thap phan n (Vi du: 5.6789): ");
	scanf("%f", &a);
	
	printf("\nSo vua nhap la: %.2f", a);
}
- Input: Nhập chuỗi từ bàn phím
- Output: Xuất chuỗi vừa nhập
#include<stdio.h>
int main(){
	char a[100];
	printf("\nNhap vao chuoi: ");
	scanf("%s", a);
	
	printf("\nChuoi vua nhap la: %s", a);
}
- Input: Nhập chuỗi (chấp nhập khoảng trắng) từ bàn phím
- Output: Xuất chuỗi vừa nhập
#include<stdio.h>
int main(){
	char a[100];
	printf("\nNhap vao chuoi: ");
	
	fflush(stdin);// xóa bộ nhớ đệm
	// gets(a); // chấp nhận chuỗi bao gồm khoảng trắng
	scanf("%[^\n]s", a);
	printf("\nChuoi vua nhap la: %s", a);
}


BÀI 1: Hello
1.1
Viết các hàm theo yêu cầu:
- Xuất ra dòng chữ "Hello"
- Xuất ra dòng chữ "Hello" cộng tên (tên có kiểu dữ liệu là chuỗi, tên là tham số truyền vào)
- Xuất ra dòng chữ "Hello" cộng tên, tuổi (tên, tuổi là các tham số truyền vào)

#include<stdio.h>
void xinChao(){ 
    // hàm không trả về, KHÔNGtruyền tham số đầu vào
	printf ("\nHello!");
}

void xinChaoTen(char ten[]){
    // hàm không trả về, CÓ truyền tham số đầu vào
	printf ("\nHello %s!", ten );
}

void xinChaoTenTuoi(char ten[], int tuoi){
    // hàm không trả về, có HAI tham số đầu vào
	printf ("\nHello %s %d tuoi!", ten, tuoi );
}
int main(){
	xinChao();
	xinChaoTen("Khanh");
	xinChaoTenTuoi("Khanh", 18);
}
		
1.2
Viết hàm (dạng không ra về giá trị, không tham số đầu vào) xuất n dòng chữ "Hello", dùng vòng lặp for để gọi hàm này và xuất ra n chữ hello.
#include<stdio.h>
void xinChao(){
	printf ("\nHello!");
}

void xinChaoTen(char ten[]){
	printf ("\nHello %s!", ten );
}

void xinChaoTenTuoi(char ten[], int tuoi){
	printf ("\nHello %s %d tuoi!", ten, tuoi );
}
int main(){
	int n;
	n = 5;
	for (int i = 0 ; i < n; i++) xinChao();
}
		

BÀI 2: Max-Min

Xây dựng hàm tìm số lớn nhất trong 2 số
Input: Truyền vào 2 số a, b (có thể gán giá trị trực tiếp hoặc đọc từ bàn phím)
Output: In ra số lớn nhất
#include<stdio.h>
int timMax(int a, int b){
	if (a > b) return a;
	return b;
}

int timSoLonNhat(int a, int b){
	return (a >= b) ? a : b;
}

int main(){
	printf("\n%d",timMax(5, 10));
	printf("\n%d",timSoLonNhat(50, 25));
}
		

BÀI 3: Kiểm tra chẵn, lẻ, chia hết
Xây dựng các hàm:
- Kiểm tra số truyền vào là số chẵn hay số lẻ, trả về kết quả kiểm tra (có thể là 1, 0 hoặc trả về true false). Biết rằng số chẵn là số chia hết cho 2 ( a % 2 == 0)
- Kiểm tra a có chia hết cho b hay không, trả về kết quả ( a % b == 0)
Input:
- Truyền vào a (hàm chẵn lẻ)
- Truyền vào 2 số a, b (hàm chia hết)
Output: Hiển thị thông báo kết quả sau khi gọi hàm
#include<stdio.h>
int kiemTraChanLe(int a){
	if (a % 2 ==0) return 1;
	else return 0;
}

int kiemTraChiaHet(int a, int b){
	if (a % b == 0) return 1;
	return 0;
}

bool kiemTraChiaHet_bool(int a, int b){ // bool
	if (a % b == 0) return true;
	return false;
}

int main(){
	// gọi hàm kiểm tra chẳn lẻ
	int n;
	n = 9;
	if (kiemTraChanLe(n)) printf("\n%d la so CHAN!", n);
	else printf("\n%d la SO LE!", n);
	
	// gọi hàm kiểm tra chia hết
	int a, b;
	a = 18;
	b = 5; 
	if (kiemTraChiaHet(a, b)) printf("\n%d CHIA HET %d", a, b);
	else printf("\n%d KHONG chia het %d", a, b);
} 
		

BÀI 4:  Chia hết (sử dụng các hàm đã xây dựng ở bài 3)
4.1
Input: Truyền vào số nguyên n
Output: Xuất tất cả các số lẻ trong khoảng từ 0 đến n;
#include<stdio.h>
int kiemTraChanLe(int a){
	if (a % 2 ==0) return 1;
	else return 0;
}

int kiemTraChiaHet(int a, int b){
	if (a % b == 0) return 1;
	return 0;
}

bool kiemTraChiaHet_bool(int a, int b){ // bool
	if (a % b == 0) return true;
	return false;
}

int main(){
	// Xuất tất cả các số lẻ trong khoảng từ 0 đến n;
	int n;
	n = 100;
	for (int i = 0; i < n; i++){
//		if (kiemTraChanLe(i) == 0)
		if (kiemTraChiaHet(i, 2) == 0) 
			printf("%d ", i);
	}	
} 
		
4.2
Input: Truyền vào số nguyên n
Output: Xuất tất cả các số chia hết cho 3 và 5 trong khoảng từ 0 đến n;
#include<stdio.h>
int kiemTraChanLe(int a){
	if (a % 2 ==0) return 1;
	else return 0;
}

int kiemTraChiaHet(int a, int b){
	if (a % b == 0) return 1;
	return 0;
}

bool kiemTraChiaHet_bool(int a, int b){ // bool
	if (a % b == 0) return true;
	return false;
}

int main(){
	// kiểm tra chia hết cho 3 và 5 từ 0 đến n;
	int n;
	n = 99;
	
	for (int i = 0; i < n; i++){
		if (kiemTraChiaHet(i, 3) && kiemTraChiaHet(i, 5)) 
			printf("%d ", i);
	}	
} 
		
4.3
Input: Truyền vào 2 số nguyên min và max
Output: Xuất tất cả các số chia hết cho 2 hoặc 7 trong khoảng từ min và max;
#include<stdio.h>
int kiemTraChanLe(int a){
	if (a % 2 ==0) return 1;
	else return 0;
}

int kiemTraChiaHet(int a, int b){
	if (a % b == 0) return 1;
	return 0;
}

bool kiemTraChiaHet_bool(int a, int b){ // bool
	if (a % b == 0) return true;
	return false;
}

int main(){
	// Xuất tất cả các số chia hết cho 2 hoặc 7 trong khoảng từ min và max;
	int min, max;
	min = 10;
	max = 100;
	
	for (int i = min; i < max; i++){
		if (kiemTraChiaHet(i, 2) || kiemTraChiaHet(i, 7)) 
			printf("%d ", i);
	}		
} 
		
4.4 
Input: Truyền vào 2 số nguyên min và max
Output: Đếm có bao nhiêu số chia hết cho 3 và là số lẻ trong khoảng từ min và max, in các số ra màn hình;
#include<stdio.h>
int kiemTraChanLe(int a){
	if (a % 2 ==0) return 1;
	else return 0;
}

int kiemTraChiaHet(int a, int b){
	if (a % b == 0) return 1;
	return 0;
}

bool kiemTraChiaHet_bool(int a, int b){ // bool
	if (a % b == 0) return true;
	return false;
}

int main(){
//	Đếm có bao nhiêu số chia hết cho 3 và là số lẻ trong khoảng từ min và max, in số đếm và các số ra màn hình;
	int dem = 0;
	
	int min, max;
	min = 10;
	max = 100;
		
	for (int i = min; i < max; i++){
//		if (kiemTraChiaHet(i, 3) && kiemTraChanLe(i) == 0) {
		if (kiemTraChiaHet(i, 3) && kiemTraChiaHet(i, 2) == 0) {
			printf("%d ", i);
			dem ++;
		}	
	}
	printf("\nTong cac so thoa dieu kien: %d", dem);		
} 
		

BÀI 5: Số chính phương
Xây dựng các hàm:
- Kiểm tra chẵn lẻ
- Kiểm tra số chính phương 
Biết rằng: Số chính phương là số tự nhiên có căn bậc hai là một số tự nhiên, hay nó cách khác một số mà giá trị của nó là bình phương của một số tự nhiên. Ví dụ: 4 là số chính phương vì 4 = 2 ^ 2 (2 * 2), 9 = 3 * 3, 16 = 4 * 4,.... để dể hình dung diện tích của hình vuông là số chính phương (diện tích = cạnh * canh).
5.1
- Input: Truyền vào số tự nhiên a
- Output: Xuất ra số đó có phải là số chính phương hay không?
#include<stdio.h>
#include<math.h>

int kiemTraChinhPhuong(int a){
	int canBacHai = sqrt(a); // #include<math.h>
    
	if(canBacHai * canBacHai == a) return 1; 
	else return 0;
}

int main(){
//  kiểm tra số chính phương
	int a;
	a = 16;
	if (kiemTraChinhPhuong(a)) printf("\n%d la so CHINH PHUONG!", a);
	else printf("\n%d KHONG phai chinh phuong!", a);
} 
		
5.2
- Input: Truyền vào số tự nhiên a
- Output: Xuất ra tất cả các số lẻ và là số chính phương trong khoảng từ 0 đến a 
#include<stdio.h>
#include<math.h>
int kiemTraChanLe(int a){
	if (a % 2 ==0) return 1;
	else return 0;
}

int kiemTraChinhPhuong(int a){
	int canBacHai = sqrt(a); // #include<math.h>
    
	if(canBacHai * canBacHai == a) return 1; 
	else return 0;
}

int main(){
// Xuất ra tất cả các số lẻ và là số chính phương trong khoảng từ 0 đến a
	int n;
	n = 100;
	for (int i = 1; i < n; i++){
		if (kiemTraChanLe(i) == 0 && kiemTraChinhPhuong(i)){
			printf(" %d ", i);
		}
	}
} 
		


BÀI 6: Số nguyên tố
Xây dựng hàm kiểm tra số nguyên tố (Số nguyên tố là số chia hết cho 1 và chính nósố 1 không phải là số nguyên tố)
6.1
- Input: Truyền vào số tự nhiên a
- Output: Xuất ra số đó có phải là số nguyên tố hay không?
#include<stdio.h>
#include<math.h>

int kiemTraNguyenTo(int x){
	int i;
    if (x == 1)
    	return 0;
	for (i = 2; i < x; i++){
        if (x % i == 0) {
            return 0;
        }
    }
	return 1;
}

int kiemTraNguyenTo2(int x){
	int i;
    if (x == 1)
    	return 0;
	for (i = 2; i <= sqrt(x); i++){ // thu vien math.h
        if (x % i == 0) {
            return 0;
        }
    }
	return 1;
}

int main(){
	// Kiểm tra nguyên tố
	int a;
	a = 21;
	if (kiemTraNguyenTo(a)) printf("\n%d la so NGUYEN TO!", a);
	else printf("\n%d KHONG phai nguyen to!", a);
} 
		
6.2
- Input: Truyền vào 2 số nguyên min và max
- Output: Xuất ra tất cả các nguyên tố trong khoảng từ min và max;
#include<stdio.h>
#include<math.h>

int kiemTraNguyenTo(int x){
	int i;
    if (x == 1)
    	return 0;
	for (i = 2; i < x; i++){
        if (x % i == 0) {
            return 0;
        }
    }
	return 1;
}

int kiemTraNguyenTo2(int x){
	int i;
    if (x == 1)
    	return 0;
	for (i = 2; i <= sqrt(x); i++){ // thu vien math.h
        if (x % i == 0) {
            return 0;
        }
    }
	return 1;
}

int main(){
	// Xuất ra tất cả các nguyên tố trong khoảng từ min và max;
	int min, max;
	min = 15;
	max = 100;
	for (int i = min; i < max; i++){
		if (kiemTraNguyenTo(i)) printf(" %d ", i);
	}
}
		
6.3
- Input: Truyền vào số tự nhiên n
- Output: Xuất ra n số nguyên tố đầu tiên (viết theo dạng truyền vào)
#include<stdio.h>
#include<math.h>

int kiemTraNguyenTo(int x){
	int i;
	if (x == 1)
    	return 0;
	for (i = 2; i < x; i++){
        if (x % i == 0) {
            return 0;
        }
    }
	return 1;
}

int kiemTraNguyenTo2(int x){
	int i;
	if (x == 1)
    	return 0;
	for (i = 2; i <= sqrt(x); i++){ // thu vien math.h
        if (x % i == 0) {
            return 0;
        }
    }
	return 1;
}

void nNguyenToDauTien(int n){ // dùng while
	int dem = 0;
	int i = 2;
	while( dem < n){
		if (kiemTraNguyenTo(i)){
			printf("%d ", i);
			dem ++;
		} i++;
	}
}

void nNguyenToDauTienFor(int n){
	int dem = 0;
	for (int i = 2 ; ; i++){  // for khuyết điều kiện, có nghĩa điều kiện luôn luôn đúng
		if (kiemTraNguyenTo(i)){
			printf("%d ", i);
			dem ++;
		}
		if (dem == n) break;
	}
}

int main(){
	// Xuất ra n số nguyên tố đầu tiên
	int a;
	a = 7;
	nNguyenToDauTien(a);
}
		
Xong!

[Tự Học Lập Trình C - Qua Các Bài Tập] COM108_Nhập Môn Lập Trình - Bài 8 - Cấu Trúc (Structure) Trong C - P2 - Ôn Tập

NỘI DUNG:
Ôn tập các kiến thức liên quan đến cấu trúc (struct) trong C

YÊU CẦU:

Tìm hiểu lý thuyết rước khi xem bài này

BÀI 1:
Tạo struct PhanSo với 2 trường dữ liệu là tuSo và mauSo. Xây dựng các hàm:
  • Nhập phân số,
  • Xuất phân số,
  • Tìm ước số chung lớn nhất,
  • Rút gọn phân số.
Input: Nhập phân số (tử số và mẫu số) từ bàn phím
Output: In ra phân số đã rút gọn.

BÀI 2:
Tạo struct PhanSo với 2 trường dữ liệu là tuSo và mauSo. Xây dựng các hàm:
  • Nhập phân số,
  • Xuất phân số,
  • Tính tổng 2 phân số,
  • Tính tích 2 phân số,
  • Tính thương 2 phân số.
Input: Nhập phân số (tử số và mẫu số) từ bàn phím
Output: Xuất tổng, thương, tích

BÀI 3:
Xây dựng hàm các nhập và xuất phân số
Input: 
- Nhập n (số lượng phân số cần nhập) từ bàn phím,
- Nhập vào các phân số theo số lượng n
Output: Xuất ra tất cả các phân số vừa nhập

BÀI 4:
Tạo struct SinhVien với các trường thông tin: họ tên, điểm. Xây dựng các hàm:
  • Nhập thông tin sinh viên
  • Xuất thông tin sinh viên
  • Sắp xếp giảm dần theo cột/trường dữ liệu điểm
Input: Nhập vào họ tên, điểm của sinh viên
Output: 
Hiển thị ra thông tin sinh viên, điểm, học lực (1 sinh viên)
- Hiển thị ra thông tin sinh viên, điểm, học lực, sắp xếp theo thứ tự điểm giảm dần (danh sách sinh viên)

BÀI 5:
Tạo struct NhanVien với các trường thông tin: mã nhân viên, tên nhân viên, lương căn bản. Xây dựng các hàm:
  • Nhập thông tin nhân viên
  • Xuất danh sách nhân viên
  • Sắp xếp tên theo thứ tự từ a đến z
  • Sắp xếp mức lương căn bản theo thứ tự giảm dần
  • Và một số hàm khác nếu cần thiết
Input: Nhập thông tin cho n nhân viên, n là số lượng nhân viên
Output: 
- Hiển thị thông tin nhân viên theo tên đã sắp xếp theo yêu cầu xây dựng hàm
- Hiển thị thông tin nhân viên theo mức lương căn bản đã sắp xếp theo yêu cầu xây dựng hàm
- Hiển thị thông tin 2 nhân viên có mức lương cao nhất.
- Hiển thi thông tin 1 nhân viên có mức lương cao/thấp nhất.


THỰC HIỆN

BÀI 1:
Tạo struct PhanSo với 2 trường dữ liệu là tuSo và mauSo. Xây dựng các hàm:
  • Nhập phân số,
  • Xuất phân số,
  • Tìm ước số chung lớn nhất,
  • Rút gọn phân số.
Input: Nhập phân số (tử số và mẫu số) từ bàn phím
Output: In ra phân số đã rút gọn.

Code:
#include<stdio.h>

struct PhanSo{
	int tuSo;
	int mauSo;

};

typedef struct PhanSo PS;

int uCLN(int a, int b){
	if (a == 0 || b == 0) return a + b;
	while ( a != b){
		if ( a > b) 
//			a = a - b;
			a -= b;
		else 
			b -= a;
	}return a;
}

void rutGonPhanSo(PS &ps){ // cả tử và mẫu cùng chia hết cho ước số chung lớn nhất
	int uocSo = uCLN(ps.tuSo, ps.mauSo);
	ps.mauSo = ps.mauSo / uocSo;
	ps.tuSo = ps.tuSo / uocSo;
}

void nhapPhanSo(PS &ps){
	printf("\nNhap TU so: ");
	scanf("%d", &ps.tuSo);
	printf("\nNhap MAU so: ");
	scanf("%d", &ps.mauSo);
}

void xuatPhanSo(PS ps){
	rutGonPhanSo(ps); // rút gọn rồi mới in ra
	printf("\n%d/%d", ps.tuSo, ps.mauSo);
}

int main(){
	
	PS ps;

	nhapPhanSo(ps);
//	rutGonPhanSo(ps);
	xuatPhanSo(ps);
	
}


BÀI 2:
Tạo struct PhanSo với 2 trường dữ liệu là tuSo và mauSo. Xây dựng các hàm:
  • Nhập phân số,
  • Xuất phân số,
  • Tính tổng 2 phân số,
  • Tính tích 2 phân số,
  • Tính thương 2 phân số.
Input: Nhập phân số (tử số và mẫu số) từ bàn phím
Output: Xuất tổng, thương, tích

Code:
#include<stdio.h>
struct PhanSo{
	int tuSo;
	int mauSo;
};

typedef struct PhanSo PS;

void nhapPhanSo(PS &a){
	printf("\nNhap TU so: "); scanf("%d", &a.tuSo);
	printf("\nNhap MAU so: "); scanf("%d", &a.mauSo);
}

void xuatPhanSo(PS a){
	printf("%d/%d", a.tuSo, a.mauSo); 
}

PS tongPhanSo(PS a, PS b){
	PS tong;
	tong.tuSo = (a.tuSo * b.mauSo) + (b.tuSo * b.mauSo); // hieu thay + thanh tru
	tong.mauSo = a.mauSo * b.mauSo;
	return tong;
}

PS tichPhanSo(PS a, PS b){ 
	PS tich;
	tich.mauSo = a.mauSo * b.mauSo;
	tich.tuSo = a.tuSo * b.tuSo;
	return tich;
}

PS thuongPhanSo(PS a, PS b){ 
	PS thuong;
	thuong.tuSo = a.tuSo * b.mauSo;
	thuong.mauSo = a.mauSo * b.tuSo;
	return thuong;
}

int main(){
	
	PS ps1, ps2;
	nhapPhanSo(ps1);
	nhapPhanSo(ps2);
	printf("\nTong 2 phan so la: ");
	xuatPhanSo(tongPhanSo(ps1, ps2));
	printf("\nTich 2 phan so la: ");
	xuatPhanSo(tichPhanSo(ps1, ps2));
	printf("\nThuong 2 phan so la: ");
	xuatPhanSo(thuongPhanSo(ps1, ps2));
}

BÀI 3:
Xây dựng hàm các nhập và xuất phân số
Input: 
- Nhập n (số lượng phân số cần nhập) từ bàn phím,
- Nhập vào các phân số theo số lượng n
Output: Xuất ra tất cả các phân số vừa nhập

Code:
#include<stdio.h>

struct PhanSo{
	int tuSo;
	int mauSo;

};

typedef struct PhanSo PS;

void nhapPhanSo(PS &ps){
	printf("\nNhap TU so: ");
	scanf("%d", &ps.tuSo);
	printf("\nNhap MAU so: ");
	scanf("%d", &ps.mauSo);
}

void xuatPhanSo(PS ps){
	printf("\n%d/%d", ps.tuSo, ps.mauSo);
}

int main(){
	
	PS ps[100]; // mảng một chiều
	int n, i;
	
	printf("\nNhap vao SO LUONG phan so can nhap: ");
	scanf("%d", &n);
	for(i = 0; i < n; i++) nhapPhanSo(ps[i]);
	
	printf("\nCac phan so vua nhap la: ");
	for(i = 0; i < n; i++) xuatPhanSo(ps[i]);
	
}

BÀI 4:
Tạo struct SinhVien với các trường thông tin: họ tên, điểm. Xây dựng các hàm:
  • Nhập thông tin sinh viên
  • Xuất thông tin sinh viên
  • Sắp xếp giảm dần theo cột/trường dữ liệu điểm
Input: Nhập vào họ tên, điểm của sinh viên
Output: 
Hiển thị ra thông tin sinh viên, điểm, học lực (1 sinh viên)

Code:
#include<stdio.h>

struct SinhVien{
	char tenSinhVien[50];
	float diemTrungBinh;

};

typedef struct SinhVien SV;

void xepLoai(SV sv){
	printf("\nHoc luc: ");
	if (sv.diemTrungBinh >= 9){
		printf ("Xuat sac!");
	} else if (sv.diemTrungBinh >= 8){
		printf ("Gioi!");
	} else if (sv.diemTrungBinh >= 6.5){
		printf ("Kha!");
	} else if (sv.diemTrungBinh >= 5){
		printf ("Trung binh!");
	} else printf ("Yeu!");
}

void xepLoaiVietGon(SV sv){ // tương tự hàm xepLoai, có thể dùng 1 trong 2 hàm
	printf("\nHoc luc: ");
	if (sv.diemTrungBinh >= 9) printf ("Xuat sac!");
	else if (sv.diemTrungBinh >= 8) printf ("Gioi!");
	else if (sv.diemTrungBinh >= 6.5) printf ("Kha!");
	else if (sv.diemTrungBinh >= 5)	printf ("Trung binh!");
	else printf ("Yeu!");
}

void nhapSinhVien(SV &sv){
	printf("\nNhap ten sinh vien: "); 
//	getchar();
	fflush(stdin);
	gets(sv.tenSinhVien);
	printf("\nNhap diem trung binh: ");
	scanf("%f", &sv.diemTrungBinh);
}

void xuatSinhVien(SV sv){
	printf("\nTen sinh vien: %s", sv.tenSinhVien);
	printf("\nDiem trung binh: %.2f", sv.diemTrungBinh);
	xepLoai(sv);
}

int main(){
	
	SV sv;
	nhapSinhVien(sv);
	xuatSinhVien(sv);
	
}


- Hiển thị ra thông tin sinh viên, điểm, học lực, sắp xếp theo thứ tự điểm giảm dần (danh sách sinh viên)

Code:
#include<stdio.h>

struct SinhVien{
	char tenSinhVien[50];
	float diemTrungBinh;

};

typedef struct SinhVien SV;

void xepLoai(SV sv){
	printf(" Hoc luc: ");
	if (sv.diemTrungBinh >= 9){
		printf ("Xuat sac!");
	} else if (sv.diemTrungBinh >= 8){
		printf ("Gioi!");
	} else if (sv.diemTrungBinh >= 6.5){
		printf ("Kha!");
	} else if (sv.diemTrungBinh >= 5){
		printf ("Trung binh!");
	} else printf ("Yeu!");
}

void xepLoaiVietGon(SV sv){
	printf("\nHoc luc: ");
	if (sv.diemTrungBinh >= 9) printf ("Xuat sac!");
	else if (sv.diemTrungBinh >= 8) printf ("Gioi!");
	else if (sv.diemTrungBinh >= 6.5) printf ("Kha!");
	else if (sv.diemTrungBinh >= 5)	printf ("Trung binh!");
	else printf ("Yeu!");
}

void nhapSinhVien(SV &sv){
	printf("\nNhap ten sinh vien: "); 
//	getchar();
	fflush(stdin);
	gets(sv.tenSinhVien);
	printf("\nNhap diem trung binh: ");
	scanf("%f", &sv.diemTrungBinh);
}

void nhapSinhVienDS(SV sv[], int n){
	for (int i = 0; i < n; i++){
		printf("\nNhap thong tin sinh vien thu %d ", i + 1);
		nhapSinhVien(sv[i]);
	}
}

void xuatSinhVien_BanDau(SV sv){
	printf("\nTen sinh vien: %s", sv.tenSinhVien);
	printf("Diem trung binh: %.2f", sv.diemTrungBinh);
	xepLoai(sv);
}

void xuatSinhVien(SV sv){
	printf("\nTen sinh vien: %s", sv.tenSinhVien);
	printf(" Diem trung binh: %.2f", sv.diemTrungBinh);
	xepLoai(sv);
}

void xuatSinhVienDS(SV sv[], int n){
	for (int i = 0; i < n; i++){
		printf("\nThong tin sinh thu %d ", i + 1);
		xuatSinhVien(sv[i]);
	}
}

void sapXep(SV sv[], int n){
	int i, j;
	for (i = 0; i < n - 1; i++){
		for (j = i + 1; j < n; j++){
			if (sv[i].diemTrungBinh < sv[j].diemTrungBinh){
				SV svtmp;
				svtmp = sv[i];
				sv[i] = sv[j];
				sv[j] = svtmp;
			}
		}
	}
}

int main(){
	int n;
	printf("\nNhap so luong sinh vien can them thong tin: ");
	scanf("%d", &n);
	SV sv[n];
	
	nhapSinhVienDS(sv, n);
	sapXep(sv, n);
	xuatSinhVienDS(sv, n);	
}

BÀI 5:
Tạo struct NhanVien với các trường thông tin: mã nhân viên, tên nhân viên, lương căn bản. Xây dựng các hàm:
  • Nhập thông tin nhân viên
  • Xuất danh sách nhân viên
  • Sắp xếp tên theo thứ tự từ a đến z
  • Sắp xếp mức lương căn bản theo thứ tự giảm dần
  • Và một số hàm khác nếu cần thiết
Input: Nhập thông tin cho n nhân viên, n là số lượng nhân viên
Output: 
- Hiển thị thông tin nhân viên theo tên đã sắp xếp theo yêu cầu xây dựng hàm
- Hiển thị thông tin nhân viên theo mức lương căn bản đã sắp xếp theo yêu cầu xây dựng hàm
- Hiển thị thông tin 2 nhân viên có mức lương cao nhất.
- Hiển thi thông tin 1 nhân viên có mức lương cao/thấp nhất.
Nhập xuất một nhân viên
#include<stdio.h>

struct NhanVien{
	char maNhanVien[20];
	char tenNhanVien[50];
	int luongCanBan;
};
typedef struct NhanVien NV;

void nhapNhanVien(NV &nv){
	printf("Nhap ma NV: ");
	scanf("%s", &nv.maNhanVien);//vi ko co khoang trang
	printf("Nhap ten NV: "); 
	fflush(stdin);
	gets(nv.tenNhanVien);
	printf("Nhap muc luong can ban: ");
	scanf("%d", &nv.luongCanBan);
}

void xuatNhanVien(NV nv){
	printf("\nMa NV: %s", nv.maNhanVien);
	printf("\nTen NV: %s", nv.tenNhanVien);
	printf("\nLuong can ban: %d", nv.luongCanBan);
	printf("\n");
}
int main(){

	NV nv;
	nhapNhanVien(nv);
	xuatNhanVien(nv);
}
Nhập xuất n nhân viên
#include<stdio.h>

struct NhanVien{
	char maNhanVien[20];
	char tenNhanVien[50];
	int luongCanBan;
};
typedef struct NhanVien NV;

void nhapNhanVien(NV &nv){
	printf("Nhap ma NV: ");
	scanf("%s", &nv.maNhanVien);//vi ko co khoang trang
	printf("Nhap ten NV: "); 
	fflush(stdin);
	gets(nv.tenNhanVien);
	printf("Nhap muc luong can ban: ");
	scanf("%d", &nv.luongCanBan);
}

void xuatNhanVien(NV nv){
	printf("\nMa NV: %s", nv.maNhanVien);
	printf("\nTen NV: %s", nv.tenNhanVien);
	printf("\nLuong can ban: %d", nv.luongCanBan);
	printf("\n");
}

void nhapNhanVienDS(NV nv[], int n){
	for (int i = 0; i < n; i++){
		printf("\nNhap thong tin NV thu %d!\n", i + 1);
		nhapNhanVien(nv[i]);
	}
}

void xuatNhanVienDS(NV nv[], int n){
	for (int i = 0; i < n; i++){
		printf("\nNhap thong tin NV thu %d!", i + 1);
		xuatNhanVien(nv[i]);
	} 
}

int main(){

	int n;
	printf("\nNhap so luong NV can them: ");
	scanf("%d", &n);
	
	NV nv[n];
	nhapNhanVienDS(nv, n);
	xuatNhanVienDS(nv, n);
}
Nhập n nhân viên, xuất danh sách nhân viên đã sắp xếp mức lương căn bản theo thứ tự giảm dần
#include<stdio.h>

struct NhanVien{
	char maNhanVien[20];
	char tenNhanVien[50];
	int luongCanBan;
};
typedef struct NhanVien NV;

void nhapNhanVien(NV &nv){
	printf("Nhap ma NV: ");
	scanf("%s", &nv.maNhanVien);//vi ko co khoang trang
	printf("Nhap ten NV: "); 
	fflush(stdin);
	gets(nv.tenNhanVien);
	printf("Nhap muc luong can ban: ");
	scanf("%d", &nv.luongCanBan);
}

void xuatNhanVien(NV nv){
	printf("\nMa NV: %s", nv.maNhanVien);
	printf("\nTen NV: %s", nv.tenNhanVien);
	printf("\nLuong can ban: %d", nv.luongCanBan);
	printf("\n");
}

void nhapNhanVienDS(NV nv[], int n){
	for (int i = 0; i < n; i++){
		printf("\nNhap thong tin NV thu %d!\n", i + 1);
		nhapNhanVien(nv[i]);
	}
}

void xuatNhanVienDS(NV nv[], int n){
	for (int i = 0; i < n; i++){
		printf("\nNhap thong tin NV thu %d!", i + 1);
		xuatNhanVien(nv[i]);
	} 
}
void hoanVi(NV &nv1, NV &nv2){
	NV temp;
	temp = nv1;
	nv1 = nv2;
	nv2 = temp;
}

void sapXep_DangSo(NV nv[], int n){
	for (int i = 0; i < n - 1; i++){
		for (int j = i + 1; j < n; j++){
			if (nv[i].luongCanBan < nv[j].luongCanBan){
				hoanVi(nv[i], nv[j]);
			}
		}
	}
}

int main(){

	int n;
	printf("\nNhap so luong NV can them: ");
	scanf("%d", &n);
	
	NV nv[n];
	nhapNhanVienDS(nv, n);
	sapXep_DangSo(nv, n);
	xuatNhanVienDS(nv, n);
}
Nhập n nhân viên, xuất danh sách nhân viên đã sắp xếp tên theo thứ tự từ a đến z
#include<stdio.h>
#include<string.h>
struct NhanVien{
	char maNhanVien[20];
	char tenNhanVien[50];
	int luongCanBan;
};
typedef struct NhanVien NV;

void nhapNhanVien(NV &nv){
	printf("Nhap ma NV: ");
	scanf("%s", &nv.maNhanVien);//vi ko co khoang trang
	printf("Nhap ten NV: "); 
	fflush(stdin);
	gets(nv.tenNhanVien);
	printf("Nhap muc luong can ban: ");
	scanf("%d", &nv.luongCanBan);
}

void xuatNhanVien(NV nv){
	printf("\nMa NV: %s", nv.maNhanVien);
	printf("\nTen NV: %s", nv.tenNhanVien);
	printf("\nLuong can ban: %d", nv.luongCanBan);
	printf("\n");
}

void nhapNhanVienDS(NV nv[], int n){
	for (int i = 0; i < n; i++){
		printf("\nNhap thong tin NV thu %d!\n", i + 1);
		nhapNhanVien(nv[i]);
	}
}

void xuatNhanVienDS(NV nv[], int n){
	for (int i = 0; i < n; i++){
		printf("\nNhap thong tin NV thu %d!", i + 1);
		xuatNhanVien(nv[i]);
	} 
}
void hoanVi(NV &nv1, NV &nv2){
	NV temp;
	temp = nv1;
	nv1 = nv2;
	nv2 = temp;
}

void sapXep_DangChuoi(NV nv[], int n){
	for (int i = 0; i < n - 1; i++){
		for (int j = i + 1; j < n; j++){
			if (strcmp(nv[i].tenNhanVien, nv[j].tenNhanVien) > 0){
				hoanVi(nv[i], nv[j]);
			}
		}
	}
		
}

int main(){

	int n;
	printf("\nNhap so luong NV can them: ");
	scanf("%d", &n);
	
	NV nv[n];
	nhapNhanVienDS(nv, n);
	sapXep_DangChuoi(nv, n);
	xuatNhanVienDS(nv, n);
}
Hiển thị thông tin 2 nhân viên có mức lương cao nhất.
Trên cơ sở mức lương đã sắp xếp chúng ta gọi hàm xuất 2 nhân viên là được
xuatNhanVienDS(nv, 2);
Hiển thi thông tin 1 nhân viên có mức lương cao/thấp nhất.
void timLuong_Max(NV nv[], int n){
	NV maxLuongNV = nv[0];
	int viTriMax = 0;
	int maxLuong = nv[0].luongCanBan;
	for (int i = 0; i < n; i++){
		if (nv[i].luongCanBan > maxLuong){ // tùy yêu cầu mà thay đổi dấu của biểu thức so sánh
			maxLuongNV = nv[i];
			viTriMax = i; // lưu vị trí thỏa điều kiện
		}	
	}
	xuatNhanVien(nv[viTriMax]);
}


Xong!
/*header slide*/