Mình là SV khóa K58 trường ĐHBKHN. Đây là toàn bộ lời giải kĩ thuật lập trình Viện Điện trường ĐH BKHN của thầy Tùng do mình biên tập lại. Lời giải gồm 9 chương theo chương trình dạy của thầy, chúc các bạn có 1 cái nhìn tổng thể về môn học và đạt kết quả cao trong học tập đặc biệt trong môn học này. Chúc các bạn thành công Thân
Trang 1Đáp án KTLT thầy Tùng MADE BY TẠ TUẤN MINH-K58 ĐHBKHN
return 0;
}
Trang 3gets(oto.mau_son);
printf("Nhap du lieu cho cac banh:\n");
for (i=0; i<4; i++) {
printf("Banh thu %d:\n", i+1);
oto.banh[i].chung_loai,oto.banh[i].ban_kinh,oto.banh[i].khoi_luong);
}
return 0;
}
Trang 6int n,i;
double x, s;
printf("Nhap so phan tu cua day so: ");scanf("%d", &n);
for (i=0, s=0.; i<n; i++) {
printf("Nhap phan tu thu %d: ", i+1);scanf("%lf", &x);
for (i = 0; i<n; i++)
printf("%d %s\n", i+1, menu[i]);printf("Lua chon: ");
scanf("%d", &lua_chon);
if (lua_chon<1 || lua_chon>n)
printf("Lua chon khong co!\n");
Trang 7else printf("Ban da chon \"%s\"\n", menu[lua_chon-1]);return 0;
Trang 8return 0;
Trang 10printf("Nhap N: ");
scanf("%d", &N);
p = (int*)malloc(N*sizeof(int));
for (i=0; i<N; i++) {
printf("Nhap phan tu thu %d: ", i+1);
scanf("%d", p+i); /* &p[i] */
}
printf("Mang da nhap theo thu tu nguoc: \n");
for (i=N-1; i>=0; i )
/* Copy dữ liệu cũ sang vùng nhớ mới */
for (i=0; i<N-1; i++)
p2[i] = p[i];
free(p); /* Giải phóng vùng nhớ cũ */
Trang 11}/* p trỏ sang vùng nhớ mới */
printf("Mang ban da nhap: ");
for (i=0; i<N; i++)
Trang 12const char* s1 = "footballer";
const char* s2 = "football";
Trang 13int main(int argc, const char* argv[]) {
const char* s; /* Chuỗi nhập từ dòng lệnh */
const char *s1, *s2; /* Các con trỏ duyệt chuỗi s */
char** p = NULL, **p2; /* p: mảng các từ, p2: biến tạm để cấp phát bộ nhớ */int i, n, len; /* n: số phần tử của mảng */
/* Kiểm tra xem đã nhập chuỗi ở tham số chưa */
if (*s1==0) break; /* Nếu đã tới cuối chuỗi s thì dừng */
/* Khi tới đây thì s1 trỏ tới ký tự đầu tiên của một từ */
/* Tìm tới vị trí kết thúc từ bằng cách tìm ký tự trắng tiếp theo sau s1 */for (s2=s1; *s2!=0 && *s2!=' '; s2++) ;
/* Khi tới đây thì s2 trỏ tới ký tự trắng hoặc vị trí kết thúc chuỗi s *//* Mở rộng mảng p thêm một phần tử mới */
p2 = (char**)malloc((n+1)*sizeof(char*)); /* Cấp phát vùng nhớ mới */
if (p!=NULL) {
/* Copy mảng cũ sang mảng mới */
for (i=0; i<n; i++)
Trang 14len = (int)(s2-s1); /* len = độ dài của từ mới */
p[n] = (char*)malloc(len+1); /* Cấp phát bộ nhớ cho từ mới */
memcpy(p[n], s1, len); /* Copy từ */
Trang 15else c[k] = b[j++];}
printf("Mang da tron: \n");for (k=0; k<nc; k++)
printf("%g ", c[k]);free(c);
Trang 16for (i=0; i<*n; i++) {
printf("Nhap phan tu thu %d: ", i+1);scanf("%d", a+i);
Trang 17printf("x = %d, y = %d\n", x, y);return 0;
}
int* prime(int n, int* m)
{
int* z = (int*)malloc(n*sizeof(int));int i;
for (i = 1, *m = 0; i < n; i++)
if (is_prime(i)) {
Trang 18printf("%d ", a[i]);printf("\n");
Trang 19int tinh_sin()
{
printf("sin(x) = %g\n", sin(x));return 0;
}
int tinh_cos()
{
printf("cos(x) = %g\n", cos(x));return 0;
}
int tinh_tan()
{
printf("tan(x) = %g\n", tan(x));return 0;
int i, n = sizeof(m)/sizeof(m[0]);
Trang 20for (;;) {
printf("\nx = %g\nMENU:\n", x);
for (i=0; i<n; i++)
printf("%d %s\n", i+1, m[i].name);printf("Lua chon: ");
Trang 21printf("s1 = %s, s2 = %s\n", s1, s2);huy_chuoi(&s1);
Trang 22typedef char* String;
void khoi_tao_chuoi(String* s, const char* s1);void copy_chuoi(String* s1, const String s2);void huy_chuoi(String* s);
case Square:
x = *(double*)s.data;
Trang 23for (i=0; i<3; i++)
printf("Dien tich hinh thu %d: %g\n", i+1, area(s[i]));free(s[0].data);
free(s[1].data);
free(s[2].data);
return 0;
}
Trang 25s[0].area = area_circle;
s[1].data = (double*)malloc(sizeof(double));(*(double*)s[1].data) = 10.;
s[1].area = area_square;
s[2].data = (double*)malloc(2*sizeof(double));((double*)s[2].data)[0] = 10.;
((double*)s[2].data)[1] = 20.;
s[2].area = area_rect;
for (i=0; i<3; i++)
printf("Dien tich hinh thu %d: %g\n",
i+1, s[i].area(s[i].data));free(s[0].data);
free(s[1].data);
free(s[2].data);
return 0;
}
Trang 26for (eof = 0; !eof; ) {
num = fread(buf, 1, sizeof(buf), f);eof = feof(f);
for (i = 0; i < num; i++)
buf[i] = toupper(buf[i]);
fseek(f, -num, SEEK_CUR);
Trang 28int cat_file(const char* src, const char* dst) {
FILE *fs = NULL, *fd = NULL;
char buf[1024];
int num;
if ((fs = fopen(src,"rb")) == NULL) return -1;
if ((fd = fopen(dst,"ab")) == NULL) { fclose(fs); return -1; }
}
Trang 30const char* line10){
Trang 31gets(sv.ten);
printf("Nam sinh: ");scanf("%d", &sv.nam_sinh);printf("Khoa: ");
scanf("%d", &sv.khoa);printf("Du lieu da nhap:\n"
" Ten: %s\n"
" Nam sinh: %d\n"
" Khoa: %d\n",sv.ten,
sv.nam_sinh,sv.khoa);
Trang 33Chương 7: Cấu Trúc Dữ Liệu (BT T21) Bài 1:
Trang 34PDLELEM e = (PDLELEM)malloc(sizeof(DLELEM));e->data = data;
Trang 35l = dllDeleteHead(l);for (i=1; i<=5; i++)
l = dllInsertHead(l, i*10);printf("Duyet xuoi: ");
for (p=l.head; p!=NULL; p=p->next)
printf("%d ", p->data);printf("\n");
printf("Duyet nguoc: ");
for (p=l.tail; p!=NULL; p=p->prev)
printf("%d ", p->data);printf("\n");
l = dllDeleteAll(l);
Trang 36void stPush(STACK* s, int data){
*s = llInsertHead(*s, data);}
}
void quEnqueue(QUEUE* q, int data)
Trang 38printf("%d phan tu: ( ", llLength(l));
llForEach(l, llsum, (void*)&s);
printf("Gia tri trung binh: %g\n", (double)s/llLength(l));/* cách 2: duyệt */
Trang 42printf("%d ", l->data);
printf(") \n");
}
/* chèn l2 vào sau p ở trong l1 */
LLIST llInsertListAfter(LLIST l1, LLIST l2, PELEM p){
Trang 43/* không huỷ l2 nữa vì l2 thuộc l1 */return 0;
Trang 44l = llInsertHead(l, &d, sizeof(d));printList_double(l);
l = llDeleteAll(l);
/* chứa chuỗi */
l2 = llInit();
l2 = llInsertHead(l2, "abc", 4);l2 = llInsertHead(l2, "2134", 5);l2 = llInsertHead(l2, "32423", 6);printList_string(l2);
Trang 45PELEM e = (PELEM)malloc(sizeof(ELEM));assign_data(e, data, size);
Trang 46PELEM llSeek(LLIST l, int i) {
for (; i>0 && l; i )
Trang 47LLIST llInsertHead(LLIST l, void* data, int size);
LLIST llInsertTail(LLIST l, void* data, int size);
Trang 48LLIST llDeleteHead(LLIST l);
LLIST llDeleteTail(LLIST l);
LLIST llDeleteAfter(LLIST l, PELEM a);
LLIST llDeleteAll(LLIST l);
PELEM llSeek(LLIST l, int i);
void llForEach(LLIST l, LLCALLBACK func, void* user);int llLength(LLIST l);
#endif
Trang 49Chương 8: Cơ bản về C++ (BT T23) Bài 1:
}
String(char c)
{
str = new char[2];str[0] = c;
String(const String& s)
{
Trang 50str = new char[n+1];strcpy_s(str, n+1, s.str);}
void copy(const String& s){
copy(s.str);
}
void concat(const char* s) {
Trang 51int n = int(strlen(str) + strlen(s));char* ss = new char[n+1];strcpy_s(ss, n+1, str);
cout << "s1 = " << s1.c_str() << endl
<< "s2 = " << s2.c_str() << endl
<< "s3 = " << s3.c_str() << endl;s1.copy(s2);
Bài 2:
#include <iostream>
Trang 53if (f) fclose(f);}
bool IsOpen()
{
return f != NULL;}
bool Eof()
{
return feof(f) != 0;}
int Write(const void* buf, int size)
Trang 54return (int)fwrite(buf, 1, size, f);
// copy file 1 sang file 2
static bool Copy(const char* fname1, const char* fname2)
{
File f1, f2;
if (!f1.Open(fname1, "rb")) return false;
if (!f2.Open(fname2, "wb")) return false;
Trang 55const char* fname2 = "D:\\tmp\\New Folder\\aaaa\\aaaa\\ReadMe2.txt";
if (File::Copy(fname1, fname2))
cout << "Da copy thanh cong\n";
else cout << "Copy co loi\n";
Trang 56void InsertHead(int data)
{
l = llInsertHead(l, data);}
void InsertTail(int data)
{
l = llInsertTail(l, data);}
void InsertAfter(int i, int data){
PELEM p = llSeek(l, i);
l = llInsertAfter(l, p, data);}
void DeleteHead()
{
l = llDeleteHead(l);}
void DeleteTail()
{
l = llDeleteTail(l);}
void DeleteAfter(int i)
{
PELEM p = llSeek(l, i);
l = llDeleteAfter(l, p);}
void DeleteAll()
{
l = llDeleteAll(l);}
int Length()
Trang 59Fraction div(const Fraction& f) const{
return Fraction(a*f.b, b*f.a);}
string asString() const
};
Trang 60Fraction f1(3, 5), f2(2);
cout << "f1 = " << f1.asString().c_str() << ", "
<< "f2 = " << f2.asString().c_str() << endl;Fraction f3 = f1.add(f2);
f2 = f1.mul(f3);
cout << endl;
cout << "f1 = " << f1.asString().c_str() << ", "
<< "f2 = " << f2.asString().c_str() << ", " << "f3 = " << f3.asString().c_str() << endl;double d1 = f1.asDouble(),
d2 = f2.asDouble(),d3 = f3.asDouble();
Trang 61Circle(double r)
{
this->r = r;count++;}
Circle(const Circle& c){
r = c.r;count++;}
~Circle()
{
count ;}
void setR(double r){
this->r = r;}
double getR() const{
return r;}
double area() const{
return 3.14*r*r;}
double peri() const{
return 3.14*2*r;}
Trang 62return count;}
friend class Ellipse;};
Ellipse(double rx, double ry){
this->rx = rx;this->ry = ry;count++;}
Ellipse(const Ellipse& e){
rx = e.rx;
ry = e.ry;count++;}
Ellipse(const Circle& c){
rx = ry = c.r;count++;
Trang 64cout << "Ban kinh: " << c.getR() << "; "
<< "Dien tich: " << c.area() << "; "
<< "Chu vi: " << c.peri() << endl << endl;Ellipse e(c);
e.setRx(3.1);
cout << "Ban kinh: " << e.getRx() << ", " << e.getRy() << "; "
<< "Dien tich: " << e.area() << "; "
<< "Chu vi: " << e.peri() << endl << endl;cout << "So hinh tron: " << Circle::getCount() << ", "
<< "So hinh elip: " << Ellipse::getCount() << endl;Circle c1;
Ellipse e1;
cout << "So hinh tron: " << Circle::getCount() << ", "
<< "So hinh elip: " << Ellipse::getCount() << endl;Circle& c2 = c1;
Ellipse& e2 = e1;
cout << "So hinh tron: " << Circle::getCount() << ", "
<< "So hinh elip: " << Ellipse::getCount() << endl;Circle* c3 = &c1;
Ellipse* e3 = &e1;
cout << "So hinh tron: " << Circle::getCount() << ", "
<< "So hinh elip: " << Ellipse::getCount() << endl;Circle c4[10];
Ellipse e4[20];
Trang 65cout << "So hinh tron: " << Circle::getCount() << ", "
<< "So hinh elip: " << Ellipse::getCount() << endl;Circle* c5 = new Circle[10];
Ellipse* e5 = new Ellipse[20];
cout << "So hinh tron: " << Circle::getCount() << ", "
<< "So hinh elip: " << Ellipse::getCount() << endl;delete[] c5;
delete[] e5;
cout << "So hinh tron: " << Circle::getCount() << ", "
<< "So hinh elip: " << Ellipse::getCount() << endl;}
Trang 67char s[100];
sprintf(s, "(%.3lf, %.3lf, %.3lf)", x,y,z);return s;
Trang 69Vector v = v1.crossProduct(v2).sub(v3).neg(); // v = -(v1.v2 - v3)cout << v.asString().c_str() << endl;
// - Complex
-Complex c1(6, 5.3),
c2(6.67, 3.2),c3(5.7, 3.3);
Complex c = c2.add(c1).mul( c3.div(c1).neg() ); // c = (c2+c1)*(-c3/c1)cout << c.asString().c_str() << endl;
Trang 70PELEM e = (PELEM)malloc(sizeof(ELEM));e->data = data;
Trang 71for (p = l; p->next->next; p = p->next) ;free(p->next);
PELEM llSeek(LLIST l, int i) {
for (; i>0 && l; i )
Trang 72LLIST llInsertHead(LLIST l, int data);
LLIST llInsertTail(LLIST l, int data);
LLIST llInsertAfter(LLIST l, PELEM a, int data);LLIST llDeleteHead(LLIST l);
LLIST llDeleteTail(LLIST l);
LLIST llDeleteAfter(LLIST l, PELEM a);
LLIST llDeleteAll(LLIST l);
PELEM llSeek(LLIST l, int i);
void llForEach(LLIST l, LLCALLBACK func, void* user);int llLength(LLIST l);
#endif
Trang 73Chương 10: Định nghĩa chồng hàm (T21) Bài 6:
Trang 75Iterator& operator ++(){
p = p->next;return *this;}
Iterator& operator ++(int){
p = p->next;return *this;}
bool operator !() const{
return p!=NULL;}
int& operator *()
{
return p->data;}
~LinkedList(void){
Trang 76void InsertHead(int data)
{
l = llInsertHead(l, data);}
void InsertTail(int data)
{
l = llInsertTail(l, data);}
void InsertAfter(int i, int data){
PELEM p = llSeek(l, i);
l = llInsertAfter(l, p, data);}
void DeleteHead()
{
l = llDeleteHead(l);}
void DeleteTail()
{
l = llDeleteTail(l);}
void DeleteAfter(int i)
{
PELEM p = llSeek(l, i);
l = llDeleteAfter(l, p);}
void DeleteAll()
{
l = llDeleteAll(l);}
int Length() const
Trang 78LLIST llInsertTail(LLIST l, int data) {
PELEM p;
PELEM e = (PELEM)malloc(sizeof(ELEM));e->data = data;
Trang 79PELEM llSeek(LLIST l, int i) {
for (; i>0 && l; i )
Trang 80LLIST llInsertHead(LLIST l, int data);
LLIST llInsertTail(LLIST l, int data);
LLIST llInsertAfter(LLIST l, PELEM a, int data);LLIST llDeleteHead(LLIST l);
LLIST llDeleteTail(LLIST l);
LLIST llDeleteAfter(LLIST l, PELEM a);
LLIST llDeleteAll(LLIST l);
PELEM llSeek(LLIST l, int i);
void llForEach(LLIST l, LLCALLBACK func, void* user);int llLength(LLIST l);
#endif