✨ [C 프로그래밍 워크북 풀이]_1~8장

‍전희주·2023년 3월 12일

🧡 2장 WorkBook 풀이

🤍 2.1

#include<stdio.h>//전처리기 선언

int main() //main 함수는 C언어에서 없으면 안됨(진입점 함수)
{
	printf("든든한 C프로그래밍 !!!\n");//화면에 든든한 C프로그래밍!!!출력

	return 0;//프로그램 종료
}

🔽

🤍 2.2

#include <stdio.h>

int main()
{
	printf("든든한\n"); //\n이 줄 바꾸기 해줌
	printf("C프로그래밍 !!!"); //실행결과를 보면 \n가 필요없음

	return 0;

}

🔽

🤍 2.3

#include <stdio.h>

int main()
{
	printf("   *\n  ***\n *****\n");//스페이스바를 3,1,0개 순으로 넣고 \n으로 줄바꿈

	return 0;

🔽

🤍 2.4

#include <stdio.h>

int main()
{
	printf("  *  \n");//스페이스바 두번눌러야지 별이 가운데있음
	printf(" *** \n");//스페이스바 한번
	printf("**c**\n");//스페이스바 안눌러도 됨
	printf(" *** \n");
	printf("  *  \n");

	return 0;

}

🔽

🤍 2.5

#include <stdio.h>

int main()
{
	printf("든든한 ");//모니터에 출력
    FuncA();//함수호출
	printf("프로그래밍!!!\n");// 모니터에 출력

	return 0;
}

FuncA()//호출하는 함수
{
	printf("C ");
}

🔽

🤍 2.6

#include <stdio.h>

int main()
{
	FuncA();//함수A호출
	printf("C ");
	printf("프로그래밍");
	FuncB();//함수B호출

	return 0;
}

FuncA()//함수A
{
	printf("든든한 ");
}

FuncB()//함수B
{
	printf(" !!! \n");
}

🔽

🧡 3장 WorkBook 풀이

🤍 3.1

#include <stdio.h>

int main()
	{
		float height = 175.1;
		int salary = 3500000;//변수 선언 및 초기화 

		printf("성명: 홍길동 \n");
		printf("키(신장): %lf\n", height );//%lf는 부동소수점 
		printf("월급: %d", salary);

		return 0;
	}

🔽

🤍 3.2

#include <stdio.h>

#define TRUE 1// 매크로 상수는 실행 시 수정 불가
#define FALSE 0

int main()
{
	int true = 1; //변수는 수정 가능
	int false = 0;

	printf("TRUE: %d, FALSE: %d \n", TRUE, FALSE);//true면 1을 false면 0 표시
	printf("true:%d, false:%d \n",true,false);//true면 1을 false면 0 표시
	true = 2;//true는 2
	false = 3;//false는 3
	printf("true:%d, false: %d \n", true, false);true면 2를 false면 3 표시

	return 0;

}

🔽

🤍 3.3

#include<stdio.h>

int main()
{
	//변수 선언
	char gender;
	int age;
	float height;

	//데이터 입력
	printf("성별(남:m,여::w)?");
	scanf("%c", &gender);//문자'w,m'중 하나를 %c위치에 출력 //"&"연산자에 의해 변수가 할당된 메모리의 시작주소를 출력  

	printf("나이? ");
	scanf("%d", &age);//정수를 %d 위치에 출력 //"&"연산자에 의해 변수가 할당된 메모리의 시작주소를 출력  

	printf("키(신장)?");
	scanf("%f", &height);//실수를 %f 위치에 출력 //"&"연산자에 의해 변수가 할당된 메모리의 시작주소를 출력  

	printf("성별: %c, 나이:%d,키(신장): %f \n", gender, age, height);

	return 0;

}

🔽

🤍 3.4

#include<stdio.h>

int main()
{
	int over_time, time_sudang = 25000;
	int sudang;

	printf("잔업시간? ");
	scanf("%d", &over_time); //정수를 %d위치에 출력 //변수명 앞에 "&"무조건 필요

	sudang = over_time * time_sudang; //수당=오버타임 * 시간수당
	printf("잔업수당: %d \n", sudang); //잔업수당: 다음 수당 값나옴

	return 0;

}

🔽

🤍 3.5

#include<stdio.h>

#define USD 1100//달러
#define EUR 1350//유로
#define GBP 1500//파운드

int main()//진입점 함수
{
	int money;//변수 선언

	printf("환전할 원화 금액? ");//모니터에 "환전할 원화 금액?" 출력
	scanf("%d", &money);//주소연산자&money

	printf("\n달러 환전 : %d \n", money / USD);//money에 USD나누고 정수만 출력
	printf("유로 환전 : %d \n", money / EUR);//money에 EUR나누고 정수만 출력
	printf("파운드 환전 : %d \n", money /GBP);//money에 GBP나누고 정수만 출력

	return 0;//프로그램 종료

}

🔽

🤍 3.6

#include <stdio.h>
#include<limits.h >

int main()
{
	short int s1 = SHRT_MIN;//short의 최대보다 작은 수 할당
	short int s2 = SHRT_MAX;//short의 최대보다 큰 수 할당

	printf("s1 : %hd, s2: %hd \n", s1, s2);
	printf("s1-1 : %hd \n", s1 - 1); //언더플로우
	printf("s2+1 : %hd \n", s2 + 1); //오버플로우

	printf("\n현재 시스템의 C 컴파일러의 데이터 유형의 크기 : \n\n");

	printf("signed char :");-128~127까지 표현가능함
	printf("\t %d byte(%d bit)", sizeof(signed char), CHAR_BIT);signed char를 자료형의 크기를sizeof로 확인 몇 바이트인지 모니터에 출력
	printf("\t값의 범위 : %d 에서 %d까지의 값\n\n", CHAR_MIN, CHAR_MAX);
	printf("unsigned char :");//1바이트로 0~255까지 표현이 가능함
	printf("\t %d byte(%d bit)", sizeof(unsigned char), CHAR_BIT);//unsighend    char의 자료형의 크기를sizeof로 확인
	printf("\t값의 범위: %d 에서 %d까지의 값\n\n", 0, UCHAR_MAX);

	printf("signed short int :");//signed short int :모니터에 출력//메모리 크기는 2바이트 값 범위는 32768~32767까지 저장
	printf("\t %d byte ", sizeof(signed short));signed short의 크기 확인
	printf("\t값의 범위: %d 에서 %d까지의 값\n\n", signed short SHRT_MAX);//앞의 %d에는 signed short, 뒤%d에는 SHRT_MAX모니터에 출력

	printf("unsigned short int :");//2바이트 메모리 크기 0~65535까지 저장가능
	printf("\t %d byte ", sizeof(unsigned short));//unsigned short크기 확인
	printf("\t값의 범위: %d 에서 %d까지의 값\n\n",0 , USHRT_MAX);
	printf("signed int :");//4바이트 크기, -2^31~2^31까지 저장
	printf("\t %d byte ", sizeof(signed int));//signed int 크기 확인
	printf("\t값의 범위: %d 에서 %d까지의 값\n\n", INT_MIN, INT_MAX);
	printf("unsigned int :");//0~4294967295까지 저장가능
	printf("\t %d byte ", sizeof(unsigned int));unsigned int크기 확인
	printf("\t값의 범위:%d 에서 %u까지의 값\n\n", 0, UINT_MAX);

	return 0;
}//책에 실행결과와 다름 signed char :에 대해서 없음.
//책 처럼 값의 범위가 옆으로 나오려면 printf("\t %d byte \n ", sizeof(unsigned int));여기에서 "\n"를 지워줘야 함

🔽

🧡 4장 WorkBook 풀이

🤍 4.1

#include <stdio.h>

int main()
{
	int hour, min = 60, sec = 60;

	printf("시간 입력?");//모니터에 "시간 입력?" 출력
	scanf("%d", &hour);//&주소연산자

	printf("%d 시간은 %d 분, %d 초 \n", hour, hour * min, hour * min * sec);//시간=hour 값이 내려옴, min은 hour*min값 계산, sec은 hour*min*sec값 계산
	
	return 0;
}

🔽

🤍 4.2

#include <stdio.h>

int main()
{
	int ounce;

	printf("무게의 단위인 온스입력?");
	scanf("%d", &ounce);

	printf("%d 온스는 그램으로 %.2f gm \n", ounce, ounce * 28.349523);//%.2f는 소수점 2째자리 까지 구함//%d에 ounce들어가고 %.2f에 ounce * 28.349523계산
	printf("%d 온스는 리터로 %2f L \n", ounce, ounce * 28.349523 / 1000);//%.2f는 소수점 2째자리 까지 구함//%d에 ounce들어가고 %.2f에 ounce * 28.349523계산
	
	return 0;

}

🔽

🤍 4.3

#include <stdio.h>

int main()
{
	int n1, n2, n3, min;

	printf("세 수를 입력하세요? ");
	scanf("%d%d%d", &n1, &n2, &n3);

	printf("입력된 값 n1 : %d, n2 : %d, n3 : %d \n", n1, n2, n3);

	min = (n1 <= n2 ? n1 : n2);//A와 B에서 가장 작은수 뽑기
	min = (n3 <= min ? n3 : min);//B에서 A에서가장 작은수 뽑기

	printf("세 수 중 가장 작은 값: %d \n", min);

	return 0;

}

🔽

🤍 4.4

#include <stdio.h>

int main()
{
	int kor, eng, mat, sum = 0, rank;
	float avg;//avg를 float로 실수 범위로 지정 

	printf("국어, 영어, 수학 점수를 입력하세요? ");
	scanf("%d%d%d", &kor, &eng, &mat);//세수 입력(90,65,87)

	sum = kor + eng + mat;//kor + eng + mat합 계산
	avg = (float)sum / 3;//float형으로 변환
	rank = (avg >= 80 ? 1 : (avg >= 60 ? 2 : 3));//avg가 80이상이면 1, avg가 60이상이면 2 아니면 3

	printf("총점 : %d, 평균 : %.2f, 등급 : %d \n", sum, avg, rank);

	return 0;
}

🔽

🤍 4.5

#include <stdio.h>

int main()
{
	int x = 10, y = 20, tmp = 30;//int 형 변수 선언

	x++, ++y;//y먼저 1증가해서 21로 x는 후순위라 다음 줄에서 계산된다.
	tmp += x + y++;//x가 ++이 안 붙기 때문에 x 그대로 10이 내려오고 y값 21에서 y++이니까 21+1이 된다.(22) 그 후 10+22가 된 후 tmp에 더해지면 62가 된다.

	printf("x : %d, y : %d,tmp : %d \n", x, y, tmp);

	return 0
}

🔽

🤍 4.6

#include <stdio.h>

int main()
{
	double x, result;//double형 변수 선언

	printf("x ?");
	scanf("%lf", & x);//double형 변수를 &x에 저장

	result = 5 * x * x * x + 6 * x * x + 7 * x;//5x^3+6x^2+7x

	printf("result : %lf \n", result);

	return 0;
}

🔽

🤍 4.7

#include <stdio.h>

#define FEET 30.48//FEET 30.48 정의
#define YARD (FEET*3)//YARD (FEET*3)정의
#define INCH 2.54//INCH 2.54정의
#define CM 1//CM 1정의

int main()
{
	int cm, inch, feet, yard; //int형 변수 선언

	printf("길이의 기본단위인 야드(yard) 입력? ");
	scanf("%d", &yard);

	printf("%d yard는 feet로 %.2f \n", yard, yard * YARD / FEET);//대입수 2에 (FEET*3)/FEET 대입하면 피트 사라지고 2*3(%.2f로 인해 소수점 2자리 까지)
	printf("%d yard는 inch로 %.2f \n", yard, yard * YARD / INCH);//6*30.48/2.54계산하면 72.00(%.2f로 인해 소수점 2자리 까지)
	printf("%d yard는 cm로 %.2f \n", yard, yard * YARD / CM);//72*2.54=182.88(%.2f로 인해 소수점 2자리 까지)

	return 0;
}

🔽

🤍 4.8

#include <stdio.h>

int main()
{
	double d1, d2, d3, result;//double형 변수 선언

	d1 = 1.36e-5;      //식(1.36*10^-5)*(3.72*10^-8)/(5.124*10^7)에서 (1.36*10^-5)를  %e 라는 형식 지정자를 사용
	d2 = 3.72e-7;      //식(1.36*10^-5)*(3.72*10^-8)/(5.124*10^7)에서 (3.72*10^-8)를  %e 라는 형식 지정자를 사용
					   //책에서는 3.72e-8로 되있지만 책의 결과처럼 나오기 위해서는 3.72e-7로 변경해야함
	d3 = 5.124e+7;     //식(1.36*10^-5)*(3.72*10^-8)/(5.124*10^7)에서 (5.124*10^7)를  %e 라는 형식 지정자를 사용

	result = d1 * d2 / d3;

	printf("다항식의 결과 : %.30lf \n", result);//소수점30자리까지 나타냄
	printf("다항식의 결과 : %e \n", result);//%e는 5.124e+7처럼 형태 변환(형식 지정)

	return 0;
}

🔽

🧡 5장 WorkBook 풀이

🤍5.1

#include <stdio.h>

int main()
{
	int n = 4;

	switch(n)//n을 case 마다 바꿔준다.
	{case 1:n += 2;//1+2=3이므로 답이 아님
		break;
	case 2:n *= 2;//n=2일때 2*2=4이므로 답이 4가 나옴
			break;
	case 3: n /= 2;//3/2는 4가 아님
		break;
	}
	printf("n : %d \n", n);

	return 0;
}

🔽

🤍 5.2

#include <stdio.h>

int main()
{
	int qty, cost, result;

	printf("판매수량? ");
	scanf("%d", &qty);

		printf("단가? ");
	scanf("%d", &cost);

	if (qty * cost > 1000000)//qty*cost가 1000000초과이면
		result = qty * cost * 0.95;//qty*cost*0.95계산
	else//1000000초과가 아니라면
		result = qty * cost;//qty*cost값 계산

	printf("판매금액 : %d \n", result);

	return 0;
}

🔽

🔽

🤍 5.3

#include <stdio.h>

int main()
{int width, height, choice;

	printf("선택? (1:정사각형), 2:직사각형)?");//1번을 선택할 것인지 2번을 선택할 것인지 선택
	scanf("%d", &choice);//정수 입력

	if (choice == 1)//1번을 선택했다면
	{
		printf("한 변의 길이?");//한변의 길이 는?
		scanf("%d", &width);//정수입력(한변의 길이)
		printf("정사각형의 면적: %d \n ", width * width);//정사각형의 면적은 width * width로 계산
		printf("정사각형의 둘레의 길이: %d \n ", width * 4);//정사각형의 둘레는 width * 4로 계산
	}
	else//1번이 아닌 2번이 선택됬다면
	{
		printf("가로, 세로의 길이?");//가로, 세로 길이 는?
		scanf("%d%d", &width, &height);//두개의 정수 입력
		printf("직각형의 면적: %d \n ", width * height);//직각형의 면적은 width * height로 계산
		printf("직각형의 길이: %d \n ", (width + height)*2);//직각형의 길이는 (width + height)*2로 계산
	}
	return 0;
}

🔽

🔽

🤍 5.4

#include <stdio.h>

int main()
{	// 변수 선언 및 초기화 
	int Num, i, oddSum=0, evenSum=0;
    
    //데이터 입력 
    printf("정수 입력? %d", Num); 
    scanf("%d", &Num); 
    
    //반복문에서 홀수/짝수 누적합 구하기 
      for(i = 1; i <= Num; i++)
     {

          //짝수의 합
         if(i % 2 == 0)
              evenSum += i; // evenSum = i + evenSum 
               
         //홀수의 합
         else 
              oddSum += i;
     }

        printf("1부터 %d까지의 홀수의 합 = %d\n", Num, oddSum); 
   		printf("1부터 %d까지의 짝수의 합 = %d\n", Num, evenSum);
        
       return 0;
}
       
       

🤍 5.5

#include <stdio.h>

int main()
{
	char inputChar, Cn = 0;

	while (1)
	{
		printf("한 문자 입력? ");
		inputChar = getchar();//문자입력
		getchar();//엔터값 버림

		if (inputChar == 'q')//만약 q가 입력되면 중지
			break;

		if (inputChar >= 'A' && inputChar <= 'Z')//&&는 그리고 연산자임 그래서 A부터Z까지 대문자 확인
			++Cn;
	}

	printf("입력된 대문자 수: %d", Cn);

	return 0;
}

🔽

🤍 5.6

#include <stdio.h>

int main()
{
	int Num, tmp, base;

	printf("정수를 입력하시오: ");
	scanf("%d", &Num); //1234

	base = 1000;

	while (Num)
	{
		tmp = Num / base;//1234/1000를 나누면 1이 몫이고 234가 나머지 계산을 밑으로 내려서 계산
		printf("%5d 단위 값 : %d \n", base, tmp);//앞에 5자리 공백표시

		Num = Num % base;//1234/1000의 나머지 계산

		base = base / 10;//다음 자리수를 위해 10나눔//계속 반복
	}
	return 0;
}

🔽

🤍 5.7

#include <stdio.h>

int main()
{
	int choice, N, Sum = 0, i;

	printf("1. 1 부터 N까지의 합 \n");
	printf("2. 1 부터 N까지 홀수의 합 \n");
	printf("3. 1 부터 N까지 짝수의 합 \n");
	printf("Select? (1~3) ");
	scanf_s("%d", &choice);
	printf("N 값 입력? ");
	scanf_s("%d", &N);

	switch (choice)
	{
	case 1: for (i = 1; i <= N; i++)//i=1이면서 N보다 작거나 같을 때 i에 1씩 증가
		Sum += i;//Sum=Sum+i
		break;
	case 2: for (i = 1; i <= N; i++)//i=1이면서 N보다 작거나 같을 때 i에 1씩 증가
		if (i % 2 == 1)//i를 2로 나눴을때 나머지가 1이면 반복문에 2씩 추가
		Sum += i;
		break;
	case 3:for (i = 1; i <= N; i++)	//i=1이면서 N보다 작거나 같을 때 i에 1씩 증가
		if (i % 2 == 0)//2로 나눴을때 나머지가 0이면 반복문에 2씩 추가
			Sum += i;
		break;
	}

	printf("1 부터 %d 까지 %s 합: %d \n", N,(choice == 1 ? "" : (choice == 2 ? "홀수" : "짝수")), Sum);//1이면 공백을 아니면 다시 choice실행해서 2일때 true면 홀수 아니면 짝수 출력//3항 연산자임
	printf("End. \n");

	return 0;
}

🔽

🔽

🔽

🤍 5.8

#include <stdio.h>

int main()
{
	int choice, N, Sum = 0, i, stop = 1;

	while (1)
	{
		printf("\m1. 1 부터 N까지의 합 \n");
		printf("2. 1 부터 N 까지 홀수의 합 \n");
		printf("3. 1 부터 N 까지 짝수의 합 \n");
		printf("4. 프로그램 종료 \n");
		printf("Select? (1~4) ");
		scanf_s("%d", &choice);

		if (choice < 1 || choice>4)	 //1미만 또는 4초과 한쪽이라도 참일 경우 참
			continue;//반복

		if (choice == 4)//4이면 break
			break;//4이면 끝내기

		printf("N 값 입력? ");
		scanf_s("%d", &N);//정수 입력

		switch (choice)
		{
		 //각 메뉴에 해당되는 계산 루틴
		case 1:for (i = 1; i <= N; i++)//i가 1이고 N보다 작거나 같으면 i에 1씩 누적
			Sum += i;
			break;
		case 2: for (i = 1; i <= N; i++)//i가 1이고 N보다 작거나 같으면 i에 1씩 누적
			if(i%2==1) //i에 2로 나눴을때 나머지가 1이면 
				Sum+=i;//Sum=Sum+i
			break;
		case 3: for (i = 1; i <= N; i++)
			if (i % 2 <= 0)//i를2로 나눴을때 나머지가 0이면 
				Sum += i;
			break;
		}

		printf("\n 1 부터 %d까지 %s 합 : %d \n", N, (choice == 1 ? "" : (choice == 2 ? "홀수" : "짝수")),Sum);//1이면 공백 아니면 choice로 2이면 홀수 아니면 짝수
	}

	printf("End. \n");

	return 0;
}

🔽

🧡 6장 WorkBook 풀이

🤍 6.1

#include <stdio.h>

double salCalc(int sal);

int main()
{
	int salary = 2500000;//int형
	double result;//double형

	result = salCalc(salary); //salCalc함수호출 
	printf("월급: %d 의 5%% 성과급: %.2f \n", salary, result);//자식 함수로부터 반환 받은 값 출력, 소수점 2째자리까지 사용

	return 0;//종료
}

double salCalc(int sal)	 //더블형으로 반환
{
	return sal * 0.05;
}
//10->18->11 순으로 계산 18에서 계산 된 값을 그대로 result값으로 사용 

🔽

🤍 6.2

#include <stdio.h>

void binaryFunc(int bin);

int main()
{
	int num;//변수선언

	printf("양의 정수 입력? ");
	scanf_s("%d", &num);// 8입력

	binaryFunc(num);// binaryFunc함수 호출해서 bin/2 하면 4나옴

	printf("\n"); //줄띄우기 출력

	return 0;	//프로그램 종료
}

void binaryFunc(int bin)// 매게변수 없음
{

	if (bin) //만약 bin이라면 
	{
		binaryFunc(bin / 2);//bin이8 /2하면 4
		printf("%d", bin%2);//정수 출력
	}
}

🔽

🤍 6.3

#include<stdio.h>
#include<math.h>
double GetDistance(int x1, int x2, int y1, int y2); //함수선언

int main()
{
	double distance; //double형 
	int x1, x2, y1, y2;	//int형

	printf("첫 번째 좌표, x1,y1? ");//첫 번째 좌표, x1,y1?출력	  
	scanf_s("%d%d", &x1, &y1);//정수 두개 입력

	printf("두 번째 좌표, x2 ,y2? ");//두 번째 좌표, x2 ,y2?출력
	scanf_s("%d%d", &x2, &y2);//정수 두개 입력

	//함수호출과 반환 값 저장
	distance = GetDistance(x1, x2, y1, y2);	   //자식함수 호출(double GetDistance)
	printf("두 점 사이의 거리 : %lf \n", distance);

	return 0;
}

double GetDistance(int x1, int x2, int y1, int y2)//함수구현
{
	double dist; //double형 dist를 뽑아냄

	dist = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2); //이거 계산한 값을 17번 줄로 가져가서 계산

	return sqrt(dist);
}

