문제

자연수 N이 주어졌을 때, N부터 1까지 한 줄에 하나씩 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 100,000보다 작거나 같은 자연수 N이 주어진다.

출력

첫째 줄부터 N번째 줄 까지 차례대로 출력한다.

예제 입력 1 복사

5

예제 출력 1 복사

5 4 3 2 1

출처

  • 문제를 만든 사람: baekjoon
  • 잘못된 데이터를 찾은 사람: rory143 

 

A

#include <stdio.h> 

int main()

{
	int num, sum = 0;
	scanf("%d", &num);
	for (int i = num; i > 0; i--) printf("%d\n", i);
	return 0;


}

'C_Language > one_day-one-cording' 카테고리의 다른 글

2438번: 별 찍기 -1  (0) 2019.12.11
11021번: A+B-7  (0) 2019.12.11
2741번: N 찍기  (0) 2019.12.09
8393번 :합  (0) 2019.12.09
10950번 A+B -3 문제!  (0) 2019.12.08

문제

자연수 N이 주어졌을 때, 1부터 N까지 한 줄에 하나씩 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 100,000보다 작거나 같은 자연수 N이 주어진다.

출력

첫째 줄부터 N번째 줄 까지 차례대로 출력한다.

예제 입력 1 복사

5

예제 출력 1 복사

1 2 3 4 5

출처

  • 문제를 만든 사람: baekjoon
  • 잘못된 데이터를 찾은 사람: rory143

 

#include <stdio.h>
void sum(int N)
{

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



int main()
{
	int N = 0;
	scanf("%d", &N);	
	sum(N); //구할 값 전달
	return 0;
}

'C_Language > one_day-one-cording' 카테고리의 다른 글

11021번: A+B-7  (0) 2019.12.11
2742번: 기찍 N  (0) 2019.12.10
8393번 :합  (0) 2019.12.09
10950번 A+B -3 문제!  (0) 2019.12.08
(2739)구구단  (0) 2019.12.07

문제

n이 주어졌을 때, 1부터 n까지 합을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 n (1 ≤ n ≤ 10,000)이 주어진다.

출력

1부터 n까지 합을 출력한다.

예제 입력 1 복사

3

예제 출력 1 복사

6

출처

Contest > Algorithmic Engagements > PA 2006 0-1번

#include <stdio.h>
void sum(int N)
{

	int sum = 0, i = 0;
	for (i; i <= N; i++)
	{
		sum += i;
	}
	printf("%d", sum);
}



int main()
{
	int N = 0;
	scanf("%d", &N);	
	sum(N); //구할 값 전달
	return 0;
}

 

문제

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다.

각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)

출력

각 테스트 케이스마다 A+B를 출력한다.

예제 입력 1 복사

5 1 1 2 3 3 4 9 8 5 2

예제 출력 1 복사

2 5 7 17 7

출처

#include <stdio.h>
void sum(int T)
{
	int A = 0, B = 0;
	for (int i = 0; i < T; i++)
	{
		scanf("%d %d", &A, &B);
		printf("%d\n", A + B);
	}
}



int main()
{
	int T = 0;
	scanf("%d", &T);	
	sum(T); //반복횟수 전달
	return 0;
}

 

문제

N을 입력받은 뒤, 구구단 N단을 출력하는 프로그램을 작성하시오. 출력 형식에 맞춰서 출력하면 된다.

입력

첫째 줄에 N이 주어진다. N은 1보다 크거나 같고, 9보다 작거나 같다.

출력

출력형식과 같게 N*1부터 N*9까지 출력한다.

예제 입력 1 복사

2

예제 출력 1 복사

2 * 1 = 2 2 * 2 = 4 2 * 3 = 6 2 * 4 = 8 2 * 5 = 10 2 * 6 = 12 2 * 7 = 14 2 * 8 = 16 2 * 9 = 18

 

 

 

출처 - https://www.acmicpc.net/problem/2739

 

2739번: 구구단

N을 입력받은 뒤, 구구단 N단을 출력하는 프로그램을 작성하시오. 출력 형식에 맞춰서 출력하면 된다.

www.acmicpc.net

 

#include <stdio.h>

int main()
{
	int i, num = 0;
	scanf("%d", &num);
	for (i = 1; i <= 9; i++)
	{
		printf("%d * %d = %d\n",num, i, num*i);

	}
	return 0;
}

 

문제

세 정수 A, B, C가 주어진다. 이때, 두 번째로 큰 정수를 출력하는 프로그램을 작성하시오. 

입력

첫째 줄에 세 정수 A, B, C가 공백으로 구분되어 주어진다. (1 ≤ A, B, C ≤ 100)

출력

두 번째로 큰 정수를 출력한다.

예제 입력 1 복사

20 30 10

예제 출력 1 복사

20

예제 입력 2 복사

30 30 10

예제 출력 2 복사

30

예제 입력 3 복사

40 40 40

예제 출력 3 복사

40

예제 입력 4 복사

20 10 10

예제 출력 4 복사

10

출처

#include <stdio.h>

