반응형

Chapter 11 1차원 배열

 

더보기

배열 int arr[7]는

int = 배열 자료형

arr = 배열 이름

[7] = 배열의 길이

 

로 구성되어 있다.


배열의 크기

int4byte 공간을 차지하기 때문에 int형태가 7개 있음으로 int arr[7]의 크기는 28byte이다.

 

배열 크기 확인법

sizeof(arr)를 이용하여 크기를 확인 할 수 있다.

 


배열 사용 이유

배열을 사용하면 다수의 변수를 간단하게 선언 할 수 있다.

 

또 반복문을 통해 내가 선언한 배열에 순차적으로 접근이 가능하다.

 

for(int I=0; I<7; I++)

arr[i]=10;

 

이렇게 하면 arr[0]~[6]까지 모든 배열에 10이 저장된다.


배열과 동시에 초기화

int arr[5] = {1,2,3,4,5};

int arr[] = {1,2,3,4,5,6,7}; // 이렇게 하면 arr[] 크기는 초기한 배열을 다 담을 수 있을 만큼 선언된다. 괄호 안에 숫자는 7이 된다.


문자열

 

char str[30] = “simple”;

s i m p l e \n                                      

                                                 ↑자동으로 Null 문자 삽입 뒤에도 전부 Null문자가 삽입된다.

 

 

 

길이가 13인 문자 Good morning!을 삽입 하기위해서는 14의 길이의 배열이 필요하다

G

o

o

d

 

m

o

r

n

I

n

g

!

\n

                                                                                               널문자는 문자열이 끝나는 걸 알려준다.

 

C언어가 문자열을 읽을때 배열의 첫번째 부터 첫번째 널문자까지를 문자열로 인식하기 때문에 널문자가 없으면 어디서 문자열을 끝내야 하는지 컴퓨터는 알 수 없다.

그렇기 때문에 입력하려는 글자+널문자 들어갈 공간이 필요하다.

 

만약 위 예제에서 

 

G

o

o

d

\n

m

o

r

n

I

n

g

!

\n

5번째 배열에서 널문자를 만났다면 Good까지만 출력 될 것 이다.

 

 

 

배열.hwp
0.04MB

반응형
반응형

도전 1

10진수를 입력받아 16진수로 출력해보자

#include <stdio.h>

int main()
{
	int A = 0;

	printf("정수를 입력하세요");
	scanf_s("%d", &A);

	printf("10진수 = %d / 16진수 %x", A, A);

	return 0;

}


 

 

도전 2

두개의 정수를 받아 구구단을 출력하는 프로그램 작성

3과 5을 입력하면 3~5단까지 출력 / 5와 3을 입력하던 3과 5를 입력하던 같은 결과를 출력

#include <stdio.h>



int main()
{
	int A = 0,B=0,temp=0;

	printf("정수를 입력하세요");
	scanf_s("%d %d", &A, &B);

	if (A > B)
	{
		temp = A;
		A = B;
		B = temp;

	}

	for (int i = A; i <= B; i++)
	{
		for (int j = 1; j <= 9; j++)
		{ 
			printf(" %d X %d = %d |", i, j, i*j);
		}
		
		printf("\n");
	}
	
	return 0;

}


 

 

도전 3

두 개의 정수를 입력받아 최대 공약수를 구하는 프로그램 작성

#include <stdio.h>

int main()
{
	int A = 0,B=0,max=0,temp=0;

	printf("두 개 정수를 입력하세요");
	scanf_s("%d %d", &A, &B);

	if (A > B)
	{
		temp = A;
		A = B;
		B = temp;

	}

	for (int i = 1; i <= B; i++)
	{
		if (A% i == 0 && B % i == 0)
		{
			max = i;
			
		}
		
		
	}
	printf("최대공약수 = %d", max);
	return 0;

}

유클리드 호제법을 이용한 최대공약수 구하기

 

#include <stdio.h>

int main()
{
	int A = 0,B=0,max=0,temp=0;

	printf("두 개 정수를 입력하세요");
	scanf_s("%d %d", &A, &B);

	if (A > B)
	{
		temp = A;
		A = B;
		B = temp;

	}

	while (A) {   
		temp = B % A;
		B = A;
		A = temp;
	}
	printf("최대공약수 = %d", B);
	return 0;

}


 