🔽

🤍 6.4

#include <stdio.h>

//함수선언문
void Add(int n1, int n2);
void Sub(int n1, int n2);
void Mul(int n1, int n2);
void Div(int n1, int n2);

int main()
{
	int x, y, tmp, select, result;

	while (1)
	{
		printf("\n1. Add \n");		 //1.Add출력
		printf("2. Subtract \n");		 //2. Subtract출력
		printf("3. Multiplay \n");  //3. Multiplay출력
		printf("4. Divide \n");	  //4. Divide출력
		printf("5. End \n");	 //5. End출력
		printf("Select? ");		 //Select? 출력
		scanf_s("%d", &select);	   //정수 입력
		if (select == 5)		//5일때 함수 탈출
			break;

		printf("\n 두 정수를 입력하세요? ");
		scanf_s("%d%d", &x, &y);		 //정수 두개 입력

		if (x < y) //x가 작으면 x,y를 교환
		{
			tmp = x;//x를 tmp에 저장
			x = y; //y를 x에 저장
			y = tmp;//tmp를 y에 저장
		}
		switch (select)
		{
		case 1: Add(x, y); //case1일때 x, y를 더해라
			break;
		case 2: Sub(x, y); //case2일때 x, y를 빼라
			break;
		case 3: Mul(x, y); //case3일때 x, y를 곱해라
			break;
		case 4: Div(x, y); //case4일때 x, y를 나눠라
			break;
		}
	}
	return 0;//계산 종료
}

