Gregory's suggestion to use a struct would indeed help to organize your code better. A struct is like an object type; in this case it would be logical to have, for instance, a Student struct, and the fields would be a string for a name and an array of numbers representing grades.
However, for this case, it's possible to achieve your desired output as is. Let's look at the following lines.
CODE
for(student=0;student<num_students;++student)
{
cout<<strstud_name[]<<strstud_name[]+1<<":\t";
for(grade=0;grade<num_grades;++grade)
cout<<arrystudent_grades[student][grade]<<"\t";
cout<<"\n";
}
The line cout<<strstud_name[]<<strstud_name[]+1<<":\t"; is going to give you a compiler error. You are trying to access an individual element of an array, yet with strstud_name[], you are not supplying an index. You'd have to put a number 0 through 3 in those square brackets. Since you're using a for loop, O'd put "student" in those brackets. In the next cout line, you got it right. Also, referring back to the line I just mentioned,
cout<<strstud_name[]<<strstud_name[]+1<<":\t";
you don't need the "strstud_name[]+1" part. I think what you're trying to do is output the next student name (correct me if I'm wrong), but you already have the for loop doing it for you.
Try those two suggestions and I believe it should work.