삼각형C

박진은·2022년 5월 14일
0

C

목록 보기
4/9

삼각형 판단

  1. 과제물이고 문제가 삼각형이 되는지 아니면 안되고 되면 어떤 삼각형이 되는건지 판단하는 프로그램
#include <stdio.h>

void getInteger(int *a, int *b, int *c) {
    printf("삼각형의 세변의 길이를 입력하세요\n");
    scanf("%d %d %d", a, b, c);
}

void findorder(int a, int b, int c, int *big, int *mid, int *small) {

    if (a >= b && a >= c) {
        *big = a;
        if (b > c) {
            *mid = b;
            *small = c;
        } else {
            *mid = c;
            *small = b;
        }

    } else if (b >= c && b >= a) {
        *big = b;
        if (a > c) {
            *mid = a;
            *small = c;
        } else {
            *mid = c;
            *small = a;
        }
    } else if (c >= b && c >= a) {
        *big = c;
        if (b > a) {
            *mid = b;
            *small = a;
        } else {
            *mid = a;
            *small = b;
        }
    }
}

void tridicision(int big, int mid, int small) {

    if (big >= small + mid) {
        printf("삼각형이 불가능합니다\n");
    } else {

        if (big * big == mid * mid + small * small) {
            printf("직각삼각형입니다\n");
        } else if (big == small && small == mid) {
            printf("정감각형입니다\n");
        } else if (big == mid || mid == small || big == small) {
            printf("이등변삼각형입니다\n");
        } else {
            printf("일반삼각형입니다\n");
        }

    }
}

int main() {

    for (int i = 0; i < 5; i++) {
        int a = 0, b = 0, c = 0;
        int big = 0, m = 0, small = 0;
        getInteger(&a, &b, &c);
        findorder(a, b, c, &big, &m, &small);
        tridicision(big, m, small);
    }
}
  1. 사각형의 좌표를 받아서 포함되는 관계인지 판단하는 프로그램
#include<stdio.h>

#define URT_SECURE_NO_WARNINGS_

void getlocation(int *x, int *y, int *x1, int *y1) {
    printf("좌하단의 점을 입력하세요\n");
    scanf("%d %d %d %d", x, y, x1, y1);
    getchar();
}

void decision(int x, y, x1, y1) {
    if ((x < 50 && y < 50) && (x1 > 100 && y1 > 100)) {
        printf("사각형 A가 B에 포함됩니다\n");
    } else if (((x > 50 && x < 100) && (y < 100 && y > 50)) && ((x1 < 100 && x1 > 50) && (y1 < 100 && y1 > 50))) {
        printf("사각형 B가 A에 포함됩니다.\n");
    } else if (((x >= 50 && x <= 100) && (y >= 50 && y <= 100)) || ((x > 50 && x < 100) && (y1 > 50 && y1 < 100)) ||
               (x1 > 50 && x1 < 100) && (y1 > 50 && y1 < 100) ||
               (x1 > 50 && x1 < 100) && (y < 50 && y < 100)) {
        printf("사각형이 겹칩니다\n");
    } else {
        printf("사각형이 겹치지 않습니다\n");
    }
}

int main() {
    for (int i = 0; i < 5; i++) {

        int x = 0, y = 0, x1 = 0, y1 = 0;
        getlocation(&x, &y, &x1, &y1);
        decision(x, y, x1, y1);
    }
}

2.랜덤한 수 생성하는 방법

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
srand((unsigned)time(NULL));
  1. 숫자야구 푼거 진은아 제발
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void getUsersAnswer(int ulist[]);

void makeInteger(int *list);

int rungame(int ulist[], int rlist[]);

int main() {

    srand((unsigned) time(NULL));

    int count = 0;
    int rlist[3] = {0};
    int ulist[3] = {0};
    makeInteger(rlist);
    while (1) {
        count ++;
        getUsersAnswer(ulist);
        int result;
        result = rungame(ulist, rlist);
        if (result == 1) {
            printf("당신의 시도 횟수는 %d !!", count);
            char answer = 'a';
            printf("게임을 계속하시겠어요?\n");
            scanf(" %c", &answer);
            if (answer == 'y') {
                makeInteger(rlist);
                count = 0;
            } else {
                break;
            }
        }

    }

}

void makeInteger(int *list) {// 중복되지 않을 때까지 반복해서 생성한다.

    while ((list[0] == list[1] || list[0] == list[2] || list[1] == list[2])) {
        for (int i = 0; i < 3; i++) {
            list[i] = (int)rand()%10;
        }
    }
}

