2020. 6. 18.

[방통대](c 프로그래밍) 기말고사 온라인대체



1. 배열과 포인터 ------------------------    2
 
2. ASCII, 평균, 구조체 구현 -----------    3
  
1. 배열 x[10]을 선언하고, x[0]에 1, x[1]에 2 … x[9]에 10을 대입한 후, 포인터를 사용하여 짝수 번 요소의 합과 홀수 번 요소의 합을 구하는 프로그램을 작성하시오.
#include <stdio.h>
 
void main()
{
int x[10], * ptr;
ptr = x;
int i = 0;
int sum = 0;
int sum_2 = 0;
 
// 배열의 값 넣기
for (i = 0; i < 10; i++)
{
x[i] = i + 1;
}
 
// 짝수 요소의 합
i = 0;
while (i < 10)
{
sum = sum + *(ptr + i);
i += 2;
}
 
// 홀수 요소의 합
i = 1;
while (i < 10)
{
sum_2 = sum_2 + *(ptr + i);
i += 2;
}
 
for (i = 0; i < 10; i++)
{
printf("x[%d] : %d \n", i, x[i]);
}
printf("짝수 요소의 합 : %d\n", sum);
printf("홀수 요소의 합 : %d\n", sum_2);
 
}



2-1 다음 프로그램은 대문자를 소문자로, 소문자는 대문자로 변환하는 프로그램이다. 대문자와 소문자의 ASCII 코드값의 차이를 이용한다. (교재 p168)
 
#include <stdio.h>
// 파일 포함 선행 처리기
#pragma warning(disable: 4996)
// 위험함수 오류 실행 방지 (scanf)
char upper(char ch);
// upper 함수 선언 소문자 -> 대문자
char lower(char ch);
// lower 함수 선언 대문자 => 소문자
void main()
// 메인 함수의 시작
{
char in_s[50], out_s[50];
// 입력받을 문자열 배열 선언
char ch;
// ch 변수 선언
int i = 0;
// i 변수에 0 을 담아 선언
printf("문자열을 입력하시오. (50자 이내) : ");
// 문자열 입력하시오 출력
scanf("%s", in_s);
// 키보드값을 입력받아 in_s 로 담는다.
ch = in_s[i];
// 입력받은 값을 ch에 담는다.
while (ch != '\0') {
// ch 가 공백이 아닐때까지 루프를 돕니다.
if (ch >= 'A' && ch <= 'Z')
// A ~ Z일 경우 if문안의 코드 실행
out_s[i] = lower(ch);
// lower 함수 실행하여 반환받은값을 out_s변수에 넣습니다.
else if (ch >= 'a' && ch <= 'z')
// a ~ z일 경우 else if 문안의 코드 실행
out_s[i] = upper(ch);
// upper함수 실행하여 반환받은값을 out_s변수에 넣습니다.
else
out_s[i] = ch;
// 그 외 값을 out_s 변수에 넣습니다.
i++;
// i를 증가시켜 다음 글자를 확인합니다.
ch = in_s[i];
// ch 변수에 담습니다.
}
out_s[i]='\0';
// 마지막에 문자열을 표시해주는 공백 표시를 넣습니다.
printf("변환된 결과 ==> %s \n", out_s);
// out_s를 출력합니다.
}
// 소문자를 대문자로 변환합니다.
char upper(char ch) {
return ch -= 32;
// 아스키코드 값을 - 함으로써 소문자를 대문자로 변환합니다.
}
// 대문자를 소문자로 변환합니다.
char lower(char ch) {
return ch += 32;
// 아스키코드 값을 + 함으로써 대문자를 소문자로 변환합니다.
}


2-2 다음은 n개의 실수를 키보들를 통해 받아들여 평균과 표준편차를 구하는 프로그램이다. 이때 표준편차 d=xi-avg이다. 여기서 I=1,2,...,n, xi는 각 원소, avg는 평균이다. (교재 p217)
 
