Tìm số lớn nhất, nhỏ nhất trong dãy nhập vào mà không dùng mảng

Tìm số lớn nhất,nhỏ nhất trong dãy nhập vào, không dùng mảng,khi nhấn “S” thì vòng lặp thoát.Ai xem lỗi giúp em với!

int main()
{
	int n;
    int  lonnhat = -1000;
	int nhonhat =1000;
	do
	{
		cout << "nhap n:";
		cin >> n;
		int tamthoi = n;
		if (lonnhat < tamthoi)
		{
			lonnhat = tamthoi;
		}
		if (n < nhonhat)
		{
			nhonhat = n;
		}
		
	} while (n > 0);
	cout << " So lon nhat la : "<<endl;
	cout << lonnhat<<endl;
	cout << "So nho nhat la : "<<endl;
    cout <<nhonhat << endl;
	
	return 1;
}


giá trị min cứ bằng 0 ạ

Vì khi bạn nhập s, giá trị n sẽ bằng 0. while(n > 0)!

3 Likes

Dạ,vậy em nên thay bằng câu lệnh gì để khi nhấn S vòng lặp thoát ạ vì S kiểu char mà n khai báo lúc đầu là integer

Giá trị min của bạn bằng 0 là vì vòng lặp do while xử lý xong rồi mới kiểm tra điều kiện. Nghĩa là khi bạn nhập số 0 (hoặc kí tự s để thoát) thì vòng lặp vẫn xử lý số n = 0 đó xong mới thoát.
Cách khắc phục là bạn thêm một điều kiện sau khi nhập số, nếu số đó bằng 0 thì break khỏi vòng lặp.

cout << "Nhap n = ";
cin >> n;
if (n == 0) break;
...
1 Like

hi @doan_phuc, tôi không chắc việc nhập xuất của c++
Nhưng bạn có thể tham khảo code java sau. Vì đề bài nói dừng khi nhập “s”, còn của bạn tôi nghĩ nó sẽ dừng khi cả bạn nhập không phải “s” (ví dụ muốn nhập số âm cũng dừng => vậy đâu đúng)

Code java
public class MainClass {
    public static void main(String[] agrs) {
    	int lonNhat = -10000;
    	int nhoNhat = 10000;
    	int n = 0;
    	String s = "1";
    	Scanner scanner = new Scanner(System.in);
    	while (!"s".equals(s)) {
    		System.out.print("Nhập n (Nhấn \"s\" để dừng): ");
    		try {
    			n = scanner.nextInt();
    		}
    		catch (Exception e) {
    		}
    		s = scanner.nextLine();
    		lonNhat = (n > lonNhat)? n : lonNhat;
    		nhoNhat = (n < nhoNhat)? n : nhoNhat;
    	}
    	System.out.println("===========================");
    	System.out.println("Số lớn nhất là: " + lonNhat);
    	System.out.println("Số nhỏ nhất là: " + nhoNhat);
    	scanner.close();
    }
}
Đây là kết quả
Nhập n (Nhấn "s" để dừng): 1
Nhập n (Nhấn "s" để dừng): 2
Nhập n (Nhấn "s" để dừng): -3
Nhập n (Nhấn "s" để dừng): a
Nhập n (Nhấn "s" để dừng): 4
Nhập n (Nhấn "s" để dừng): s
===========================
Số lớn nhất là: 4
Số nhỏ nhất là: -3
1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?