- 다음 중 C#의 형변환으로 적합하지 않은 것을 고르시오.
int intValue = (int)1.4;
float floatValue = (float)"12.3";
float floatValue = 3;
int intValue = int.Parse("123");
double doubleValue = 3.14f;
해설 : string
을 의미하는 "~~"
의 경우 암시적 형변환이 불가능하다. 따라서 2번의 경우 명시적 형변환을 해야한다. float floatValue = float.Parse("12.3");
3,5번처럼 주어진 값보다 더 넓은 범위 해당하는 자료형에는 값을 바로 할당할 수 있다.
정답 : 2번
- 다음 코드의 출력을 적으시오.
enum Season
{
Spring, Summer, Autumn, Winter
}
static void Main()
{
Console.WriteLine((Season)21);
Console.WriteLine((Season)50);
}
해설 : enum
의 요소 중 대응되는 것이 없는 경우 단순히 입력한 정수가 출력된다.
정답 :
Winter
50
파트를 입력부와 출력부로 나누어, 각각을 조건에 맞게 작성했다.
입력부는 구현하고자 하는 함수의 매개변수 값을 사용자가 넣을 수 있도록 하고
출력부는 문제 조건에 맞는 함수를 구현했다.
- 주어진 문자열에서 특정 문자의 위치를 찾는 함수
Console.Write("문자열 입력 : ");
string text = Console.ReadLine();
Console.Write("확인할 문자 입력 : ");
char key = char.Parse(Console.ReadLine());
Console.WriteLine(FindKeyIndex(text, key));
public static int FindKeyIndex(string text, char key)
{
int count = 0;
foreach (char a in text)
{
if(a == key)
{
break;
}
count++;
}
if(count == text.Length)
{
count = -1;
}
return count;
}
문자열의 문자와 주어진 문자가 같은지 여부를 파악하는 반복문을 만들고 반복 횟수로 위치를 찾을 수 있도록 했다. 그리고 반복 횟수가 문자열 길이와 같으면 전부 비교할 동안 같은 문자가 없었다는 뜻이므로 문자열에 특정 문자가 없다는 의미로 -1을 출력하도록 했다.
- 주어진 숫자가 소수인지 아닌지 판별하는 함수
Console.Write("숫자 입력 : ");
int number = int.Parse(Console.ReadLine());
Console.WriteLine(IsPrime(number));
public static bool IsPrime(int number)
{
for(int i =2; i<number; i++)
{
if(number % i == 0)
{
return false;
}
}
return true;
}
주어진 숫자를 2부터 나누어서 나머지가 0인지를 확인했을 때, 하나라도 0이 되면 false 즉 합성수이고, 나머지가 전부 0이 아니면 소수이다. 이를 반복문으로 구현했다.
- 각 자리 수의 합을 구하는 함수
Console.Write("숫자 입력 : ");
int number1 = int.Parse(Console.ReadLine());
SumOfDigits(number1);
public static int SumOfDigits(int number)
{
int sum = 0;
if(number == 0)
{
sum += number % 10;
number /= 10;
}
return sum;
}
숫자를 10으로 나누는 과정을 num = p1 * 10 + q1
식으로 표현이 가능한데, 이때 p1 = p2 * 10 + q2
로 계속 반복하여 p가 0이 될때까지의 q를 더하면 각 자릿수의 합이 되므로 이를 반복문으로 구현했다.
- 주어진 두 배열의 공통항목을 찾는 함수
Console.Write("배열1 입력 : ");
string[] strarray1 = Console.ReadLine().Split(' ');
int[] array1 = new int[strarray1.Length];
for (int i = 0; i < strarray1.Length; i++)
{
array1[i] = int.Parse(strarray1[i]);
}
Console.Write("배열2 입력 : ");
string[] strarray2 = Console.ReadLine().Split(' ');
int[] array2 = new int[strarray2.Length];
for (int i = 0; i < strarray2.Length; i++)
{
array2[i] = int.Parse(strarray2[i]);
}
Console.Write("{ ");
foreach (int a in Common(array1, array2))
{
Console.Write($"{a}, ");
}
Console.Write("\b\b }");
public static int[] Common(int[] array1, int[] array2)
{
List<int> list = new List<int>();
for(int i = 0; i < array1.Length; i++)
{
for (int j = 0; j < array2.Length; j++)
{
if (array1[i] == array2[j])
{
list.Add(array1[i]);
break;
}
}
}
for(int i =0; i<list.Count; i++)
{
for(int j = i + 1; j< list.Count; j++)
{
if (list[i] == list[j])
{
list.RemoveAt(j);
}
}
}
return list.ToArray();
}
- 주어진 숫자와 가장 가까운 수를 구하는 함수
Console.Write("배열 입력 : ");
string[] strarray3 = Console.ReadLine().Split(' ');
int[] array3 = new int[strarray3.Length];
for (int i = 0; i < strarray3.Length; i++)
{
array3[i] = int.Parse(strarray3[i]);
}
Console.Write("숫자 입력 : ");
int number3 = int.Parse(Console.ReadLine());
Console.WriteLine(Close(array3, number3));
public static int Close(int[] array, int number)
{
List<int> list = new List<int>();
int differ;
for (int i = 0; i < array.Length; i++)
{
if(array[i] - number >= 0)
{
differ = array[i] - number;
list.Add(differ);
}
else
{
differ = number - array[i];
list.Add(differ);
}
}
return array[list.IndexOf(list.Min())];
}
- 주어진 배열에서 가장 많이 나타나는 숫자를 구하는 함수
Console.Write("배열 입력 : ");
string[] strarray4 = Console.ReadLine().Split(' ');
int[] array4 = new int[strarray4.Length];
for (int i = 0; i < strarray4.Length; i++)
{
array4[i] = int.Parse(strarray4[i]);
}
Console.WriteLine(ModeNum(array4));
public static int ModeNum(int[] array)
{
int mode = 0;
int count = 0;
for (int i = 0; i < array.Length; i++)
{
int temp = 0;
for (int j = 0; j < array.Length; j++)
{
if (array[i] == array[j])
{
temp++;
}
}
if (temp > count)
{
count = temp;
mode = array[i];
}
}
return mode;
}