Mảng một chiều C/C++

Gộp lại thành 1 vòng lặp được rồi, cần gì phải 3 vòng lặp chạy lâu.

1 Like

bài tập mảng 1 chiều :smiley:

#include <iostream>
using namespace std;
int main()
{
	int diem[10];
	int diemmax=0;
	int x, y;
	for (x = 0; x <= 9; x++)
	{
		do
		{
			cout << "Nhap diem hoc sinh " << x + 1 << " : ";
			cin >> diem[x];
		} while (diem[x] < 0 || diem[x] > 10);
	}

	system("cls");
	cout << "Diem cac hoc sinh trong lop:" << endl;

	for (int x = 0; x <= 9; x++)
	{
		cout << "Hoc sinh " << x+1 << ":" << diem[x] << endl;
	}
	for (x = 0; x <= 9; x++)
	{
		if (diemmax <= diem[x])
		{
			diemmax = diem[x];
			y = x;
		}
	}
	cout << "Diem so cao nhat la cua hoc sinh " << y+1 << ": " << diemmax << endl;
	system("pause");
	return 0;
}

Bài em sửa lại mọi người xem góp ý em với :slight_smile:

#include <iostream>
#include <limits.h>

using namespace std;

int main(){

	int n;
	
	do {
	
		cout<<"\n Hay nhap vao so luong phan tu: ";
		cin>>n;

	} while (n < 1 || n > INT_MAX);

	double arr[n];
	int i = 0;

	while(true){

		come_back:

		cout<<" Nhap diem cua sinh vien thu "<<i + 1<<": ";
		cin>>arr[i];

		if(arr[i] < 1 || arr[i] > 10){

			goto come_back;
		}

		++i;

		if(i >= n){

			break;
		}
	}

	int pos = 0;

	for (int i = 1; i < n; ++i) {
		
		if(arr[pos] < arr[i]){

			pos = i;
		}
	}

	cout<<"\n Sinh vien co diem cao nhat: "<<arr[pos]<<" o vi tri thu "<<pos + 1<<endl;

	return 0;
}

Dòng này chỉ cần khai báo là đủ, không cần gán giá trị

Dòng này nên cho ngoặc đơn ()

1 Like

bai cua em moi lam:

#include
#include

int main()
{
int32_t student[31];
int32_t max = INT32_MIN;
int16_t number_of_student;

for (int32_t index = 1; index <= 30; index++)
{
	std::cout << "Enter a grade for student " << index << ": ";
	std::cin >> student[index];
	
	if (student[index] >= max)
	{
		max = student[index];
		number_of_student = index;
	}
}

std::cout << "The highest grade is " << max << " of student number " << number_of_student << std::endl;

system("pause");
return 0;

}

bạn format lại source code đi nha
thêm ba dấu ba chấm ở đầu và cuối mã nguồn là được

Em nghĩ làm như thế này ổn hơn vì không xái mảng phụ để lưu trữ :slight_smile:

// Array practice

#include <iostream>

using namespace std;

#define MAX_SIZE 10

int main() {

	double Mark[MAX_SIZE];
	double Max = 0.0;

	for (int i = 0; i < MAX_SIZE; ++i) {

		do {

			cout << " Enter student_mark[" << i << "] == ";
			cin >> Mark[i];

		} while (Mark[i] < 0 || Mark[i] > 10);

		if (Max < Mark[i]) {

			Max = Mark[i];
		}
	}

	for (int i = 0; i < MAX_SIZE; ++i) {

		if (Max == Mark[i]) {

			cout << " Pos == " << i << endl;
		}
	}

	system("pause");
	return 0;
}

Mình có một thắc mắc nhỏ là ở ví dụ mảng, phần tử cuối cùng là ‘\0’. Phần tử nảy có vai trò như thế nào nhỉ??

#include <iostream>
using namespace std;
int main()
{
	int SV[30];
	int Max,n;
	for (int i=1;i<=30;i++)
	 {
	 	cout<<" SV thu "<<i<<" ";
	 	cin>>SV[i];
	 }
	Max=SV[1];
	for (int i=1;i<=30;i++)
	 {
	 	if (Max<SV[i])
	 	 {
	 	 	Max=SV[i];
	 	 	n=i;
		 }		 
	 }
	cout<<"SV co diem cao nhat la "<<n<<" voi so diem "<<Max; 
}

cho em hỏi là nếu nhiều sinh viên có điểm cao nhất thì mình muốn liệt kê đủ stt của các sinh viên đó thì mình làm sao ạ?

Thêm 1 vòng for nữa.

for (i...)
    if (sinhvien[i].diem == diem_max)
        // in stt sinh viên đó ra
4 Likes

Có cách nào gán giá trị cho cả một mảng không ạ ?
Cách nào mà không cần dùng memset

Dùng fill. memset không thực sự hiệu quả nếu giá trị cần gán cho toàn mảng != 0.

https://en.cppreference.com/w/cpp/algorithm/fill

2 Likes

Fill chỉ dùng được cho vector hay cho cả mảng bình thường vậy ?

Dùng được cả cho mảng tĩnh. Bạn thử là biết ngay mà.

Demo:

2 Likes

memset gán theo byte :smiley: nên thg` chỉ dùng khi gán bằng 0 thôi.

1 Like

Em làm bài ạ:

#include <iostream>
#include <cmath>
using namespace std;

int main() {
	cout << "---WHO HAVE THE HEIGHEST SCCORE ?---" << endl;
	cout << endl; //blank line
	int32_t score[100]; //int32_t là kiểu dữ liệu số nguyên với mỗi số chiếm 4 bytes; tên array là score, số phần tử là 100.
	cout << "This calculator can only handle under 100 students and their scores." << endl;
	cout << endl; //blank line
	for (int32_t index = 1; index <= 100; index++) {
		int32_t stop;
		cout << "Type \"2\" to continue, type in \"1\" to escape, if you have finished.";
		cin >> stop;
		if (stop != 1) {
		cout << "This student serial number is " << index << " and his/her score is: ";
		cin >> score[index];
		}
		else {
			break;
		}
	}
	int max = score[0];
	for (int32_t i = 1; i <= 100; i++) {
		if (score[i] > max) {
			max = score[i] ;
			system("cls");
			cout << endl; // blank line
			cout << "The student with serial number of " << i << " has the heighest score of " << max << " ." << endl;
		}
	}
	
	system("pause");
	return 0;
}
1 Like

Chỗ này đâu cần thiết bạn. Vì điều kiện không đúng thì nó vẫn giữ giá trị đó mà.

1 Like

A post was split to a new topic: Tìm vị trí các học sinh có điểm cao nhất giống nhau

A post was merged into an existing topic: Tìm vị trí các học sinh có điểm cao nhất giống nhau

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?