Viết các tập tin add.c, sub.c lần lượt chứa 2 hàm số int addint a, int b và... Bỏ qua các đối số không phải là số nguyên.. Hãy áp dụng các thuật toán sắp xếp đã học.
Trang 1TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO BÀI TẬP NMHĐH
HK2, 2021-2022 Lab 2 Thành Viên: Nguyễn Ngô Đăng Khoa (521H0084)
Do off nên chưa tìm được tổ
Trang 2M c l c ụ ụ
A PHẦN THỰC HÀNH 2
Ví Dụ 1: Biên dịch chương trình đầu tiên 2
Ví Dụ 2: Truyền đối số từ lệnh gọi 3
Ví dụ 3: Liên kết 4
B PHẦN BÀI TẬP 5
1 Viết chương trình sao cho khi truyền đối số n vào thì xuất ra tổng S = 1 + 2 + … + n 5
2 Viết chương trình truyền vào một số nguyên, và in ra dãy các ước số của số nguyên này 6
3 Viết chương trình truyền vào một danh sách số nguyên, và in ra dãy số này theo thứ tự tăng dần 8
4 Viết các tập tin add.c, sub.c lần lượt chứa 2 hàm số int add(int a, int b) và .10
int sub(int a, int b) 10
KẾT LUẬN 13
A PHẦẦN TH C HÀNH Ự
Ví D 1: ụ Biên d ch ch ị ươ ng trình đầầu tiên
A: Code Chương Trình
Chúy ý: code phải được giải thích để thể hiện hiểu rõ chương trình mình biết
// hello.c
#include <stdio.h>
int main() {
printf("Hello World\n");
Trang 3return 0;
}
B: Kết Quả Demo
Ví D 2: Truyêần đốối sốố t l nh g i ụ ừ ệ ọ
2.1: Code chương trình
// para.c
#include<stdio.h>
intmain( intargc, char ** argv)
{
printf("Number of arguments %i n", argc);
i ; int =0
for(i 0; i<argc; i++)
printf("Argument %s\t", argv[i]); return0;
}
2.2 Kết quả Demo:
Trang 4Ví d 3: Liên kêốt ụ
3.1 Code chương trình:
// hello1.c
#include<stdio.h>
voidhello_1( ) inti
{
printf("Hello, parameter 1 = %d\n", i); }
// hello2.c
#include<stdio.h>
voidhello_2( ) inti
{
printf("Hello, parameter 2 = %d\n", i); }
// main.c
#include<stdio.h>
#include<stdlib.h>
intmain( intargc, char ** argv)
{
i int =atoi(argv[1]);
k int =atoi(argv[2]);
hello_1(i); hello_2(k);
Trang 5}
3.2 Kết quả Demo:
B PHẦẦN BÀI T P Ậ
1 Viêốt ch ng trình sao cho khi truyêần đốối sốố n vào thì xuầốt ra t ng S = 1 + 2 ươ ổ + … + n
a Báo lỗi nếu lời gọi có đối số không phải là một số nguyên dương
b Báo lỗi nếu có nhiều hơn 2 đối số (là main.out và n)
1.1 Code chương trình:
//Bai1.c
#include<stdio.h>
#include<stdlib.h>
intmain( intargc, char ** argv)
{
a int =atoi(argv[ ]);1
(argc if >2)
printf("Doi so truyen vao qua nhieu\n"); CÂU B
else if <= (a 0)
printf("Doi so nhap vao khong phai la so nguyen
duong\n"); CÂU A
else
{
Trang 6sum ;int =0
for int( i ; i =0 <= a; i++)
sum += i;
printf("Ket qua la: S = %d\n",sum);
}
return0;
}
Kết quả Demo:
2 Viêốt ch ng trình truyêần vào m t sốố nguyên, và in ra dãy các ươ ộ ướ c sốố c a ủ sốố nguyên này
a Báo lỗi nếu đối số không phải là số nguyên, hoặc thừa đối số
b Phân tích số nguyên đã truyền vào thành thừa số nguyên tố (bài tập nâng cao)
2.1 Code chương trình:
//Bai2.c
#include<stdio.h>
#include<stdlib.h>
intmain( intargc, char ** argv)
Trang 7a int =atoi(argv[ ]);1
(argc if >2)
printf("Thua doi so\n");
else if <= (a 0)
printf("Doi so khong phai la so nguyen duong\n");
CÂU A
else
{
printf("Cac uoc so cua %d la: ",a);
for int( i ; i =1 <= a; i++)
{
(a i if % ==ấ 0ế ướ) L y h t ố c s cho t i Nớ
{
(i if == a)
printf("%d\n",i);
else
printf("%d",i);
}
}
printf("%d = ",a); In s nh pố ậ
n a;int =
dem;int
for int( i ; i =2 <= n; i++)
{
dem =0;
while % ==(n i ể 0) Ki m tra t ng s có ph i ừ ố ả Prime?
{
demế ++ể ạ; Đ m đ t o thành mũ phía dở ướ i sau
n i;/=
}
Trang 8if(dem)
{
(dem if >1ử ụ) S d ng mũ đã đ m đế ượ c
printf("%d %d^ ", i, dem);
elseKhông thì ch in raỉ
printf("%d", i);
(n i)ẫif > V n còn s ph i đ m thì nhân tiépố ả ế
printf(" * ");
}
}
printf(" "\nố); Xu ng dòng trướ c khi end
}
return0;
}
2.2 Kết quả Demo:
3 Viêốt ch ng trình truyêần vào m t danh sách sốố nguyên, và in ra dãy sốố này ươ ộ theo th t ứ ự tăng dầần
a Bỏ qua các đối số không phải là số nguyên
b Hãy áp dụng các thuật toán sắp xếp đã học (bài tập về nhà)
3.1 Code chương trình:
//Bai3.c
Trang 9#include<stdlib.h>
voidBubble( int [] inta , n)//Câu b S p x p ki u bubbleắ ế ể
{
for int( i n ; i = -1 >= ; i )1
{
for int( j ; j i; j=0 < ++)
{
(a[j] a[j if > +1])
{
temp a[j];int =
a[j] a[j = +1];
a[j +1] temp;=
}
}
}
}
intmain( intargc, char ** argv)
{
a[ ], n int 10 =0;
for int( i ; i argc; i=1 < ++)
{
temp int =atoi(argv[i]);
(temp if ==0)Câu a
ỏcontinue;B qua các s không ph i là s nguyênố ả ố
else
{
a[n] temp;=ỏ B vào 1 m ng ch toàn các s nguyênả ỉ ố
n++;
}
}
Bubble(a, n); ắS p x p l i m ngế ạ ả
Trang 10printf("Day tang la: ");
for int( i ; i n; i=0 < ++)
{
(i n )if != -1
printf("%d",a[i]);
else
printf("%d\n",a[i]);ỉ ầ Ch ph n cu i thì xu ng dòngố ố
}
return0;
}
3.2 Kết quả Demo:
4 Viêốt các t p tin add.c, sub.c lầần l ậ ượ t ch a 2 hàm sốố int add(int a, int b) và ứ int sub(int a, int b).
a Xây dựng một thư viện liên kết tĩnh từ 2 tập tin add.c và sub.c
b Xây dựng một thư viện liên kết động từ 2 tập tin add.c và sub.c
Lần lượt sử dụng các thư viện ở a và b., viết hàm main truyền vào hai số nguyên và dấu phép
tính “+” hay “-”, và in ra kết quả tương ứng Chương trình báo lỗi nến các đối số truyền vào
Trang 11không đúng theo qui tắc.
A: Code Chương Trình
// add.c
#include<stdio.h>
voidadd( , inta intb)
{
printf("Ket qua la: %d\n", ); a+b // Tinh tong cua i va k
}
// sub.c
#include<stdio.h>
voidsub( , inta intb)
{
printf("Ket qua la: %d\n", a-b);// Tinh hieu cua i va k
}
//baitap4.c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
intmain( intargc, char ** argv)
{
i int =atoi(argv[1]);
k int =atoi(argv[2]);
char [] = b "+";
char [] = c "-";
if(strcmp(argv[3],b) == )0
{
add(i,k);
}
else if(strcmp(argv[3],c) ==0)
{
sub(i,k);
Trang 12}
elseprintf("Doi so truyen vao khong dung\n"); return0;
}
B: Kết Quả Demo
a Liên kết tĩnh:
Trang 13b Liên kết động:
KẾẾT LU N Ậ
Sau khi học và hoàn thành phần lab 2 em thu được kết sau:
- Hoàn thành tất cả phần thực hành
- Hoàn thành được 4 bài tập (1, 2, 3, 4) [100%]
- Hiểu được hoạt động của liên kết động và tĩnh