'정보/C#'에 해당되는 글 12건
- 2009/01/07 타입 변환
- 2009/01/07 타입의 종류
- 2009/01/03 C# 트레이닝 No.05
- 2008/12/31 기본적인 입출력(입력)
- 2008/12/30 기본적인 입출력(출력)
- 2008/12/30 닷넷의 네임스페이스
- 2008/12/22 C# 트레이닝 No.04
- 2008/12/22 C# 트레이닝 No.03
- 2008/12/22 C# 트레이닝 No.02
- 2008/12/22 C# 트레이닝 No.01
- 2008/12/22 C# 트레이닝
- 2008/11/25 무료 기술 서적 - Inside C# (한글 번역본)
1. 암시적 변환
암시적 변환이란 사용자가 요구하지 않더라도 컴파일러가 알아서 적당한 타입으로 바꿔주는 것이다. 서로 호환되는 타입끼리 연산할 때나 논리적으로 안전에 별 문제가 없을 때에 한해 컴파일러는 자동으로 암시적 변환을 한다. 다음 코드는 암시적 변환이 가능한 전형적인 예이다.
|
short s = 1234; |
short형 변수를 int형 변수에 대입했는데 대입 연산자 양쪽의 타입이 다르다. 하지만 컴파일러가 short형의 s를 int형으로 변환하여 좌우변을 일치시킨 후 대입하므로 잘 컴파일되며 실행에도 문제가 없다. 이 변환이 안전한 이유는 short 타입으로 표현할 수 있는 모든 값을 int 타입으로도 표현할 수 있으며 따라서 대입에 의해 값의 손실이 발생하지 않기 때문이다. short는 -32768 ~ 32767까지 표현할 수 있으며 int는 -20억 ~ 20억 사이의 수를 표현할 수 있으므로 s가 어떤 값을 가지더라도 i에 무난히 대입될 수 있다.
이처럼 작은 타입을 큰 타입에 대입할 때는 항상 안전하며 그래서 사용자가 변환 지정을 하지 않더라도 컴파일러가 암시적으로 타입을 변환하며 그래도 아무 문제가 없다. 마찬가지로 byte는 short에 대입될 수 있으며 int는 long으로, float는 double에 대입될 수 있다. 문자를 기억하는 char형도 ushort 이상의 정수형 변수에 암시적으로 대입할 수 있다. 이번에는 반대의 경우, 즉 큰 타입을 작은 타입에 대입하는 경우를 보자.
|
int i = 12345678; |
정수형의 큰 타입 변수를 short형의 작은 타입 변수에 대입했는데 이 경우는 에러로 처리된다. 16비트 길이의 short는 32767 이상의 큰 수를 기억할 수 없으므로 32비트의 int값을 안전하게 대입받을 수 없다. C++은 이런 경우에도 하강 변환을 통해 대입을 허락하지만 C#은 경고도 아닌 에러로 처리한다는 면에서 타입 관리가 훨씬 더 엄격하다.
2. 명시적 변환
명시적 변환은 개발자가 어떤 타입을 어떻게 바꾸라고 컴파일러에게 분명히 지시하는 것이며 캐스트 연산자를 사용한다. 캐스트 연산자는 (int), (double)과 같이 괄호 안에 변환할 타입을 밝히는 형식이며 C의 문법과 동일하다. C++의 static_cast, const_cast 같은 복잡한 문법은 사용하지 않는다. C#은 타입 변환 규칙이 C++보다 훨씬 더 엄격하기 때문에 이런 복잡한 캐스트 연산자를 쓸 필요가 없다.
변수가 가질 수 있는 값의 범위를 개발자가 분명히 알고 있을 때는 명시적 변환도 안전하게 수행할 수 있다. 예를 들어 int 타입의 Age가 사람의 나이를 기억하는 변수라고 할 때 이 값은 통상 1~100 정도의 값을 가지며 특이하게 많아 봐야 150을 넘지는 않는다. 그래서 Age는 short나 byte형 변수에 안전하게 대입할 수 있으며 이럴 때 캐스트 연산자를 사용한다.
|
int Age = 25; |
Age에 (short) 캐스트 연산자를 적용한 후 short 타입의 sAge 변수에 대입했다. 캐스팅에 의해 양변의 타입이 일치되었으므로 잘 대입된다. 이 대입문에서 캐스트 연산자를 빼 버리면 컴파일러는 이 대입이 위험할 수도 있다고 판단하므로 에러로 처리된다. 컴파일러는 타입의 모양만 점검할 수 있을 뿐이며 Age의 일제 범위가 1~150 정도밖에 안 된다는 논리적인 사실까지 파악할 수는 없다.
이럴때 개발자가 "괜찮으니까 그냥 대입해"라고 명령하는 것이 명시적 변환이다. 컴파일러는 사용자가 Age를 short로 바꾸라고 명시적으로 지시했으므로 이 지시를 따른다. 단, 컴파일러는 명령을 따를 뿐 변환에 대해서는 어떠한 책임도 지지 않으며 캐스팅 후의 모든 부작용은 개발자가 책임져야 한다. 큰 타입을 작은 타입으로 캐스팅하면 값의 소실이 발생할 수도 있다.
문자열과 수치는 내부적인 포맷이 완전히 딴판이기 때문에 캐스트 연산자 같은 간단한 방법으로는 변환할 수 없다. 좀 더 복잡한 코드가 필요하며 그래서 별도의 변환 방법이 제공된다. System 네임스페이스의 Convert 클래스에는 각종 타입들을 변환할 수 있는 다음과 같은 정적 메서드들이 정의되어 있다.
|
메서드 |
설 명 |
|
ToInt16 |
16비트 정수로 변환한다. |
|
ToInt32 |
32비트 정수로 변환한다. |
|
ToUInt16 |
부호 없는 16비트 정수로 변환한다. |
|
ToUInt32 |
부호 없는 32비트 정수로 변환한다. |
|
ToDouble |
double 타입으로 변환한다. |
|
ToString |
문자열로 변환한다. |
|
ToBoolean |
논리형으로 변환한다. |
타입(Type)이란 변수의 형식이며 타입에 따라 변수의 길이나 값을 해석하는 방법이 달라진다. 닷넷 프레임워크는 CTS(Common Type System)라는 공용 타입 체계를 정의하고 닷넷용 언어들은 모두 공통의 타입 체계를 따른다. 그렇기 때문에 닷넷 언어끼리는 타입이 호환되어 혼합 프로그래밍이 가능한 것이다.
닷넷의 타입들은 모두 System 네임스페이스에 정의되어 있는 구조체이거나 클래스이다. 타입들 조차도 개별 언어가 정의하는 것이 아니라 닷넷 프레임워크에 정의되어 있다. 단 프레임워크의 타입명이 너무 길기 때문에 닷넷의 각 언어들은 CTS가 정의하는 타입에 대한 짧은 별칭을 제공한다. CTS의 타입들과 각 언어별로 정의하는 별칭은 다음과 같다. 타입에 따라 변수가 차지하는 메모리상의 크기와 부호의 여부가 다르다.
|
CTS |
크기 |
부호 |
C# |
VB |
C++ |
|
System.Byte |
1 |
없음 |
byte |
Byte |
unsigned char |
|
System.SByte |
1 |
있음 |
sbyte |
없음 |
signed char |
|
System.Int16 |
2 |
있음 |
short |
Short |
short |
|
System.UInt16 |
2 |
없음 |
ushort |
없음 |
unsigned short |
|
System.Int32 |
4 |
있음 |
int |
Integer |
int 또는 long |
|
System.UInt32 |
4 |
없음 |
uint |
없음 |
unsigned(long) |
|
System.Int64 |
8 |
있음 |
long |
Long |
_int64 |
|
System.UInt64 |
8 |
없음 |
ulong |
없음 |
unsigned_int64 |
|
System.Char |
2 |
없음 |
char |
Char |
wchar_t |
|
System.Single |
4 |
있음 |
float |
Single |
float |
|
System.Double |
8 |
있음 |
double |
Double |
double |
|
System.Decimal |
16 |
있음 |
decimal |
Decimal |
Decimal |
|
System.Boolean |
1 |
bool |
Boolean |
bool | |
|
System.String |
가변 |
string |
String |
string | |
|
System.Object |
가변 |
object |
Boolean |
Object* |
부호가 있는 32비트의 정수형은 닷넷 프레임워크의 System.Int32 구조체로 표현되며 C#은 이 타입을 int라는 키워드로, VB는 Integer로, C++은 int로 칭한다. CTS의 타입명을 바로 사용해도 되고 각 언어별로 제공하는 별칭을 사용해도 된다.
하지만 CTS타입은 이름이 너무 길어서 입력하기 불편하므로 가급적이면 각 언어가 제공하는 별칭을 사용하는 것이 더 편리하다. 타입은 어쩌다 한번씩 사용하는 것이 아니라 늘상 사용해야 하기 때문에 언어별로 짧고 읽기 쉬운 예약어를 제공하는 것이다.
[if문]
연습과제1>>
(-1)*2*(-3)*4*(-5)*6*...*(-9)*10의 곱을 구하여라.
[실행결과]
-3628800
Press any key to continue
연습과제2>>
-(1/2)+(2/3)-(3/4)+(4/5)-(5/6)+...-(99/100)의 합을 구하여라.
[실행결과]
-0.688172
Press any key to continue
콘솔의 기본적인 입력 메서드는 ReadLine이다. 다양한 타입의 정보를 출력해야 하는 WriteLine 메서드에 비해 형식이 아주 간단하다. ReadLine 메서드가 호출되면 콘솔에 커서가 나타나 입력을 대기하며 사용자가 문자열을 입력한 후 엔터 키를 누르면 입력된 문자열을 리턴한다. 키보드로 입력되는 것은 모두 문자열 형태를 띠고 있으므로 리턴 타입이 문자열로 되어 있다. 만약 정수나 실수가 필요하다면 일단 문자열로 입력받은 후 원하는 타입으로 변환해서 사용해야 한다. 문자열을 정수형으로 변환할 때는 Convert 클래스의 ToInt32 메서드를 호출하는데 변환에 대해서는 다음에 정리하도록 하겠다.
Read 메서드는 한 줄을 읽은 후 첫 번째 문자만 int 형으로 리턴한다. 이때 Read 메서드가 리턴하는 값은 정수가 아니라 첫 번째 문자의 코드 값이므로 이 메서드로 정수를 입력받을 수는 없다. 입력받은 문자를 하나씩 순서대로 읽어 처리하고 싶을 때 이 메서드를 사용한다. 두 번째 문자부터는 버퍼에 그대로 남아 있으며 다음 번 Read를 호출할 때 차례대로 읽혀진다.
문자나 정수가 아닌 키 자체를 입력받을 때는 ReadKey 메서드를 사용한다. 이 메서드는 닷넷 2.0 이후에 추가된 것이므로 이전 버전의 프레임워크에서는 동작하지 않는다. 이 베서드를 사용하면 문자가 아닌 커서 이동 키나 펑션키, Ins, Del 등의 기능 키도 입력 받을 수 있다. 단 Ctrl, Alt, Shift 키 등의 조합 키는 단독으로 사용되지 않으므로 키 입력으로 간주하지 않는다.
키 하나만 입력받기 때문에 엔터 키를 누르지 않아도 즉시 리턴한다. 입력받은 키 정보는 ConsoleKeyInfo 구조체로 리턴되는데 이 구조체의 Key 멤버에 눌러진 키의 이름값이 전달된다. 키의 이름은 ConsoleKey 열거형으로 정의되어 있는데 주요 키의 이름은 다음과 같다.
|
열 거 형 |
키 |
|
A ~ Z |
A ~ Z 키 |
|
D0 ~ D9 |
0 ~ 9 숫자 키 |
|
F1 ~ F24 |
F1 ~ F24 펑션 키 |
|
NumPad0 ~ NumPad9 |
넘패드의 숫자 키 0 ~9 |
|
Insert, Delete |
Insert 키, Del 키 |
|
Home, End |
Home 키, End 키 |
|
PageDown, PageUp |
PgUp 키, PgDn 키 |
|
Enter |
Enter 키 |
|
Escape |
Esc 키 |
|
SpaceBar |
공백 키 |
|
Tab |
Tab 키 |
|
BackSpace |
BS 키 |
|
LeftArrow, RightArrow, UpArrow, DownArrow |
커서 이동 키 |
|
Help |
도움말 키 |
|
PrintScreen |
PrtSc 키 |
|
VolumeUp, VolumeDown, VolumeMute |
볼륨 조절 키 |
|
BrowserBack, BrowserHome, BrrowserRefresh |
웹 브라우저 키 |
|
MediaPlay, MediaNext, MediaStop |
미디어 재생 키 |
|
LeftWindows, RightWindows |
좌우 윈도우 키 |
==========================================================================================
using System;
class CSTest
{
public static void Main()
{
string name;
int age;
Console.Write("이름을 입력하세요 : ");
name = Console.ReadLine();
Console.WriteLine(name);
Console.Write("나이를 입력하세요 : ");
age = Convert.ToInt32(Console.ReadLine());
Console.WriteLine(age);
}
}
==========================================================================================
using System;
class CSTest2
{
public static void Main()
{
ConsoleKeyInfo cki;
int x = 40, y = 12;
for (; ; )
{
Console.Clear();
Console.SetCursorPosition(x, y);
Console.Write('#');
cki = Console.ReadKey(true);
switch (cki.Key)
{
case ConsoleKey.LeftArrow:
x--;
break;
case ConsoleKey.RightArrow:
x++;
break;
case ConsoleKey.UpArrow:
y--;
break;
case ConsoleKey.DownArrow:
y++;
break;
case ConsoleKey.Q:
return;
}
}
}
}
==========================================================================================
커서 이동 키를 입력받아 # 문자를 상하 좌우로 움직인다. 프로그램 전체는 무한 루프로 되어 있으며 루프에서 x, y 위치에 # 문자를 출력한다. 그리고 키를 입력받아 커서 이동 키이면 x, y 변수를 방향에 따라 증감하여 좌표를 갱신한다. 이 과정을 Q가 입력될 때까지 반복하므로 키를 계속 누르고 있으면 #문자가 연속적으로 움직인다.
닷넷의 입출력 관련 기능들은 모두 System 네임스페이스의 Console 클래스가 제공한다. Console의 메서드들을 통해 모니터에 문자열을 출력하고 키보드로부터 문자열을 입력받는다. 입출력을 제공하는 Console 클래스가 System 네임스페이스에 포함되어 있으므로 입출력을 위해서는 소스 선두에 using System; 선언을 해야 한다. 이 선언에 의해 Console 클래스와 그 메서드들을 곧바로 호출할 수 있다. Console의 기본 출력 메서드는 WriteLine이다. 인수 없이 WriteLine만 호출하면 출력 없이 커서를 다음 줄 처음으로 내리기만 한다.
서식을 지정할 때는 문자열 안에 { } 괄호를 적고 안에 0부터 시작하는 인덱스를 적는다. 서식은 필요한 만큼 개수의 제약 없이 사용할 수 있으며 실행 중에 인수의 타입을 정확하게 판별할 수 있으므로 printf의 %d, %f처럼 타입을 구분할 필요도 없다. 서식의 개수만큼 뒤쪽에 실제 출력할 인수들을 나열하기만 하면 된다.
|
형식 |
{ 인덱스, 폭 : 형식 } |
|
형식 |
설 명 |
|
C |
통화 형태로 출력한다. |
|
D |
10진수, D다음에 폭을 지정하면 남는 폭은 선행 제로를 붙인다. D6으로 1234를 출력하면 001234가 된다. |
|
E |
부동 소수점 표기. 5.6789는 5.678900E+000으로 출력된다. 소문자 e를 사용하면 지수 표기 문자 E가 소문자로 출력된다. |
|
F |
고정 소수점 표기. 뒤쪽에 소수 이하의 자릿수를 지정하면 반올림 처리하여 출력한다. |
|
G |
E와 F중 짧은 쪽을 선택한다. |
|
N |
숫자 중간에 매 세 자리마다 콤마가 들어간 형태로 출력한다. 1234567은 1,234,567로 출력된다. |
|
P |
퍼센트 형태로 표기한다. 100을 곱하고 소수점 이하 두 자리까지 출력하며 뒤에 %기호도 출력된다. |
|
X |
16진수. 소문자 x를 쓰면 16진 문자 a~f가 소문자로 출력된다. |
WriteLine 메서드는 출력이 끝난 후 자동으로 개행하는 줄 단위 출력 함수이다. 아무리 짧은 내용 이라도 한 줄을 차지한다. 이 메서드 외에 Write라는 메서드가 있는데 이 메서드는 모든 면에서 WriteLine과 동일하되 출력 후 개행하지 않는다는 점만 다르다. WriteLine은 무조건 개행해 버리므로 한 줄에 여러 개의 정보를 연이어 출력할 때는 Write 메서드를 사용해야 한다.
===========================================================================================
using System;
class OutputTest
{
public static void Main()
{
int i = 1234;
double d = 5.6789;
Console.WriteLine("문자열");
Console.WriteLine(i);
Console.WriteLine(d);
//서식사용
Console.WriteLine("정수는 {0}이고 실수는 {1}이다", i, d);
Console.WriteLine("자릿수 테스트: ->{0}<- ->{0,6}<- ->{0,-6}<-", i);
Console.WriteLine("->{0:F0}<- ->{0:F2}<- ->{0:F4}<-", d);
}
}
===========================================================================================
별다른 폭 지정이 없으면 i의 실제 폭 만큼인 4칸만 차지. 폭 6을 지정하면 6칸을 차지하고 남는 두 칸은 여백으로 채워진다. 폭 -6을 지정하면 6칸을 차지하되 글자들이 왼쪽으로 정렬되고 여백이 오른쪽으로 이동한다. 이 폭은 어디까지나 최소 폭이지 강제 폭이 아니므로 폭보다 넓은 값을 출력할 때는 폭 지정을 무시하고 값을 모두 출력한다. 즉 123456을 폭 3으로 출력한다고 해서 123이나 456만 출력하지는 않는다.
F0은 소수점 첫째 자리에서 반올림하여 정수부만 출력하고 F2는 소수점 둘째 자리까지 출력하며 F4는 넷째자리까지 출력한다. 실수부는 정확한 값보다 필요한 자릿수까지만 출력하는 것이 보기에 좋으므로 유효 자릿수만 가급적 지정하는 것이 좋다.
네임스페이스의 기본적인 기능은 명칭의 선언 영역을 격리하여 명칭끼리의 충돌을 방지하는 것이지만 클래스를 기능별로 분류하는 역할도 한다. 닷넷의 라이브러리는 워낙 방대하기 때문에 모든 클래스들을 같은 범위에서 정의하면 명칭 충돌뿐만 아니라 명칭 검색 시간도 굉장히 오래 걸릴 것이다. 그래서 클래스들을 기능에 따라 그룹을 분류하여 네임스페이스에 체계적으로 정리해 놓았다.
닷넷의 루트 네임스페이스는 System이며 System안에 기능별로 네임스페이스 나누워져 있고 이 안에 클래스들이 정의되어 있다. 닷넷 라이브러리의 주요 네임스페이스는 다음과 같다.
| 네임스페이스 | 설 명 |
| System | 타입, 메모리 관리 등 핵심 클래스 |
| System.Collections | 배열, 연결 리스트 등의 컬렉션 클래스 |
| System.IO | 파일 입출력 및 네트워크 관련 클래스 |
| System.Windows.Forms | 윈도우즈 폼과 컨트롤 |
| System.Drawing | GDI+ |
| System.Web | 웹 개발에 관련된 클래스 |
| System.Xml | XML 관련 클래스들 |
| System.Security | 보안, 암호, 권한 관련 클래스 |
해당 기능을 쓰고 싶다면 기능을 제공하는 클래스들의 소속 네임스페이스에 대한 using 선언을 해야 하며 그러기 위해서는 어떤 클래스가 어떤 네임스페이스 소속인지를 알아야 한다. 마치 C/C++ 언언에서 원하는 함수가 어떤 헤더 파일에 선언되어 있는지 관심을 가져야 하는 이유와 같다.
루트 네임스페이스인 System에는 기본 타입들이 정의되어 있고 입출력, 쓰레기 수집, 예외 처리 등의 기본적인 기능이 제공된다. System 네임스페이스는 닷넷 응용 프로그램이 반드시 참조해야 하는 필수 네임스페이스이다. 그래서 대부분의 C# 소스는 항상 using System; 으로 시작된다. 마치 C소스가 거의 항상 #include<stdio.h>로 시작하고 윈도우즈 API 소스가 #include<windows.h>로 시작하는 것과 마찬가지이다. using 선언은 C의 #include와 유사해 보이지만 물리적인 파일을 포함하는 것이 아니라 논리적인 네임스페이스를 참조한다는 점이 다르다.
| #include<stdio.h> ..... |
using System; ..... |
| C소스 | C# 소스 |
using 선언은 꼭 필요한 것들만 선언하는 것이 좋다. 닷넷 라이브러리의 모든 네임스페이스들을 using 선언해 놓으면 명칭들을 자유롭게 쓸 수 있어서 좋기는 하겠지만 컴파일러가 명칭을 찾아야 할 범위가 넓어지므로 컴파일 시간이 오래 걸리고 명칭 충돌 확률이 높아진다. 그러나 using은 컴파일 단계에서만 적용될 뿐이므로 using이 많다고 해서 결과 프로그램이 느려지거나 커지는 것은 아니다.
[if-switch문]
연습과제1>>
두개의 실수와 연산자(+,-,*,/)를 입력받아 연산자에 따라 연산을 수행하는 프로그램을 작성해보자.(switch문 사용)
[출력결과]
첫 번째 수 : 4.56
두 번째 수 : 10
연산자 : [+]
4.56 + 10.00 = 14.56
Press any key to continue
연습과제2>>
정수를 입력받아 아래와 같이 출력하는 프로그램을 작성해보자.(if문 사용)
◈ 3의배수이면서, 4의배수에도 해당 => [ ]은(는) 3의배수 이면서, 4의배수 입니다.
◈ 3의배수에만 해당 => [ ]은(는) 3의배수 입니다.
◈ 4의배수에만 해당 => [ ]은(는) 4의배수 입니다.
◈ 3의배수도 4의배수도 해당안됨 => [ ]은(는) 3의배수도 4의배수도 아닙니다.
[출력결과]
정수 입력 : 12
[12]은(는) 3의배수 이면서, 4의배수 입니다.
Press any key to continue
연습과제3>>
점수를 입력받아 등급을 출력하는 프로그램을 작성해보자.
(단, 점수는 0~100점까지만 입력 가능하며, 그 외 점수를 입력하면 “잘못된 입력”이라는 메시지
출력 후, 종료)
◈ [90점 이상 : A등급], [80점 이상 : B등급], [70점 이상 : C등급],
[60점 이상 : D등급], [60점 미만 : F등급]
◈ if문만을 사용한 프로그램과 switch문만을 사용한 프로그램 두개를 작성한다.
[출력결과]
점수 입력 : 78
78점 ==> C등급
Press any key to continue
점수 입력 : -1
잘못된 입력(0~100사이 입력)
Press any key to continue
[ 연산자 ]
연습과제1>>
마일(mile)을 킬로미터(kilometer)단위로 바꾸는 프로그램을 작성해보자. (1개 이상 상수사용)
(단, 1mile = 1.609344 km)
[실행결과]
마일입력 : 3
3마일은 4.83킬로미터 입니다.
Press any key to continue
연습과제2>>
고객의 물건값과 지불액을 입력받아 거스름돈을 구하는 프로그램을 작성하여라.
단, 거스름돈 총액을 금액 단위별로 보여줘야 한다. (지불액이 물건값보다 작은 경우는 없다라고 가정한다.)
[실행결과]
물건값 입력 : 7120
지불액 입력 : 10000
--------------------------
거스름돈 : 2880
--------------------------
1000원 : 2개
500원 : 1개
100원 : 3개
10원 : 8개
--------------------------
Press any key to continue
[자료의 입출력]
연습과제1>>
문자 3개를 입력받아 문자에 해당하는 ASCII코드값을 출력하는 프로그램을 작성해보자.
[출력결과]
문자와 일치하는 ASCII코드값 검색
입력 1 : a
입력 2 : b
입력 3 : z
검색결과
문자 a == ASCII 97
문자 b == ASCII 98
문자 z == ASCII 122
Press any key to continue
연습과제2>>
원의 반지름을 입력받고 원 둘레와 원의 넓이 구하는 프로그램을 작성해보자. 소수점이하 2자리까지 표현한다. (원주율은 3.141592로 계산한다.)
[출력결과]
반지름을 입력 : 3
원 둘레 : 18.85
원 넓이 : 28.27
Press any key to continue
연습과제3>>
사다리꼴의 밑변, 윗변, 높이를 입력받아 넓이를 구하는 프로그램을 작성해보자.
소수점이하 2자리까지 표현한다.
[출력결과]
사다리꼴의 밑변 : 3
사다리꼴의 윗변 : 4
사다리꼴의 높이 : 5
------------------------------
사다리꼴의 넓이 : 17.50
Press any key to continue
연습과제1>>
A군은 한달에 기본급 150만원과 보너스 70만원을 받는다.
세금은 기본급의 10%이며, 실 급여액은 전체 급여에서 세금을 뺀 금액을 은행 계좌로 입금된다.
이때, A군의 통장으로 매월 입금되는 실 급여액을 출력하는 프로그램을 작성하여라.
[실행결과]
A군의 실급여액은 2050000원 입니다.
Press any key to continue
연습과제2>>
A군은 중간고사 시험에서 국/영/수 점수를 각각 92, 78, 65점을 받았다.
이때, A군의 총점과 평균을 구해 출력하는 프로그램을 작성해보자.. (단, 평균은 소수점 이하 2자리 출력)
[실행결과]
국어 영어 수학 총점 평균
92 78 65 235 78.33
Press any key to continue
예전에 C로 풀었었던 기본적인 문제를 C#으로 해보고자 합니다.
결과값과 실행 파일을 기준으로 프로그램을 새로 작성해 보는 방법입니다.
이제 시작하여 배우는 중이니 더 좋은 방법이나 다른 방법을 알려주신다면 감사하겠습니다 ^^
Microsoft에서 무료로 제공하는 C# 관련 기술 서적입니다.
05.txt
0401.exe