データ構造とアルゴリズム01の完了/(01-06)
14699 ワード
Write Date : 2021.6.13
Last Edit : 2021.6.14
最終ページ:40ページ(完了!)
Chap(01)-基本アルゴリズム
練習問題
Q1
//q1_네 값의 최댓값을 구하는 함수 max4를 작성하세요.
#include <stdio.h>
int max4(int a, int b, int c, int d)
{
int max;
max = a;
if(max < b) max = b;
if(max < c) max = c;
if(max < d) max = d;
return max;
}
int main()
{
printf("max4(%d %d %d %d) = %d\n", 3, 2, 1, 5, max4(3,2,1,5));
printf("max4(%d %d %d %d) = %d\n", 1, 2, 4, 1, max4(1,2,4,1));
printf("max4(%d %d %d %d) = %d\n", 3, 1, 2, 1, max4(3,1,2,1));
// ...
return 0;
}
Q2// q2_세 값의 최솟값을 구하는 min3 함수
#include <stdio.h>
int min3(int a, int b, int c)
{
int min;
min = a;
if(min > b) min = b;
if(min > c) min = c;
return min;
}
int main()
{
printf("min3(%d %d %d) = %d\n", 1, 2, 3, min3(1,2,3));
printf("min3(%d %d %d) = %d\n", 6, 5, 4, min3(6,5,4));
printf("min3(%d %d %d) = %d\n", 8, 7, 9, min3(7,8,9));
// ....
return 0;
}
Q3// q2_네 값의 최솟값을 구하는 min4 함수
#include <stdio.h>
int min4(int a, int b, int c, int d)
{
int min;
min = a;
if(min > b) min = b;
if(min > c) min = c;
if(min > d) min = d;
return min;
}
int main()
{
printf("min4(%d %d %d %d) = %d\n", 1, 2, 3, 4, min4(1,2,3,4));
printf("min4(%d %d %d %d) = %d\n", 6, 5, 4, 7, min4(6,5,4,7));
printf("min4(%d %d %d %d) = %d\n", 8, 7, 9, 10, min4(7,8,9,10));
// ....
return 0;
}
Q4// q4_ 세 값의 대소 관계 13종류의 모든 조합에 대해 중악밧을 구하여 출력하는
// 프로그램
#include <stdio.h>
int med3(int a, int b, int c)
{
if (a >= b)
if (b >= c)
return b;
else if (a <= c)
return a;
else
return c;
else if (a > c)
return a;
else if (b > c)
return c;
else
return b;
}
int main()
{
int a, b, c;
printf("세 정수의 중앙값을 구합니다.\n");
printf("%d %d %d is med = %d\n", 3, 2, 1, med3(3,2,1)); // A a > b > c
printf("%d %d %d is med = %d\n", 3, 2, 2, med3(3,2,2)); // B a > b = c
printf("%d %d %d is med = %d\n", 3, 1, 2, med3(3,1,2)); // C a > c > b
printf("%d %d %d is med = %d\n", 3, 2, 3, med3(3,2,3)); // D a = c > b
printf("%d %d %d is med = %d\n", 2, 1, 3, med3(2,1,3)); // E c > a > b
printf("%d %d %d is med = %d\n", 3, 3, 2, med3(3,3,2)); // F a = b > c
printf("%d %d %d is med = %d\n", 3, 3, 3, med3(3,3,3)); // G a = b = c
printf("%d %d %d is med = %d\n", 2, 2, 3, med3(2,2,3)); // H c > a = b
printf("%d %d %d is med = %d\n", 2, 3, 1, med3(2,3,1)); // I b > a > c
printf("%d %d %d is med = %d\n", 2, 3, 2, med3(2,3,2)); // J b > a = c
printf("%d %d %d is med = %d\n", 1, 3, 2, med3(1,3,2)); // K b > c > a
printf("%d %d %d is med = %d\n", 2, 3, 3, med3(2,3,3)); // L b = c > a
printf("%d %d %d is med = %d\n", 1, 2, 3, med3(1,2,3)); // M c > b > a
return 0;
}
Q6// q6_ while문이 종료될 때 변수 i 값이 n + 1이 됨을 확인하자.
#include <stdio.h>
int main()
{
int i, n;
int sum;
sum = 0;
puts("1부터 n까지의 합을구하며 반복문 종료시 i값을 출력");
printf("n의 값 : "); scanf("%d", &n);
while(i <= n)
{
sum += i;
i++;
if ( i > n )
printf("i is %d + 1 = %d\n", n, i);
}
printf("1부터 %d까지의 합 : %d\n", n, sum);
return 0;
}
Q7// q7_ n이 7이면 '1+2+3+4+5+6+7 = 28'로 출력하는 프로그램작성.
#include <stdio.h>
int main()
{
int i, n;
int sum; // 합
sum = 0;
puts("1부터 n까지의 합을 구한다");
printf("n의 값 : "); scanf("%d", &n);
for (i = 1; i <= n; i++)
{
sum += i;
if (i == n)
printf("%d = %d", i, sum);
else
printf("%d + ", i);
}
// printf("1부터 %d까지의 합은 %d입니다.\n", n, sum);
return 0;
}
Q8// q8_ 1부터 10의 합은 (1 + 10) * 5와 같은 방법으로 구할 수 있다.
// 가우스의 덧셈이라는 방법을 이용하여 1부터 n까지의 합을 구하는 프로그램
#include <stdio.h>
int main()
{
int i, n, sum;
sum = 0;
puts("가우스 덧셈");
printf("n을 입력하세요 : "); scanf("%d", &n);
if (n % 2 == 0)
sum += (1 + n) * ((1 + n) / 2);
else
sum += (1 + n) * ((1 + n) / 2) - ((1 + n) / 2);
printf("가우스 덧셈결과 1 ~ %d까지의 합은 %d입니다.", n, sum);
return 0;
}
Q9// Q9_ 정수 a,b를 포함하여
// 그 사이의 모든 정수의 합을 구하는 아래 함수.
#include <stdio.h>
int sumof(int a, int b)
{
int i, sum;
sum = 0;
if (a > b)
{
for(i = b; i <= a; i++)
{
sum += i;
}
}
else
{
for(i = a; i <= b; i++)
{
sum += i;
}
}
return sum;
}
int main()
{
int x, y;
puts("정수 x와 y를 포함한 그 사이의 모든 정수의 합");
printf("x와 y를 입력하세요 : "); scanf("%d %d", &x, &y);
printf("%d부터 %d사이의 합은 %d입니다.", x, y, sumof(x,y));
return 0;
}
Q10// q10_ 아래와같이.
// a 의 값 6
// b 의 값 6
// a보다 큰값을 입력하세요!
// b 의 값 8
// b - a 는 2입니다. 를 출력하는 프로그램을 작성하라.
#include <stdio.h>
int main()
{
int a, b;
puts("b-a를 구합니다.");
printf("a 값 : "); scanf("%d", &a);
do
{
printf("b 값 : "); scanf("%d", &b);
if (b <= a)
printf("a보다 큰 값을 입력하세요!\n");
} while(b <= a); // b가 a보다 크거나 같을때까지 반복한다.
printf("%d - %d는 %d입니다.\n", b, a, b-a);
return 0;
}
Q11// 양의 정수를 입력하고. 자릿수를 출력하는 프로그램을 작성하라.
#include <stdio.h>
int main()
{
int a, i;
puts("자릿수를 출력하는 프로그램");
do
{
printf("양의 정수를 입력하세요 : "); scanf("%d", &a);
}while(a <= 0);
i = 0;
while(a > 0)
{
a /= 10;
i++;
}
printf("그 수는 %d자리입니다.", i);
return 0;
}
Q12// q12_ 위쪽과 왼쪽에 곱하는 수가 있는 곱셈표를 출력하는 프로그램
// 곱셈표를 출력합니다.
#include <stdio.h>
int main()
{
int i, j;
printf(" | ");
for( i = 1; i <= 9; i++)
printf("% 2d ", i);
printf("\n--+----------------------------\n");
for (i = 1; i <= 9; i++)
{
printf("%d |", i);
for (j = 1; j <= 9; j++)
{
printf("% 3d", i * j);
}
putchar('\n');
}
return 0;
}
Q13// q13_ 위쪽과 왼쪽에 더하는 수가 있는 덧셈표를 출력하는 프로그램
// 덧셈표를 출력합니다.
#include <stdio.h>
int main()
{
int i, j;
printf(" | ");
for( i = 1; i <= 9; i++)
printf("% 2d ", i);
printf("\n--+----------------------------\n");
for (i = 1; i <= 9; i++)
{
printf("%d |", i);
for (j = 1; j <= 9; j++)
{
printf("% 3d", i + j);
}
putchar('\n');
}
return 0;
}
Q14// Q14_입력한 수를 한 변으로 하는 정사각형을
// * 기호로 출력하는 프로그램을 작성하시오.
#include <stdio.h>
int main()
{
int i, j, n;
puts("사각형을 출력합니다.");
printf("입력할 수 : "); scanf("%d", &n);
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n; j++)
{
putchar('*');
}
putchar('\n');
}
}
Q15// Q15_입력한 높이와 너비에 맞는 직사각형을
// * 기호로 출력하는 프로그램을 작성하시오.
#include <stdio.h>
int main()
{
int i, j, h, w;
puts("직사각형을 출력합니다.");
printf("높이 : "); scanf("%d", &h);
printf("너비 : "); scanf("%d", &w);
for (i = 1; i <= h; i++)
{
for (j = 1; j <= w; j++)
{
putchar('*');
}
putchar('\n');
}
}
Q16// Q16_ 직각 이등변 삼각형을 출력하는 부분을 아래와 같은 함수로 작성하시오.
// void triangleLB (int n);
// 또 왼쪽 위, 오른쪽 위, 오른쪽 아래가 직각인 이등변 삼각형을 출력하는 함수도
// 작성하시오.
#include <stdio.h>
void triangleLB (int n)
{
int i ,j;
for (i = 1; i <= n; i++)
{
for (j = 1; j <= i; j++)
{
putchar('*');
}
putchar('\n');
}
}
void triangleLU (int n) // 왼쪽 위가 직각인 이등변 삼각형.
{
int i, j;
for (i = 1; i <= n; i++)
{
for (j = n; j >= i; j--)
{
putchar('*');
}
putchar('\n');
}
}
void triangleRU (int n) // 오른쪽 위가 직각인 이등변 삼각형.
{
int i, j;
for (i = 1; i <= n; i++)
{
for (j = 1; j < i; j++)
{
putchar(' ');
}
for (j = n; j >= i; j--)
{
putchar('*');
}
putchar('\n');
}
}
void triangleRB (int n) // 오른쪽 아래가 직각인 이등변 삼각형.
{
int i, j;
for (i = 1; i <= n; i++)
{
for (j = n - 1; j >= i; j--)
{
putchar(' ');
}
for (j = 1; j <= i; j++)
{
putchar('*');
}
putchar('\n');
}
}
int main()
{
int n;
do
{
printf("몇 단 삼각형입니까? : "); scanf("%d", &n);
}while(n <= 0);
puts("왼쪽 아래가 직각인 이등변 삼각형");
triangleLB(n);
puts("왼쪽 위가 직각인 이등변 삼각형");
triangleLU(n);
puts("오른쪽 위가 직각인 이등변 삼각형");
triangleRU(n);
puts("오른쪽 아래가 직각인 이등변 삼각형");
triangleRB(n);
return 0;
}
Q17// Q17_ n단의 피라미드를 출력하는 함수.
#include <stdio.h>
void spira(int n)
{
int i, j;
for (i = 1; i <= n; i++)
{
for (j = n; j >= i; j--)
{
putchar(' ');
}
for (j = 1; j <= (i - 1) * 2 + 1; j++)
{
putchar('*');
}
putchar('\n');
}
}
int main()
{
int n;
puts("n단의 피라미드를 출력하는 프로그램.");
do
{
printf("몇단의 피라미드? : "); scanf("%d", &n);
}while (n <= 0);
spira(n);
return 0;
}
Q18// Q18_오른쪽과 같이 아래를 향한 n단의 피라미드를 출력하는 함수를 작성하시오
// 1111111
// 22222
// 333
// 4
#include <stdio.h>
void nrpira(int n)
{
int i, j;
int nx;
nx = n;
for (i = 1; i <= nx; i++)
{
for (j = 1; j <= i; j++)
{
putchar(' ');
}
for (j = (n - 1) * 2 + 1; j > 0; j--)
{
printf("%d", i % 10);
}
putchar('\n');
--n;
}
}
int main()
{
int n;
puts("n단의 역피라미드를 출력하는 프로그램.");
do
{
printf("몇단의 역피라미드? : "); scanf("%d", &n);
}while (n <= 0);
nrpira(n);
return 0;
}
アルゴリズムとは?問題を解決するために、有限条によって明確に定義され、秩序化された規則からなる集合.
ちくじず
アルゴリズム問題愛の定義.ぶんせき解法のシーケンス図(FlowChart)を図で示す
リンクテキストここで描くのは快適で良いです
複文
いくつかの条件が成立すると、繰返し実行処理(プログラム文または命令セット)は繰返し構造と呼ばれ、通常は「ループ」と呼ばれます.
ドア
実行前に繰り返し続けるかどうかを判断します.これを「予断繰返し構造」と呼ぶ.
制御式のフラットカバー値が0でない場合、プログラム文は繰り返されます.
文脈
「最初の評価制御式の結果が0の場合、ループ本文は実行そのものではありません.」「事前判断繰返し構造」
構造化プログラミング
1つのエントリと1つの出口のみのコンポーネントを階層的に配置し,プログラムを構成する方法を構造化プログラミングと呼ぶ.
構造化プログラミングでは、シーケンス-選択-繰り返しの3つの制御フローが使用されます.
デモールの法則
「各条件を否定し、論理積(&&)を論理積(||)に変換し、論理積(|)を論理積に変換し、再び条件全体を否定すると、元の条件と同じになります.」
Reference
この問題について(データ構造とアルゴリズム01の完了/(01-06)), 我々は、より多くの情報をここで見つけました https://velog.io/@believer/자료구조와-알고리즘-01-0106テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol