01. 화면과 같이 두 정수를 교환하도록 swap() 함수를 작성하고 결과가 나오도록 프로그램을 완성하시오.

#include <stdio.h>

void swap(int *x, int *y) {
	int temp;

	temp = *x;
	*x = *y;
	*y = temp;
}

int main() {
	int x = 10, y = 20;
	printf("swap() 호출 전 x=%d y=%d \n", x, y);
	swap(&x, &y);
	printf("swap() 호출 후 x=%d y=%d \n",x, y);
}

02. 화면과 같이 (1) str1, str2를 입력하면 (2) str1str2를 교환하고 (3) str3str2를 복사하고 (4) str3에 빈칸을 포함해서 str1"Computer Engineering"을 이어 붙이고 (5) str3str4로 뒤집어서 복사한 뒤 출력하는 프로그램을 string.h 함수들을 이용해서 완성하시오. len1 ~ len4 는 각각의 문자열의 길이 변수로 확인 차원에서 출력을 할 것. (주의: reverse() 함수는 문자열을 뒤집어 주기만 하며 그 안에서 프린트를 하지는 않는다. 한글 처리는 필요하지 않음)

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

void reverse(char *str1, char *str2) {
	int j = 0;
	for (int i = strlen(str2) - 1, j = 0; i >= 0; i--, j++)
		str1[j] = str2[i];
	str1[strlen(str2)] = NULL;
}


main() {
	char str1[100];
	char str2[100];
	char str3[200];
	char str4[100];
	char temp[100];
	int len1, len2, len3, len4;

	printf("(1) 입력 str1: ");
	scanf("%s", str1);
	printf("    입력 str2: ");
	scanf("%s", str2);

	strcpy(temp, str1);
	strcpy(str1, str2);
	strcpy(str2, temp);
	len1 = strlen(str1);
	len2 = strlen(str2);
	printf("(2) 교환 str1=%s str2=%s \n", str1, str2);
	printf("len1=%d len2=%d\n", len1, len2);

	strcpy(str3, str2);
	printf("(3) 복사 str3=%s\n", str3);
    
	strcat(str3, " ");
	strcat(str3, str1);
	strcat(str3, " ");
	strcat(str3, "Computer Engineering");
	printf("(4) 이어 붙이기 str3=%s\n", str3);
	len3 = strlen(str3);
    
	reverse(str4, str3);
	len4 = strlen(str4);
	printf("(5) 뒤집기 str4=%s\n", str4);
	printf("len4=%d", len4);
}

03. 12장 문자열 강의 자료 파일에서 lab: 메시지 암호화의 인코딩과 디코딩 함수를 모두 완성하기.

#include <stdio.h>
#include <string.h>

#define KEY 3

void secret(char* s) {
	int len = strlen(s);
	for (int i = 0; i < len; i++) {
		if (s[i] >= 'a' && s[i] <= 'z') {
			s[i] += KEY;
			if (s[i] > 'z')
				s[i] -= 26;

		}
	}
}

void desecret(char* s) {
	int len = strlen(s);
	for (int i = 0; i < len; i++) {
		if (s[i] >= 'a' && s[i] <= 'z') {
			s[i] -= KEY;
			if (s[i] < 'a')
				s[i] += 26;
		}
	}
}

int main() {
	char s1[100];
	char s2[100];

	printf("문자열을 입력하시오: ");
	gets_s(s1, sizeof(s1));
	secret(s1);
	printf("암호화된 문자열 출력: %s\n", s1);

	printf("암호화된 문자열을 입력하시오: ");
	gets_s(s2, sizeof(s2));
	printf("복호화된 문자열 출력: %s", s2);
}

// string 함수를 모두 mystrcpy() 식으로 변경
#include <stdio.h>
#include <string.h>
#include <mbstring.h>