void findSec(int num1, int num2, int num3)
{
	if (num1 > num2) //A가 가장 큰경우
	{
		if (num1 > num3)
		{
			if (num2 > num3)
			{
				printf("%d", num2);
			}
			else printf("%d", num3);
		}
		else if (num2 == num3)printf("%d", num2);
		else if (num1 == num3)printf("%d", num1);
		else printf("%d", num2);
	}
	else if (num2 > num3) { //B가 가장 큰경우
		if (num1 > num3)
		{
			if (num2 > num1)printf("%d", num1);
			else printf("%d", num2);


		}
		else if (num1 == num2)printf("%d", num1);
		else if (num1 == num3)printf("%d", num1);
		else printf("%d", num3);
	}
	else if (num3 > num1) { //C가 가장 큰경우
		if (num2 > num1)
		{
			if (num3 > num2)printf("%d", num2);
			else printf("%d", num3);
		}
		else if (num2 == num1)printf("%d", num1);
		else if (num3 == num2)printf("%d", num1);
		else printf("%d", num1);
	}


	else if (num1 == num2)
	{
		if (num1 > num3)printf("%d", num1);
		else printf("%d", num1);
	}
	else if (num2 == num3)
	{
		if (num1 > num2)printf("%d", num2);
		else printf("%d", num2);
	}
	else if (num3 == num1)
	{
		if (num3 > num2)printf("%d", num3);
		else printf("%d", num3);
	}
	else if (num1 == num2 && num2 == num3)
		printf("%d", num1);
}



void main()
{
	int A = 0, B = 0, C = 0;
	scanf("%d %d %d", &A, &B, &C);
	findSec(A, B, C);
}

 

반례.. 2 1 3 넣으면 틀리네요.. 곧 다시 수정하겠습니다.

'C_Language > one_day-one-cording' 카테고리의 다른 글

2742번: 기찍 N  (0) 2019.12.10
2741번: N 찍기  (0) 2019.12.09
8393번 :합  (0) 2019.12.09
10950번 A+B -3 문제!  (0) 2019.12.08
(2739)구구단  (0) 2019.12.07

안녕하세요 Stimpack 입니다.!  

#include <stdio.h>

void num(short pack)  //매개변수로 pack = stim 
{
	pack = 2 ;     // pack = 2로 생각으로는 stim에 2가 대입될것으로 생각

}



void main()	
{
	
    short stim = 4; 
    num(stim);  //num 함수 호출 매개변수로 stim 전달
    printf("%d",stim) ;  // stim은 4가 아닌 3이 출력!
}​

위에 간단한 예제를 만들어 봤습니다. 

 

c언어에서는 메모리를 직접 주소를 지정하거나 간접적으로 지정할수 있습니다. 

직접적으로 주소를 지정하는 방식은 우리가 흔히 만드는 변수를 정의하는 방법입니다. 

예를 들어 short stim= 4 라고 stim 변수를 초기화 했다면, 

(signed)short 크기의(2byte = 16bits) 자료형에 변수 stim이라는 이름의 공간입니다.

우리는 이 공간 속에 2byte 즉 -32,768 ~ 32,767 값을 넣을수가 있습니다.  (표현범위입니다..저는 저 값들이 다 들어가는줄 알았네요..)

즉 직접적으로 해당 변수 이름을 주면 언제든 그 주소를 호출할수 있습니다. 

 

하지만 함수 범위내에 있는 변수만 사용할수 있고 다른 함수는 호출할수 없습니다. (2번)

(지역변수이기 때문...)

#include <stdio.h>  //2번

void num(short pack)  //매개변수로 pack = stim 
{
	printf("%d", pack); //4 출력 값은 잘 전달받음 .
	pack = 2;     // pack = 2로 생각으로는 stim에 2가 대입될것으로 생각
	printf("%d", pack);  // 2 출력 재 초기화 완료!
}



void main()
{

	short stim = 4;
	num(stim);  //num 함수 호출  stim 값 전달( main함수를 호출자 , num을 피호출자라고한다.)
	printf("%d", stim);  // stim은 2가 아닌 4출력! num 함수에서 값 전달이 안된것을 확인.
}

이러한 문제에 대해 해결하기 위한 방법은 바로! 포인터를 사용하는 것 입니다. 

 

포인터란 하나의 변수를 그 변수가 대신 원하는 다른 변수의 주소의 값을 저장시키는 것 입니다.

즉 다른 변수(메모리)의 주소값을 저장하는 문법입니다. 

가리키는 대상의 자료형을 앞에 적고 다른 변수와 구분하기 위해 * 를 사용해주고 포인터 변수 이름을 적으면 됩니다. 

short * stimpack  short의 자료형 가진 변수를 가리키는 stimpack 이라는 포인터 변수를 만들었습니다.

( 보통 포인터 약자인 ptr이라고 많이 씁니다.)

#include <stdio.h>  //3번

void num(short *stimpack)  //short의 크기의 자료형을 가진 변수를 *stimpack이라는 포인터변수에 주소값을 저장하겠다. 
							//short *stimpack = &stim
{
	*stimpack = 1; //포인터 변수가 가리키는 주소의 값을 1로 바꾸겠다라는 뜻입니다.
}



void main()
{
	
	short stim = 4;
	num(&stim);  //num 함수 호출  stim 주소 값 전달(값이 아닌 stim의 주소값을 전달하겠다는 뜻.)
	printf("%d", stim);  // stim은 4가 아닌 1출력! 간접적으로 주소를 통한 값 변경이기 때문.
}

값이 잘 전달된 것을 확인할수 있습니다. 

포인터는 변수이고,(32bits 운영체제라면 주소값이 4byte이기 때문에 기본적으로 포인터변수 크기는 4byte)

변수이기 때문에 안에 값을 넣을수 있는데 주소값을 넣습니다. 

*stimpack 이라고 선언하면 stimpack 포인터 변수가 가리키는 변수의 값을 바꾸겠다.! 의미입니다. 

만약 stimpack 으로 선언하면 변수이기 때문에 포인터 변수가 가리키고 있는 주소의 값을 바꾸겠다는 뜻입니다. 

* stimpack과 stimpack은 다른 용도로 쓰입니다.

 

'C_Language' 카테고리의 다른 글

메모리 할당  (0) 2020.02.04
stimpack C언어 시작하기  (0) 2018.11.22


+ Recent posts