Taek

7. Programming Projects 본문

C언어/문제 정리

7. Programming Projects

Taeky 2018. 8. 10. 15:55

1. 

#include <stdio.h>


int main(void)

{

    long i , n;


    printf("This program prints a table of squares.\n");

    printf("Enter number of entries in table: ");

    scanf("%d", &n);


    for(i = 1; i < n; ++i)

        printf("%10d%100d\n",i, i*i);


    return 0;

}


// short형에선 short가 가지는 최대 값인 32767까지 입력된다. overflow는 implicit conversion에 의해 int형으로 변환되어 발생하지 않는다.

// int형에선 overflow가 43641부터 발생하기 시작함.

// long형에선 64bit 컴퓨터임에도 int와 똑같은 값에서 overflow가 발생함.

// 정리하자면, short형은 2바이트, int형과 long형은 4바이트


2.

#include <stdio.h>


int main(void)

{

    int i , n;


    printf("This program prints a table of squares.\n");

    printf("Enter number of entries in table: ");

    scanf(" %d", &n);

    getchar(); // remove '\n' from the buffer.

    

    for(i = 1; i < n; ++i){

        printf("%10d%10d\n",i, i*i);

        if(i % 24 == 0){

            printf("Press Enter to continue...");

            while(getchar() != '\n') ;

        }

    }


    return 0;

}


// scanf는 buffer를 비워줘야 함.


3.

#include <stdio.h>


int main(void)

{

    double n, sum;

    sum = 0.0f;


    printf("This program sums a series of floats.\n");

    printf("Enter floats (0 to terminate) : ");


    scanf("%lf", &n);

    while(n != 0.0f){

        sum += n;

        scanf("%lf", &n);

    }


    printf("The sum is : %lf\n", sum);


    return 0;

}


4.

#include <stdio.h>

#include <ctype.h>


int main(void)

{

    char c;

    int convert_char;


    printf("Enter phone number: ");

    while((c = getchar()) != '\n'){

        switch(toupper(c)){

            case 'A': case 'B': case 'C':

                printf("2"); break;

            

            case 'D': case 'E': case 'F':

                printf("3"); break;


            case 'G': case 'H': case 'I':

                printf("4"); break;


            case 'J': case 'K': case 'L':

                printf("5"); break;


            case 'M': case 'N': case 'O':

                printf("6"); break;


            case 'P': case 'R': case 'S':

                printf("7"); break;


            case 'T': case 'U': case 'V':

                printf("8"); break;


            case 'W': case 'X': case 'Y':

                printf("9"); break;


            default:

                printf("%c", c); break;

        }

    }


    return 0;

}


5.

#include <stdio.h>

#include <ctype.h>


int main(void)

{

    char c;

    int sum = 0;

    printf("Enter a word: ");


    while((c = getchar()) != '\n'){

        switch(toupper(c)){

            case 'A': case 'E': case 'I': 

            case 'L': case 'N': case 'O':

            case 'R': case 'S': case 'T': case 'U': 

                ++sum; break;


            case 'D': case 'G':

                sum += 2; break;


            case 'B': case 'C': case 'M': case 'P':

                sum += 3; break;


            case 'F': case 'H': case 'V': case 'W': case 'Y': 

                sum += 4; break;


            case 'K': sum += 5; break;


            case 'J': case 'X':

                sum += 8; break;


            case 'Q': case 'Z':

                sum += 10; break;  

        }

    }


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


    return 0;

}


6.

#include <stdio.h>


int main(void)

{

    printf("Size of int :%d\n", sizeof(int));

    printf("Size of short :%d\n", sizeof(short));

    printf("Size of long :%d\n", sizeof(long));

    printf("Size of float :%d\n", sizeof(float));

    printf("Size of double :%d\n", sizeof(double));

    printf("Size of long double :%d\n", sizeof(long double));


    return 0;

}


7.

#include <stdio.h>

#define SIZE(number, denominator) (number > denominator? number : denominator)


int main(void)

