반응형
11. 다음 프로그램은 main의 두 정수 a와 b에 대해 나누기를 한 몫과 나머지를 quotient와 remainder에 구하여 출력하기 위한 것이다. 그러나 프로그램을 실행하면 잘못된 결과가 나온다. 프로그램에서 잘못된 곳을 찾아 이유를 설명하고 바르게 수정하시오. |
#include <stdio.h>
void division(int x, int y, int q, int r);
int main(void)
{
int a = 75, b = 8, quotient, remainder;
division(a, b, quotient, remainder);
printf("%d / %d = %d\n", a, b, quotient);
printf("%d %% %d = %d \n", a, b, remainder);
return 0;
}
//x를 y로 나눈 몫은 q에 나머지는 r에 구하는 함수
void division(int x, int y, int q, int r)
{
q = x / y;
r = x % y;
}
<수정한 프로그램>
#include <stdio.h>
void division(int x, int y, int* q, int* r);
int main(void)
{
int a = 75, b = 8, quotient, remainder;
division(a, b, "ient, &remainder); //함수에 주소값을 넘겨야 값이 변경된다
printf("%d / %d = %d\n", a, b, quotient);
printf("%d %% %d = %d \n", a, b, remainder);
return 0;
}
//x를 y로 나눈 몫은 q에 나머지는 r에 구하는 함수
void division(int x, int y, int* q, int* r) //인수를 포인터로 받는다
{
*q = x / y;
*r = x % y;
}
12. main 함수의 sec 변수에 초 단위의 시간을 입력받은 후 이 시간이 몇 분 몇 초에 해당하는지 main 함수의 min 과 sec 변수에 구하는 프로그램을 작성하시오. min과 sec의 값은 compute_time 함수를 이용하여 구한다. |
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void compute_time(int* m, int* s);
int main(void)
{
int min, sec;
printf("초를 입력하세요. ");
scanf("%d", &sec);
printf("%d초는 ", sec);
compute_time(&min, &sec);
printf("%d분 %d초입니다.", min, sec);
return 0;
}
void compute_time(int* m, int* s)
{
*m = *s / 60; //분
*s %= 60; //초
}
13. 다음의 배열 ary에 저장된 값을 포인터 연산을 통해 출력하시오. 배열의 원소 수는 배열의 크기와 배열 원소의 크기를 이용하여 구한다. |
double ary[] = {170.5, 165.3, 157.2, 160.0, 165.7};
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
double ary[] = { 170.5, 165.3, 157.2, 160.0, 165.7 };
double* p = ary;
for (int i = 0; i < sizeof(ary) / sizeof(ary[0]); i++)
printf("%d번째 수: %lf\n", i, *(p + i));
return 0;
}
14. 11번과 12번 문제와 같이 함수 간 인수 전달에서 주소에 의한 호출이 필요한 예를 찾아 문제를 제시하고 프로그램으로 작성하시오. |
풀이 생략..
15. 대학의 학점은 일반적으로 A+가 4.5점에 해당하지만 학교에 따라 4.3점인 경우도 있다. 4.3 만점제가 적용된 학생의 학점이 grade일 때 이 grade를 4.5 만점제에 맞추어 변환한 값 scre를 구하는 프로그램을 작성하시오. main 함수는 입력받은 grade에 대한 gbrade2와 score를 구하기 위해 convert 함수를 이용하도록 한다. grade가 4.2면 grade2는 4.4이며 score는 97.7이다. |
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <conio.h> //_getch 사용
void convert(double g1, double* g2, double* s);
int main(void)
{
double grade, grade2, score;
int n;
do {
printf("4.3만점일 때 학점은? ");
scanf("%lf", &grade);
convert(grade, &grade2, &score);
printf("100점 만점에 %.1lf점, 4.5점 만점에 %.1lf점입니다.\n", score, grade2);
printf("종료하려면 q를 누르세요.\n\n");
n = _getch();
} while (n != 'q'); //q를 누를 때까지 반복
return 0;
}
void convert(double g1, double* g2, double* s)
{
*g2 = (g1 * 4.5) / 4.3; //4.5 만점일 때
*s = (g1 * 100) / 4.3; //100점 만점일 때
}
반복 기능은 그냥 넣어봤다.
반응형
'프로그래밍 > C, C++' 카테고리의 다른 글
<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 10(16번~21번) (0) | 2020.11.26 |
---|---|
c언어 콘솔에서 음악 동시에 재생하기(mcisendCommand, playsound) (3) | 2020.11.18 |
<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 10(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) (0) | 2020.10.17 |
<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 9 (1, 2, 3, 4, 5) (0) | 2020.10.16 |
<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 8 (11, 12, 13) (0) | 2020.10.16 |