도전4

3500원으로 500원 크림빵 / 700원 새우깡 / 400원 콜라를 살 수 있는 경우의 수를 모두 출력하는 프로그램을 만들어라

#include <stdio.h> 


int main(void) { 

	int money = 3500;
	

	for (int i = 1; i <= money/500; i++)
	{
		for (int j = 1; j <= money/700; j++)
		{
			for (int k = 1; k <= money/400; k++)
			{
				if(3500%((500*i)+(700*j)+(400*k))==0)
					printf("%d개%d개%d개 \n", i, j, k);
			}
		}
	}
	

}


 

도전5

10개의 소수를 출력하는 프로그램을 작성해보자

 

내가 짠 코드

#include <stdio.h> 


int main(void) { 
	int i, cnt=1; 

	
	printf("2, 3, 5, 7");

	for(i = 10; cnt<=6; i++) 
	{
		if (i % 10 == 0)
			printf("\n");
		if (i % 2 != 0 && i % 3 != 0 && i % 5 != 0 && i % 7 != 0)
		{
			printf("%d ", i);
			cnt++;
		}
		
	} 
	return 0; 
}

인터넷에 있던 답지를 보고 다시 짜본 코드

#include <stdio.h> 


int main(void) { 
	
	int AB = 0;
	int A = 100;

	for (int i = 2; i <= A; i++)
	{
		int num = 0;

		for (int j = 1; j <= i; j++)
		{
			if (i % j == 0)
			{
				num++;
			}

		}
		if (num <= 2)
		{
			printf("%d ", i);

			AB++;
		}
		if (10 <= AB)
			break;
	}


}


 

 

도전6

프로그램 사용자로부터 초를 입력 받은 후에 이를 [시, 분, 초]의 형태로 출력하는 프로그램을 작성해 보자

#include <stdio.h> 


int main(void) { 
	int minute = 0;
	int hour = 0, second = 0;
	int A = 0;

	printf("초를 입력 : ");
	scanf_s("%d", &A);


	while(A)
	{
		if(3600 <= A)
		{
			hour += 1;
			A -= 3600;
		}
		else if (60 <= A)
		{
			minute += 1;
			A -= 60;
		}
		else
		{
			second = A;
			A = 0;
		}
	}
	printf("시 :%d / 분 : %d / 초 : %d", hour, minute, second);


}

 

 

도전7

2의 k승 <= n 공식이 성립하는 k의 최댓값을 계산하여 출력

 

#include <stdio.h> 


int main(void) { 
	int n;
	int k = 1, result = 1;;

	printf("상수 n을 입력하세요");
	scanf_s("%d", &n);

	while  (2 * result < n)
	{
		result *= 2;
		k++;
	}

	printf("k의 최댓값은 %d ", k );
}

 

도전8

2의 n승을 구하는 재귀함수

#include <stdio.h> 

int Re(int A);

int main(void) { 
	int n;
	int k = 1, result = 1;;

	printf("정수를 입력하세요");
	scanf_s("%d", &n);

	printf("2의 %d승은 %d", n, Re(n));

}


int Re(int A)
{

	if (A==0)
		return 1;
	else
		return 2 * Re(A-1);

}
반응형

'언어공부 > C언어' 카테고리의 다른 글

(Chapter 11) 1차원 배열 예제  (0) 2021.02.09
(Chapter 11) 1차원 배열  (0) 2021.01.07
다양한 함수 정의하기  (0) 2020.12.28
continue & break의 활용 예제  (0) 2020.12.27
( 열혈 C 프로그래밍) 조건문 예제  (0) 2020.12.25
반응형

 

문제1

3개의 정수를 인자로 전달받아 최대값 최솟값을 출력하는 함수를 정의해보자

#include <stdio.h>

int Maximum(int A, int B, int C);
int Minmum(int A, int B, int C);