char *mystrcpy(char *to, char *from)
{
	//int i, len;
	//len = mystrlen(from);
	//for (i=0;i<=len;i++)
	//	to[i] = from[i];
	char *p = to;
	while (*from)
		*to++ = *from++;
	*to = '\0';
	return p;
}
int mystrlen(char *str)
{
	int len = 0;
	//while (str[len]!='\0')
	//	len++;
	while (*str++)
		len++;
	return len;
	
	//char *p = str;
	//while (*p)
	//	p++;
	//return (p - str);
}
int mystrcmp(char *s1, char *s2)	// unsigned char(?) for 한글 등을 위해서...
{
	/*
	int len1, len2, i;
	len1 = mystrlen(s1);
	len2 = mystrlen(s2);
	for (i=0;i<=len1 && i<=len2;i++) {
		if (s1[i]>s2[i])
			return 1;
		else if (s1[i]<s2[i])
			return -1;
	}
	return 0;
	*/
	while ((unsigned char)*s1 || (unsigned char)*s2) {
		if ((unsigned char)*s1 > (unsigned char)*s2)
			return 1;
		else if ((unsigned char)*s1 < (unsigned char)*s2)
			return -1;
		s1++;
		s2++;
	}
	return 0;
}
char *mystrcat(char *to, char *from)
{
	//int i, len1, len2;
	//len1 = mystrlen(to);
	//len2 = mystrlen(from);
	//for (i=0;i<=len2;i++)
	//	to[i+len1] = from[i];
	char *p = to;
	while (*to)
		to++;
	while (*from)
		*to++ = *from++;
	*to = '\0';
	return p;
}
void reverse(char *to, char *from)
{
	char *p;
	p = from + mystrlen(from) - 1; // from 의 끝으로 이동
	while (p>=from) {
		if (*p & 0x80) { // 한글인 경우
			*to = *(p-1); // two bytes씩 copy
			*(to+1) = *p;
			to += 2; // two byte 씩 이동
			p -= 2;
		} else { // 영문인 경우
			*to = *p;
			to++;
			p--;
		}
	}
	*to = '\0';

}
void main()
{
	char str1[100] = "한성대학교";
	char str2[100] = "University";
	char str3[100] = "Computer";
	char str4[100] = "Engineering";
	char str5[100];
	char str6[100];
	int ret;

	ret = mystrlen(str1);
	printf("mystrlen(%s)=%d\n", str1, ret);
	ret = mystrcmp(str1, str1);
	printf("mystrcmp(%s, %s) = %d\n", str1, str1, ret);
	ret = mystrcmp(str1, str2);
	printf("mystrcmp(%s, %s) = %d\n", str1, str2, ret);
	ret = mystrcmp(str1, str3);
	printf("mystrcmp(%s, %s) = %d\n", str1, str3, ret);
	ret = mystrcmp(str1, "한일대학교");
	printf("mystrcmp(%s, %s) = %d\n", str1, "한일대학교", ret); 
	ret = mystrcmp(str1, "한강대학원");
	printf("mystrcmp(%s, %s) = %d\n", str1, "한강대학원", ret);
	ret = mystrcmp(str4, str2);
	printf("mystrcmp(%s, %s) = %d\n", str4, str2, ret);
	ret = mystrcmp(str2, str4);
	printf("mystrcmp(%s, %s) = %d\n", str2, str4, ret);
#if 1
	ret = strlen(str1);
	printf("strlen(%s)=%d\n", str1, ret);
	ret = strcmp(str1, str1);
	printf("strcmp(%s, %s) = %d\n", str1, str1, ret);
	ret = strcmp(str1, str2);
	printf("strcmp(%s, %s) = %d\n", str1, str2, ret);
	ret = strcmp(str1, str3);
	printf("strcmp(%s, %s) = %d\n", str1, str3, ret);
	ret = strcmp(str1, "한일대학교");
	printf("strcmp(%s, %s) = %d\n", str1, "한일대학교", ret);
	ret = strcmp(str1, "한강대학원");
	printf("strcmp(%s, %s) = %d\n", str1, "한강대학원", ret);
	ret = strcmp(str4, str2);
	printf("strcmp(%s, %s) = %d\n", str4, str2, ret);
	ret = strcmp(str2, str4);
	printf("strcmp(%s, %s) = %d\n", str2, str4, ret);
#endif

	mystrcpy(str5, str1);
	printf("mystrcpy str5 = %s\n", str5);
	mystrcat(str5, " ");
	mystrcat(str5, str2);
	printf("mystrcat str5 = %s\n", str5);

	reverse(str6, str5);
	printf("reverse %s = %s\n", str5, str6);
	reverse(str5, str6);
	printf("reverse %s = %s\n", str6, str5);
	printf("_strrev(%s) = ", str5);
	printf("%s\n", _strrev(str5));
	// reverse(str5, str6);
	printf("_mbsrev(%s) = ", str6);
	printf("%s\n", _mbsrev(str6));
}

 

01. 삼각형의 밑변과 높이를 실수 변수로 입력 받아 넓이를 구한 후 다음과 같이 소수점아래 두자리까지 출력하는프로그램을작성하시오. (cm²에서 위 첨자 ²입력은 키보드에서 ㅊ 입력하고 한자 키를 누르면위첨자를 선택할 수 있음)

#include <stdio.h>