//함수 원형 작성
void Add(int n1, int n2)//출력의 원형 입력의 원형 출력은 따로 반환을 받을게 없으므로 void로 작성
{
	printf("%d+%d=%d \n", n1, n2, n1 + n2);
}
void Sub(int n1, int n2)
{
	printf("%d-%d=%d \n", n1, n2, n1 - n2);
}
void Mul(int n1, int n2)
{
	printf("%d*%d=%d \n", n1, n2, n1 * n2);
}
void Div(int n1, int n2)
{
	printf("%d/%d=%d \n", n1, n2, n1 / n2);
}

🔽

🤍 6.5

#include<stdio.h>
#include<ctype.h>

double celsiusFunc(char celsius, int tmp);//double형으로 반환을 받고 chr형과 int형의 입력을 받음

int main()
{
	char celsius; //char형 celsius
	int tmp;	//int형 tmp
	double out;	//double형 out

	do {
		printf("화씨이면 F, 섭씨이면 C 입력? ");
		scanf_s("%c%*c", &celsius);	 //문자입력
		celsius = toupper(celsius);//대문자로 변경하는 함수
	} while (celsius != 'F' && celsius != 'C');//celcius가 F나 C가 아니면 다시 입력 받는다.

	printf("%s 온도? ", celsius == 'F' ? "화씨": "섭씨") //celsius가F이면 화씨 아니면 섭씨
	scanf_s("%d", &tmp);   //정수 입력
	out = celsiusFunc(celsius, tmp);//celsiusFunc의 입력인자는 celsius, tmp가 되고 out으로 반환

	printf("\n%s를 %s로 변환: %.2lf\n", celsius == 'F' ? "화씨": "섭씨", celsius == 'F' ? "섭씨": "화씨", out);

	return 0;
}