#include <stdio.h>
// 파일 포함 선행 처리기
#pragma warning(disable: 4996)
// 위험함수 오류 실행 방지 (scanf)
void main()
// 메인 함수의 시작
{
int n, count;
// 숫자형 변수 n 과 count 를 선언
float avg, d, sum = 0;
// 실수형 avg, d 와 sum에 0을 담아서 선언
float list[100];
// 실수형 배열 list를 100칸짜리로 선언
printf("평균을 내고자 하는 데이터의 개수는?");
// 사용자에게 출력
scanf("%d", &n);
// 입력값을 받아 n에 저장
for (count = 0; count < n; ++count) {
// count 함수가 루프를 돌고 나서 1씩 증가하고 n보다 같을때까지 루프를 돕니다.
printf("i = %d x = ", count + 1);
// 카운터에 1을 추가하여 출력합니다.
scanf("%f", &list[count]);
// 실수를 입력받아 list 에 담습니다.
sum += list[count];
// list의 값을 sum에 담습니다.
}
avg = sum / n;
// sum에 담긴 값의 n으로 나눠 avg에 담습니다.
printf("The average is %5.2f \n", avg);
// 평균을 전체 5자리의 소수 두번째 자리까지 출력합니다.
 
for (count = 0; count < n; ++count) {
// count 함수가 루프를 돌고 나서 1씩 증가하고 n보다 같을때까지 루프를 돕니다.
d = 0;
// d를 초기화 해줍니다.
d = list[count] - avg;
// list의 담겨있는 각값에 평균을 뺀 값을 d에 담습니다.
printf("i=%d x = %5.2f d = %5.2f \n", count + 1, list[count], d);
// 각 입력된 값과 각 칸에 담긴 값과 표준편차를 출력합니다.
 
}
 
}


2-3. 다음은 구조체에 배열을 사용한 프로그램이다. (교재 p251)
 
#include <stdio.h>
// 파일 포함 선행 처리기
#pragma warning(disable: 4996)
// 위험함수 오류 실행 방지 (scanf)
 
struct entry {
// 구조체 entry 선언
char fname[20];
// 문자열 fname 변수 20칸 짜리로 선언
char lname[20];
// 문자열 lname 변수 20칸 짜리로 선언
char phone[10];
// 문자열 phone 변수 10칸 짜리로 선언
};
struct entry list[4];
// entry 구조체를 list 로 4칸으로 선언
int i;
// 변수 i선언
 
 
void main()
// 메인 함수의 시작
{
for (i = 0; i < 4; i++)
// 총 4번 루프를 돕니다. 총 네개의 정보가 입력됩니다.
{
printf("Enter first name : ");
// 첫번째 이름 입력하기 위해 사용자에게 출력
scanf("%s", list[i].fname);
// 첫번째 이름 입력받아 list 구조체의 fname 에 저장합니다.
printf("Enter last name : ");
// 마지막 이름 입력하기 위해 사용자에게 출력
scanf("%s", list[i].lname);
// 마지막 이름 입력받아 list 구조체의 lname 에 저장합니다.
printf("Enter phone number : ");
// 폰번호 입력하기 위해 사용자에게 출력
scanf("%s", list[i].phone);
// 폰번호를 입력받아 list 구조체의 phone 에 저장합니다.
printf("\n");
// 줄바꿈을 위한 출력
}
printf("\n");
// 줄바꿈을 위한 출력
for (i = 0; i < 4; i++)
// 총 4번의 루프를 돕니다. 총 네개의 정보가 출력됩니다.
{
printf("Name : %s %s", list[i].fname, list[i].lname);
// 첫번째 이름과 마지막 이름을 출력합니다.
printf("\t\tPhone : %s \n", list[i].phone);
// 핸드폰 번호를 출력합니다.
}
 
}



댓글 없음:

댓글 쓰기