'Study/C언어'에 해당되는 글 6건
[ hw06 ]
---------------------------------------------------------------------
#1
#include <stdio.h>
int main()
{
int a[10];
int i;
for(i=0;i<10;i++)
{
printf("%d번째 정수를 입력하시오 : ", i+1);
scanf("%d", &a[i]);
}
for(i=0;i<9;i++)
{
if (a[i] > a[i+1]) // 따로 tmp 인수를 만들지 않고 기존의 인수를 활용하려고 하였다.
a[i+1] = a[i];
}
printf("가장 큰 정수값은 %d입니다.\n", a[9]);
return 0;
}
---------------------------------------------------------------------
#2
#include <stdio.h>
#define size_a 10
float max(float *p);
float min(float *p);
float avg(float *p);
int main()
{
float a[size_a];
int i;
float *p;
p = a;
for(i=0;i<size_a;i++)
{
printf("%d번째 체중 : ", i+1);
scanf("%f", &a[i]);
}
printf("최고체중 : %0.1f 최저체중 : %0.1f 평균체중 : %0.1f\n", max(p), min(p), avg(p));
return 0;
}
float max(float *p){
int i;
float max;
for(i=0;i<size_a-1;i++)
{
if (*(p+i) > *(p+i+1))
max = *(p+i);
}
return max;
}
float min(float *p){
int i;
float min;
for(i=0;i<size_a-1;i++)
{
if (*(p+i) > *(p+i+1))
min = *(p+i+1);
}
return min;
}
float avg(float *p){
int i;
float avg = 0;
for(i=0;i<size_a;i++)
avg += *(p+i);
return avg/10;
}
---------------------------------------------------------------------
#3
#include <stdio.h>
double dp(double x, int n);
int main(){
double x;
int n;
printf("x^n 을 계산하는 프로그램입니다. x와 n을 입력하시오. (x, n) :");
scanf("%lf, %d", &x, &n);
printf("%lf의 %d제곱 = %lf", x, n, dp(x, n));
return 0;
}
double dp(double x, int n){
if (n==1)
return x;
else
return x*dp(x, n-1); // 재귀함수 사용
}
---------------------------------------------------------------------
#4 // 구글 검색해서 힌트 얻음
#include <stdio.h>
int gcd(int a, int b);
int main(){
int a, b;
printf("최대공약수를 구할 두 수를 입력하세요(a, b) : ");
scanf("%d, %d", &a, &b);
printf("%d와 %d의 최대공약수는 %d 입니다.\n", a, b, gcd(a, b));
return 0;
}
int gcd(int a, int b){ // 정수론 시간에 배운 내용이었는데,, 이렇게 활용되는구나
if (b==0)
return a;
gcd(b, a%b);
}
---------------------------------------------------------------------
#5
#include <stdio.h>
#include <stdlib.h>
int main(){
int *score;
int sn, i, a, b, c, d, f;
a = b = c = d = f = 0;
printf("학생 수 : ");
scanf("%d", &sn);
score = (int *)malloc(sizeof(int)*sn);
for(i=0;i<sn;i++){
printf("%d번째 학생의 점수를 입력하세요 : ", i+1);
scanf("%d", &score[i]);
if (score[i] >= 90)
a++;
else if (score[i] >= 80)
b++;
else if (score[i] >= 70)
c++;
else if (score[i] >= 60)
d++;
else
f++;
}
printf("\n90점 이상 : ");
for(i=0;i<a;i++){
printf("*");
}
printf("\n80점 이상 : ");
for(i=0;i<b;i++){
printf("*");
}
printf("\n70점 이상 : ");
for(i=0;i<c;i++){
printf("*");
}
printf("\n60점 이상 : ");
for(i=0;i<d;i++){
printf("*");
}
printf("\n60점 미만 : ");
for(i=0;i<f;i++){
printf("*");
}
printf("\n");
free(score);
return 0;
}
---------------------------------------------------------------------
#6
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
int num, seed;
int i = 1;
seed = time(NULL);
srand(seed);
num = rand() % 100;
while(1)
{
printf("어떤 숫자일지 맞춰보세요 : ");
scanf("%d", &seed);
if (num == seed){
printf("%d번만에 맞추셨네요~ 짝짝짝\n", i);
break;
}
else if (num > seed ){
printf("더 작은 수를 입력하셨네요~\n");
i++;
}
else{
printf("더 큰 수를 입력하셨네요~\n");
i++;
}
}
return 0;
}
---------------------------------------------------------------------
[ hw05 ]
---------------------------------------------------------------------
#1
#include <stdio.h>
void pr99(int a, int b);
int main()
{
int i, j;
printf("구구단 몇단을 출력할까요? : ");
scanf("%d", &i);
printf("%d단\n", i);
for(j=1;j<10;j++)
{
pr99(i, j);
}
return 0;
}
void pr99(int a, int b){
printf("%d * %d = %d\n", a, b, a*b);
}
---------------------------------------------------------------------
#2 ~ #3
문제 이해를 못했음
---------------------------------------------------------------------
#4
#include <stdio.h>
void swap(char *p);
int main()
{
char a[26];
char *p;
int i;
int j=65;
p = &a[0]; // 이렇게 a[26]와 *p 를 따로 선언해서 받는게 아니라,, *p 에다가 바로 i문으로 돌려서 입력하는 방법은..?
for(i=0;i<26;i++)
{
a[i] = j;
j++;
}
for(i=0;i<26;i++)
printf("%c",a[i]);
printf("\n");
for(j=0;j<25;j++)
{
swap(p);
for(i=0;i<26;i++)
{
printf("%c",a[i]);
}
printf("\n");
}
return 0;
}
void swap(char *p){
char temp;
int i;
temp = *p; // 1번째 주소를 일단 temp에 저장.
for(i=0;i<25;i++)
{
*(p+i) = *(p+i+1); // 뒷 주소를 앞에다가 저장.
}
*(p+25) = temp; // 마지막 넘을 temp에 있는 것으로 저장.
}
---------------------------------------------------------------------
#5 ?? // 이것 역시 문제 이해 못함..ㅎㅎ
100a + 10b + c + 100c + 10a + c = 100b + 10d + d
---------------------------------------------------------------------
[ hw04 ]
---------------------------------------------------------------------
#1
#include <stdio.h>
int main()
{
float a1, a2, b1, b2, c1, c2;
while(1)
{
printf("a1x + b1y = c1\na2x + b2y = c2\n");
printf("위 식들의 계수를 각각 입력하세요.(a1, b1, c1, a2, b2, c2)");
scanf("%f, %f, %f, %f, %f, %f", &a1, &b1, &c1, &a2, &b2, &c2);
if (a1 == 0 && a2 == 0)
printf("a1 과 a2 모두 0일 수 없습니다. 다시 입력하세요.");
else if (b1 == 0 && b2 == 0)
printf("b1 과 b2 모두 0일 수 없습니다. 다시 입력하세요.");
else
break;
}
/*
x 1 b2 -b1 c1 // 행렬식으로 계산 중
y a1b2-a2b1 -a2 a1 c2
1 b2c1-b1c2
a1b2-a2b1 a1c2-a2c1
*/
printf("x, y = %f, %f", ((b2*c1)-(b1*c2))/((a1*b2)-(a2*b1)), ((a1*c2)-(a2*c1))/((a1*b2)-(a2*b1)));
// 한번에 코딩한 것은 자랑.ㅋㅋ
return 0;
}
---------------------------------------------------------------------
#2
#include <stdio.h>
int main()
{
int op;
float x, y; // 근데 다른 이전의 문제에선 정수로 받아서 결과만 실수로 내주면 되는 것 같더니.. 이번엔 안된다.
printf("계산할 연산을 입력하세요.\n(1 : +, 2 : -, 3 : *, 4 : /) : ");
scanf("%d", &op);
printf("계산할 두 정수를 입력하세요 : ");
scanf("%f, %f", &x, &y);
switch(op)
{
case 1 : printf("'+' 연산의 결과값 : %0.0f\n", x+y); break; // op를 char 형식으로 받고 case '+' 이런 식으로 하고싶었는데
case 2 : printf("'-' 연산의 결과값 : %0.0f\n", x-y); break; // 안되는 듯함. 문자로 받아서 하는 방법은 없나요?
case 3 : printf("'*' 연산의 결과값 : %0.0f\n", x*y); break;
case 4 : while(1) // case 문에다가 while 문을 넣어보고 싶었음.
{
if (y == 0)
{
printf("/ 연산에서는 y(젯수)가 0이 될 수 없습니다. y의 값을 다시 입력하세요. : ");
scanf("%f", &y);
}
else
{
printf("'/' 연산의 결과값 : %f\n", x/y);
break;
}
} break;
}
return 0;
}
---------------------------------------------------------------------
#3
#include <stdio.h>
int main()
{
int a, b, c, max;
printf("3개의 정수값을 입력하세요(a, b, c) : ");
scanf("%d, %d, %d", &a, &b, &c);
if (a > b)
{
if (a > c)
max = a;
else
max = c;
}
else
{
if (b > c)
max = b;
else
max = c;
}
a = max % 2; // max 값에 이미 최대값이 들어가있기 때문에 이미 사용된 a 를 이용
if (a == 0)
printf("%d는 짝수입니다.\n", max);
else
printf("%d는 홀수입니다.\n", max);
return 0;
}
[ hw03 ]
---------------------------------------------------------------------
#1
#include <stdio.h>
int main(){
int age;
while(1)
{
printf("나이를 입력하시오 : ");
scanf("%d", &age);
if (age >= 0)
break;
printf("나이를 잘못 입력하셨습니다. 다시 입력 해 주세요.\n"); // 사실 문제에선 그리 요구하는 필수사항은 아니었지만..ㅎㅎ
}
if (age < 8 || age >59) // 어떻게 하면 더 효과적으로 if 및 else를 사용할 수 있을까?
printf("입장료는 무료입니다.\n");
else if (age < 20)
printf("입장료는 2,000원 입니다.\n");
else
printf("입장료는 3,000원 입니다.\n");
return 0;
}
---------------------------------------------------------------------
#2
#include <stdio.h>
int main(){
char c;
printf("한 문자를 입력하시오 : ");
scanf("%c", &c);
if (48 <= c && c <=57)
printf("숫자 입니다.\n");
else if (65 <= c && c <= 90)
printf("%c", c+32);
else if (97 <= c && c <= 122)
printf("%c", c-32);
else
printf("영문자나 숫자가 아닙니다");
return 0;
}
---------------------------------------------------------------------
#3
#include <stdio.h>
int main(){
int year;
printf("연도를 입력하시면 그 해가 윤년인지 아닌지 알려드립니다.\n연도를 입력하시오 : ");
scanf("%d", &year);
if (year % 400 == 0)
printf("%d년은 윤년입니다.\n", year);
else if (year % 100 == 0)
printf("%d년은 평년입니다.\n", year);
else if (year % 4 == 0)
printf("%d년은 윤년입니다.\n", year);
else
printf("%d년은 평년입니다.\n", year);
return 0;
}
---------------------------------------------------------------------
#4
#include <stdio.h>
int main(){
int a, b;
while(1)
{
printf("서로 다른 두 숫자를 입력하시오 (a, b) : ");
scanf("%d, %d", &a, &b);
if (a!=b)
break;
else
printf("다시 입력하시오.\n"); // 조건에서 서로 다른걸 입력하랬는데 그걸 또 검사하는 나란 놈은..ㅋㅋ
}
if (a>b)
printf("%d\n", a);
else
printf("%d\n", b);
return 0;
}
---------------------------------------------------------------------
#5
#include <stdio.h>
int main(){
int grade;
printf("학년에 따른 등록금 안내 해드립니다. 몇학년 이세요? : ");
scanf("%d", &grade);
switch(grade)
{
case 1 : printf("300만원\n"); break; // 근데 왜 break; 까지 엔터 치면 칸이 이쁘게 안나올까..? 결과는 맞는데.ㅎㅎ
case 2 : printf("250만원\n"); break;
case 3 : printf("250만원\n"); break;
case 4 : printf("200만원\n"); break;
default : printf("그런 학년은 없습니다.\n"); // default 라 함은 else와 같은 맥락~
}
return 0;
}
---------------------------------------------------------------------
#6
#include <stdio.h>
int main(){
int no;
float kw;
printf("사용 전력랑(Kw)를 입력하세요 : ");
scanf("%f", &kw);
while(1)
{
printf("코드번호를 입력하세요. (가정용은 1, 산업용은 2, 교육용은 3 입니다.) : ");
scanf("%d", &no);
if(no == 1 || no == 2 || no == 3)
break;
else
printf("코드번호를 잘못 입력하셨습니다. 다시 입력하세요.\n");
}
switch(no)
{
case 1 : printf("%0.1f원 입니다.\n", kw*127.8+1130); break;
case 2 : printf("%0.1f원 입니다.\n", kw*88.5+660); break;
case 3 : printf("%0.1f원 입니다.\n", kw*52.0+370); break;
}
return 0;
}
---------------------------------------------------------------------
[ hw02 ]
---------------------------------------------------------------------
#1
#include <stdio.h>
#include <stdlib.h>
int main(){
int age;
char *location, *blood, *name;
location = (char *)malloc(sizeof(char) * 10); // 기억이 나지 않아 살짝 구글링 했지..
blood = (char *)malloc(sizeof(char) * 10); // 근데 이렇게 말고 진짜로.. 내가 입력받는 만큼 생성하는 것은 없나?
name = (char *)malloc(sizeof(char) * 10);
printf("당신이 사는 곳은? ");
scanf("%s", location);
printf("당신의 혈액형은? ");
scanf("%s", blood);
printf("당신의 나이는? ");
scanf("%d", &age);
printf("당신의 이름은? ");
scanf("%s", name);
printf("아하, 당신은 %s에 사는 %d살의 %s이라는 분이군요! 혈액형은 %s.\n", location, age, name, blood);
free(location); // free로 메모리 없애주기
free(blood);
free(name);
return 0;
}
---------------------------------------------------------------------
#2
#include <stdio.h>
int main(){
float second;
printf("10km/h로 달리는 철수가 달린 초(second)를 입력하면 뛴 거리(km)를 계산하는 프로그램 입니다.\n철수가 달린 초(second) : ");
scanf("%f", &second);
// 10km/h -> 10/60/60 km/s // 1초에 몇키로를 가는지 계산하는 중..ㅋㅋ
printf("철수가 뛴 거리(km) : %0.3f\n", ((second*10)/60)/60); // 1초에 몇키로를 가는지만 알면 거기에 시간을 곱하면 된다.
return 0;
}
---------------------------------------------------------------------
#3
#include <stdio.h>
int main(){
int minute, day, hour;
printf("분(min)을 입력하세요 : ");
scanf("%d", &minute);
day = minute/(24*60); // day는 int 형이기 때문에 나누면 정수만 입력된다. 즉 몇일인지가 day 입력 된다.
minute = minute - (day*24*60); // 그리고 입력된 분에서 day 대한 분만큼 뺀다.
hour = minute/60; // 그리고 같은 원리로 시간이 int형이니 초로 나눠서 시간을 만든다.
minute = minute -(hour*60); // 역시나 같은 원리~
printf("%d 일 %d 시간 %d 분\n", day, hour, minute);
return 0;
}
---------------------------------------------------------------------
#4
#include <stdio.h>
int main(){
float time;
int hour, minute, second;
printf("시간을 입력하세요 : ");
scanf("%f", &time);
hour = time;
time = time - hour; // time은 실수, hour은 정수이므로 소수부분만 time에 다시 입력되겠지..ㅎㅎ
minute = time * 60; // 그리곤 거기에 60을 곱해서 다시 int형인 분으로 넣으면 몇분인지 정수만 또 나온다.
// 1분 = 60초
second = ((time * 60) - minute)*60; // 여기선 다시 분에 대한 소수점만 나오게 한다음 60을 곱해서 몇초인지 구함
printf("%d시간 %d분 %d초\n", hour, minute, second);
return 0;
}
---------------------------------------------------------------------
#5
#include <stdio.h>
int main(){
float time;
int day, hour, minute, second;
printf("일 수를 입력하세요 : ");
scanf("%f", &time);
day = time;
time = time - day; // 이것도 위에랑 비슷~ 소수부분만 남기는 스킬을 활용했다.
//0.xx 일 남음 & 1일 = 24시간 // 근데 알고보니 뭐 시간에 관련된 함수 있는거 아님..? ㅋㅋㅋㅋㅋ
hour = time * 24;
time = (time * 24) - hour;
// 0.xx 시간 남음 & 1시간 = 60분
minute = time * 60; // 1시간이 60분이니 시간을 나타낸 소수점에 60을 곱하면 소수점이 몇분인지 나온다.
time = (time * 60) - minute;
//0.xx 분 남음 & 1분 = 60초
second = time * 60; // 위에랑 같은 원리
printf("%d일 %2d시간 %2d분 %2d초\n", day, hour, minute, second);
return 0;
}
---------------------------------------------------------------------
#6
#include <stdio.h>
int main(){
printf("char : %d 바이트\n", sizeof(char)); // 각각의 형이 몇바이트인지 알기 위함임.
printf("short : %d 바이트\n", sizeof(short));
printf("int : %d 바이트\n", sizeof(int));
printf("long : %d 바이트\n", sizeof(long));
printf("float : %d 바이트\n", sizeof(float));
printf("double : %d 바이트\n", sizeof(double));
printf("long double : %d 바이트\n", sizeof(long double));
return 0;
}
---------------------------------------------------------------------
#7
#include <stdio.h>
int main(){
int kor, eng, math;
printf("각각의 점수를 입력하시오(국어, 영어, 수학) : ");
scanf("%d, %d, %d", &kor, &eng, &math);
printf(" ==================================================\n");
printf("│ 국어 │ 영어 │ 수학 │ 총점 │ 평균 │\n");
printf(" ==================================================\n");
printf("│ %2d │ %2d │ %2d │ %3d │ %0.2f │\n", kor, eng, math, kor+eng+math, (kor+eng+math)/3);
printf(" ==================================================\n");
return 0; // 여기서 다시 공부. int 형으로 받아도 실수가 발생할 때만 출력을 실수로 하면 된다.
}
---------------------------------------------------------------------
#8
#include <stdio.h>
int main(){
printf("C에서 주석문을 넣는 방법에는 %c%c %c%c %c%c과 %c%c %c%c%c 등이 있다.\n:", 47, 42, 126, 126, 42, 47, 47, 47, 126, 126, 126 ); // ' // ' 나 /* */ 때문에 해당 기호에 대한 아스키코드를 썼는데... 일부만 써도 될껄 그랬다는 생각이 든다..ㅎㅎ
printf("줄을 바꾸려면 특수문자 %cn을 출력하면 된다.\n", 92);
printf("C에서 문자열 상수는 %c %c%c %c로, 문자상수는 %c%c%c로 표시한다.\n", 34, 126, 126, 34, 39, 126, 39);
return 0;
}
---------------------------------------------------------------------
#9
#include <stdio.h>
int main(){
int speed;
float hour, minute, second;
printf("시속(km/h) : ");
scanf("%d", &speed);
printf("운전시간(시, 분, 초) : ");
scanf("%f, %f, %f", &hour, &minute, &second);
//1시간에 120km, 1분에 2km, 1초에 2/60 km) // 각 시간 단위당 몇키로 갔는지 계산 함
printf("\n달린 거리(km) : %0.2f\n", (120*hour)+(2*minute)+(second/30));
return 0;
}
이 게시판 들에는 학원에서 내준 숙제에 대해 내 나름대로의 풀이를 적으려 한다.
각각의 문제는 보내준 분의 개인 자료이니 나만의 답만 적으려 한다.
문제가 무엇이었을지, 결과값은 어떻게 나올지 내 스스로 유추하는 것도 공부일듯~
[ hw01 ]
---------------------------------------------------------------------
#1
#include <stdio.h>
int main(){
printf("컴퓨터시스템 학생들이\n모두 컴퓨터프로그래밍을\n");
printf("잘 할 수 있기를 바랍니다.\n");
return 0;
}
---------------------------------------------------------------------
#2
#include <stdio.h>
int main(){
int age;
printf("나이를 입력하세요: ");
scanf("%d", &age);
printf("당신은 10년 후에 %d살입니다.\n", age+10);
return 0;
}
---------------------------------------------------------------------
#3
#include <stdio.h>
int main(){
int w, h;
printf("== 사각형의 면적계산 프로그램 ==\n");
printf("사각형의 가로길이: ");
scanf("%d", &w);
printf("사각형의 세로길이: ");
scanf("%d", &h);
printf("\n사각형의 면적은 %d입니다.\n", w*h);
return 0;
}
---------------------------------------------------------------------
#4
#include <stdio.h>
int main(){
char a;
printf("문자를 입력하세요: ");
scanf("%c", &a);
printf("문자 = %c ASCII코드값 = %d\n", a, a);
return 0;
}
---------------------------------------------------------------------
#5
#include <stdio.h>
int main(){
char s[10] = {0}; // pointer 변수로 받아도 될듯.
printf("당신의 이름은 무엇입니까? ");
scanf("%s", &s);
printf("당신의 이름은 %s 이군요..\n", s);
return 0;
}
---------------------------------------------------------------------
#6
#include <stdio.h>
int main(){
int c;
printf("온도(C)를 입력하세요: ");
scanf("%d", &c);
printf("화씨(F)온도는 %f도입니다.\n", 1.8*c+32); // 이거 때문에 처음엔 좀 힘들었지..ㅎㅎ %f로 출력. 지금이라면 소수점도 넣을텐데
return 0;
}
---------------------------------------------------------------------
#7
#include <stdio.h>
int main(){
int bp, dp;
printf("과자 판매액(만원) : ");
scanf("%d", &bp);
printf("음료수 판매액(만원) : ");
scanf("%d", &dp);
printf("오늘의 수익(만원) : %0.2f\n", 0.15*bp+0.1*dp); // 여기서 바로 소수점 제한을 뒀군. bp와 dp는 정수로, 출력은 실수로~
return 0;
}
---------------------------------------------------------------------