int main() {
	float wd, ht;
	
	printf("밑변, 높이: ");
	scanf("%f %f", &wd, &ht);
	printf("밑변=%.2fcm, 높이=%.2fcm인 삼각형의 면적=%.2fcm", wd, ht, wd * ht * 0.5);
}

02. 화씨 단위의 온도를 실수로 입력받아 섭씨단위의 온도를 구하는 프로그램을 작성하시오. (화씨 온도 (F)를 섭씨 온도 (C) 로 변환하는 식은  C = (5 / 9) * (F - 32) 이다.) 

#include <stdio.h>

int main() {
	float ft, ct;

	printf("화씨온도(F)를 입력하세요. : ");
	scanf("%f", &ft);
	ct = 5. / 9 * (ft - 32);
	printf("화씨온도 %.1f의 섭씨온도는 %.1f입니다. \n", ft, ct);
	
	return 0;
}

03. 시, 분, 초를 정수로 입력 받아 화면과 같이초로 계산해서 출력하는 프록램을 작성하시오. (입력된 시, 분, 초,는 hh:mm:ss 형식으로 표시  mm:ss 에서 한자리 경우 앞에 0이 나와야 함)

#include <stdio.h>

int main() {
	int hh, mm, ss, sec;

	printf("시: "); scanf("%d", &hh);
	printf("분: "); scanf("%d", &mm);
	printf("초: "); scanf("%d", &ss);
	sec = hh * 3600 + mm * 60 + ss;
	printf("%d:%02d:%02d = %d초", hh, mm, ss, sec);

	return 0;
}

04. 화면과 같이 학생의 이름과 국어, 영어, 수학 점수를 실수로 입력 받아 총점과 평균을 화면과 같이 정렬이 되어 출력하도록 작성하시오. (단, 학생의 이름에 빈칸이 들어갈 수있으며, 총점과 평균을 총 6자리 소수점 이하 2자리까지 출력할 것)

(gets()와 gets_s() 둘다 사용할 줄 알아야함)

#include <stdio.h>

int main() {
	char name[40];
	double kook, young, soo, sum, avg;

	printf("이름: ");	gets(name); // gets_s(name, sizeof(name)); 도 가능
	printf("국어: ");	scanf("%lf", &kook);
	printf("영어: ");	scanf("%lf", &young);
	printf("수학: ");	scanf("%lf", &soo);
	printf("이름: %s\n", name);
	sum = kook + young + soo;
	avg = sum / 3;
	printf("총점 = %6.2f\n", sum);
	printf("평균 = %6.2f\n", avg);
}

05. 상점에서 돈을 지불하기 위해필요한 지폐와 동전을 구하는 프로그램을작성하시오. 화면과 같이 금액을 입력하면 5만원, 1만원, 5천원, 1천원, 500원, 100원, 50원, 10원, 5원, 1원의 순으로 구해서 출력한다. 

#include <stdio.h>

int main() {
	int money, cnt = 0, chg = 0, m_inx = 0;
	int m_units[] = { 50000,10000,5000,1000,500,100,50,10,5,1 };

	printf("금액을 입력 : ");	scanf("%d", &money);
	for (int i = 0; i < 10; i++) {
		cnt = money / m_units[i];
		money = money % m_units[i];
		switch (m_units[i]) {
		case 50000: printf("%5s: %d\n", "5만원", cnt); break;
		case 10000: printf("%5s: %d\n", "1만원", cnt); break;
		case 5000: printf("%5s: %d\n","5천원", cnt); break;
		case 1000: printf("%5s: %d\n","1천원", cnt); break;
		case 500: printf("%5s: %d\n", "500원", cnt); break;
		case 100: printf("%5s: %d\n", "100원", cnt); break;
		case 50: printf("%5s: %d\n", "50원", cnt); break;
		case 10: printf("%5s: %d\n", "10원", cnt); break;
		case 5: printf("%5s: %d\n", "5원", cnt); break;
		case 1: printf("%5s: %d\n", "1원", cnt); break;
		}
	}
}
#include <stdio.h>

int main() {
	int money, cnt = 0, chg = 0, m_inx = 0;
	int m_units[] = { 50000,10000,5000,1000,500,100,50,10,5,1 };
	char* per_units[] = { "5만원", "1만원", "5천원", "1천원", "500원", "100원", "50원", "10원", "5원", "1원" };

	printf("금액을 입력 : ");	scanf("%d", &money);
	for (int i = 0; i < 10; i++) {
		cnt = money / m_units[i];
		money = money % m_units[i];
		printf("%5s: %d \n", per_units[i], cnt);
	}
}

