You are on page 1of 10

Họ tên: Nguyễn Đình Đức

Mã SV: HE171600

Part 1:
Exercise 1:

Ý nghĩa: in ra tiếp theo bằng số hiện tại + số cũ


#include<stdio.h>

int old_number; //khai bao bien toan cuc


int current_number; //khai bao bien toan cuc
int next_number; //khai bao bien toan cuc

int main(){
old_number = 1; //gan gia tri 1 cho bien
current_number = 1; //gan gia tri 1 cho bien
printf("1\n"); //in ra so dau tien

while(current_number < 100){ //vong lap chay cho den khi bien
current_number = 100
printf("%d\n", current_number); //in ra gia tri cua bien
current_number
next_number = current_number + old_number; //gan gia tri bien
next_number = current_number + old_number

old_number = current_number; //gan gia tri bien old_number =


current_number
current_number = next_number; //gan gia tri bien
current_number = next_number
}
return 0; //ket thuc chuong trinh
}
Ý nghĩa: thay đổi giá trị của biến bằng con trỏ
#include<stdio.h>

int main(){
int thing_var; //khai bao bien
int *thing_ptr; //khai bao bien con tro

thing_var = 2; //gan gia tri cho bien

printf("Thing %d\n", thing_var); //in ra gia tri cua bien

thing_ptr = &thing_var; //con tro tro toi dia chi cua bien
*thing_ptr = 3; //bien thing_var thay doi gia tri thanh 3
printf("Thing %d\n", thing_var);

printf("Thing %d\n", *thing_ptr);


return 0; //ket thuc chuong trinh
}

#include<stdio.h>
int f(int n, int k){
if(n == 0) //neu n = 0
return 0; // trả về tổng hiệu của các số k bên ngoài và kết thúc
hàm. VD: trong bài với n = 20 và k = 1, chương trình sẽ lặp lại hàm f 5 lần và kết
quả của số k bên ngoài là 9
// f(f(f(f(f(n/2, 2*k) +k) -k) +k) -k) -k
// f(f(f(f(f(n/2, 2*k) +16) -8) +4) -2) -1
// f(f(f(f(f(n/2, 2*k) +9
else if (n % 2) // nếu n chia cho 2 có dư
return f(n/2, 2*k) + k; //quay về đầu hàm f(int n, int k) với n = n /2
và k = 2 * k, bên ngoài giữ số k ban đầu
else return f(n/2, 2*k) - k; // quay về đầu hàm f(int n, int k) với n =
n /2 và k = 2 * k, bên ngoài giữ số k ban đầu

int main(){
printf("%d", f(20,1)); //goi toi ham f()
return 0; // ket thuc chuong trinh
}
Exercise 2:
1. Code:
#include<stdio.h>
#define max(x, y) (((x) > (y)) ? (x) : (y))

int f(int *p, int n){


if(n <= 1) return 0;
else return max(f(p+1, n -1), p[0] - p[1]);
}

int main(){
int a[] = {3,5,2,6,4};
printf("%d", f(a,5));
return 0;
}

2. Code:
#include<stdio.h>

double foo(double); /* Line 1 */

int main(){
double da, db;

db = foo(da);
}

double foo(double a){


return a;
}
Nếu xóa đi dòng 1 thì chương trình sẽ không chạy được và báo lỗi

Part 2:

#include <stdio.h>

double checkNumber(int *m, char buffer){


do{
scanf("%d", m);
scanf("%c", &buffer);
fflush(stdin);
if(buffer != 10){
printf("\nVui long nhap so !!!");
printf("\nNhap lai: ");
}else{
return *m;
}
}while(buffer != 10);
}

void prime_factorization(int n){


int factor = 2;
do{
if (n % factor == 0) {
printf("%d ", factor);
n = n / factor;
}else{
factor++;
}
} while (n>1);
}
void print_first_prime(int n){
int first = n + 1;
while(1){
int isPrime = 1;
for(int factor = 2; factor < first; factor++)
if (first % factor==0) {
isPrime = 0;
break;
}
if (isPrime) {
printf("The first greater prime is %d", first);
break;
}
first++;
}
}

int main(){
int m, buffer;
int n, result;
int choice;
printf("\n1- Process primes factorization.");
printf("\n2- Print the first prime number.");
printf("\n3- Quit.");
printf("\n------------------------");
printf("\nSelect an operation: ");
do{
choice = checkNumber(&m, buffer);
if(choice<1 || choice>3){
printf("\nVui long chon tu 1-3: ");
}
}while(choice <1 || choice > 3);
switch(choice){
case 1:{
printf("\nVui long nhap so: ");
scanf("%d", &n);
printf("\nPrime Factorization is: ");
prime_factorization(n);
break;
}

case 2:{
printf("\nVui long nhap so: ");
scanf("%d", &n);
print_first_prime(n);
break;
}

case 3:{
return 0;
}
}
}

You might also like