//함수를 완성한다. 
double celsiusFunc(char celsius, int tmp)
{
	if (celsius == 'F')	  //만약 celsius가F이면 
		return(tmp + 32) / 1.8;	//tmp에 +32더하고 1.8을 나눈다.
	else					 //아니면
		return(tmp * 1.8) + 32;	  //tmp에 1.8을 곱하고 +32를 한다.
}

🔽

🤍 6.6

#include <stdio.h>

#define BMI1 "저체중"
#define BMI2 "표준체중"
#define BMI3 "과체중"
#define BMI4 "비만"

void BMI(int ageBase, float height, float kg);//함수선언

int main()
{
	float kg;	   //float형 kg
	float height;			  //float형 height
	double result; //double형 result
	int ageBase;   //int형 ageBase

	printf( "키(신장)를 입력하세요(m) ");
	scanf( "%f", &height);
	printf( "체중을 입력하세요(kg) ");
	scanf("%f", &kg);
	printf("연령대 선택? (1:20대,2:30대 이상) ");
	scanf("%d", &ageBase);

	BMI(ageBase, height, kg); //밑에 함수 불러오기

	return 0;  //종료
}
void BMI(int ageBase, float height, float kg)
{
	double bmi = kg / (height * height); //bmi계산법

	printf("당신의 BMI지수는 %.2lf, 비만기준: ", bmi);

	if (ageBase == 1) //ageBase가1이면
	{
		if (bmi < 18)  //bmi가 18을 넘으면
			printf("%s \n", BMI1);	 //	"저체중"출력
		else if(bmi < 24)
			printf("%s \n", BMI2);	 //"표준체중"출력
		else if(bmi < 31)
			printf("%s \n", BMI3);	 //"과체중"출력
		else
			printf("%s \n", BMI4);	//"비만"출력
	}
	else if (ageBase == 2)
	{
		if (bmi < 18.6)
			printf("%s \n", BMI1);  //	"저체중"출력
		else if (bmi < 26)
			printf("%s \n", BMI2);	//"표준체중"출력
		else if (bmi < 33)
			printf("%s \n", BMI3);  //"과체중"출력
		else 
			printf("%s \n", BMI4);	//"비만"출력
	}								 

}