int main()
{
	int A, B, C;


	printf("세가지 정수를 입력하세요");
	scanf_s("%d %d %d", &A, &B, &C);

	
	printf("최솟값 : %d / 최대값 : %d", Minmum(A, B, C), Maximum(A, B, C));
	return 0;

}

int Maximum(int A, int B, int C) {
	if (A > B)
		return (A > C) ? A : C;
	else
		return (B > C) ? B : C;
}

int Minmum(int A, int B, int C)
{
	if (A < B)
		return (A < C) ? A : C;
	else
		return (B < C) ? B : C;

}

 

 

문제 2

섭씨 온도를 입력하면 화씨 온도로 반환하는 CelToFah 함수와

화씨 온도를 입력하면 섭씨 온도로 반환하는 FahToCel 함수를 정의하자

#include <stdio.h>

double FahToCel(double Cel);
double CelToFah(double Cel);

int main()
{
	double A;
	int num;

	printf("입력할 온도가 섭씨온도이면 1 / 화씨온도라면 2 를 누르세요!");
	scanf_s("%d", &num);

	switch (num)
	{
	case 1:
		{
			printf("섭씨온도를 입력하세요");
			scanf_s("%lf", &A);


			printf("섭씨 온도 %.lf", CelToFah(A));
			break;
		}
	case 2:
		{
			printf("화씨온도를 입력하세요");
			scanf_s("%lf", &A);


			printf("화씨 온도 %.lf", FahToCel(A));
			break;
		}

	default:
		printf("1또는 2를 입력하세요");
		break;
	}


	return 0;

}

double CelToFah(double Cel)
{
	double Fah = 0;

	Fah = 1.8 * Cel + 32;

	return Fah;
}

double FahToCel(double Fah)
{
	double Cel = 0;

	Cel =  (Fah - 32.0)/1.8;

	return Cel;

}

 

 

 

문제3

인자로 전달된 수만큼의 피보나치 수열을 출력하는 함수를 정의해보자

#include <stdio.h>

int sum(int A);


int main()
{
	int A;


	printf("정수를 입력하세요");
	scanf_s("%d", &A);

	sum(A);

	return 0;

}

int sum(int A) 
{
	int first = 0;
	int second = 1;
	int sum = 0;
	if (A == 1)
		printf("%d", first);
	else
		printf("%d, %d, ", first, second);

	for (int i = 0; i < A-2; i++)
	{
		sum = first + second;
		printf("%d, ", sum);
		first = second;
		second = sum;

		
	}
	
	return 0;
}

반응형
반응형

break

break문이 감싸고 있는 가장 가까운 반복문에서 빠져나온다.

 

continue

for(int i=1; i <=20; i++)
{
	if(i==3|| i==5) 
    	continue;  //i가 3이나 5일때는 실행하지 않고 바로 i값을 증가시킨다
        
   	printf("%d ", i);
}

위 프로그램처럼 continue문은 조건이 일치하면 continue의 밑부분을 실해하지 않고 바로 반복문의 처음 부분으로 돌아간다.

 

 

문제 1

구구단을 출력하되 짝수 단만 출력하는 프로그램 2단은 2x2까지 ~ 8단은 8x8까지 출력 

 

내가 푼 정답

#include <stdio.h>

int main()
{
	for (int i = 1; i <= 9; i++)
	{
		for (int j = 1; j <= 9; j++)
		{
			if (i % 2 == 0 )
			{
				printf("%d * %d = %d ", i, j, i * j);
				
				if (i == 2 && j == 2) {
					printf("\n");break;
				}
				
				if (i == 4 && j == 4){
					printf("\n");break;
				}
				if (i == 6 && j == 6) {
					printf("\n");break;
				}
				if (i == 8 && j == 8) {
					printf("\n");break;
				}
			}
			
		}
	}

	return 0;

}

 

 

답안지의 답

#include <stdio.h>

int main()
{
	for (int i = 1; i <= 9; i++)
	{
		if (i % 2 != 0)
			continue;
		for (int j = 1; j <= 9; j++)
		{
			if (i < j)
				break;
			printf("%d X %d = %d ", i, j, i * j);
		}
		printf("\n");
	}

	return 0;

}