06. 사과가 한상자에 20개씩 들어간다고 할 때 사과수를 입력받아 필요한 상자수를 계산하는 프로그램을 작성하시오. 마지막 상자에는 적어도 사과 1개는 들어가게된다. ( Hint : /,%, 조건 연산자 사용)

#include <stdio.h>

int main() {
	int apple, box;
	printf("사과수 입력: ");	scanf("%d", &apple);
	box = apple / 20;
	box += (apple % 20) ? 1 : 0;
	printf("상자수 = %d \n", box);

}


07. 다음 프로그램은 연산자, ++, --, +=, -=, *=, /=, %= 등을 사용한 미완성 프로그램이다. 화면과 같이 출력 결과가 나오도록 빈칸 부분에 지시사항에서 주어진 연산자를 적절히 사용해서 프로그램을 완성하시오. 

#include <stdio.h>

int main() {
	int a = 5, b = 10, c = 15;
	printf("(1) a = %d, b = %d, c = %d\n", a += 2, b++, --c); // 7, 11, 14
	printf("(2) a = %d, b = %d, c = %d\n", a++, ++b, c--); // 8, 12, 13
	printf("(3) a = %d, b = %d, c = %d\n", a, b, c); 
	printf("(4) a = %d, b = %d, c = %d\n", (a+=2,a--), b -= 3, (c+=5,c--)); // 10,9,18
	printf("(5) a = %d, b = %d, c = %d\n", a, b, c); // 9 9 17
	printf("(6) a = %d, b = %d, c = %d\n", a*=3, b/=4, c%=16);
}
#include <stdio.h>

int main() {
	int a = 5, b = 10, c = 15;
	printf("(1) a = %d, b = %d, c = %d\n", a += 2, b++, --c); // 7, 11, 14
	printf("(2) a = %d, b = %d, c = %d\n", a++, ++b, c--); // 8, 12, 13
	printf("(3) a = %d, b = %d, c = %d\n", a, b, c); 
	printf("(4) a = %d, b = %d, c = %d\n", (a+=1)+1, b-=3, (c += 4)+1); // 10,9,18
	printf("(5) a = %d, b = %d, c = %d\n", a, b, c); // 9 9 17
	printf("(6) a = %d, b = %d, c = %d\n", a*=3, b/=4, c%=16);
}

08. 세 정수를 입력 받아 if 문 또는 조건 연산자를 사용하여 다음 프로그램을 하시오.

(1) 단계: 가장 큰 수(max)와 가장작은 수 (min)을 구해서 출력

(2) 단계: 세 수를 크기 순으로 출력 

#include <stdio.h>
#include <string.h>

int main() {
	int a, b, c, min, max, temp;
	printf("정수 세 개 입력 \n");
	scanf("%d %d %d", &a, &b, &c);

	max = (a > b && a > c) ? a : (b > c) ? b : c;
	min = (a < b && a < c) ? a : (b < c) ? b : c;

	if (a < b) {
		temp = a;
		a = b;
		b = temp;
	}
	if (a < c) {
		temp = a;
		a = c;
		c = temp;
	}
	if (b < c) {
		temp = b;
		b = c;
		c = temp;
	}
	printf("(1) max=%d min=%d \n", max, min);
	printf("(2) 크기순: %d %d %d", a, b, c);
}

 

01. 1 ~ 10까지 화면과 같이 출력하고 합을 구해서 추력하는 프로그램을

(1)  for 문 이용 (2) while 문 이용 (3) do ~ while 이용하여 작성하시오.

#include <stdio.h>

int main() {
	int stnum = 1, ennum = 10, sum = 0, n;
	
	printf("(1) for 사용 : ");
	for (int i = stnum; i <= ennum; i++) {
		printf("%d ", i);
		sum += i;
	}
	printf("sum=%d\n", sum);


	sum = 0;
	n = stnum;
	printf("(2) while 사용 : ");
	while (n <= ennum) {
		printf("%d ", n);
		sum += n;
		n++;
	}
	printf("sum=%d\n", sum);

	sum = 0;
	n = stnum;
	printf("(2) do ~ while 사용 : ");
	do {
		sum += n;
		printf("%d ", n);
		n++;
	} while (n <= 10);
	printf("sum=%d\n", sum);
}

02. oddsum1(n), oddsum2(n), oddsum3(n) 함수는 1 ~ n 까지 홀수만 더하여 그 값을 return 하는 함수이다. 주어진 main() 프로그램을활용하여 (1) ~ (4) 까지 완성하시오.

(1) for 문만 사용해서 oddsum1() 구현

(2) while 문만 사용해서 oddsum2() 구현

