본문 바로가기

강의자료/C/C++

013. 종합 연습문제(구구단, 학급별점수, 별움직이기, 아스키표)

◈ 이 글은 강의를 위하여 제가 직접 작성한 내용입니다. 따라서 퍼가실 경우, 출처를 명확히 해주시기 바랍니다!!
◈ This ariticle was written by me for teaching. So if you want to copy this article, please clarify the source!!


지금까지 배운 내용을 이용해 다음 문제를 풀어보자.
// 구구단 출력하기.

#include 
using namespace std;

void main()
{
	int startDan = 0, endDan = 0;

	cout << "구구단 출력, 시작단을 입력하세요 : ";
	cin >> startDan;

	cout << "구구단 출력, 끝단을 입력하세요 : ";
	cin >> endDan;

	int dan = startDan;
	while(dan <= endDan)
	{
		cout << "[" << dan << "단]" << endl;
		for(int i=1; i<=9; i++)
		{
			cout << dan << " X " << i << " = " << dan*i << endl;
		}
		dan++;
	}
}
// 학급별 점수내기

#include 
using namespace std;

void main()
{
	int studentNum = 0;
	cout << "학급의 인원 수를 입력하세요 : ";
	cin >> studentNum;
	cout << endl;

	int classKorSum = 0, classEngSum = 0, classMathSum = 0;
	for(int i=1; i<=studentNum; i++)
	{
		int kor = 0, eng = 0, math = 0, sum = 0, average = 0;
		cout << i << "번 학생의 국어점수를 입력하세요 : ";
		cin >> kor;
		cout << i << "번 학생의 영어점수를 입력하세요 : ";
		cin >> eng;
		cout << i << "번 학생의 수학점수를 입력하세요 : ";
		cin >> math;

		sum = kor + eng + math;
		average = sum / 3;

		cout << i << "번 학생의 총점은 " << sum << "점이고 평균은 " 
			 << average << "점 입니다." << endl << endl;

		classKorSum += kor;
		classEngSum += eng;
		classMathSum += math;
	}

	cout << "학급전체 국어점수의 합은 " << classKorSum << 
		"점이고 평균은 " << classKorSum/studentNum << "점 입니다." << endl;
	cout << "학급전체 영어점수의 합은 " << classEngSum << 
		"점이고 평균은 " << classEngSum/studentNum << "점 입니다." << endl;
	cout << "학급전체 수학점수의 합은 " << classMathSum << 
		"점이고 평균은 " << classMathSum/studentNum << "점 입니다." << endl;
}
// 별 움직이기.

#include 
#include 
using namespace std;

#define ARROW	224
#define LEFT	75
#define RIGHT	77
#define ENTER	13

void main( )
{
	cout << "좌우 화살표를 이용하여 아래 별표를 움직여보세요." << endl;
	cout << "*" << endl;

	int keys = 0, spaces = 0;
	while(keys != ENTER)
	{
		keys = _getch();

		if(keys == ARROW)
		{
			keys = _getch();

			switch(keys)
			{
			case LEFT : spaces--; break;
			case RIGHT: spaces++; break;
			default	: continue;
			}

			if(spaces < 0) spaces = 0;
			if(spaces > 50) spaces = 50;

			for(int i=0; i < spaces; i++) cout << " ";
			cout << "*" << endl;
		}
	}
}

// 아스키표 만들기.
// 이중 for()문에서 원하는 인덱스에 접근하는 법을 이해하자.
#include  
using namespace std;

void main( )
{
	/*
	i == 0, 0      -> 32     -> 64     -> 96
	i == 0, 0+32*0 -> 0+32*1 -> 0+32*2 -> 0+32*3
	i == 1, 1+32*0 -> 1+32*1 -> 1+32*2 -> 1+32*3
	i == 2, 2+32*0 -> 2+32*1 -> 2+32*2 -> 2+32*3
		.
		.
		.
	i == 31, 31      -> 63      -> 95      -> 127
	i == 31, 31+32*0 -> 31+32*1 -> 31+32*2 -> 31+32*3
	*/

	cout << "--------ASCII Code 0~ 127----------------\n" << endl;
	for(int i=0; i<32;i++)
	{
		for(int j=0; j<4 ;j++)
		{ 
			int num = i + 32*j;
			if(num==7 || num==8 || num==9 || num==10 || num==13 )
			{
					cout << num << "\t\t"; 
					continue;                      
			}
			cout << num << "\t" << (char)num << "\t";        
		}
		cout << endl;          
	}
}