{

    int num1, denom1, num2, denom2;

    char operator;

    printf("Enter two fractions separated by a plus sign : ");

    scanf("%d/%d %c %d/%d", &num1, &denom1, &operator, &num2, &denom2);


    int number_result, denominator_result;


    switch(operator){

        case '+':

            number_result = ((num1 * denom2) + (num2 * denom1));

            denominator_result = (denom1 * denom2);

            break;


        case '-':

            number_result = ((num1 * denom2) - (num2 * denom1));

            denominator_result = (denom1 * denom2);

            break;


        case '*':

            number_result = (num1 * num2);

            denominator_result = (denom1 * denom2);

            break;

        

        case '/':

            number_result = (num1 * denom2);

            denominator_result = (num2 * denom1);

            break;

    }


    int gcd;


    if(number_result != 0 && denominator_result != 0)

        for(gcd = number_result; number_result % gcd || denominator_result % gcd; --gcd);


    number_result /= gcd;

    denominator_result /= gcd;

    

    printf("Result is %d/%d\n", number_result, denominator_result);

    return 0;

}


8.

#include <stdio.h>

#include <ctype.h>


int main(void)

{

    int hour, minute, desired_time,

        noOne = 480,

        noTwo = 9 * 60 + 43,

        noThree = 11 * 60 + 19,

        noFour = 12 * 60 + 47,

        noFive = 14 * 60,

        noSix = 15 * 60 + 45,

        noSeven = 19 * 60,

        noEight = 21 * 60 + 45;


    int arrive_hour, arrive_minute, departure_hour, departure_minute;


    char amOrPm, arrive_char, depart_char;


    printf("Enter a 12-hour AM/PM : ");

    scanf("%2d:%2d %c ", &hour, &minute, &amOrPm);


    if(toupper(amOrPm) == 'P') {

        if(hour == 12) hour -= 12;

        else hour += 12;

    }

    

    else if(toupper(amOrPm) == 'A') {

        if(hour == 12) amOrPm = 'P';

    }

    

    desired_time = hour * 60 + minute;


    if(desired_time < noOne){

        arrive_hour = 8; arrive_minute = 0;

        departure_hour = 10; departure_minute = 16;

        arrive_char = 'a'; depart_char = 'a';

    }


    else if(desired_time < noTwo){

        arrive_hour = 9; arrive_minute = 43;

        departure_hour = 11; departure_minute = 52;

        arrive_char = 'a'; depart_char = 'a';

    }


    else if(desired_time < noThree){

        arrive_hour = 11; arrive_minute = 19;

        departure_hour = 1; departure_minute = 31;

        arrive_char = 'a'; depart_char = 'p';

    }


    else if(desired_time < noFour){

        arrive_hour = 12; arrive_minute = 47;

        departure_hour = 3; departure_minute = 0;

        arrive_char = 'p'; depart_char = 'p';

    }


    else if(desired_time < noFive){

        arrive_hour = 2; arrive_minute = 0;

        departure_hour = 4; departure_minute = 8;

        arrive_char = 'p'; depart_char = 'p';

    }


    else if(desired_time < noSix){

        arrive_hour = 3; arrive_minute = 45;

        departure_hour = 5; departure_minute = 55;

        arrive_char = 'p'; depart_char = 'p';

    }


    else if(desired_time < noSeven){

        arrive_hour = 7; arrive_minute = 0;

        departure_hour = 9; departure_minute = 20;

        arrive_char = 'p'; depart_char = 'p';

    }


    else if(desired_time < noEight){

        arrive_hour = 9; arrive_minute = 45;

        departure_hour = 11; departure_minute = 58;

        arrive_char = 'p'; depart_char = 'p';

    }


    printf("Closest departure time is %2d:%2.2d %c.m., arriving at %2d:%2.2d %c.m.\n",

                arrive_hour, arrive_minute, arrive_char,

                departure_hour, departure_minute, depart_char);


    return 0;

}


9.

#include <stdio.h>

#include <ctype.h>


int main(void)