(3) 재귀함수로 oddsum3() 구현

(4) 구현한 oddsum1() 함수를 이용하여 다음의 합 SUM을 구하는 프로그램을 작성하시오

SUM = 1 + (1 + 3) + (1+ 3 + 5) + ............ + (1 + 3 + 5 + ..... + 99)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int oddsum1(int n) {
    int sum = 0;
    for (int i = 1; i <= n; i += 2) {
        sum += i;
    }
    return sum;
}

int oddsum2(int n) {
    int sum = 0, i = 1;
    while (i <= n) {
        sum += i;
        i += 2;
    }
    return sum;
}

int oddsum3(int n) {
    if (n < 1)
        return 0;
    else {
        if (n % 2 == 1)
            return n + oddsum3(n - 2);
        else
            return (n - 1) + oddsum3(n - 3); // return oddsum3(n-1); 도 가능
    }
}


int main() {
    int n = 100;
    int SUM = 0;
    int i;

    printf("(1) for oddsum1(%d) = %d\n", n, oddsum1(n));
    printf("(2) while oddsum2(%d) = %d\n", n, oddsum2(n));
    printf("(3) 재귀 oddsum3(%d) = %d\n", n, oddsum3(n));
    for (int i = 1; i <= n; i += 2) {
        SUM += oddsum1(i);
    }
    printf("(4) SUM = %d\n", SUM);
}

03. 다음과 같이 달력을 출력하는 프로그램을 작성하시오.

(Hint : 7, 14, 21, 28 출력하고 \ n을 출력 ==> if ( i % 7 == 0) printf("\n");)

1월 1일이 월요일이라고 가정하고 화면과 같이 월을 입력하면 그 달의 달력을 출력하는 프로그램을 작성하시오. (1월 ~ 12월 = 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)

#include <stdio.h>

int main() {
	int mdays[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
	int mm, day = 1, days = 0, month, date;

	printf("출력 월을 입력: ");
	scanf("%d", &month);

	mm = month - 1;
	while (mm) {
		days += mdays[mm - 1];
		mm--;
	}

	day = (days + 1) % 7;  //  1일의 요일 = ((그 전까지의 일 수) + (당일날)) % 7 

	printf("일 월 화 수 목 금 토 \n");
	for (int i = 0; i < day; i++)
		printf("   ");

	date = 1;
	for (int i = day; date <= mdays[month - 1]; i++, date++) {

		if (i % 7 == 0 && i != 0)
			printf("\n%2d ", date);
		else
			printf("%2d ", date);
	}
}

04. 다음 프록램과 출력 결과를 참조하여 화면과 같이 출력되록 프로그램 하시오.

#include <stdio.h>

int main() {
	char c1, c2;
	for (c1 = 'A'; c1 <= 'Z'; c1++) {
		for (c2 = 'A'; c2 <= c1; c2++) {
			printf("%c", c2);
		}
		printf("\n");
	}
}

 

 

 

 

 

(1)

 

#include <stdio.h>

int main() {
	char c1, c2;
	for (c1 = 'Z'; c1 >= 'A'; c1--) {
		for (c2 = 'Z'; c2 >= c1; c2--) {
			printf("%c", c2);
		}
		printf("\n");
	}
}

 

 

 

 

(2)

 

#include <stdio.h>

int main() {
	char c1, c2;
	for (c1 = 'Z'; c1 >= 'A'; c1--) {
		for (c2 = 'A'; c2 <= c1; c2++) {
			printf("%c", c2);
		}
		printf("\n");
	}
}

 

 

 

 

(3)

 

#include <stdio.h>

int main() {
	char c1, c2;
	for (c1 = 'A'; c1 <= 'Z'; c1++) {
		for (c2 = 'Z'; c2 >= c1; c2--) {
			printf("%c", c2);
		}
		printf("\n");
	}
}

 

 

 

 

(4)

#include <stdio.h>

int main() {
    for (char c1 = 'A'; c1 <= 'Z'; c1++) {
        int n = 'Z' - c1;
        for (int i = 0; i < n; i++)
            printf("%c", ' ');
        for (char c2 = 'A'; n < 26; n++, c2++)
            printf("%c", c2);
        printf("\n");
    }
}

 

 

 

 

 


 

#include <stdio.h>

int main() {
	for (char c1 = 'Z'; c1 >= 'A'; c1--) {
		int n = 'Z' - c1;
		for (int i = 0; i < n; i++) {
			printf(" ");
		}
		for (char c2 = 'A'; n < 26; n++, c2++) {
			printf("%c", c2);
		}
		printf("\n");
	}
}

+ Recent posts