민트맛뚱이
kwangkwang우럭따
민트맛뚱이
전체 방문자
오늘
어제
  • 분류 전체보기 (16)
    • C (12)
    • C programming (2)
    • digital engineering (1)
    • machine learning (0)
    • Data communication (0)
    • signal processing (0)
    • computer architecture (RISC.. (0)
    • project (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
민트맛뚱이

kwangkwang우럭따

뚱이가 알려주는 소프트웨어

(C언어) 중간고사 전 과제들 - (3)
C

(C언어) 중간고사 전 과제들 - (3)

2022. 12. 17. 21:27

#1.  8진법

// 디토 8진법 나타내기

#include<stdio.h>
int main(){
	int a, i;
	printf("숫자 입력");
	scanf("%d", &a);n
	printf("%d", a/64);
	a%=64;
	printf("%d", a/8);
	a%=8;
	printf("%d", a);
}

8진법이라고 아시나요? 음 디지털공학을 배울 때 아니면 솔직히 몰라도 되긴하는데, 우리는 2진법, 8진법, 10진법, 16진법을 주로 사용하거든요. 그 중에서 8진법을 활용하는 코드로 야매코드에요. 너무 높은 숫자가 나오면 8진법처럼 사용 못 하니 참고만 하세요..


#2. 짝수, 홀수 구분

//21.(짝수 홀수를 구분 if)

#include<stdio.h>
int main(){
    int a;
    printf("홀수일까요 짝수일까요?");
    scanf("%d", &a);
    
    if(a%2==0&&a>=0) //짝수확인
{
	printf("짝수입니당");
}
    else if(a%2==1){ //홀수확인
	printf("홀수입니당");
}
    else
    printf("음수입니당");
}

if문을 통해 짝수와 홀수를 구분하는 코드인데,  나머지를 생각해서 코드를 구현하면 매우 편해요.


#3. 동전 세기

//22. (동전세기)

#include<stdio.h>
int main(){
	int a, b, c, d, e, f, g, h;
	printf("동전을 나누세요");
	scanf("%d",&a);
	
	b=a/500;
	f=a%500;
	c=f/100;
	g=f%100;
	d=g/50;
	h=g%50;
	e=h/10;
	
	printf("500원은: %d, 100원은 : %d, 50원은 : %d 10원은 : %d", b, c, d, e); 
	} 

//추가요소 돈을 입력받으면 500,100,50원으로 반환하는 예제

#include <stdio.h>

int main (void)
{
	int fivehun, onehun, fifty; // 500원 수, 100원 수와 50원 수를 저장할 변수 선언
	int a;	// 처음에 사용자에게 받은 금액을 저장할 변수 선언
	printf("Insert money please: ");	// 사용자에게 돈을 입력받음
	scanf("%d",&a);

	fivehun = a / 500;	// a에 저장된 금액을 500으로 나누어서 갯수를 저장
	onehun = a / 100;	// a에 저장된 금액을 100으로 나누어서 갯수를 저장 
	fifty = a / 50;		// a에 저장된 금액을 50으로 나누어서 갯수를 저장 

	// 값을 전부 구했으므로 출력함. 

	printf("\nI'll give you %d five hundred won coin", fivehun);
	printf("\nI'll give you %d one hundred won coin",onehun);
	printf("\nI'll give you %d fifty won coin",fifty);

	return 0;
}

솔직히 이 부분은 연산자에 대해 각인시켜주는 코드들입니다. 우리는 /, %에 차이점에 대해 주의해야할 필요가 있는거죠. 컴퓨터는 우리와 다르기 때문에, 컴퓨터만의 생각을 우리가 맞춰서 코딩해주어야한다는점을 꼭 유의하세요!


#4. 오름차순

//23. (무조건 낮은 수부터 나열)
#include<stdio.h>

int main(){
	int i, n, a;
	int arr[100];
    
	printf("몇개의 수를 입력하시겠습니까?\n");
        scanf("%d",&n);	
    
	for(i=0; i<n; i++)
	scanf("%d",&arr[i]);
	
	for(a=0; a<n; a++){ //a가 n번째될 때까지 반복
	for(i=0; i<n-1; i++){ //i가 i-1될 때까지 반복
	if(arr[i]>arr[i+1]){ //만약 arr[0]>arr[1]이라면 반대면 큰 수대로 나옴
	int t = arr[i+1]; //t라는 변수를 i+1 arr배열에 이동
	arr[i+1]=arr[i]; //arr[i+1]을 arr[i]에 이동
	arr[i]=t; //또한 arr[i]로 이동시켜 순서를 재배치 n번째까지 계속 반복
	}
}
}
    for(i=0; i<n; i++)
	printf("%d", arr[i]); //배열을 활용하여 나타냄
}

오름차순이라고 들어보셨나요? 우리가 배열을 배우고, 숫자들을 받으면서, 그 숫자들을 출력하는데 어떤 방식으로 출력할 것이냐!! 난 오름차순으로 하고싶어! 하면 이 코드를 쓰면 되죠? 오름차순이란, 점점 숫자가 올라가는 것이라고 생각하면 돼요. 숫자가 오름 ㅡ> 오름차순


#5. 거꾸로하는날

#include "stdio.h"
#include "string.h"	// strlen을 사용하기 위해 string.h 헤더 추가

main()
{
	char word[64];	// 단어를 입력받을 배열 선언

	printf("Insert word : ");		// 단어를 입력받음
	gets(word);
	
	int k= strlen(word);		// 문자열 word의 길이를 k에 저장

	for (int i=k-1 ; i>=0; i--)	// k번째 배열부터 거꾸로 출력
		printf("%c", word[i]);

	return 0;
}

 

scanf 객체에서 받은 배열 값들을 거꾸로 출력하면 되는거죠, 즉 output을 큰 값에서 작은 값으로 이동하면서 출력하면 됩니다~


#6. !

//25. (팩토리얼)

#include<stdio.h>
int main(){
	int a, b=1, i;
	
	printf("팩토리얼을 나타낼 수를 입력하시오 : ");
	scanf("%d", &a);
	
	for(i=1; i<=a; i++){
		b*=i; //팩토리얼
	}
	printf("%d! = %d", a, b);
}

팩토리얼이라고 기억나시나요?


#7. 최소, 최대

#26. (최솟값 최댓값 찾기)

#include<stdio.h>

int main(){
int a[3];
int i=0;
int m;
int M;
printf("3개의 정수를 입력하시오 : ");

for(i=0;i<3;i++)
{
scanf("%d",&a[i]);
}
m=a[0];
M=a[0];

for(i=0; i<3; i++){
if(m>a[i])
m=a[i];
if(M<a[i])
M=a[i];
}
printf("입력된 정수 중에서 최댓값 : %d\n",M);
printf("입력된 정수 중에서 최솟값 : %d\n",m);
}

3개의 정수를 입력받고 그 중에 최소, 최대를 찾으면 되는데 솔직히 방법은 되게 다양한데, 나는 누구다? 뚱이다~ 할 줄 몰랐어요 ㅋㅋㅋ 아니 어떻게 아냐고,,, 그냥 최대값이면 최대값이지,,, 여기서 사용하는 방법은 우리가 사용했던 대수비교 방법을 활용해도 되고 다른 방법! 숫자 3개를 비교한다? 일단 최소값을 넣을 변수 하나를 둡니다. 이를 0으로 두던가, 배열의 0번 째를 줍니다. 그리고 0번째를 통하여 배열들을 총 3번 비교하게 합니다. 그랬을 때, 들어온 배열의 수가 변수보다 작으면 변수에 그 배열의 수를 넣습니다. 그렇게 남은 배열을 반복한다면..!! 최솟값 완성! 하게 되는거지요


#8. 소수를 뽑고, 더해라!

//28. 소수를 뽑아서 더하기

#include<stdio.h>
int main(){
	int i, j, a;
	printf("수를 입력하시오 : ");
	scanf("%d", &a);
	
	for(i=2; i<=a; i++){
	if(i%2!=0 && i%3!=0 || i==2 || i==3){
	printf("소수 %d\n", i);
    j+=i;
	}
}
    printf("총합 : %d", j);
}

소수를 찾는 법은? 2와 3의 나머지가 0이 아니라면 소수입니다. 여러분 이거 개꿀팁 시험에도 자주 나옴.. 우리는 안 나오긴 했지만,, 근데 이를 활용하는 과제 문제는 많다는 것!


#9. bubble sort

//30. bubble sort 
#include<stdio.h>
int main(){
	int a[9]={99, 63, 20, 66, 14, 2, 10 , 1} ;
	int b, c, i;
	printf("숫자를 입력 : \n");
	
	for(c=0; c<10; c++){
	for(i=0; i<8; i++){
		if(a[i]<a[i+1]){
		b=a[i+1];
		a[i+1]=a[i];
		a[i]=b;
	}
	printf("%3d", a[i]);
	}
    printf("\n");
}
	for(i=0; i<8; i++)
	printf("%3d", a[i]);
}

제일 중요한 부분이에요.

bubble sort라고 버블정렬이라고 합니다. 구글에 정렬들이 진행되는 gif 모아둔거 검색해서 꼭 보세요


#10. selection sort

//31. selection sort
#include<stdio.h>
int main()
{
    int a[8] = {99, 63, 20, 66, 14, 2, 10, 1}; 
    int t, l;
    int i,j;

    for(i=0; i<7; i++)
    {
        l = i;
        for(j=i+1; j<8; j++){
            if(a[j] < a[l])
                l = j;
            }
        t = a[i];
        a[i] = a[l];
        a[l] = t;
 
    for(l=0; l<8; l++)
        printf("%d ", a[l]);
        printf("\n");
	}
    
    for(i=0; i<8; i++) printf("%d ", a[i]);
    return 0;
}

selection! 이란 뭔가 선택이죠! 우리는 최솟값을 우선 찾습니다. 그것을 selct 하죠! 그리고 값을 바꿔나갑니다. bubble sort 보다 효율적일 수도 있고, 아닐 수도 있는 정렬이라고 알 수 있습니다. 왜냐면, 최솟값을 제일 우선으로 찾고 그 값을 순차적으로 배열해, 최솟값에 들어있는 배열은 신경 안 써도 되기 때문인데 어짜피 최솟값을 찾으려면 비교를 하기 때문에 비슷합니당. 그리고 우측으로 넣어도 되고, 좌측으로 넣어도 되며, 이에 따라 오름차순 내림차순이 결정되는 구조로 알 수 있겠죠? 왜냐면 작은걸 우측으로 배열하면 내림차순, 우측으로 배열하면 오름차순이 되기 때문!


자 이까지 중간고사전까지 시험범위들을 리뷰해봤습니다. 

'C' 카테고리의 다른 글

(C언어) 기말고사 전 과제들  (1) 2022.12.17
(C언어) 모의중간고사, 중간고사  (1) 2022.12.17
(C언어) 중간고사 전 과제들 - (2)  (0) 2022.12.17
(C언어) 중간고사 전 과제들 - (1)  (0) 2022.12.17
(C언어) 중간고사 전 과제들  (0) 2022.12.17
    민트맛뚱이
    민트맛뚱이
    암 벅

    티스토리툴바