/*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===*/
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
Nhập mảng
Xuất mảng dọc
Xuất mảng ngang
Hàm chính
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);
}
Yêu cầu 1.2
Yêu cầu 1.3
Yêu cầu 1.4
Hàm kiểm tra chia hết
Full code chương trình
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);
}
#include<stdio.h>
#include <string.h>
int main() {
char chuoi1[20], chuoi2[20];
printf("Nhap chuoi 1: "); gets(chuoi1);
printf("Nhap chuoi 2: "); gets(chuoi2);
if (strcmp(chuoi1, chuoi2) == 0) {
printf("2 chuoi bang nhau.");
} else if (strcmp(chuoi1, chuoi2) < 0) {
printf("Chuoi 1 NHO hon chuoi 2");
} else {
printf("Chuoi 1 LON hon chuoi 2");
}
}
Copy chuỗi: kết quả là
KU TEO
#include<stdio.h>
#include<string.h>
int main() {
char chuoi1 [50];
char chuoi2 [50] = "KU TEO";
strcpy(chuoi1, chuoi2); // copy chuoi2 vào chuoi1
printf("\nChuoi moi la: %s", chuoi1);
}
Tìm kiếm chuỗi: kết quả trả về là "Teo hoc lap trinh"
#include<stdio.h>
#include <string.h>
int main() {
char chuoi1[50] = "Tony Teo hoc lap trinh";
char chuoi2[50] = "Teo";
char *chuoiCon;
chuoiCon = strstr(chuoi1, chuoi2);
printf ("\nChuoi con la: %s", chuoiCon);
}
Áp dụng tìm kiếm chuỗi: kết quả
Tim thay vì chữ "Teo"
có xuất hiện trong chuoi1
#include<stdio.h>
#include <string.h>
int main() {
char chuoi1[50] = "Tony Teo hoc lap trinh";
char chuoi2[50] = "Teo";
if (strstr(chuoi1, chuoi2) != NULL) printf("Tim thay");
else printf("KHONG tim thay");
}
YÊU CẦU:
BÀI 1: XÂY DỰNG CHƯƠNG TRÌNH ĐẾM NGUYÊN ÂM VÀ PHỤ ÂM CỦA 1 CHUỖI Input: nhập vào 1 chuỗi Output: Số lượng nguyên âm và phụ âm trong
chuỗi Biết rằng: Nguyên âm gồm: a, e, i, o, u
BÀI 2: XÂY DỰNG CHƯƠNG TRÌNH ĐĂNG NHẬP BẰNG USERNAME VÀ PASSWORD Input: Nhập vào username và password Output: Đăng nhập thành công hay
không thành công
BÀI 3: XÂY DỰNG CHƯƠNG TRÌNH SẮP XẾP CHUỖI THEO CHỮ CÁI Input: Nhập 5 chuỗi bất kỳ Output: Thứ tự các chuỗi đã được sắp
xếp
THỰC HIỆN:
BÀI 1: XÂY DỰNG
CHƯƠNG TRÌNH ĐẾM NGUYÊN ÂM VÀ PHỤ ÂM CỦA 1 CHUỖI Input: nhập vào 1 chuỗi Output: Số lượng nguyên âm và phụ âm trong
chuỗi Biết rằng: Nguyên âm gồm: a, e, i, o, u
code: đếm nguyên âm phụ âm, nhưng cho kết quả sai phần phụ âm, không đếm được
chữ in hoa
#include<stdio.h>
// đếm nguyên âm phụ âm, nhưng cho kết quả sai phần phụ âm, không đếm được chữ in hoa
int main(){
char s[100];
printf("\nNhap chuoi: ");
scanf("%[^\n]s", &s);
// gets(s);
int nguyenAm = 0;
int phuAm = 0;
int i = 0;
while (s[i]){
if (s[i] == 'u' || s[i] == 'e' || s[i] == 'o' || s[i] == 'a' || s[i] == 'i'){
nguyenAm ++;
} else {
phuAm ++; // có nghĩa là không phải nguyên âm là đếm
}i++;
}
printf("\nChuoi [%s] co '%d' nguyen am, va '%d' phu am!", s, nguyenAm, phuAm);
}
code đúng:
#include<stdio.h>
#include<string.h>
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;
}
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;
}
int main(){
char s[100], chuoi[100];
printf("\nNhap chuoi: ");
scanf("%[^\n]s", &chuoi);
// gets(s);
int nguyenAm = 0;
int phuAm = 0;
int i = 0;
// strcpy(s, strlwr(chuoi)); // gán chuỗi vừa nhập vào chuỗi s
strcpy(s, inThuongChuoi(chuoi));
while (s[i]){
if (isalpha(s[i])){ // nếu là chữ cái thì làm
if (s[i] == 'u' || s[i] == 'e' || s[i] == 'o' || s[i] == 'a' || s[i] == 'i'){
nguyenAm ++;
} else {
phuAm ++;
}
}i++;
}
printf("\nChuoi [%s] co '%d' nguyen am, va '%d' phu am!", s, nguyenAm, phuAm);
}
Cách viết khác, cách viết dùng
con trỏ
Đếm nguyên âm
#include<stdio.h>
int demNguyenAm(char chuoi[]){
int dem = 0;
int i = 0;
while(chuoi[i]){
// chuoi[i] = tolower(chuoi[i]);
chuoi[i] = strlwr(chuoi[i]);
if ((chuoi[i] == 'a') || (chuoi[i] == 'i') || (chuoi[i] == 'e') || (chuoi[i] == 'o') || (chuoi[i] == 'e') ) {
dem = dem + 1;
}
i++;
}
return dem;
}
int demNguyenAm_tro(char *chuoi){
int dem = 0;
int i = 0;
while(chuoi[i]){
// chuoi[i] = tolower(chuoi[i]);
chuoi[i] = tolower(chuoi[i]);
if ((chuoi[i] == 'a') || (chuoi[i] == 'i') || (chuoi[i] == 'e') || (chuoi[i] == 'o') || (chuoi[i] == 'e') ) {
dem = dem + 1;
}
i++;
}
return dem;
}
int main()
{
char chuoi[100];
printf("\Nhap vao CHUOI: ");
gets(chuoi);
printf("Co [%d] nguyen am.", demNguyenAm_tro(chuoi));
}
Đếm nguyên âm và phụ âm
#include<stdio.h>
// dem PHU AM
int demNguyenAm_tro(char *chuoi){
int dem = 0;
int i = 0;
while(chuoi[i]){
char c = tolower(chuoi[i]);
if ((c == 'a') || (c == 'i') || (c == 'e') || (c == 'o') || (c == 'e') ) {
dem = dem + 1;
}
i++;
}
return dem;
}
void demNguyenPhuAm_tro(char *chuoi, int *demNA, int *demPA){
*demNA = 0;
*demPA = 0;
int i = 0;
while(chuoi[i]){
char c = tolower(chuoi[i]);
if (isalpha(c)){ // la chu cai
if ((c == 'a') || (c == 'i') || (c == 'e') || (c == 'o') || (c == 'e') ) {
*demNA = *demNA + 1;
}
else {
*demPA = *demPA + 1;
}
}
i++;
}
}
int main()
{
char chuoi[100];
printf("\Nhap vao CHUOI: ");
gets(chuoi);
int demNA, demPA;
demNguyenPhuAm_tro(chuoi, &demNA,&demPA);
printf ("Co %d NGUYEN am va co %d PHU am", demNA, demPA);
// printf("Co [%d] nguyen am.", demNguyenAm_tro(chuoi));
}
BÀI 2:XÂY DỰNG CHƯƠNG TRÌNH ĐĂNG NHẬP BẰNG USERNAME VÀ PASSWORD Input: Nhập vào username và password Output: Đăng nhập thành
công hay không thành công
BÀI 3: XÂY DỰNG CHƯƠNG TRÌNH SẮP XẾP CHUỖI THEO CHỮ CÁI Input: Nhập 5 chuỗi bất kỳ Output: Thứ tự các chuỗi đã được
sắp xếp
code:
#include<stdio.h>
#include<string.h>
void nhapChuoi(char s[][100], int n){
int i;
for (i = 0; i < n; i ++){
printf("\nNhap chuoi %d: ", i + 1);
fflush(stdin);
gets(s[i]);
}
}
void xuatChuoi(char s[][100], int n){
int i;
for (i = 0; i < n; i ++){
printf("\n%s", s[i]);
}
}
void sapXep(char s[][100], int n){
int i, j;
for (i = 0; i < n-1; i++){
for (j = i + 1; j < n; j++){
if (strcmp(s[i],s[j]) > 0){
char temp[100];
strcpy(temp, s[j]);
strcpy(s[j], s[i]);
strcpy(s[i], temp);
}
}
}
}
int main(){
char s[100][100];
nhapChuoi(s, 5);
sapXep(s, 5);
xuatChuoi(s, 5);
}
- 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 1và
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:
Bài 0.1
Bài 0.2
Bài 0.3
Bài 0.4
- 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 (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
Bài 1.1
Bài 1.2
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
Bài 2
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
Bài 3
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)
Bài 4.1
Bài 4.2
Bài 4.3
Bài 4.4
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).
Bài 5.1
Bài 5.2
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 1và chính nó, số 1 không phải là số nguyên tố)
Bài 6.1
Bài 6.2
Bài 6.3
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);
}
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.
Bài 85.1
Bài 85.2
Bài 85.3
Bài 85.4
Bài 85.5
Bài 85.6
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]);
}
Truy cập các thành viên trong struct sử dụng dấu chấm (.), nếu viết dạng con trỏ thì sử dụng dấu trừ + mũi tên "->"
Ví dụ 1:
#include<stdio.h>
struct SinhVien{
char maSinhVien[8];
char tenSinhVien[50];
float diemTrungBinh;
};
typedef struct SinhVien SV;
int main(){
SV a = {"PS12345", "Nguyen Van A", 8.5};
printf ("\nThong tin sinh vien 'a'");
printf ("\nMa so SV: %s", a.maSinhVien);
printf ("\nHo ten SV: %s", a.tenSinhVien);
printf ("\nDiem trung binh cac mon: %.1f", a.diemTrungBinh);
}
Ví dụ 2: Chỉ hoạt động trên C
(lưu file .C), KHÔNG chạy trên C++
#include<stdio.h>
struct SinhVien{
char maSinhVien[8];
char tenSinhVien[50];
float diemTrungBinh;
};
typedef struct SinhVien SV;
int main(){
// cách khai báo này chỉ hoạt động trên C, KHÔNG chạy trên C++
SV b = {.maSinhVien = "PS56789", .tenSinhVien = "Nguyen Van B", .diemTrungBinh = 9.5};
printf ("\n\nThong tin sinh vien 'b'");
printf ("\nMa so SV: %s", b.maSinhVien);
printf ("\nHo ten SV: %s", b.tenSinhVien);
printf ("\nDiem trung binh cac mon: %.1f", b.diemTrungBinh);
}
Ví dụ 3:
Cú pháp bị lỗi: [Error] assignment to expression with array type
Hướng khắc phục: Gán giá trị thành chuỗi, sử dụng hàm
strcpy
int main(){
SV c;
strcpy(c.maSinhVien, "PS99999");
strcpy(c.tenSinhVien, "Tony Teo");
}
Full code:
#include<stdio.h>
struct SinhVien{
char maSinhVien[8];
char tenSinhVien[50];
float diemTrungBinh;
};
typedef struct SinhVien SV;
int main(){
SV c;
strcpy(c.maSinhVien, "PS99999");
strcpy(c.tenSinhVien, "Tony Teo");
c.diemTrungBinh = 9.5;
printf ("\n\nThong tin sinh vien 'c'");
printf ("\nMa so SV: %s", c.maSinhVien);
printf ("\nHo ten SV: %s", c.tenSinhVien);
printf ("\nDiem trung binh cac mon: %.1f", c.diemTrungBinh);
}
Ví dụ:
Viết chương trình nhập thông tin sinh viên bao gồm các trường: maSinhVien,
tenSinhVien, diemTrungBinh
Input: Nhập thông tin maSinhVien, tenSinhVien, diemTrungBinh từ bàn phím
Output: Xuất ra thông tin sinh viên vừa nhập
a. Viết thông thường:
#include<stdio.h>
struct SinhVien{
char maSinhVien[8];
char tenSinhVien[50];
float diemTrungBinh;
};
typedef struct SinhVien SV;
int main(){
SV sv;
printf("\nNhap ma so SV: "); scanf("%s", &sv.maSinhVien);
printf("\nNhap ho ten SV: ");
getchar(); // để đọc phím enter, nếu không có sẽ trôi lệnh gets
//fflush(stdin); // xóa vùng nhớ đệm
gets(sv.tenSinhVien);// đọc chuỗi nhập từ bàn phím, CHẤP NHẬN chuỗi có khoảng trắng
printf("\nNhap diem trung binh: "); scanf("%f", &sv.diemTrungBinh);
printf ("\n\nThong tin sinh vien:");
printf ("\nMa so SV: %s", sv.maSinhVien);
printf ("\nHo ten SV: %s", sv.tenSinhVien);
printf ("\nDiem trung binh cac mon: %.1f", sv.diemTrungBinh);
}
Noted:
getchar(); để đọc phím enter, nếu không có sẽ trôi lệnh gets
có thể dùng fflush(stdin) thay vì getchar(); để xóa vùng
nhớ đệm
gets(sv1.tenSinhVien); đọc chuỗi nhập từ bàn phím, CHẤP NHẬN
chuỗi có khoảng trắng
scanf("%[^\n]s", &tenBien); đọc chuỗi nhập từ bàn
phím, CHẤP NHẬN chuỗi có khoảng trắng
Muốn truy cập vào các thành viên của struct dùng dấu chấm (.)
void xuatSinhVien(SV sv){
printf ("\n\nThong tin sinh vien:");
printf ("\nMa so SV: %s", sv.maSinhVien);
printf ("\nHo ten SV: %s", sv.tenSinhVien);
printf ("\nDiem trung binh cac mon: %.1f", sv.diemTrungBinh);
}
Hàm nhập dạng trả về struct
SV nhapSinhVien(){
SV sv;
printf("\nNhap ma so SV: "); scanf("%s", &sv.maSinhVien);
printf("\nNhap ho ten SV: ");
getchar();
gets(sv.tenSinhVien);
printf("\nNhap diem trung binh: "); scanf("%f", &sv.diemTrungBinh);
return sv;
}
Hàm nhập trên C++ (lưu file file .CPP)
void nhapSinhVien_CPP(SV &sv){
printf("\nNhap ma so SV: "); scanf("%s", &sv.maSinhVien);
printf("\nNhap ho ten SV: ");
getchar();
gets(sv.tenSinhVien);
printf("\nNhap diem trung binh: "); scanf("%f", &sv.diemTrungBinh);
}
Hàm nhập dạng con trỏ: (sử dụng dấu trừ + dấu lớn "->")
void nhapSinhVienConTro(SV *sv){
printf("\nNhap ma so SV: "); scanf("%s", &sv->maSinhVien);
printf("\nNhap ho ten SV: ");
getchar();
gets(sv->tenSinhVien);
printf("\nNhap diem trung binh: "); scanf("%f", &sv->diemTrungBinh);
}
Hàm chính của chương trình
int main(){
// SV sv = nhapSinhVien(); // gọi hàm nhập viết dạng trả về cấu trúc
SV sv;
nhapSinhVien_CPP(sv); // gọi hàm nhập viết dạng C++
// nhapSinhVienConTro(&sv); // gọi hàm nhập viết dạng con trỏ
xuatSinhVien(sv);
}
YÊU CẦU:
BÀI 1: XÂY DỰNG CHƯƠNG TRÌNH LƯU THÔNG TIN SINH VIÊN Input: Nhập vào từ bàn phím các thông tin sinh viên như: mã số sinh viên,
tên sinh viên, ngành học, điểm trung bình. Output: Xuất ra thông
tin của tất cả sinh viên trên màn hình
BÀI 2: TRÊN CƠ SỞ BÀI 1
Input: nhập số lượng sinh viên muốn thêm từ bàn phím
Output: Xuất ra thông tin của tất cả sinh viên trên màn hình
BÀI 3: SẮP XẾP SINH VIÊN THEO ĐIỂM TĂNG DẦN
Hướng dẫn: Sử dụng lại bài số 1, trước khi hiển thị sinh viên ra màn hình
thì chạy giải thuật sắp xếp
BÀI 4: TÌM KIẾM SINH VIÊN Hướng dẫn: Sau khi đã nhập thông tin sinh viên vào mảng. Tìm kiếm sinh
viên theo mã sinh viên
THỰC HIỆN:
BÀI 1: XÂY
DỰNG CHƯƠNG TRÌNH LƯU THÔNG TIN SINH VIÊN Input: Nhập vào từ bàn phím các thông tin sinh viên như: mã số sinh
viên, tên sinh viên, ngành học, điểm trung bình. Output: Xuất
ra thông tin của tất cả sinh viên trên màn hình
code tham khảo:
#include<stdio.h>
struct SinhVien{
char maSinhVien[8];
char tenSinhVien[50];
float diemTrungBinh;
};
typedef struct SinhVien SV;
void nhapSinhVienConTro(SV *sv){
printf("\nNhap ma so SV: "); scanf("%s", &sv->maSinhVien);
printf("\nNhap ho ten SV: ");
getchar();
gets(sv->tenSinhVien);
printf("\nNhap diem trung binh: "); scanf("%f", &sv->diemTrungBinh);
}
void xuatSinhVien(SV sv){
printf ("\n\nThong tin sinh vien:");
printf ("\nMa so SV: %s", sv.maSinhVien);
printf ("\nHo ten SV: %s", sv.tenSinhVien);
printf ("\nDiem trung binh cac mon: %.1f", sv.diemTrungBinh);
}
int main(){
SV sv[100];
int i;
int n;
printf ("\nNhap vao so luong SV muon them: ");
scanf("%d", &n);
for (i = 0; i < n; i++){
nhapSinhVienConTro(&sv[i]);
}
for (i = 0; i < n; i++){
xuatSinhVien(sv[i]);
}
}
BÀI 2: TRÊN CƠ SỞ BÀI 1
Input: nhập số lượng sinh viên muốn thêm từ bàn phím
Output: Xuất ra thông tin của tất cả sinh viên trên màn hình
code tham khảo:
#include<stdio.h>
struct SinhVien{
char maSinhVien[8];
char tenSinhVien[50];
float diemTrungBinh;
};
typedef struct SinhVien SV;
void nhapSinhVienConTro(SV *sv){
printf("\nNhap ma so SV: "); scanf("%s", &sv->maSinhVien);
printf("\nNhap ho ten SV: ");
getchar();
gets(sv->tenSinhVien);
printf("\nNhap diem trung binh: "); scanf("%f", &sv->diemTrungBinh);
}
void xuatSinhVien(SV sv){
printf ("\n\nThong tin sinh vien:");
printf ("\nMa so SV: %s", sv.maSinhVien);
printf ("\nHo ten SV: %s", sv.tenSinhVien);
printf ("\nDiem trung binh cac mon: %.1f", sv.diemTrungBinh);
}
int main(){
SV sv[100];
int i;
int n;
printf ("\nNhap vao so luong SV muon them: ");
scanf("%d", &n);
for (i = 0; i < n; i++){
nhapSinhVienConTro(&sv[i]);
}
for (i = 0; i < n; i++){
xuatSinhVien(sv[i]);
}
}
BÀI 3:SẮP XẾP SINH VIÊN THEO ĐIỂM TĂNG DẦN
Hướng dẫn: Sử dụng lại bài số 1, trước khi hiển thị sinh viên ra màn
hình thì chạy giải thuật sắp xếp
code tham khảo:
#include<stdio.h>
struct SinhVien{
char maSinhVien[8];
char tenSinhVien[50];
float diemTrungBinh;
};
typedef struct SinhVien SV;
void nhapSinhVienConTro(SV *sv){
printf("\nNhap ma so SV: "); scanf("%s", &sv->maSinhVien);
printf("\nNhap ho ten SV: ");
getchar();
gets(sv->tenSinhVien);
printf("\nNhap diem trung binh: "); scanf("%f", &sv->diemTrungBinh);
}
void xuatSinhVien(SV sv){
printf ("\n\nThong tin sinh vien:");
printf ("\nMa so SV: %s", sv.maSinhVien);
printf ("\nHo ten SV: %s", sv.tenSinhVien);
printf ("\nDiem trung binh cac mon: %.1f", sv.diemTrungBinh);
}
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(){
SV sv[100];
int i;
int n;
char maTimKiem[100];
printf ("\nNhap vao so luong SV muon them: ");
scanf("%d", &n);
for (i = 0; i < n; i++){
nhapSinhVienConTro(&sv[i]);
}
for (i = 0; i < n; i++){
xuatSinhVien(sv[i]);
}
sapXep(sv, n);
for (i = 0; i < n; i++){
xuatSinhVien(sv[i]);
}
}
BÀI 4:TÌM KIẾM SINH VIÊN Hướng dẫn: Sau khi đã nhập thông tin sinh viên vào mảng. Tìm kiếm sinh
viên theo mã sinh viên
code tham khảo:
#include<stdio.h>
struct SinhVien{
char maSinhVien[8];
char tenSinhVien[50];
float diemTrungBinh;
};
typedef struct SinhVien SV;
SV nhapSinhVien(){
SV sv;
printf("\nNhap ma so SV: "); scanf("%s", &sv.maSinhVien);
printf("\nNhap ho ten SV: ");
getchar();
gets(sv.tenSinhVien);
printf("\nNhap diem trung binh: "); scanf("%f", &sv.diemTrungBinh);
return sv;
}
void nhapSinhVienConTro(SV *sv){
printf("\nNhap ma so SV: "); scanf("%s", &sv->maSinhVien);
printf("\nNhap ho ten SV: ");
getchar();
gets(sv->tenSinhVien);
printf("\nNhap diem trung binh: "); scanf("%f", &sv->diemTrungBinh);
}
void xuatSinhVien(SV sv){
printf ("\n\nThong tin sinh vien:");
printf ("\nMa so SV: %s", sv.maSinhVien);
printf ("\nHo ten SV: %s", sv.tenSinhVien);
printf ("\nDiem trung binh cac mon: %.1f", sv.diemTrungBinh);
}
void timKiemSinhVien(SV sv[], int n, char maSoSinhVien[100]){
int i;
for (i = 0; i < n; i++){
if (strcmp(maSoSinhVien, sv[i].maSinhVien) == 0){
xuatSinhVien(sv[i]);
return;
}
}
printf("\nKhong tim thay sinh vien co ma %s", maSoSinhVien);
}
int main(){
SV sv[100];
int i;
int n;
char maTimKiem[100];
printf ("\nNhap vao so luong SV muon them: ");
scanf("%d", &n);
for (i = 0; i < n; i++){
nhapSinhVienConTro(&sv[i]);
}
for (i = 0; i < n; i++){
xuatSinhVien(sv[i]);
}
printf("\nNhap vao ma sinh vien can tim: ");
scanf("%s", maTimKiem);
timKiemSinhVien(sv, n, maTimKiem);
}
MỤC TIÊU:
Sau bài thực hành, các bạn có khả năng thực hiện được:
Biết sử dụng mảng 1 chiều trong lập trình
Biết sử dụng mảng 2 chiều trong lập trình
LÝ THUYẾT:
MẢNG 1 CHIỀU
MẢNG LÀ GÌ?
Mảng là tập hợp các phần tử có cùng kiểu dữ liệu
CÁCH KHAI BÁO
Khai báo KHÔNG khởi tạo
int mangMotChieu[5];// khởi tạo mảng 1 chiều có kiểu dữ liệu là số nguyên (int) có có chiều dài là 5
int mangMotChieu_KhaiBaoKhac[]; // khởi tạo mảng có độ dài không cố định, có kiểu dữ liệu là int
Chúng ta có thể truy cập/thay đổi giá trị của mảng thông qua chỉ số
Index
printf("%d", mangMotChieu[2]);
Ví dụ: Truy cập vào vị trí có Index 2 và xuất giá trị ra màn
hình
#include<stdio.h>
int main()
{
int mangMotChieu[] = {25, 50, 75, 100, 200};
printf("%d", mangMotChieu[2]); // in ra giá trị của mảng tại vị trí có chỉ số Index là 2
// Kết quả là 75 vì trong C index bắt đầu từ 0
}
Kích thức/Độ dài của mảng
int mangMotChieu[] = {25, 50, 75, 100, 200};
int soPhanTuTrongMang = sizeof mangMotChieu / sizeof (int);
Kiểu dữ liệu int có 4byte trên mỗi phần tử, nên để biết mảng có bao
nhiêu phần tử thì chúng ta phải lấy độ dài của mảng chia cho độ dài của
kiểu dữ liệu. Ví dụ trên là 20/4 = 5
Ví dụ:
#include<stdio.h>
int main()
{
int i;
int mangMotChieu[] = {25, 50, 75, 100, 200};
int soPhanTuTrongMang = sizeof mangMotChieu / sizeof (int);
printf("\nMang co '%d' phan tu!", soPhanTuTrongMang); }
Cách duyệt mảng
#include<stdio.h>
int main()
{
int i;
int mangMotChieu[] = {25, 50, 75, 100, 200};
for (i = 0; i < 5; i++)
{
printf("%d ", mangMotChieu[i]);
}
}
Lợi ích của mảng
- Sử dụng mảng để nắm giữ nhiều giá trị thay vì phải khai báo nhiều
biến. - Truy xuất nhanh - Dễ dàng đọc dữ liệu từ các phần tử
và sắp xếp
MẢNG 2 CHIỀU
Chúng ta tạm hiểu mảng 2 chiều một sheet của file excel nó bao gồm các
hàng và các cột.
int mangHaiChieu[2][3] = { {1, 4, 2}, {3, 6, 8} };
printf("%d", mangHaiChieu[0][2]);
/*
kết quả là 2
truy xuất và lấy giá trị hàng 0 cột 2
*/
Thay đổi giá trị của mảng 2 chiều
int mangHaiChieu[2][3] = { {1, 4, 2}, {3, 6, 8} };
mangHaiChieu[0][0] = 9; // thay đổi/gán giá trị hàng 0, cột 0 bằng 9
printf("%d", mangHaiChieu[0][0]); // kết quả là 9 thay vì 1
Cách duyệt mảng 2 chiều: Duyệt mảng 2 chiều cần 2 vòng lặp
(1 cho dòng, 1 cho cột)
int mangHaiChieu[2][3] = { {1, 4, 2}, {3, 6, 8} };
int i, j;
for (i = 0; i < 2; i++) {
for (j = 0; j < 3; j++) {
printf("%d\n", mangHaiChieu[i][j]);
}
}
Chú ý khi khai báo mảng chúng ta phải xác định số cột, nếu
không sẽ báo lỗi
Hàm nhập mảng 2 chiều
void nhapMangHaiChieu(int hang, int cot, int mangHaiChieu[][100]){
int i, j;
for (i = 0 ; i < hang ; i++)
{
for (j = 0 ; j < cot ; j++)
{
printf("\nNhap vao phan tu HANG %d COT %d cua mang: ", i + 1, j + 1);
scanf("%d", &mangHaiChieu[i][j]);
}
}
}
Hàm in/xuất mảng 2 chiều
void xuatMangHaiChieu(int hang, int cot, int mangHaiChieu[][100]){
int i, j;
printf("\nCac gia tri trong Mang 2 chieu la:\n");
for (i = 0 ; i < hang ; i++)
{
for (j = 0 ; j < cot ; j++)
{
printf("%d\t", mangHaiChieu[i][j]);
}
printf("\n");
}
}
Hàm chính gọi nhập xuất:
#include<stdio.h>
int main()
{
int hang, cot;
int mangHaiChieu[100][100];
printf("\n=====MANG 2 CHIEU=====");
printf("\nNhap vao so HANG: "); scanf("%d", &hang);
printf("\nNhap vao so COT: "); scanf("%d", &cot);
nhapMangHaiChieu(hang, cot, mangHaiChieu);
xuatMangHaiChieu(hang, cot, mangHaiChieu);
}
YÊU CẦU:
BÀI 1:
TÍNH TRUNG BÌNH TỔNG CÁC SỐ CHIA HẾT CHO 3 TRONG MẢNG Input: Nhập vào từ bàn phím 1 mảng các số nguyên. Mảng gồm n phần tử Output:
- Xuất ra các phần tử trong mảng
- In ra tổng các phần tử trong mảng
BÀI 2:
TÌM GIÁ TRỊ LỚN NHẤT VÀ NHỎ NHẤT TRONG MẢNG Input: Nhập vào từ bàn phím 1 mảng các số nguyên. Mảng gồm n phần tử Output:
Xuất ra màn hình giá trị nhỏ nhất và lớn nhất của mảng
BÀI 3:
SẮP XẾP MẢNG THEO THỨ TỪ GIẢM DẦN Input: Nhập vào từ bàn phím 1 mảng các số nguyên. Mảng gồm n phần tử Output:
Xuất ra màn hình kết quả mảng đã sắp xếp
BÀI 4:
TÍNH BÌNH PHƯƠNG CÁC PHẦN TỬ TRONG MẢNG 2 CHIỀU Input: Nhập vào từ bàn phím 1 ma trận các số nguyên. Mảng gồm n hàng, m
cột Output: Xuất ra màn hình ma trận bình phương
THỰC HIỆN:
BÀI 1:
TÍNH TRUNG BÌNH TỔNG CÁC SỐ CHIA HẾT CHO 3 TRONG MẢNG Input: Nhập vào từ bàn phím 1 mảng các số nguyên. Mảng gồm n phần tử Output:
- Xuất ra các phần tử trong mảng
Code:
#include<stdio.h>
int main()
{
int n;
int mangMotChieu[n];
printf("\nNhap vao so phan tu MANG MOT CHIEU: ");
scanf("%d", &n);
// Nhập/ gán giá trị cho mảng
int i;
for (i = 0 ; i < n ; i++){
printf("\nNhap vao phan tu thu %d cua mang: ", i + 1);
scanf("%d", &mangMotChieu[i]); // đọc và lưu giá trị vào mảng
}
// duyệt mảng và int ra màn hình
for (i = 0 ; i < n ; i++){
printf("\nGia tri phan tu thu %d MANG MOT CHIEU la: %d ", i + 1, mangMotChieu[i]);
}
}
Khuyến khích viết theo dạng gọi hàm:
- In ra tổng các phần tử trong mảng
code:
#include<stdio.h>
void nhapMangMotChieu(int n, int mangMotChieu[]){
int i;
for (i = 0 ; i < n ; i++){
printf("\nNhap vao phan tu thu %d cua mang: ", i + 1);
scanf("%d", &mangMotChieu[i]);
}
}
void inMangMotChieu(int n, int mangMotChieu[]){
int i;
for (i = 0 ; i < n ; i++){
printf("\nGia tri phan tu thu %d MANG MOT CHIEU la: %d ", i + 1, mangMotChieu[i]);
}
}
int tongPhanTuTrongMang(int n, int mangMotChieu[]){
int i;
int tong = 0;
for (i = 0 ; i < n ; i++){
// tong = tong + mangMotChieu[i];
tong += mangMotChieu[i];
}
return tong;
}
int main()
{
int n;
int mangMotChieu[n];
printf("\nNhap vao so phan tu MANG MOT CHIEU: ");
scanf("%d", &n);
nhapMangMotChieu(n, mangMotChieu);
inMangMotChieu(n, mangMotChieu);
printf("\nTong cac phan tu trong mang %d", tongPhanTuTrongMang(n, mangMotChieu));
}
- Xuất ra màn hình kết quả của trung bình tổng các số chia hết cho 3
trong mảng
Code:
#include<stdio.h>
int main()
{
int n;
int mangMotChieu[n];
printf("\nNhap vao so phan tu MANG MOT CHIEU: ");
scanf("%d", &n);
// Nhập/ gán giá trị cho mảng
int i;
for (i = 0 ; i < n ; i++){
printf("\nNhap vao phan tu thu %d cua mang: ", i + 1);
scanf("%d", &mangMotChieu[i]); // đọc và lưu giá trị vào mảng
}
// duyệt mảng và int ra màn hình
for (i = 0 ; i < n ; i++){
printf("\nGia tri phan tu thu %d MANG MOT CHIEU la: %d ", i + 1, mangMotChieu[i]);
}
// tính trung bình cộng của các số chia hết cho 3
float trungBinhCong = 0;
float tong = 0;
int bienDem;
for (i = 0 ; i < n ; i++){
if (mangMotChieu[i] % 3 == 0){
tong = tong + mangMotChieu[i];
// tong += mangMotChieu[i]; // hoặc
bienDem++;
}
}
trungBinhCong = tong / bienDem;
printf("\nTrung binh cong cua cac so chia het cho 3 la: %.2f", trungBinhCong);
}
Viết hàm:
int trungBinhCacPhanTuChiaHetCho3(int n, int mangMotChieu[n]){
int i;
int tong = 0;
int dem = 0;
for(i = 0; i < n ;i++){
if(mangMotChieu[i] % 3 == 0){
tong = tong + mangMotChieu[i];
dem ++;
}
}
return tong/dem;
}
Code đầy đủ:
#include<stdio.h>
void nhapMangMotChieu(int n, int mangMotChieu[n]){
//nhap vao
int i;
for(i = 0; i < n ;i++){
printf("Nhap vao phan tu thu %d cua mang: ", i + 1);
scanf("%d", &mangMotChieu[i]);
}
}
void xuatMangMotChieu(int n, int mangMotChieu[n]){
int i;
for(i = 0; i < n ;i++){
printf("%d\t", mangMotChieu[i]);
}
}
int tongCacPhanTuTrongMang(int n, int mangMotChieu[n]){
int i;
int tong = 0;
for(i = 0; i < n ;i++){
tong = tong + mangMotChieu[i];
}
return tong;
}
int trungBinhCacPhanTuChiaHetCho3(int n, int mangMotChieu[n]){
int i;
int tong = 0;
int dem = 0;
for(i = 0; i < n ;i++){
if(mangMotChieu[i] % 3 == 0){
tong = tong + mangMotChieu[i];
dem ++;
}
}
return tong/dem;
}
int main()
{
int n; // chieu dai mang
int mangMotChieu[n];
printf("\nNhap vao so phan tu Mang MOT chieu: ");
scanf("%d", &n);
nhapMangMotChieu(n, mangMotChieu);
// xuatMangMotChieu(n, mangMotChieu);
printf("%d", trungBinhCacPhanTuChiaHetCho3(n, mangMotChieu));
}
BÀI 2:
TÌM GIÁ TRỊ LỚN NHẤT VÀ NHỎ NHẤT TRONG MẢNG Input: Nhập vào từ bàn phím 1 mảng các số nguyên. Mảng gồm n phần tử Output:
Xuất ra màn hình giá trị nhỏ nhất và lớn nhất của mảng
#include<stdio.h>
int main()
{
int n;
int mangMotChieu[n];
printf("\nNhap vao so phan tu MANG MOT CHIEU: ");
scanf("%d", &n);
// Nhập/ gán giá trị cho mảng
int i;
for (i = 0 ; i < n ; i++){
printf("\nNhap vao phan tu thu %d cua mang: ", i + 1);
scanf("%d", &mangMotChieu[i]); // đọc và lưu giá trị vào mảng
}
// tìm phần tử LỚN nhất, NHỎ nhất trong mảng
int min = mangMotChieu[0];
int max = mangMotChieu[0];
for ( i = 0; i < n; i++)
{
if (mangMotChieu[i] < min){ //NHỎ nhất
min = mangMotChieu[i];
}
if (mangMotChieu[i] > max){ //LỚN nhất
max = mangMotChieu[i];
}
}
printf("\nPhan tu NHO nhat cua mang la: %d", min);
printf("\nPhan tu LON nhat cua mang la: %d", max);
}
Viết dạng hàm:
int timPhanTuLonNhat(int n, int mangMotChieu[n]){
int max = mangMotChieu[0];
int i;
for(i = 0; i < n; i++){
if (mangMotChieu[i] > max) max = mangMotChieu[i];
}
return max;
}
int timPhanTuNHONhat(int n, int mangMotChieu[n]){
int min = mangMotChieu[0];
int i;
for(i = 0; i < n; i++){
if (mangMotChieu[i] < min) min = mangMotChieu[i];
}
return min;
}
Code đầy đủ
#include<stdio.h>
void nhapMangMotChieu(int n, int mangMotChieu[n]){
//nhap vao
int i;
for(i = 0; i < n ;i++){
printf("Nhap vao phan tu thu %d cua mang: ", i + 1);
scanf("%d", &mangMotChieu[i]);
}
}
int timPhanTuLonNhat(int n, int mangMotChieu[n]){
int max = mangMotChieu[0];
int i;
for(i = 0; i < n; i++){
if (mangMotChieu[i] > max) max = mangMotChieu[i];
}
return max;
}
int timPhanTuNHONhat(int n, int mangMotChieu[n]){
int min = mangMotChieu[0];
int i;
for(i = 0; i < n; i++){
if (mangMotChieu[i] < min) min = mangMotChieu[i];
}
return min;
}
int main()
{
int n; // chieu dai mang
int mangMotChieu[n];
printf("\nNhap vao so phan tu Mang MOT chieu: ");
scanf("%d", &n);
nhapMangMotChieu(n, mangMotChieu);
// xuatMangMotChieu(n, mangMotChieu);
printf("\nPhan tu LON nhat cua mang la: %d", timPhanTuLonNhat(n, mangMotChieu));
// printf("\nPhan tu NHO nhat cua mang la: %d", timPhanTuNHONhat(n, mangMotChieu));
}
Viết kiểu CON TRỎ
BÀI 3:
SẮP XẾP MẢNG THEO THỨ TỪ GIẢM DẦN Input: Nhập vào từ bàn phím 1 mảng các số nguyên. Mảng gồm n phần tử Output:
Xuất ra màn hình kết quả mảng đã sắp xếp
lưu file dạng .CPP
void hoanVi(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
void sapXepMang(int n, int mangMotChieu[]){
int i, j;
for (i=0; i < n -1; i++){
for (j=i+1; j < n ; j++){
if (mangMotChieu[i] > mangMotChieu[j]){ // thay đổi dấu theo yêu cầu tăng hay giảm
hoanVi(mangMotChieu[i], mangMotChieu[j]);
}
}
}
}
BÀI 4:
TÍNH BÌNH PHƯƠNG CÁC PHẦN TỬ TRONG MẢNG 2 CHIỀU Input: Nhập vào từ bàn phím 1 ma trận các số nguyên. Mảng gồm n hàng,
m cột Output: Xuất ra màn hình ma trận bình phương
Viết Hàm Nhập Xuất
// Nhập mảng hai chiều
void taoMangHaiChieu(int n, int m, int mangHaiChieu[n][m]) {
int i, j;
for ( i = 0; i < n; i++) {
for ( j = 0; j < m; j++) {
printf("Nhap phan tu mangHaiChieu[%d][%d]: ", i, j);
scanf("%d", &mangHaiChieu[i][j]);
}
}
}
// Xuất mảng hai chiều
void xuatMangHaiChieu(int n, int m, int mangHaiChieu[n][m]) {
int i, j;
for ( i = 0; i < n; i++) {
for ( j = 0; j < m; j++) {
printf("%d\t", mangHaiChieu[i][j]);
}
printf("\n");
}
}
Viết hàm tính bình phương
// Hàm tính bình phương số nguyên
int binhPhuong(int x) {
return x * x;
}
void tinhBinhPhuong(int n, int m, int mangHaiChieu[n][m]) {
int i, j;
for ( i = 0; i < n; i++) {
for ( j = 0; j < m; j++) {
// mangHaiChieu[i][j] = mangHaiChieu[i][j] * mangHaiChieu[i][j]; // có thể tính trực tiếp
mangHaiChieu[i][j] = binhPhuong(mangHaiChieu[i][j]); // hoặc có thể gọi hàm tính bình phương
}
}
}
Hàm chính
int main() {
int n, m;
// printf("Nhập số hàng: ");
// scanf("%d", &n);
// printf("Nhập số cột: ");
// scanf("%d", &m);
// gắng trực tiếp để test
n = 2; m =3;
int mangHaiChieu[n][m];
khoiTaoMangHaiChieu(n, m, mangHaiChieu);
tinhBinhPhuong(n, m, mangHaiChieu);
xuatMangHaiChieu(n, m, mangHaiChieu);
}