🔽

🧡 7장 WorkBook 풀이

🤍 7.1

#include<stdio.h>
void game();

int main()
{
	int money = 15000;		//int형 money=15000

	game();
	printf("남은금액: %d \n", money);

	game();
	printf("남은금액: %d \n", money);

	return 0;
}

void game()
{
	
	printf("1시간 사용료 3000원 지출. \n");
	money -= 3000;	  //money=money-3000
}	

🤍 7.2

#include<stdio.h>
void game();

int money = 15000;	 //지역변수 값 저장

int main()
{
	

	game();
	printf("남은금액: %d \n", money);//전역변수 접근

	game();
	printf("남은금액: %d \n", money);//전역변수 접근

	return 0;
}

void game()
{

	printf("1시간 사용료 3000원 지출. \n");
	money -= 3000;	  //money=money-3000
}							   

🔽

🤍 7.3

#include<stdio.h>

int main()
{
	int i, sum = 0;
    for (i = 0; i <= 5; i++)//i=0부터5까지 1씩 증가
		sum += i;		    //sum=sum+i		//0+1+2+3+4+5=15
	printf("sum: %d \n", sum);

	{
		int i = 6, j = 10;

		for (; i <= j; i++)	//i가 j보다 작거나같으면 j까지 1씩증가
			sum += i;		//sum=sum+i	  //6+7+8+9+10=40+위에sum=15이므로 40+15=55
		printf("sum : %d \n", sum);
	}

	printf("i: %d, sum : %d \n", i, sum);

	return 0;
}