i가 짝수가 아닐때 밑에 연산을 무시하도록 continue를 사용해서 효율적으로 짰다. 조건문과 break를 사용해서 간단하게 짬


문제2

다음 식을 만족하는 모든 A와 Z를 구하는 프로그램을 작성해보자

AZ+ZA=99

#include <stdio.h>

int main()
{
	int result, cnt=0;
	for (int A = 0; A <= 9; A++)
	{
		for (int Z = 0; Z <= 9; Z++)
		{
			if (A == Z)
				continue;
			result = (A * 10 + Z) + (Z * 10 + A);
			if (result == 99)
			{
				cnt++;
				printf("%d%d + %d%d = %d  %d\n", A, Z, Z, A, result,cnt);
				
			}
		}
	}

	return 0;

}

if(A == Z) 후에 continue를 하는 이유를 모르겠다. 저 부분을 빼고 실행해도 결과는 같다.

A와 Z가 같을때 99가 나오는 경우가 없기때문에 연산을 줄일려고 하는건가?

반응형
반응형

문제1 

1이상 100미만의 정수 중에서 7의 배수와 9의 배수를 출력하는 프로그램을 작성해 보자. 단! 7의 배수이면서 동시에 9의 배수인 정수는 한번만 출력해야 한다.

 

#include <stdio.h>

int main()
{


	for (int i = 1; i <= 100; i++)
	{
		if (i % 7 ==0|| i % 9==0)
		{
			printf("%d ",i);
		}
	}
	
	return 0;

}

 

 


문제 2

두 개의 정수를 입력 받아서 두 수의 차를  출력하는 프로그램을 구현해 보자. 단, 무조건 큰 수에서 작은 수를 뺸 결과를 출력해야 한다. 예를 들어서 입력된 두 수가 순서에 상관없이 12와 5라면 7이 출력되어야 하고, 입력된 두 수가 순서와 상관 없이 4와 15이라면 12가 출력되어야 한다. 즉 출력결과는 무조건 0 이상이 되어야 한다.

 

#include <stdio.h>

int main()
{
	int A=0, B=0,result=0;

	printf("두가지 정수를 입력하세요! ");
	scanf_s("%d %d", &A, &B);
	
	if (A >= B)
		printf("%d-%d=%d", A, B, A - B);
	else
		printf("%d-%d=%d", B, A, B - A);


	return 0;

}

 


문제 3

학생의 전체 평균점수에 대한 학점을 출력하는 프로그램을 작성하자. 학생의 성적이 90점 이상이라면 A, 80점 이상이라면 B, 70이상 C, 50점 이상 D, 그 미만은 F!

프로그램 실행 시 순서대로 국어 영어 수학 점수를 입력 받는다. 그리고는 평균을 구한 다음 그에 적절한 학점을 출력하면 된다.

 

#include <stdio.h>

int main()
{
	int s = 0, s2 = 0, s3 = 0;
	double avg = 0;
	printf("국어점수를 입력하세요");
	scanf_s("%d", &s);
	printf("영어점수를 입력하세요");
	scanf_s("%d", &s2);
	printf("수학점수를 입력하세요");
	scanf_s("%d", &s3);

	avg = (s + s2 + s3) / 3;

	if (avg >= 90)
		printf("A");
	else if (avg >= 80)
		printf("B");
	else if (avg >= 70)
		printf("C");
	else if (avg >= 50)
		printf("D");
	else
		printf("F");
	

	return 0;

}

 

 


문제 4

문제 2번을 조건 연산자로 해결해보자

#include <stdio.h>

int main()
{
	int A = 0, B = 0, result = 0;

	printf("두가지 정수를 입력하세요! ");
	scanf_s("%d %d", &A, &B);

	result = A >= B ? A - B : B - A;
	
	printf("%d", result);
	

	return 0;

}
반응형
반응형

문제1

프로그램 사용자로부터 두 개의 정수를 입력 받아서, 두 정수를 포함하여 그 사이에 존재하는 정수들의 합을 계산해서 출력하는 프로그램을 작성해보자. 예를 들어서 3과 5가 입력되면 3+4+5의 결과가 출력되어야한다. 첫 번째 입력되는 정수보다 두번째 입력되는 정수가 더 커야 한다는 조건을 건다