{

    int hour, minute;

    char amOrPm;


    printf("Enter a 12-hour time : ");

    scanf("%d:%d %1c", &hour, &minute, &amOrPm);


    hour = (hour == 12 ? 0 : hour);

    if(toupper(amOrPm) == 'P') hour += 12;


    printf("Equivalent 24-hour time : %2d:%2.2d\n", hour, minute);


    return 0;

}


10.

#include <stdio.h>

#include <ctype.h>


int main(void)

{

    printf("Enter a sentence: ");


    int vowel_number = 0;

    char input;

    while((input = getchar()) != '\n'){

        switch(toupper(input)){

            case 'A': case 'E': case 'I': case 'O': case 'U':

                ++vowel_number; break;

        }        

    }


    printf("Your sentence contains %d vowels.\n", vowel_number);


    return 0;

}


11.

#include <stdio.h>


int main(void)

{

    char input, First_name;


    printf("Enter a first and last name : ");

    First_name = getchar(); // 첫 글자 읽기.


    while(getchar() != ' '); // 공백까지 전부 넘김


    while((input = getchar()) != '\n'){ // 이름 input으로 받기

        if(input != ' ')

            putchar(input);

    }


    printf(", %c\n", First_name);


    return 0;

}


12.

#include <stdio.h>


/* 배열을 사용하지 않으니 몇 가지 과정을 거쳐야 함.*/


int main(void)

{

    float first_number, second_number;


    char operator;


    printf("Enter an expression : ");

    scanf("%f", &first_number);


    while((operator = getchar()) != '\n'){

        scanf("%f", &second_number);


        switch(operator){

            case '+':

                first_number += second_number;

                break;


            case '-':

                first_number -= second_number;

                break;


            case '*':

                first_number *= second_number;

                break;

                

            case '/':

                first_number /= second_number;

                break;

        }

    }


    printf("Value of expression : %.1f\n", first_number);


    return 0;

}


// 연산자 우선순위를 고려하지 않은 코드. 다시 짜야 할 필요가 있음.


13.

#include <stdio.h>


int main(void)

{

    char input;

    int count_of_word = 1; // 처음에 white-space를 만나지 않으니 1부터 시작해야 함.

    int length_of_word = 0;


    printf("Enter a sentence : ");


    while((input = getchar()) != '\n'){


        if(input != ' ') {

            ++length_of_word;

        }

        else {

            ++count_of_word;

        }

    }


    printf("Average word length : %.1f\n", ((float) length_of_word / count_of_word));


    return 0;

}


14.

#include <stdio.h>

#include <math.h>


int main(void)

{

    double x, y; 


    printf("Enter a positive number: ");

    scanf("%lf", &x);


    y = 1.0f;

    

    while(fabs((((x/y)+y)/2) - y) > (.00001 * y)){

        y = (((x/y)+y)/2);

    }


    printf("Square root : %lf\n", y);


    return 0;

}


15.

#include <stdio.h>


int main(void)

{

    int number;

    long double factorial;


    printf("Enter a positive integer: ");

    scanf("%d", &number);


    factorial = 1.0f;


    for(int i = 1 ; i <= number; ++i){

        factorial *= (long double)i;

    }


    printf("Factorial of %d: %Lf\n", number, factorial);


    return 0;

}


// a) number이 8일 때부터 overflow. scanf("%hd");로 입력받음

// b) int형 number는 17때부터 overflow. scanf("%d");

// c) long형 number도 17때부터 overflow.

// d) long long형 지원 안되는지 factorial 1부터 이상한 값을 뱉어냄.

// e) float형은 35부터 overflow.

// f) double형은 171부터 overflow.

// g) long double형은 작성자 컴퓨터에서 지원되지 않는듯.

'C언어 > 문제 정리' 카테고리의 다른 글

8. Exercises  (0) 2018.08.14
7. Exercises  (0) 2018.08.09
6. Programming Projects  (0) 2018.08.05
6. Exercises  (0) 2018.08.05
5. Programming Projects  (0) 2018.08.04