30/09/2018, 20:22
Chương trình đọc một số nguyên dương có tối đa 9 chữ số!
Xin chào các bạn nhé! Thật ra mình mới làm xong 1 bài tập là viết 1 chương trình có thể đọc được 1 số có tối đa 9 chữ số (còn số âm thì nó vẫn đọc ra số nguyên dương). Do hơi dài nên mình hỏi ý kiến các bạn xem chương trình mình có lỗi hay lổ hổng nào không nhé
#include <stdio.h>// *Important: Variable " const "
#include <limits.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#include <string.h>
#include <ctype.h>
#include <Windows.h>
int main()
{
int x;
printf("Type a number: ");
scanf("%d", &x);
int digit = log10((float)x) + 1;
if (digit > 9)
printf("Can not handle
");
else
{
// Xet 9 chu so
if (digit == 9)
{
int temp = x / 100000000;
if (temp == 1)
printf("Mot tram ");
else if (temp == 2)
printf("Hai tram ");
else if (temp == 3)
printf("Ba tram ");
else if (temp == 4)
printf("Bon tram ");
else if (temp == 5)
printf("Nam tram ");
else if (temp == 6)
printf("Sau tram ");
else if (temp == 7)
printf("Bay tram ");
else if (temp == 8)
printf("Tam tram ");
else if (temp == 9)
printf("Chin tram ");
digit--;
x %= 100000000;
}
// Xet 8 chu so
if (digit == 8)
{
int temp = x / 10000000;
if (temp == 1)
printf("muoi ");
else if (temp == 2)
printf("hai muoi ");
else if (temp == 3)
printf("ba muoi ");
else if (temp == 4)
printf("bon muoi ");
else if (temp == 5)
printf("nam muoi ");
else if (temp == 6)
printf("sau muoi ");
else if (temp == 7)
printf("bay muoi ");
else if (temp == 8)
printf("tam muoi ");
else if (temp == 9)
printf("chin muoi ");
digit--;
x %= 10000000;
}
// Xet 7 chu so
if (digit == 7)
{
int temp = x / 1000000;
if (temp == 1)
printf("mot trieu ");
else if (temp == 2)
printf("hai trieu ");
else if (temp == 3)
printf("ba trieu ");
else if (temp == 4)
printf("bon trieu ");
else if (temp == 5)
printf("nam trieu ");
else if (temp == 6)
printf("sau trieu ");
else if (temp == 7)
printf("bay trieu ");
else if (temp == 8)
printf("tam trieu ");
else if (temp == 9)
printf("chin trieu ");
digit--;
x %= 1000000;
}
// Xet 6 chu so
if (digit == 6)
{
int temp = x / 100000;
if (temp == 1)
printf("mot tram ");
else if (temp == 2)
printf("hai tram ");
else if (temp == 3)
printf("ba tram ");
else if (temp == 4)
printf("bon tram ");
else if (temp == 5)
printf("nam tram ");
else if (temp == 6)
printf("sau tram ");
else if (temp == 7)
printf("bay tram ");
else if (temp == 8)
printf("tam tram ");
else if (temp == 9)
printf("chin tram ");
digit--;
x %= 100000;
}
// Xet 5 chu so
if (digit == 5)
{
int temp = x / 10000;
if (temp == 1)
printf("muoi ");
else if (temp == 2)
printf("hai muoi ");
else if (temp == 3)
printf("ba muoi ");
else if (temp == 4)
printf("bon muoi ");
else if (temp == 5)
printf("nam muoi ");
else if (temp == 6)
printf("sau muoi ");
else if (temp == 7)
printf("bay muoi ");
else if (temp == 8)
printf("tam muoi ");
else if (temp == 9)
printf("chin muoi ");
digit--;
x %= 10000;
}
// Xet 4 chu so
if (digit == 4)
{
int temp = x / 1000;
if (temp == 1)
printf("mot ngan ");
else if (temp == 2)
printf("hai ngan ");
else if (temp == 3)
printf("ba ngan ");
else if (temp == 4)
printf("bon ngan ");
else if (temp == 5)
printf("nam ngan ");
else if (temp == 6)
printf("sau ngan ");
else if (temp == 7)
printf("bay ngan ");
else if (temp == 8)
printf("tam ngan ");
else if (temp == 9)
printf("chin ngan ");
digit--;
x %= 1000;
}
//Xet 3 chu so
if (digit == 3)
{
int temp = x / 100;
if (temp == 1)
printf("mot tram ");
else if (temp == 2)
printf("hai tram ");
else if (temp == 3)
printf("ba tram ");
else if (temp == 4)
printf("bon tram ");
else if (temp == 5)
printf("nam tram ");
else if (temp == 6)
printf("sau tram ");
else if (temp == 7)
printf("bay tram ");
else if (temp == 8)
printf("tam tram ");
else if (temp == 9)
printf("chin tram ");
digit--;
x %= 100;
}
// Xet 2 chu so
if (digit == 2)
{
int temp = x / 10;
if (temp == 1)
printf("muoi ");
else if (temp == 2)
printf("hai muoi ");
else if (temp == 3)
printf("ba muoi ");
else if (temp == 4)
printf("bon muoi ");
else if (temp == 5)
printf("nam muoi ");
else if (temp == 6)
printf("sau muoi ");
else if (temp == 7)
printf("bay muoi ");
else if (temp == 8)
printf("tam muoi ");
else if (temp == 9)
printf("chin muoi ");
digit--;
}
// Xet 1 chu so
if (digit == 1)
{
int temp = x % 10;
if (temp == 1)
printf("mot");
else if (temp == 2)
printf("hai");
else if (temp == 3)
printf("ba");
else if (temp == 4)
printf("bon");
else if (temp == 5)
printf("lam");
else if (temp == 6)
printf("sau");
else if (temp == 7)
printf("bay");
else if (temp == 8)
printf("tam");
else if (temp == 9)
printf("chin");
}
}
getch();
return 0;
}
Cảm ơn nhiều nhé!
Bài liên quan
…
Sơ qua là vậy
Sao k an toàn bạn?[quote=“BetapCode, post:2, topic:24105”]
log10 trả về kiểu Double không nên gán thẳng vào biến kiểu int
[/quote]
Cái này k ép float nó lỗi
Mình đang học C mà :D[quote=“BetapCode, post:2, topic:24105”]
Code dài
[/quote]
Cái đó mình làm ngắn nhất có thể rồi, theo hướng dẫn anh Nguyễn Việt Nam Sơn. Nếu có cách khác bạn chỉ mình nhé :)[quote=“BetapCode, post:2, topic:24105”]
Input là 0 thì chương trình cho ra gì ???
[/quote]
Cái đó thì đặt thêm 1 cái if nữa là
scanf
hoặc làgets
dễ gây bug và thời nay người ta không dùng nữa, bạn search google đọc thêm.Bạn phải dùng
floor
để ép kiểu giá trị trả về của log10 (vốn làdouble
) rồi mới gán vàoint
. Với lạilog10
parameter có kiểudouble
không phải kiểufloat
(mình nhớ là vậy), bạn google lại.Sao chương trình của bạn không cover luôn trường hợp số âm ???
đổi thành
Bạn chạy trên Windows thì dùng
system("pause")
để dừng console, không cứ là ngôn ngữ nào.Bạn có thể dùng đệ qui để chương trình của bạn ngắn hơn, lúc viết code nếu bạn cảm nhận được sự lặp lại và qui luật thì bạn có thể nghĩ đến đệ qui. Nếu không được vậy thì chia thành các hàm nhỏ nhìn code cho gọn.
Input là
0
chương trình sẽ bug ngay đoạn tính log10, cho thêmelse if
cũng không có tác dụng.p/s: mình mới tập code chém gió vậy thôi không show code khác ra cho bạn được đâu, bạn tự nghĩ theo hướng đó nhé.
Chém gió thành bão ak Nói chung mình mới học lập trình nên k biết nhiều thuật ngữ lắm. Đang học căn bản mà.
Mình thử cho else if có tác dụng nhé
Hiện ra thông tin bạn muốn không chắc là nó đúng.
Bạn cho một dòng in ra digit và nhập vào số 0 xem digit bằng bao nhiêu nhé.
thì nhập số 0 nó đọc Khong đúng mà?
mình chưa hiểu dòng này, bạn giải thích được không
dòng này nữa
mình mới học nên còn kém lắm!
Vãi. Mình hỏi bài lại bị hỏi lại Nhân tiện giải thích cho bạn luôn nhé![quote=“ga_ve_C, post:8, topic:24105”]
int digit = log10((float)x) + 1;
[/quote]
Dòng này nghĩa là tạo 1 biến digit kiểu dữ liệu int . Hàm log10() dùng để kiểm tra xem số x có bao nhiêu chữ số. Nhưng vì kiểu dữ liệu là integer nên nó chỉ lấy phần nguyên, phải + 1. Mà phải ép kiểu (float) cho x mới được nhé. Học hết playlist C anh Đạt sẽ hiểu
Cái này là logic lập trình thôi
hì. cho mình hỏi bạn học năm mấy rồi mà kiến thức thâm sâu quá v
Sax tên Bé tập Code là hiểu rồi, tớ mới học mấy bữa à bạn
Tình cờ đi ngang qua thôi cho bạn câu trả lời: Bài bạn theo trình tự thì đúng rồi đấy ok nhưng còn điểm thiếu và điểm thừa:
Điểm thiếu: không xét đk temp == 0; không xét đk hàng triệu, ngàn, đơn vị nếu temp từ 2 - 9 đọc mốt làm vậy thì có nền tảng hơn, không thì cũng được do nó không hổ trợ Tiếng Việt.
Điểm thừa: Thư viện: #include <limits.h>, #include <stdlib.h>, #include <string.h>, #include <ctype.h>, #include <Windows.h>.
Nếu bạn đã học vòng lặp thì ngon hơn:
Chỉ áp dụng cho những bạn nhập môn thôi nha!