PDA

View Full Version : cho mình hỏi mình làm sai cái gì



gacon93vn
06-10-2011, 04:59 PM
đề bài :viết chương trình nhập vào 2 số nguyên và 1 kí tự . nếu kí tự = + thì in ra phép tổng 2 số nguyên, trừ,*,/,%,=,>,<.
#include<stdio.h>
main()
{
int a,b,kq;
char kitu;
printf("nhap so a:");
scanf("%d",&a);
printf("nhap so b:");
scanf("%d",&b);
_flushall();
printf("nhap ki tu:");
scanf("%c",&kitu);
if (kitu=='+')
kq=a+b;
printf("%d",kq);
if(kitu=='-')
kq=a-b;
printf("%d",kq);
if(kitu=='*')
kq=a*b;
printf("%d",kq);
if(kitu=='/')
kq=a/b;
printf("%d",kq);
if(kitu=='%')
kq=a%b;
printf("%d",kq);
if(kitu=='=')
kq=a=b;
printf("%d",kq);
if(kitu=='<')
kq=a<b;
printf("%d",kq);
if(kitu=='>')
kq=a>b;
printf("%d",kq);
else
printf("ko hop le");
cho hỏi sai cú pháp nào mà nó cứ báo lỗi else quài hjx vs cách làm gọn hơn có ko mình xài C free

itmd
06-10-2011, 05:38 PM
đề bài :viết chương trình nhập vào 2 số nguyên và 1 kí tự . nếu kí tự = + thì in ra phép tổng 2 số nguyên, trừ,*,/,%,=,>,<.
#include<stdio.h>
main()
{
int a,b,kq;
char kitu;
printf("nhap so a:");
scanf("%d",&a);
printf("nhap so b:");
scanf("%d",&b);
_flushall();
printf("nhap ki tu:");
scanf("%c",&kitu);
if (kitu=='+')
kq=a+b;
printf("%d",kq);
if(kitu=='-')
kq=a-b;
printf("%d",kq);
if(kitu=='*')
kq=a*b;
printf("%d",kq);
if(kitu=='/')
kq=a/b;
printf("%d",kq);
if(kitu=='%')
kq=a%b;
printf("%d",kq);
if(kitu=='=')
kq=a=b;
printf("%d",kq);
if(kitu=='<')
kq=a<b;
printf("%d",kq);
if(kitu=='>')
kq=a>b;
printf("%d",kq);
else
printf("ko hop le");
cho hỏi sai cú pháp nào mà nó cứ báo lỗi else quài hjx vs cách làm gọn hơn có ko mình xài C free

lấy búa và tự đánh vào đầu mình thật nhiều lần, đặc biệt là mạnh tay vào là sẽ có câu trả lời thoả đáng!

HTT.itvn
06-10-2011, 06:41 PM
Về lập trình C thì bạn sử dụng lệnh if quá nhiều gây nặng code , xử lý chậm . Thay vào đó em dùng lệnh swich nó gọn hơn . Thứ nữa khi nhập a,b thì khi điền dấu = , > , < mà kết quả kq=a=b , kq = a < b... là không logic khi mà em cho trước a,b rồi xử lý trong if . Ví dụ 2=3 , 2 > 3 là sai .
Hàm kq thì em nên để float chứ không nên để int vì còn thực hiện phép chia dư .

Khi sử dụng lệnh if nếu trong if có nhiều thành phần để xử lý thì em phải cho nó vào trong { } , ở đây em lại không có .

Anh nghĩ em hiểu sai đề rồi , khi nhập kí tự + thì thực hiện phép công a,b ... Khi nhập các kí tự = , < , > thì thực hiện phép so sánh a,b .

supermember
06-10-2011, 06:49 PM
Cậu sai chỗ dưới lệnh IF

if(kitu=='>')
kq=a>b;
printf("%d",kq);
else
printf("ko hop le");

Bởi vì nhiều hơn 2 dòng lệnh sẽ phải đặt trong dấu {}, còn không nó hiểu chỉ chạy 1 lệnh phía sau if


if(kitu=='>')
{
kq=a>b;
printf("%d",kq);
}
else
printf("ko hop le");



P/S:itmd (http://itvnn.net/member.php?50564-itmd)

lấy búa và tự đánh vào đầu mình thật nhiều lần, đặc biệt là mạnh tay vào là sẽ có câu trả lời thoả đáng!

Người ta cần giúp mà cậu lại,....

gacon93vn
06-10-2011, 07:41 PM
Về lập trình C thì bạn sử dụng lệnh if quá nhiều gây nặng code , xử lý chậm . Thay vào đó em dùng lệnh swich nó gọn hơn . Thứ nữa khi nhập a,b thì khi điền dấu = , > , < mà kết quả kq=a=b , kq = a < b... là không logic khi mà em cho trước a,b rồi xử lý trong if . Ví dụ 2=3 , 2 > 3 là sai .
Hàm kq thì em nên để float chứ không nên để int vì còn thực hiện phép chia dư .

Khi sử dụng lệnh if nếu trong if có nhiều thành phần để xử lý thì em phải cho nó vào trong { } , ở đây em lại không có .

Anh nghĩ em hiểu sai đề rồi , khi nhập kí tự + thì thực hiện phép công a,b ... Khi nhập các kí tự = , < , > thì thực hiện phép so sánh a,b .
a hướng dẫn e xíu về swich dc ko e mới học có 1 tuần ah mà sao thấy tùm lum hết rồi nếu if thì vs cái so sánh thì tách ra sao

HTT.itvn
06-10-2011, 07:52 PM
a hướng dẫn e xíu về swich dc ko e mới học có 1 tuần ah mà sao thấy tùm lum hết rồi nếu if thì vs cái so sánh thì tách ra sao

Cấu trúc switch như thế này nhé :


switch(kitu){
case gia_tri_1 : kq = a+b;break;
case gia_tri_2 : kq = a-b;break;
......
default: printf(" Ký tự không hợp lệ ");
}
printf("%f",kq);

gacon93vn
06-10-2011, 07:56 PM
Cấu trúc switch như thế này nhé :
vậy là đánh luôn đúng ko ko cần {} riêng từng cái đúng ko học 1 tuần thấy lung tung rồi hjx

HTT.itvn
06-10-2011, 08:03 PM
vậy là đánh luôn đúng ko ko cần {} riêng từng cái đúng ko học 1 tuần thấy lung tung rồi hjx

Mỗi lệnh case không cần dấu { } này , vì nó có hàm break ở cuối mỗi case khi kết thúc lệnh case của nó rồi mới xử lý tiếp case thứ 2 .

P/s : Em nên tham khảo tài liệu các lệnh vòng lặp , kế thừa lớp , object nhé . Nắm vững căn bản thì học sâu dễ dàng hơn .

CoChiRo
06-10-2011, 08:23 PM
Về LT thì nên viết nhiều nhiều thì mới rành được. Mới thấy đc những cái hay.

gacon93vn
06-10-2011, 08:32 PM
#include<stdio.h>
main()
{
float kq;
int a,b;
char kitu;
_flushall();
printf("nhap a");
scanf("%d",&a);
printf("nhap b");
scanf("%d",&b);
printf("nhap kitu");
scanf("%c",&kitu);
switch(kitu)

case 1
if (kitu='+')
kq=a+b;
printf("%f",kq);
break;
1 trường hợp là zậy đúng ko a

gacon93vn
06-10-2011, 08:35 PM
#include<stdio.h>
main()
{
float kq;
int a,b;
char kitu;
_flushall();
printf("nhap a");
scanf("%d",&a);
printf("nhap b");
scanf("%d",&b);
printf("nhap kitu");
scanf("%c",&kitu);
switch(kitu)

case 1
if (kitu='+')
kq=a+b;
printf("%f",kq);
break;

supermember
06-10-2011, 10:25 PM
#include<stdio.h>
main()
{
float kq;
int a,b;
char kitu;
_flushall();
printf("nhap a");
scanf("%d",&a);
printf("nhap b");
scanf("%d",&b);
printf("nhap kitu");
scanf("%c",&kitu);
switch(kitu)

case 1
if (kitu='+')
kq=a+b;
printf("%f",kq);
break;
1 trường hợp là zậy đúng ko a

Đã dùng Switch Case rùi mà sau có if nữa .



switch(kitu)
case '+':
kq=a+b;
printf("%f",kq);
break;



Cac truong hop con lai tuong tu.

HTT.itvn
06-10-2011, 10:57 PM
Code hoàn chỉnh như sau :


#include<stdio.h>
main()
{
float kq;
int a,b;
char kitu;
_flushall();
printf("nhap a");
scanf("%d",&a);
printf("nhap b");
scanf("%d",&b);
printf("nhap kitu");
scanf("%c",&kitu);
switch(kitu){
case '+':
kq=a+b;printf("Kết quả : %d",kq);break;
case '-':
kq=a-b;printf("Kết quả : %d",kq);break;
case '*':
kq=a*b;printf("Kết quả : %d",kq);break;
case '/':
kq=a/b;printf("Kết quả : %f",kq);break;
case '%':
kq=a%b;printf("Kết quả : %d",kq);break;
case '=':
case '<':
case '>':
if ( a > b) printf("Kết quả : %d > %d",a,b);
if ( a < b) printf("Kết quả : %d < %d",a,b);
else printf("Kết quả : %d = %d",a,b);
break;
default: printf("Ký tự không hợp lệ");
}
}

gacon93vn
07-10-2011, 07:11 AM
tks rất nhìu nhìu
20char