void getUsersAnswer(int ulist[]) {
    for (int i = 0; i < 3; i++) {
        printf("%d 번째 정수를 입력하세요\n", i);
        scanf("%d", &ulist[i]);
    }
}

int rungame(int ulist[], rlist[]) {

    int strike = 0, ball = 0;
    for (int i = 0; i < 3; i++) {
        for (int e = 0; e < 3; e++) {
            if ((ulist[i] == rlist[e]) && (i == e)) {
                strike++;
            } else if (ulist[i] == rlist[e]) {
                ball++;
            }
        }
    }
    printf("Ball: %d || strike: %d\n", ball, strike);
    if (strike == 3) {
        printf("축하합니다.\n");
        return 1;
    }
}
  1. 최비값이 시발롬
#include <stdio.h>

void getInteger(int list[][10]) {

    for (int i = 0; i < 10; i++) {
        printf("정수 %d 번째 정수를 입력하세요\n", i);
        scanf("%d", &list[0][i]);

    }
}

void findMost(int list[][10]) {

    for (int i = 0; i < 10; i++) {
        for (int e = 0; e < 10; e++) {
            if ((list[0][i] != -1) && (list[0][i] == list[0][e])) {
                if (i == e) {
                    list[1][i] += 1;
                } else {
                    list[0][e] = -1;
                    list[1][i] += 1;
                }

            }

        }
    }

    int mx = 0;

    for (int i = 0; i < 10; i++) {

        if (list[1][i] > mx) {
            mx = list[1][i];
        }
    }
    for (int i = 0; i < 10; i++) {

        if (list[1][i] == mx) {
            printf("최빈값 : %d,  갯수 : %d\n", list[0][i], list[1][i]);
        }
    }
}

int main() {
    int list[2][10] = {0,};
    getInteger(list);
    findMost(list);
}
  1. 실습과제 코드
#include <stdio.h>

int main() {

    printf("원의 반지름을 입력하세요\n");
    double r;
    double pi = 3.14;
    double area;
    double volume;
    double ball;
    double h;
    double surface;

    scanf("%lf", &r);

    printf("높이를 입력하세요\n");

    scanf("%lf", &h);
    area = r * r * pi;
    surface = area * 2 + 2 * pi * r * h;

    volume = area * h;
    ball = (double) 3 / 4 * pi * r * r * r;
    printf("원의 넓이 %lf 원기둥의 부피 %lf 원기둥의 겉넓이 %lf, 구의 부피 %lf", area, volume, surface, ball);

    //원기둥의 겉넓이와 부피, 구의 부피
}

실습과제 3

#include <stdio.h>

int main() {
    printf("돈을 입력하세요\n");
    int money;
    scanf("%d", &money);
    int list_m[7] = {50000,10000,5000, 1000, 100, 500, 50, 10};
    int list_c[7] = {0};

    for (int i = 0; i < 7; i++) {
        list_c[i] = money / list_m[i];
        money = money % list_m[i];
    }
    for (int i = 0; i < 7; i++) {
        printf(" %d권 : %d개 \n", list_m[i], list_c[i]);
    }
}

실습과제 4 정수의 각 자리수를 더해는 방법

#include<stdio.h>

int main() {

    int money;

    scanf("%d", &money);

    int sum = 0;

    while (money != 0) {
        sum += money % 10;
        money = money / 10;
    }
    printf("%d",sum);
}

정수를 거꾸로 출력하는 방법

#include<stdio.h>

int main() {

    printf("정수를 입력하세요\n");

    int num = 0;

    scanf("%d", &num);

    while (num != 0) {

        printf("%d", num % 10);
        num = num / 10;

    }
}

소수 찾는 방법

#include<stdio.h>

int main(){

    printf("정수를 입력하세요");
    int num = 0;

    scanf("%d",&num);

    for(int i=1; i<num; i++){
        int count = 0;

        for(int e = 1; e<num; e++){
            if (i% e == 0){
                count++;
            }
        }
        if(count == 2){
            printf("소수 : %d\n",i);
        }
    }
}
진은아 이거는 시험에 나오면 그래도 저 포문 범위를 잘봐야된다.

실습과제 2

i) a, b를 포함하여 그 사이에 존재하는 정수들의 합을 계산하여 그 결과를 반환하는 함수

ii) a, b를 포함하여 그 사이에 존재하는 정수들의 곱을 계산하여 그 결과를 반환하는 함수