#include <stdio.h>

int main()
{
	int A = 0,sum=0;
	int B = 0;

	printf("두 가지 정수를 입력하세요");
	scanf_s("%d %d", &A, &B);

	for(int i=A; i <= B; i++)
	{
		sum += i;
	}
	printf("%d부터 %d까지의 합은 %d", A, B, sum);

	return 0;

}

 

 


문제2

n!=1x2x3x........n

프로그램 사용자로부터 n에 해당하는 정수를 입력 받는다

#include <stdio.h>

int main()
{
	int A = 0,sum=1;

	printf("정수를 입력하세요");
	scanf_s("%d", &A);

	for(int i=1; i <= A; i++)
	{
		sum *= i;
	}
	printf("%d! = %d", A, sum);

	return 0;

}

 

 

while문 do while문으로 만든 반복문을 for반복문으로 재 구현해보자

 

7-1-1

#include <stdio.h>

int main()
{
	int A = 0;

	printf("양의 정수 입력");
	scanf_s("%d", &A);

	for(int i=0; i <  A; i++)
	{
		printf("Hello world %d\n", i+1);
	}
	

	return 0;

}

7-1-2

#include <stdio.h>

int main()
{
	int A = 0, num=0;

	printf("배수의 갯수");
	scanf_s("%d", &num);

	for(int i=3; i<= num*3; i=i+3)
	{
		printf("%d ", i);
	}
	

	return 0;

}

7-1-3

#include <stdio.h>

int main()
{
	int A = 1, sum=0;


	for(;A != 0;)
	{
		printf("정수입력(0 to quit)");
		scanf_s("%d", &A);
		sum += A;
	}
	printf("합계 : %d", A);

	return 0;

}

7-1-4

#include <stdio.h>

int main()
{
	int A = 1, sum=0;
	printf("출력할 단수 입력");
	scanf_s("%d", &A);

	for(int i=9; i>0; i--)
	{
		printf("%dx%d=%d\n", A, i, A*i);
	}

	return 0;

}

7-1-5

#include <stdio.h>

int main()
{
	int A = 1, B = 0, sum=0;
	printf("몇개의 정수를 입력할것인가?");
	scanf_s("%d", &A);
	int C = A;

	for(int i=1; i<=A; i++)
	{
		printf("\n%d번째 정수입력 (남은횟수 %d) :", i, C);
		scanf_s("%d", &B);
		sum += B;
		C--;
	}
	printf("정수 %d개의 평균 = %.2lf", A, (double)sum / A);
	return 0;

}

7-2-1

#include <stdio.h>

int main()
{
	int A = 1, B = 0, sum=0;
	int C = 5;
	int array[5];

	for(int i=1; i<=5; i++)
	{
	
		printf("\n%d번째 정수입력 (남은횟수 %d) :", i, C);
		scanf_s("%d", &B);
		array[i - 1] = B;

		for (;B < 1;)
		{
			printf("1미만의 숫자를 입력하면 안됩니다.");
			C++;
			i--;
			break;
		}
		
		C--;
	}

	for (int i = 0; i < 5; i++)
	{
		printf("array[%d]는 %d \n", i + 1, array[i]);
	}

	return 0;

}

7-2-2

#include <stdio.h>

int main()
{
	int A = 1, B = 0, sum = 0;


	for (int i = 1; i <= 5; i++)
	{

		

		for (; A < i; A++)
		{
			printf("o");

		}
		A = 1;
		printf("*\n");
	}


	return 0;

}

7-3-2

#include <stdio.h>

int main()
{
	int sum = 0;


	for (int i = 2; i <= 100; i+=2)
	{
		sum += i;
	}
	printf("합 : %d", sum);

	return 0;

}

7-3-3

#include <stdio.h>

int main()
{


	for (int i = 2; i <= 9; i++)
	{
		for (int j = 1; j <= 9; j++)
		{
			printf("%dx%d=%d  ", i, j, i * j);
		}
		printf("\n");
	}
	
	return 0;

}

 

반응형

+ Recent posts