2011년5월18일...시리얼통신복습, C과제3풀이, C과제4
시리얼 통신 |
○ 시리얼 통신시 일치시켜 줘야하는 설정.
① 통신속도 (Baud rate)
② Data Size
③ Stop Bit
④ Parity Bit
○ ATmega128 ↔ PC, PC ↔ PC 둘 다 통신설정을 잘 맞춰줘야함.
○ ATmega128통신 관련 레지스터
① 통신제어
② 데이터
C과제3풀이 |
● 1번-4 ch는 대문자이다.
if(ch >= 65 && ch <= 90) 또는,
if(ch >= ‘A’ && ch <= ‘Z’) 문자를 넣어도 됨.
● 1번-5 ch는 소문자이다.
if(ch >= 97 && ch <= 122) 또는,
if(ch >= ‘a’ && ch <= ‘z’)
※소문자는 대문자보다 32가 많고, 대문자는 소문자보다 32가 적다.
● 2번…scanf(“%c”,&ch); → printf(“%d"\n”, ch);
한 개의 문자를 입력받아 정수형으로 출력.
● 3번…대문자 ↔ 소문자
1번조건을 사용해 대문자인지 소문지인지 판별하여 대문자이면 +32하여 소문자로 바꾸고,
소문자이면 -32하여 대문자로 바꿈.
● 4번…만약 1234가 입력되었다고 하면,
1234 / 10 → 결과가 0인지? 123이라 계속 나눔.
123 / 10 → 결과가 0인지? 12라 계속 나눔.
12 / 10 → 결과가 0인지? 1이라 계속 나눔.
1 / 10 → 결과가 0인지? 0이네 이제 그만하고 몇 번 나누었는지 출력하면 자릿수가 나옴.
1: cnt = 0;
2: while( num > 0 )
3: {
4: cnt = cnt + 1;
5: num = num / 10;
6: }
★코드 수정하여 자릿수의 합을 구해보자.
1: sum = 0;
2: cnt = 0;
3: while ( num > 0)
4: {
5: cnt = cnt + 1;
6: sum = sum + num % 10; //최하위 자리의 수를 추출해 sum에 저장.
7: num = num / 10; //최하위 자리 잘라냄.
8: }
● 5번...피보나치 수열
이를 코드로 표현하면,
1: //항의 합 계산
2: N0 = 0;
3: N1 = 1;
4: Sum = 0;
5:
6: for( i = 0 ; i < num ; i++)
7: {
8: Sum = Sum + N1;
9: N2 = N0 + N1;
10: N0 = N1;
11: N1 = N2;
12: }
13: //결과출력
14: printf("피보나치 수열 %d항의 합은 %d\n", num, Sum);
C과제4 |
<힌트?>
1: int i, j;
2:
3: for(i = 0 ; i < 3 ; i++)
4: {
5: for(j = 0 ; j < 4 ; j++)
6: {
7: printf("*");
8: }
9: printf("\n");
10: }
삼각형이나 미끄럼틀을 표시하려면 상기의 그림의 좌표를 참고하여 규칙을 찾아내면 된다.
1. 잘못된 부분을 찾아서 고쳐보세요.
1) if(N < 0);
N = 0;
답: if문 다음에 세미콜론이 있어 아무 일도 하지 않고 다음 명령 수행.
1: if(N < 0)
2: {
3: N = 0
4: }
2) if(N % 5 > 0)
N = (N % 5) * 5;
printf(“N = %d”, N);
답: if다음에 중괄호가 없음.
1: If(N % 5 > 0)
2: {
3: N = (N % 5) * 5;
4: printf(“N = %d”,N);
5: }
3) if(N % 2 == 0)
printf(“짝수”);
else(N % 2 == 1)
printf(“홀수”);
답: else문이 아니라 elseif문으로 해야함.
또는 else문 오른쪽에 조건식을 없애야됨.
1: if(N % 2 == 0)
2: {
3: pinrtf(“짝수\n”);
4: }
5: else
6: {
7: printf(“홀수\n”);
8: }
4) if(0 <= N <= 10)
N = 0;
답: if문에 조건식은 하나씩 따로 해야함.
1: if(0 <= N && N <= 10)
2: {
3: N = 0;
4: }
5) if(N = K)
N = M;
else
N = L;
답: if문 조건식에 대입연산자가 있어 항상 K의 값에 따라 K가 0이면 else문을 수행하고,
K가 0이 아니면 if문의 명령문을 수행.
1: if(N == K)
2: {
3: N = M;
4: }
5: else
6: {
7: N = L;
8: }
6) if(N ! = M);
N = M;
답: if문의 다음에 세미콜론이 있어 아무 일도 하지 않고 항상 다음 명령을 수행함.
1: if(N != M)
2: {
3: N = M;
4: }
2. 정수를 입력 받아 절대값을 출력하세요.
출력) 정수 입력 : –1
절대값 출력 : 1
정수 입력 : 2
절대값 출력 : 2
1: /******************************************************
2:
3: 2. 정수를 입력 받아 절대값을 출력하세요.
4:
5: 소속: 내장형하드웨어
6: 작성자: 김수만
7: 작성일자: 2011년 5월 18일
8:
9: ******************************************************/
10: #include <stdio.h>
11:
12: int main()
13: {
14: int iNum;
15:
16: printf("정수 입력: ");
17: scanf("%d", &iNum);
18:
19: if(0 > iNum) //음수이면
20: {
21: iNum = iNum * -1; //양수로 바꿈.
22: }
23:
24: printf("절대값 출력: %d", iNum);
25:
26: return 0;
27: }
99999999999를 입력한 경우 범위를 초과하여 엉뚱한 값이 출력되었음.
3. 문제에 나온 그림대로 출력하세요. (중첩 for문 사용)
1)
*
*
*
*
*
1: /******************************************************
2:
3: 3. 문제에 나온 그림대로 출력하세요. (중첩 for문 사용)
4: 1)
5: *
6: *
7: *
8: *
9: *
10:
11:
12: 소속: 내장형하드웨어
13: 작성자: 김수만
14: 작성일자: 2011년 5월 18일
15:
16: ******************************************************/
17: #include <stdio.h>
18:
19: int main()
20: {
21: int iRow;
22: int iCol;
23:
24: for(iRow = 0 ; 5 > iRow ; ++iRow)
25: {
26: for(iCol = 0 ; iRow > iCol ; ++iCol)
27: {
28: printf(" ");
29: }
30:
31: printf("*\n");
32: }
33:
34:
35: return 0;
36: }
2)
*
*
*
*
*
1: /******************************************************
2:
3: 3. 문제에 나온 그림대로 출력하세요. (중첩 for문 사용)
4: 2)
5: *
6: *
7: *
8: *
9: *
10:
11: 소속: 내장형하드웨어
12: 작성자: 김수만
13: 작성일자: 2011년 5월 18일
14:
15: ******************************************************/
16: #include <stdio.h>
17:
18: int main()
19: {
20: int iRow;
21: int iCol;
22:
23: for(iRow = 5 ; 0 < iRow ; --iRow)
24: {
25: for(iCol = 0 ; iRow - 1 > iCol ; ++iCol)
26: {
27: printf(" ");
28: }
29:
30: printf("*\n");
31: }
32:
33:
34: return 0;
35: }
4. 출력할 줄의 개수를 입력받은 후 직삼각형을 다음과 같이 출력하세요.
줄 개수 입력 : 5
*
* *
* * *
* * * *
* * * * *
1: /******************************************************
2:
3: 4. 출력할 줄의 개수를 입력받은 후 직삼각형을,
4: 다음과 같이 출력하세요.
5:
6: 줄 개수 입력 : 5
7: *
8: * *
9: * * *
10: * * * *
11: * * * * *
12:
13: 소속: 내장형하드웨어
14: 작성자: 김수만
15: 작성일자: 2011년 5월 18일
16:
17: ******************************************************/
18: #include <stdio.h>
19:
20: int main()
21: {
22: int iLine;
23: int iRow;
24: int iCol;
25:
26: printf("줄 개수 입력 : ");
27: scanf("%d", &iLine);
28:
29: for(iRow = 0 ; iLine > iRow ; ++iRow)
30: {
31: for(iCol = 0 ; iRow + 1 > iCol ; ++iCol)
32: {
33: printf("* ");
34: }
35:
36: printf("\n");
37: }
38:
39:
40: return 0;
41: }
5. 다음과 같은 형태로 문자열이 출력되는 프로그램을 작성하시오.
A
A B
A B C
A B C D
A B C D E
1: /******************************************************
2:
3: 5. 다음과 같은 형태로 문자열?
4: 출력되는 프로그램을 작성하시오.
5: A
6: A B
7: A B C
8: A B C D
9: A B C D E
10:
11: 소속: 내장형하드웨어
12: 작성자: 김수만
13: 작성일자: 2011년 5월 18일
14:
15: ******************************************************/
16: #include <stdio.h>
17:
18: int main()
19: {
20: int iLine = 5;
21: int iRow;
22: int iCol;
23: int iAlpha = 65;
24:
25: //printf("줄 개수 입력 : ");
26: //scanf("%d", &iLine);
27:
28: for(iRow = 0 ; iLine > iRow ; ++iRow)
29: {
30: for(iCol = 0 ; iRow + 1 > iCol ; ++iCol)
31: {
32: printf("%c\t", iAlpha + iCol);
33: }
34:
35: printf("\n");
36: }
37:
38:
39: return 0;
40: }