🔽

🤍 7.4

#include<stdio.h>

void salaryFunc(int salary);//
int main()
{
	int kimSalary = 1000, leeSalary = 1500, hanSalary = 2000, parkSalary = 2500, ukSalary = 3000;

	salaryFunc(kimSalary);
	salaryFunc(leeSalary);
	salaryFunc(hanSalary);
	salaryFunc(parkSalary);
	salaryFunc(ukSalary);

	return 0;
}

void salaryFunc(int salary)
{
	static int i = 0; //정적 변수 선언
	static float j = 0;

	i++;		   //i=1씩 증가
	j+= salary;	   //j=salary+j //1000+0=1000

	printf("직원 Count: %d, 월급: %d, 월급 평균: %.2f \n", i, salary, j/i);	 //정수 i출력, 위에 계산한 salary출력, j/i한 값 출력 
																	 //1500/6해야지 1250이 나오는데 도저히 이해가 안감...
}

🔽

🤍 7.5

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

void DiceGame();

int x, y;		   //변수선언

int main()
{
	int xResult=0, yResult=0, i;  //지역변수

	srand(time(NULL)); //난수 초기화time()은 1970년 1월 1일 부터 현재까지 경과된 시간은 초단위로 반환

	for (i = 1; i <= 5; i++)  //i는 1에서 5까지 1씩 증가
	{
		DiceGame();		 //게임호출
		
		xResult = xResult + x;	  
		yResult = yResult + y;

	}
		
	printf("x 누적: %d, y 누적 : %d \n", xResult, yResult);

		if (xResult > yResult)//xResult가 yResult보다 크면
			printf("X 사용자 승. \n");
		else if (xResult < yResult)//yResult가 xResult다 크면
			printf("Y 사용자 승. \n");
		else
			printf("X, Y 사용자 동점. \n");

		printf("\n");

		return 0;
}
void DiceGame()	 //함수구현
{
	x = (rand() % 6) + 1;//시작숫자에6을 나누고 +1한 값
	y = (rand() % 6) + 1;//시작숫자에6을 나누고 +1한 값//rand를 두 번하면 두 개의 난수 지정 가능
	printf("x : %d, y : %d \n", x, y);
}

