1. 두 수 입력 후 큰 수 구하기
따라하기(1)
#include<stdio.h>
int main()
{
return 0
}
설명: 가장 기본적인 프로그램입니다. 반드시 오류를 찾아서 고치고 실행하시기바랍니다.
따라하기(2)
#include<stdio.h>
int main()
{
scanf("%d %d",&a,&b); //설명:키보드로 부터 입력받은 수를 각각 a, b 변수에 기억시킵니다.
printf("%d %d",a,b); //설명: a와 b 변수에 있는 값을 화면을 통해 출력합니다.
return 0;
}
설명: 이제 두 수를 입력받아 변수 a와b에 잘 입력되었는지 확인합니다.
따라하기(3)
#include<stdio.h>
int main()
{
int a,b,t;
scanf("%d %d",&a, b);
if(a>b)t=a; //설명: if()문에 참이면 a변수값을 t변수값에 복사합니다.
else t=b; //설명: if()문에 거짓일 경우 b변수값을 t변수값에 복사합니다.
printf("%d",t); //설명: t변수값을 출력합니다.
return 0;
}
//설명: if()문을 이용하여 큰수를 t변수에 입력합니다.
//오류발견하고 수정해서 입력하세요!
따라하기 (4)
#include<stdio.h>
int main()
{
int a,b,t;
scanf("%d %d",&a,&b);
if(a>b)t=a; else t=b; //설명: 위 프로그램을 한줄로 이어붙이기 하였습니다.
printf("%d",t);
printf("\n");
return 0;
}
//설명: 좀 다른 방법으로 표현하여 보보니다.
따라하기 (5)
#include<stdio.h>
int main()
{
int a,b;
scanf("%d %d",&a,&b);
if(a>b)b=a; //설명: if()문이 참이면 a의값을 b의 값으로 복사합니다.
printf("%d",b);
printf("\n");
return 0;
}
//설명: t변수를 사용하지않고도 큰수를 구할 수 있는 방법입니다.
따라하기 (6)
#include<stdio.h>
int main()
{
int a,b,t;
scanf("%d %d", &a, &b);
if(t<a)t=a; //설명: t변수값과 비교하여 a의 값을 t의 변수에 복사합니다.
if(t<b)t=b;
printf("%d", t);
printf("\n");
return 0;
}
설명: 위프로그램들과 좀 다르게 생각해 봅니다. 하지만 결과는 똑같습니다.
모든 경우의 방법으로 이해하고 있어야 합니다.
많은 학생들이 한가지 방법만 외우거나 고집하는 것은 컴퓨팅사고력을 만들 수 없습니다.
2. 세 수 입력 후 큰 수구하기
따라하기 (1)
#include<stdio.h>
int main()
{
int a,b,c,t;
scanf("%d %d %d", &a, &b, &c);
if(t<a)t=a;
if(t<b)t=b;
if(t<c)t=c;
printf("%d", t);
printf("\n");
return 0;
}
설명: 두수입력과 비슷합니다.
따라하기(2)
#include<stdio.h>
int main()
{
int a,b,c;
scanf("%d %d %d", &a, &b, &c);
if(a>b)b=a;
if(b>c)c=b;
printf("%d", b);
printf("\n");
return 0;
}
설명: 차이점이 이해가 됩니까?
여러가지 경우의 수로 입력하고 잘못된 부분을 수정하세요!
3. 최댓값 & 최솟값
따라하기(1)
#include<stdio.h>
int main()
{
int n, i, a, t=0;
scanf("%d", &n);
for(i=1; i<=n; i++){
scanf("%d", &a);
if(t<a) t=a;
}
printf("%d\n",t);
return 0;
}
설명: n개의 data를 입력받아 가장 큰수를 구하는 프로그램입니다.
따라하기(2)
#include<stdio.h>
int d[1004];
int main()
{
int n, i, a, m=0;
scanf("%d", &n);
for(i=1; i<=n; i++){ //i값을 1로 초기화시키고 i<=n 조건을 만족할동안 i값을 1씩 증가시키면서
scanf("%d", &d[i]);
} // 반복한다.
for(i=1; i<=n; i++){
if(m<d[i]) m=d[i]; //m값과 비교하면서 반복한다.
}
printf("%d\n", m);
return 0;
}
설명: 배열을 이용하여 가장 큰 수를 구할 수 있습니다.
따라하기(3)
#include<stdio.h>
int main()
{
int n, i, a, m=0;
scanf("%d", &n);
scanf("%d", &a);
m=a;
for(i=2; i<=n; i++){
scanf("%d", &a);
if(m<a) m=a;
}
printf("%d\n", a);
return 0;
}
설명: 첫번째 data를 무조건 m이라는 변수에 초기화시킵니다.
따라하기(4)
#include<stdio.h>
int main()
{
int n, i, a, m=0;
scanf("%d", &n);
scanf("%d", &m);
printf("%d, %d, %d\n", i, a, m);
for(i=2; i<=n; i++){
scanf("%d", &a);
if(m>a) m=a;
printf("%d,%d,%d\n", i, a, m);
}
printf("%d\n", m);
return 0;
}
설명: 각 프로그램의 차이점을 꼼꼼히 분석하고 오류를 찾아서 학습해야합니다.
모두 이해가 되었다면 컴퓨팅사고력 1단계를 통과하셨습니다.
4. 짝수 & 홀수
#include<stdio.h>
int main()
{
int
scanf("%d", &a);
if(a%2==0) printf("짝수\n");
else printf("홀 수\n");
return 0;
}
설명: 간단하지만 매우 중요합니다.
5. 몫 과 나머지
#include<stdio.h>
int main()
{
int a, b, mk, na;
scanf("%d %d", &a, &b);
mk= a/b;
na= a%b;
printf("%d %d\n", mk, na);
return 0;
}
설명: 모든 프로그램을 안보고 코딩할 때 다음 단계로 넘어가야 합니다.
6. 개수 구하기
#include<stdio.h>
int main()
{
int a, c=0;
dasi:
scanf("%d", &a);
c=c+1;
if(a != 0) goto dasi;
printf("%d\n",c);
return 0;
}
설명: 이 프로그램은 goto문을 사용하지않고 for문을 이용하여 다시 작성할 수 있어야 합니다.
7. 누적 합 구하기
#include<stdio.h>
int main()
{
int a, c=0, s=0;
dasi:
scanf("%d", &a);
c=c+1;
s=s+a;
if(a != 0) goto dasi;
printf("%d %d\n", c, s);
return 0;
}
설명: 이 프로그램은 goto문을 사용하지말고 while()문으로 바꿔서 다시 작성할 수 있어야 합니다.
8. 약수
#include<stdio.h>
int main()
{
int i, n; //----------------------------(1)
scanf("%d", &n); //--------------------(2)
for(i=1; i<=n; i++){ //-----------------(3)
if(n%i==0)printf("%d ",i); //--------(4)
} //-------------------------------(5)
return 0; //---------------------------(6)
}
|
실행
|
n
|
i
|
|
(1) int i, n; 변수 선언
|
|
|
|
(2) scanf("%d", &n); n=8 라고 가정하면
|
8
|
|
|
(3) i=1 초기화
|
8
|
1
|
|
(4) if(n%i==0)printf("%d ",i);
|
8
|
1 출력
|
|
(5) 반복 -> (3)이동
|
|
|
|
(3) i++; i=2로 증가
|
8
|
2
|
|
(4) 조건만족
|
8
|
2 출력
|
|
(3) i=3으로 증가, (4)조건 거짓
|
8
|
|
|
(4) if(n%i==0)printf("%d ",i);
|
|
3 출력 안함
|
|
(5) 반복
|
|
|
|
(3) i=4로 증가
|
8
|
|
|
(4) if(n%i==0)printf("%d ",i);
|
8
|
4 출력
|
|
i=5,6,7로 증가
|
|
5,6,7출력안함
|
|
(3) i=8로 증가
|
8
|
8
|
|
(4) 조건만족, i=9증가 후 반복 중단
|
8
|
8 출력
|
|
(6) return 0; 종료
|
|
|
설명: 약수의 원리를 이용하여 분석합니다.
그래도 모르면 동영상을 참고하세요!
9. 배수
따라하기 (1)
#include<stdio.h>
int main()
{
int i, n;
scanf("%d", &n);
for(i=1; i<=100; i++){
if(i%n==0)printf("%d ",i); // 설명: 조건을 만족할 경우만 출력
}
return 0;
}
따라하기 (2)
#include<stdio.h>
int main()
{
int i, n;
scanf("%d", &n); //설명: n=3이라면
for(i=1; i<=100/n; i++){ //설명: 1~100/3 반복 (1~100까지 수중 배수구하기)
printf("%d ",n*i); //3,6,9,12,15,18,21,24,27, ....... 출력
}
return 0;
}
// 설명: 배수를 더 빠르게 구할 수 있는 방법입니다.
따라하기 (3)
#include<stdio.h>
int main()
{
int i, n;
scanf("%d", &n);
for(i=n; i<=100; i+=n) printf("%d ", i);
return 0;
}
설명: 긱 프로그램들의 차이점이 보이나요? 결과는 같지만 실행시간 차이가 있습니다.
10. 소수 판별하기
#include<stdio.h>
int main()
{
int i, n, f;
scanf("%d", &n);
f=0;
for(i=2; i<=n-1; i++){
if(n%i==0) f=1;
}
if(f==0)printf("소수이다.\n");
else printf("소수가 아니다.\n");
return 0;
}
설명: 약수구하기를 응요하여 소수판별을 구할 수 있습니다.
2단계가 모두 이해가 되었다면 컴퓨팅사고력 2단계를 통과하셨습니다.
10번이상 반독복해서 충분히 이해하고 표현해야 합니다.
11.소인수분해
따라하기 (1)
#include<stdio.h>
int main()
{
int a, k;
scanf("%d", &a); // --------(1)
k=2; //------------------(2)
dasi: //------------------------(3)
if(a%k!=0){ //------------(4)
k=k+1; //---------(5)
goto dasi; //--------(6)
} //---------------------(7)
printf("%d ", k); //---------(8)
a = a/k; //------------(9)
if(a!=1)goto dasi; //-------(10)
printf("\n"); //-----------(11)
return 0; //--------------(12)
}
//분석: 만약엑 a=6라 하면
|
실행번호
|
a
|
k
|
|
(1)scanf("%d", &a);
|
6
|
|
|
(2)k=2;
|
6
|
2
|
|
(3)dasi: <- 문번호
|
|
|
|
(4) 6%2==0임으로 조건이 거짓임으로 (8) 이동
만약에 조건이 참이면 (5)이동
|
|
|
|
(8)printf("%d ", k);
|
6
|
2 (출력)
|
|
(9) a = a/k;
|
3
|
|
|
(10) 조건이 참이면 (3)이동
거짓이면 (11)이동
|
3
|
|
|
(3) <-문번호
|
|
|
|
(4) 3%2==1임으로 조건 참
|
3
|
|
|
(5)k=k+1;
|
3
|
3
|
|
(6) (3)이동
|
3
|
3
|
|
(3) <-문번호
|
3
|
3
|
|
(4) 조건이 거짓
|
|
|
|
(8)printf("%d ", k);
|
3
|
3(출력)
|
|
(9)
|
1
|
|
|
(10) 조건이 거짓임으로 (11)이동
|
|
|
|
(11) <-개행문자
|
|
|
|
(12) return 0; 종료
|
|
|
|
|
|
|
//설명: goto문을 이용해서 이해를 합니다.
// 반드시 임의의 수로 실험하면서 이해하기 바랍니다.
따라하기 (2)
#include<stdio.h>
int main()
{
int a, k;
scanf("%d", &a);
k=2;
while(1){
while(a%k!=0) k=k+1;
printf("%d ", k);
a = a/k;
if(a==1) break;
}
printf("\n");
return 0;
}
설명: goto문과 while()문의 차이를 이해하세요! 그리고 항상 틀린 프로그램을 고쳐서 실행하세요!
12. 2진수 구하기
따라하기 (1)
#include<stdio.h>
int d[1004]; //---------------(1)
int main()
{
int n, mk, na, c=0, i; //-----(2)
scanf("%d",&n); //---------(3)
while(1){ //----------(4)
mk=n/2; //----------(5)
na=n%2; //----------(6)
c++; d[c]=na; //-----(7)
n=mk; //------------(8)
if(n==0) break; //-----(9)
} //----------------------(10)
for(i=c; i>=1; i--) printf("%d",d[i]); //---(11)
return 0; //------------------(12)
} //-------------------------------(13)
|
실핼
|
n
|
mk
|
na
|
c
|
i
|
배열
|
|
(1) 배열 선언
|
|
|
|
|
|
|
|
(2) 변수 선언
|
|
|
|
0
|
|
|
|
(3) n = 6라고 가정하면
|
6
|
|
|
|
|
|
|
(4) 무조건 반복
|
6
|
|
|
|
|
|
|
(5) mk=n/2;
|
6
|
3
|
|
|
|
|
|
(6) na=n%2;
|
6
|
3
|
0
|
|
|
|
|
(7) c++; d[c]=na;
|
6
|
3
|
0
|
1
|
|
d[1]=0,
|
|
(8) n=mk;
|
3
|
|
|
|
|
|
|
(9) 조건이 만족하면 while()탈출
조건이 거짓이면 while() (4)반복
|
3
|
|
|
|
|
|
|
(5)
|
3
|
1
|
|
|
|
|
|
(6)
|
3
|
1
|
1
|
|
|
|
|
(7)
|
3
|
1
|
1
|
2
|
|
d[1]=0, d[2]=1,
|
|
(8) n=mk;
|
1
|
|
|
|
|
|
|
(9) 조건이 거짓임으로 계속 반복
|
|
|
|
|
|
|
|
(5), (6), (7)
|
1
|
0
|
1
|
3
|
|
d[1]=0, d[2]=1, d[3]=1
|
|
(8)
|
0
|
|
|
|
|
|
|
(9) if(n==0) break; 조건이 만족하면 (11)이동
|
|
|
|
|
|
|
|
(11) 출력(배열을 역순으로)
|
|
|
|
|
|
1 1 0 출력
|
|
(12) return 0; 종료
|
|
|
|
|
|
|
// 설명: 배열에 기억시키면서 반복합니다.
// c변수와 d[]배열의 값이 어떻게 기억되는지 분석하면서 학습합니다.
따라하기 (2)
#include<stdio.h>
int d[1004];
int main()
{
int n, c=0, i;
scanf("%d",&n);
while(n!=0){
c++; d[c]=n%2;
n=n/2;
}
for(i=c; i>=1; i--) printf("%d",d[i]);
return 0;
}