Taek
7. Programming Projects 본문
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 |