🔽

🤍 7.6

#include<stdio.h>
#include<stdlib.h>
int deposit(int balance);	  //입금액을 받고 잔고 계산
int withdraw(int balance);	  //출금액을 입력받고 잔고 계산
void balanceOutput(int balance);  //잔고출력

int main()
{
	int balance = 0;  //전역변수
	int choice;		//전역변수

	while (1)
	{
		printf("\n1) 입금 \n");
		printf("2) 출금 \n");
		printf("3) 잔고조회 \n");
		printf("4) 종료 \n");

		do {
			printf(" 선택하세요?(1~4) "); //1~4까지 선택
			scanf("%d", &choice);
		} while (choice < 1 || choice>4);	//1~4사이 번호 선택시

		switch (choice)
		{
		case 1: 
			balance = deposit(balance);	//입금액을 받고 잔고 계산
			break;
		case 2: 
			balance = withdraw(balance);//출금액을 입력받고 잔고 계산
			break;
		case 3: 
			balanceOutput(balance);//잔고출력
			break;
		case 4: puts("프로그램을 종료합니다 ");//프로그램을 종료합니다를 출력
			exit(0);//exit(0);으로 빠져 나옴
		}
	}
	return 0;
}
int deposit(int balance)//반환을 int형 int형 balance를 입력 받음
{
	int money;

	printf("\n입금할 금액은? ");
	scanf("%d", &money);//기존 balance에 scanf의 money를 더해서 새로운 balance로 대체 //이게 return 되는 것임

	balance = balance + money;

	return balance;
}

int withdraw(int balance)//반환을 int형 int형 balance를 입력 받음
{
	int money;

	printf("\n출금할 금액은? ");
	scanf("%d", &money);
	if (money > balance)//만약 money가 balance보다 크다면
		printf("잔고 부족 \n");//잔고 부족 출력
	else//아니면
		balance = balance – money;//balance = balance – money;만큼 계산
	return balance;
}

void balanceOutput(int balance)//printf하고 끝나기 때문에 굳이 return 함수 안정하고 바로 void형태로 나옴
{
	printf("현재 잔고는 : %d 입니다. \n", balance);
}

🔽

🧡 8장 WorkBook 풀이

🤍 8.1

#include<stdio.h>

#define ST_SIZE 5

int main()
{
	int score[ST_SIZE];//정수형 1차원 배열선언
	int i, sum = 0;

	for (i = 0; i < ST_SIZE; i++)  //i는 0에서	ST_SIZE까지 1씩 증가	  5번
	{
		printf(" %d, 점수?", i + 1);//0+1해서 1번이 출력
		scanf(" %d", &score[i]);

		sum += score[i];  //sum=sum+score[i]
	}

	printf("\n 배열점수 : ");
	for (i = 0; i < ST_SIZE; i++)//ST_SIZE까지 1칸씩 채움0,0,0,0,0이렇게
		printf("%d, ", score[i]);
	printf("\n 성적평균: %.2f \n", (double)sum / ST_SIZE); //double형 sum/ST_SIZE를 소수점 2자리까지 출력 //float형 명시적 형 변환

	return 0;
}

🔽

🤍 8.2

#include <stdio.h>
int main()
{
	int numCn = 0, spaCn = 0, alphaCn = 0, i; //변수선언
	char str[100];

	printf("문자열 입력? ");
	gets(str, 100, stdin);//문자배열 입력함수

	for (i = 0; str[i] != NULL; i++)//0부터 NULL까지 1씩증가//문자열 끝까지 반복
	{
		if ((int)str[i] >= 48 && (int)str[i] <= 57)
			numCn++;//후위연산
		else if ((int)str[i] >= 65 && (int)str[i] <= 90 || (int)str[i] >= 97 && (int)str[i] < 122) //알파벳 //65보다 크거나 같을때 int형 배열을 스트링에 저장, 90보다 작거나 같을 때 또는 97보다 크거나 같고 122보다 작을때 저장
			alphaCn++;//후위연산//대문자A이상이거나 대문자 Z이하 또는 소문자a,z이하
		else
			spaCn++;//후위연산
	}
	printf("숫자: %d. 알파벳: %d, 기타문자:%d \n", numCn, alphaCn, spaCn);
	return 0;
}

🔽

🤍 8.3

#include<stdio.h>
int main()
{
	int x[] = { 10,20,30,40,50,60,70,80,90,100 }, y[20], i, size; //변수선언
	size = sizeof(x) / sizeof(int);//변수선언 //x의 크기/y의 크기 
	for (i = 0; i < size; i++) //i는 0부터 i가 size보다 작을때 까지 1씩 증가	//x배열 열수 계산
	{
		y[size - i - 1] = x[i];//x[i]가 y[size - i - 1]에 저장 //x배열원소 y배열에 역순으로 대입.
	}

	for (i = 0; i < size; i++)
		printf("x:[%d]: %d, y[%d]: %d \n", i, x[i],i, y[i]); //출력

	return 0;
}

