//1
사용자 정의 함수를 만들어 선을 그리는 프로그램을 작성하시오.
출력 예
===============================
line 함수를 호출하였습니다.
line 함수를 다시 호출합니다.
===============================
(소스1)
#include <stdio.h>
void line()
{
puts("===============================");
}
int main()
{
line();
puts("line 함수를 호출하였습니다.");
puts("line 함수를 다시 호출합니다.");
line();
return 0;
}
(소스2)
#include <stdio.h>
void line();
int main()
{
line();
puts("line 함수를 호출하였습니다.");
puts("line 함수를 다시 호출합니다.");
line();
return 0;
}
void line()
{
puts("===============================");
}
자가진단 1 문자열 "~!@#$%^&*()_+|"를 출력하는 함수를 작성하고 정수를 입력받아 입력받은 수만큼 함수를 호출하는 프로그램을 작성하시오.
입력 예 3
출력 예
~!@#$%^&*()_+|
~!@#$%^&*()_+|
~!@#$%^&*()_+|
#include <stdio.h>
void mark();
int main()
{
int i;
int a;
scanf("%d", &a);
for (i = 1; i <= a; i++)
{
mark();
}
return 0;
}
void mark()
{
puts("~!@#$%^&*()_+| ");
}
//2 정수를 입력 받아 10큰 수와 10작은 수를 출력하는 프로그램을 작성하시오.
입력 예 50
출력 예
10큰수 : 60
10작은수 : 40
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void plusten(int su)
{
printf("10큰수 : %d \n", su + 10);
}
void minusten(int su)
{
printf("10큰수 : %d \n", su - 10);
}
int main()
{
int num;
scanf("%d", &num);
plusten(num);
minusten(num);
return 0;
}
자가진단 2 반지름의 길이를 전달받아 넓이를 출력하는 함수를 작성하고 반지름의 길이를 입력받아 함수를 호출하여 넓이를 출력하는 프로그램을 작성하시오. (원주율은 3.14로 하고 반올림하여 소수 둘쨰자리까지 출력한다. 원의 넓이 = 반지름 * 반지름 * 원주율이다.)
입력 예 10
출력 예 314.00
#include <stdio.h>
void width(int r)
{
printf("%.2f", r*r*3.14);
}
int main()
{
int num;
scanf("%d", &num);
width(num);
return 0;
}
//3 정수를 전달받아 출력 예와 같이 '*'로 이루어진 직각삼각형을 출력하는 함수를 작성하고 입력받은 정수를 전달하여 출력하는 프로그램을 작성하시오.
입력 예 5
출력 예
*
**
***
****
*****
#include <stdio.h>
void star(int n)
{
int i, j;
for (i = 1; i <= n; i++)
{
for (j = 1; j <= i; j++)
{
printf("*");
}
printf("\n");
}
}
int main()
{
int n;
scanf("%d", &n);
star(n);
return 0;
}
자가진단 3 정수를 전달받아 다음과 같이 숫자 정사각형을 출력하는 함수를 작성하고 함수를 호출하여 입력받은 정수를 함수로 전달하여 출력하는 프로그램을 작성하시오.
입력 예 4
출력 예
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
#include <stdio.h>
void num(int n)
{
int i, j;
int num = 1;
for (i = 1; i <= n; i++)
{
for (j = 1; j <= 4 ; j++)
{
printf("%d ", num++);
}
printf("\n");
}
}
int main()
{
int a;
scanf("%d", &a);
num(a);
return 0;
}
//4 합과 차를 각각 리턴하는 함수를 작성한 후 두 정수를 입력받아 함수를 호출하여 두 수의 합과 차를 출력하는 프로그램을 작성하시오.
입력 예 30 50
출력 예
두 수의 합 = 80
두 수의 차 = 20
#include <stdio.h>
int add(int x, int y)
{
return x + y;
}
int sub(int x, int y)
{
int cha = x - y;
if (cha < 0) cha *= -1;
return cha;
}
int main()
{
int a, b, sum;
scanf("%d %d", &a, &b);
sum = add(a, b);
printf("두 수의 합 = %d \n", sum);
printf("두 수의 차 = %d \n", sub(a,b));
return 0;
}
자가진단 4 세 개의 정수를 전달받아 최대값을 구하여 리턴하는 함수를 작성하고 세 정수를 입력받아 최대값을 출력하는 프로그램을 작성하시오.
입력 예 -10 115 33
출력 예 115
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int compare(int x, int y, int z)
{
int max = x;
if (max < y) max = y;
if (max < z) max = z;
return max;
}
int main()
{
int a, b, c, answer;
scanf("%d %d %d", &a, &b, &c);
printf("%d \n", compare(a, b, c));
return 0;
}
//5 평균을 구하는 함수를 작성한 후 세과목의 점수를 입력받아 평균을 구하여 소수 둘째자리까지 반올림하여 출력하는 프로그램을 작성하시오.
입력 예 세과목의 점수를 입력하세요. 80 65 95
출력 예 평균 : 80.00
(소스1)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
double pyung(int a, int b, int c)
{
int sum = a + b + c;
return sum / 3.0;
}
int main()
{
int kor, eng, mat;
double avg;
printf("세과목의 점수를 입력하세요. ");
scanf("%d %d %d", &kor, &eng, &mat);
avg = pyung(kor, eng, mat);
printf("평균 : %.2f \n", avg);
return 0;
}
(소스2)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
double pyung(int a, int b, int c)
{
return (a + b + c) / 3.0;
}
int main()
{
int kor, eng, mat;
double avg;
printf("세과목의 점수를 입력하세요. ");
scanf("%d %d %d", &kor, &eng, &mat);
printf("평균 : %.2f \n", pyung(kor, eng, mat));
return 0;
}
자가진단 5 10 이하의 두 정수 m과 n을 입력 받아서 m을 n만큼 거듭제곱하여 나온 값 (mn)을 리턴하는 함수를 작성하여 다음과 같이 출력하는 프로그램을 작성하시오.
입력 예 2 10
출력 예 1024
< Pow 함수 이용했을 경우 >
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<math.h>
#include<cmath>
int mul(int a, int b)
{
return pow(a, b);
}
int main()
{
int m, n;
scanf("%d %d", &m, &n);
printf("%d", mul(m, n));
return 0;
}
< 반복문 이용했을 경우 >
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int mul(int a, int b)
{
int i;
int num = 1;
for (i = 0; i < b; i++)
{
num *= -a;
}
return num;
}
int main()
{
int m, n;
scanf("%d %d", &m, &n);
printf("%d", mul(m, n));
return 0;
}
//6 정수의 연산식을 입력받아 연산을 위한 함수를 호출하여 사칙연산의 결과를 출력하는 프로그램을 작성하시오. ('/'의 경우는 정수 부분만 출력하고 사칙연산 이외의 연산 결과는 0으로 한다.)
입력 예 10 + 20
출력 예 10 + 20 = 30
#include <stdio.h>
int gesan(int x, int y, char op)
{
switch(op)
{
case'+':
return x + y;
case'-':
return x - y;
case'*':
return x * y;
case'/':
return x / y;
}
return 0;
}
int main()
{
int a, b;
char c;
scanf("%d %c %d", &a, &c, &b);
printf("%d %c %d = %d \n", a, c, b, gesan(a, b, c));
return 0;
}
자가진단 6 위 소스에서 함수내의 switch 문을 if ~ else if ~ else 문으로 바꾸어 실행해보자.
#include <stdio.h>
int gesan(int x, int y, char op)
{
if (op == '+') return x + y;
else if (op == '-') return x - y;
else if (op == '*') return x * y;
else return x / y;
}
int main()
{
int a, b;
char c;
scanf("%d %c %d", &a, &c, &b);
printf("%d %c %d = %d \n", a, c, b, gesan(a, b, c));
return 0;
}
//7 두 수를 입력받아 아래 예와 같이 순서를 바꾸어 출력하는 프로그램을 작성하시오.
입력 예 두 수를 입력하세요. 35 15
출력 예
첫 번째 함수 실행중 x = 15, y = 35
첫 번째 함수 실행후 a = 35, b = 15
두 번째 함수 실행중 x = 15, y = 35
두 번째 함수 실행후 a = 15, b = 35
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void swapvalue(int x, int y)
{
int tmp;
tmp = x;
x = y;
y = tmp;
printf("첫 번째 함수 실행중 x = %d, y = %d \n", x, y);
}
void swapreference(int &x, int &y)
{
int tmp;
tmp = x;
x = y;
y = tmp;
printf("두 번째 함수 실행중 x = %d, y = %d \n", x, y);
}
int main()
{
int a, b;
printf("두 수를 입력하세요. ");
scanf("%d %d", &a, &b);
swapvalue(a, b);
printf("첫 번째 함수 실행후 a = %d, b = %d \n", a, b);
swapreference(a, b);
printf("두 번째 함수 실행후 a = %d, b = %d \n", a, b);
return 0;
}
*** 주소 관련 추가 설명
다음의 경우 a, b 둘다 500을 찍습니다.
참조하는 주소가 같은 곳이기 때문입니다.
(1)
int a = 10;
int& x = a;
x = 500;
printf("%d /n", a);
(2)
int a = 10;
int& x = a;
a = 500;
printf("%d /n", a);
자가진단 7 두 개의 정수를 입력받아 큰 수는 2로 나눈 몫을 저장하고 작은 수는 2를 곱하여 저장한 후 출력하는 프로그램을 작성하시오. (참조에 의한 전달을 이용한 함수를 작성하여 값을 수정하고 출력은 메인함수에서 한다.)
입력 예 100 500
출력 예 200 250
(정리한 풀이)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int opA(int x, int y);
int opB(int x, int y);
int main()
{
int a, b;
scanf("%d %d", &a, &b);
if (a == b) return 0;
printf("%d %d \n", opA(a, b), opB(a, b));
return 0;
}
int opA(int x, int y)
{
if (x > y)
{
x /= 2;
}
else
{
x *= 2;
}
return x;
}
int opB(int x, int y)
{
if (x < y)
{
y /= 2;
}
else
{
y *= 2;
}
return y;
}
(기본 풀이)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int opA(int x, int y)
{
if (x > y)
{
x = x / 2;
}
else
{
x = x * 2;
}
return x;
}
int opB(int x, int y)
{
if (x < y)
{
y = y / 2;
}
else
{
y = y * 2;
}
return y;
}
int main()
{
int a, b;
scanf("%d %d", &a, &b);
printf("%d %d \n", opA(a, b), opB(a, b));
return 0;
}
//8 두 정수를 입력받아 합과 곱을 출력하는 프로그램을 구조화하여 작성하시오.
입력 예 두 수를 입력하세요. 35 26
출력 예
합 : 61
곱 : 910
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int a, b;
int hap, gop;
void input()
{
printf("두 수를 입력하세요. ");
scanf("%d %d", &a, &b);
}
void gesan()
{
hap = a + b;
gop = a * b;
}
void output()
{
printf("합 : %d \n", hap);
printf("곱 : %d \n", gop);
}
int main()
{
input();
gesan();
output();
return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void input(int &x, int &y)
{
printf("두 수를 입력하세요. ");
scanf("%d %d", &x, &y);
}
int plus(int x, int y)
{
return x + y;
}
int multi(int &x, int &y)
{
return x * y;
}
void output(int x, int y)
{
printf("합 : %d \n", x);
printf("곱 : %d \n", y);
}
int main()
{
int a, b;
int hap, gop;
input(a, b);
hap = plus(a, b);
gop = multi(a, b);
output(hap, gop);
return 0;
}
글로벌 변수 안쓸수록 코딩을 잘하는 것이다.
자가진단 8 10 이하의 두 개의 정수를 입력받아서 작은 수부터 큰 수까지의 구구단을 차례대로 출력하는 프로그램을 구조화하여 작성하시오.
입력 예 3 5
출력 예
== 3dan ==
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
3 * 6 = 18
.
.
.
5 * 9 = 45
(1번 풀이)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int a, b;
int hap, gop;
void input()
{
scanf("%d %d", &a, &b);
}
void output()
{
int i, j;
for (i = a; i <= b; i++)
{
printf("== %ddan ==\n", i);
for (j = 1; j <= 9; j++)
{
printf("%d * %d = %d \n", i, j , i*j);
}
}
}
int main()
{
input();
output();
return 0;
}
(2번 풀이) - 참조형 연산자 활용
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void input(int& a, int& b);
void output(int a, int b);
int main()
{
int a, b;
input(a, b);
output(a, b);
return 0;
}
void input(int& a, int& b)
{
scanf("%d %d", &a, &b);
}
void output(int a, int b)
{
int i, j;
for (i = a; i <= b; i++)
{
printf("== %ddan ==\n", i);
for (j = 1; j <= 9; j++)
{
printf("%d * %d = %d \n", i, j, i * j);
}
}
}
'Basics > 자기주도 C언어 프로그래밍' 카테고리의 다른 글
[Chapter] 13 함수 III (0) | 2023.07.14 |
---|---|
[Chapter] 12 함수 II (0) | 2023.07.14 |
[Chapter] 10 배열 II (0) | 2023.07.14 |
[Chapter] 09 배열 I (0) | 2023.07.14 |
[Chapter] 08 반복제어문 III (0) | 2023.07.14 |