iii) ak <= b를 만족하는 정수 k값 중 가장 큰 값을 구하여 그 결과를 반환하는 함수

#include<stdio.h>

int sum(int a, int b) {
    return a + b;
}

int mul(int a, int b) {
    int result = 1;
    for (int i = a; i < b + 1; i++) {
        result *= i;
    }
    return result;
}

int dtime(int a, int b) {
    int k = 1;
    int p = a;
    while (a <= b) {
        k++;
        a = p * a;
    }
    return k-1;
}
int main(){
    int a,b;
    printf("두 정수르 입력하세요\n");
    scanf("%d %d",&a,&b);
    printf("sum : %d\n",sum(a,b));
    printf("mul : %d\n", mul(a,b));
    printf("dtime : %d\n",dtime(a,b));
}

실습과제3

  1. 매개 변수를 통해 전달 받은 양의 정수가 소수인지의 여부를 판단하여 소수인 경우 1을 소수가 아닌 경우 0을 반환하는 함수 is_prime()을 작성하고, main()함수에서는 사용자로부터 임의의 양의 정수 n을 입력 받은 후 1부터 n 사이의 모든 소수를 출력하는 프로그램을 작성하시오. 특정 정수가 소수인지를 판단할 때 is-prime()함수를 사용할 것
#include<stdio.h>

int isprime(int a) {
    int count = 0;
    for (int i = 1; i < a + 1; i++) {
        if (a % i == 0) {
            count++;
        }
    }
    if (count == 2) {
        return 1;
    } else {
        return 0;
    }
}

int main() {
    int num =0;

    printf("정수를 입력하세요");
    scanf("%d",&num);

    for (int i = 0; i < num + 1; i++) {

        if (isprime(i) == 1) {
            printf("소수 : %d\n", i);
        }
    }
}

다음 문제는 풀때 제일 큰 인덱스와 가장 작은 인덱스를 찾아서 반환하는함수인데

#include<stdio.h>

void printArray(int *list) {
    printf("[");
    for (int i = 0; i < 5; i++) {
        if (i < 4) {
            printf("%d,", list[i]);
        } else {
            printf("%d", list[i]);
        }
    }
    printf("]\n");
}

void changeArray(int *list) {

    int max = list[0], min = list[0];
    int maxindex, minindex;
    for (int i = 0; i < 5; i++) {
        if (max < list[i]) {
            max = list[i];
            maxindex = i;//맥스일때의 인덱스를 변수에 저장
        }
        if (min >= list[i]) {
            min = list[i];
            minindex = i;//미니멈 일때의 인덱스를 변수에 저장      
  }
    }
    list[maxindex] = min;
    list[minindex] = max;

}
int findIndex(int value, int * list){
    for(int i =0; i< 5; i++){
        if(value == list[i]){
            return i;
        }
    }
}
int getIntegr(int* list){
    for(int i = 0; i< 5; i++){
        printf("정수를 입력하세여\n");
        scanf("%d",&list[i]);
    }
}
int main(){

    int list[5];

    getIntegr(list);
    printArray(list);
    changeArray(list);
    printArray(list);

    int user = 0;

    printf("정수를 입력하세요\n");
    scanf("%d",&user);
    printf("%d\n",findIndex(user, list));
    printArray(list);

}
void changeArray(int *list) {

    int max = list[0], min = list[0];

    int maxindex = 0, minindex = 0; 이 부분 추가 안해주면 오류가 발생할 수도 있다.

    for (int i = 0; i < 5; i++) {
        if (max <= list[i]) {
            max = list[i];
            maxindex = i;
        }
        if (min >= list[i]) {
            min = list[i];
            minindex = i;
        }
    }
    list[maxindex] = min;
    list[minindex] = max;

}

이 함수에서 주의해야 할점은 if (max <= list[i])if (min >= list[i]) 이 부분인데 이 부분을 작거나 같다 혹은 크거나 같다라고 안해줘서 if 문이 한번도 실행이 안되면 참사가 일어나서 디버깅해도 못찾는다 그니까 항상 이상하다 싶으면 0으로 초기화 해서 하용하는 것이 오류를 줄일 수있는 방법같다.

minindex = i;, maxindex = i;이 코드드를 작성하기 전에 먼저 나같으면 이 둘의 변수를 초기화 하는것이 안정적으로 오류를 줄일 수 있는 방식인거같다.

profile
코딩

0개의 댓글