🔽

🤍 8.4

#include <stdio.h>

int main()
{
	int score[10] = { 67,93,100,60,57,86,19,60,79,84 };	//int형 score칸에 10칸 배분 
	int i, findScore, sw; //선언

	printf("검색할 성적? ");
    scanf("%d", &findScore); //정수입력

	sw = 1;	 //sw가 1일때
	for (i = 0; i < sizeof(score) / sizeof(int); i++) //i가 0부터 sizeof(score) / sizeof(int)까지 1씩 증가//0부터 9까지 반복
	{
		if (score[i] == findScore)//score[i]가findScore와 같으면
		{
			sw++;//sw에 1씩 증가//검색되었을때 실행문
			printf("검색된 첨자 위치: %d,%d \n", i, findScore);
		}
	}
	if (sw == 1) //(sw == 1)이면
		printf("%d, Not found!! \n", findScore); //출력

	return 0;
}			  //60을 입력했을때 60의 위치가 0123456789의 위치에 있을때의 번호 출력

🔽

🤍 8.5

#include<stdio.h>

#define dNumSZ 5

int main()
{
	//배열선언
	double dNum[dNumSZ], tmp;
    int i, j;

	for (i = 0; i < dNumSZ; i++)
	{
		printf("%d, 실수 입력? ", i + 1);
		scanf("%lf", &dNum[i]);
	}

	printf("\n 입력된 dNum 배열 값 \n");
	for (i = 0; i < dNumSZ; i++)//배열 각각의 데이터를 입력 받음
		printf("%.2f, ", dNum[i]);
	printf("\n");

	for (i = 0; i < dNumSZ ; i++)
	{
		for (j = 0; j < dNumSZ; j++)
		{
			if (dNum[i] > dNum[j]);
			{
				tmp = dNum[i];//dNum[i]를 tmp에 저장
				dNum[i] = dNum[j];//dNum[j]를 dNum[i]에 저장 //맞바꿈
				dNum[j] = tmp;
			}
		}
	}
	printf("\n내림차순으로 정렬된 dNum 배열 값 \n");
	for (i = 0; i < dNumSZ; i++)
		printf("%.2f, ", dNum[i]);
	printf("\n");

	return 0;
	
}

🔽

🤍 8.6

#include<stdio.h>
#define NUM_SZ 10//매크로 상수 선언

int main()
{
	int Num[NUM_SZ] = { 56,900,-4,120,7,90,-64,209,711,10 };   //Num의 배열에  56, 900, -4, 120, 7, 90, -64, 209, 711, 10저장//배열초기화
	int i, j, maxIndex, minIndex;	//변수 선언

	maxIndex = minIndex = 0;//최대 최소 인덱스를 0으로 지정해둠

	for (i = 0; i < NUM_SZ; i++)//반복//0부터 
	{
		if (Num[i] > Num[maxIndex])	 //최대값을 비교할 if
			maxIndex = i;  //i를 maxIndex에 저장 //i를 maxIndex 로 치환
		if (Num[i] < Num[minIndex])	 //최소값을 비교할 if
			minIndex = i;  //i를 minIndex에 저장 //i를minIndex로 치환
	}
	printf("Num 배열 데이터 \n");
	for (i = 0; i < NUM_SZ; i++)  //배열을 나열 
		printf("%d, ", Num[i]);	 //Num[i]배열 출력
	printf("\n\n");
	printf("큰 값이 저장된 위치 : %d ,max : %d \n", maxIndex, Num[maxIndex]);
	printf("작은 값이 저장된 위치 : %d , min : %d \n", minIndex, Num[minIndex]);

	return 0;
}

🔽

🤍 8.7

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main()
{
	char star[50] = "", percent[50] = "", sharp[50] = "";//각각 배열에 50칸씩 배분 공백으로
	int s1 = 0, p = 0, s2 = 0, i, randNum; //변수 선언
	srand(time(NULL));//널 함수 초기화

	for (i = 1; i <= 50; i++)
	{
		randNum = rand() % 3;  //randNum은 rand()/3해서 나머지가 0~2일때 randNum에 저장 

		switch(randNum)
		{
			//난수값에 의해 배열에 문자 저장
		case 0:	  //0일때
			star[s1] = '*';	   //난수가 0일때 문자추가
			s1++;//하나를 더함 그래야 0일 때 한 개가 출력됨
			break;
		case 1:
			percent[p] = '%';  //난수가 11일때 문자추가
			p++;//하나를 더함 그래야 0일 때 한 개가 출력됨
			break;
		case 2:
			sharp[s2] = '#';  //난수가 2일때 문자추가
			s2++;//하나를 더함 그래야 0일 때 한 개가 출력됨
			break;
		}
	}
	printf("star   :%s,count: %d, \n", star, s1);  //문자출력,정수출력
	printf("percent: %s, count: %d, \n", percent, p);  //문자출력,정수출력
	printf("sharp  :%s, count: %d, \n", sharp, s2);	  //문자출력,정수출력

	return 0;	 //프로그램 종료
}

🔽

profile
heejoojeon@daou.co.kr

0개의 댓글