# 기본과제 및 제출 양식
1. for의 사용방법은
for(초기값;종료조건;증감값)
{
반복할 내용
}
과 같다. 이를 암기하시오. 또한 아래 문항을 해결하시오. (0.5시간 소요)
가. int start를 선언하고 1을 주시오.
나. int end를 선언하고 10을 주시오.
다. for문의 초기값에 int i=start를 주시오.
라. for문의 종료조건에 i<=end를 주시오.
마. for문의 증감값은 i++를 주시오.
바. 가~마를 이용하여, 1부터 10까지 출력되게 하시오. '반복할 내용'에 printf를 이용하여 구현하면 됨.
#include<stdio.h>
#pragma warning (disable:4996)
int main()
{
int start = 1;
int end = 10;
for (int i = start; i<= end; i++)
{
printf("%d\n", i);
}
return 0;
}
2. for를 이용하여 숫자들의 합을 구하는 프로그램을 구현하시오. (1시간 소요)
가. int sum을 for문 이전에 선언하고 0을 주시오.
나. '1.바'를 이용하여 sum에 1부터 10까지의 합을 구하시오. 이를 printf 하시오. (힌트 : sum = sum+i 처럼 하면 됨.) 참고자료 : https://wikidocs.net/11368
다. '1.가', '1.나'를 개조하여, 합을 구할 시작숫자와 끝 숫자를 scanf하시오. 시작숫자와 끝 숫자 사이에 있는 모든 값의 합을 구하시오. 이를 printf 하시오.
#include<stdio.h>
#pragma warning (disable:4996)
int main()
{
int start = 0;
printf("시작숫자를 입력하세요 :");
scanf("%d", &start);
int end = 0;
printf("끝 숫자를 입력하세요 :");
scanf("%d", &end);
int sum = 0;
for (int i = start; i <= end; i++)
{
sum = sum + i;
}
printf("총합은 %d 입니다.", sum);
return 0;
}
3. continue의 사용방법은 다음과 같다.
for(초기값;종료조건;증감값)
{
if(반복문을 띄워넘을 조건)
{
continue;
}
}
이를 암기하시오. 또한 아래 문항을 해결하시오. https://wikidocs.net/11613를 참조하시오. (1.5시간 소요)
가. int i=1 ~ 9 까지 나오도록 for 문을 만드시오.
나. int j=1 ~ 9 까지 나오도록 '가'에서 만든 for문 안에, for문을 하나 더 만드시오.
다. 가,나를 이용하여 i*j를 만들고 구구단을 출력하도록 해 보시오
라. '다'에서 구구단 3단이 출력되지 않도록 continue를 사용해 보시오.
마. 논리연산자 &&,||,! 에 대해 조사하시오. 이를 이용하여 구구단 3,5,7단이 출력되지 않도록 해보시오.
바. 구구단 4,8단만 출력되도록 continue를 사용해 보시오. (! 연산자를 사용하시오.)
라.
#include<stdio.h>
#pragma warning (disable:4996)
int main()
{
for (int i = 1; i <= 9; i++) {
if (i == 3) {
continue;
}
for (int j = 1; j <= 9; j++) {
printf("%d x %d = %d\n", i, j, i * j);
}
}
return 0;
}
마.
#include<stdio.h>
#pragma warning (disable:4996)
int main()
{
for (int i = 1; i <= 9; i++) {
if (i == 3 || i == 5 || i == 7){
continue;
}
for (int j = 1; j <= 9; j++) {
printf("%d x %d = %d\n", i, j, i * j);
}
}
return 0;
}
바.
#include<stdio.h>
#pragma warning (disable:4996)
int main()
{
for (int i = 1; i <= 9; i++) {
if (!(i == 4 || i == 8)){
continue;
}
for (int j = 1; j <= 9; j++) {
printf("%d x %d = %d\n", i, j, i * j);
}
}
return 0;
}
4. break의 사용방법은 다음과 같다.
for(초기값;종료조건;증감값)
{
if(반복문을 종료할 조건)
{
break;
}
}
이를 암기하시오. 또한 아래 문항을 해결하시오. https://wikidocs.net/11613를 참조하시오. (1시간 소요)
가. for문의 종료조건에 숫자1 또는 true를 주어 무한루프를 만드시오.
나. 무한루프 이전의 밖에서 char password=0을 만드시오.
다. 무한루프 안에서 password를 scanf하시오.
라. password의 값이 a가 아니면 '다'를 반복하고 "입력한 값은 ~이며 암호가 틀렸습니다"를 출력하고, a 이면 break를 하여 반복문을 종료하도록 하시오. for문 뒤쪽 바깥에 "a를 입력하였으므로 종료되었습니다"를 출력하시오.
#include<stdio.h>
#pragma warning (disable:4996)
int main()
{
char password = ' ';
for (int i = 0; 1;) {
printf("패스워드를 입력하세요 :");
scanf("%c", &password);
if (password == '\n')
{
}
if (password == 'a') break;
else
printf("입력한 값은 %c이며 암호가 틀렸습니다\n", password);
}
printf("%c를 입력하였으므로 종료되었습니다", password);
return 0;
}
: 다른분이 한 걸 보니 scanf를 하면 문자 하나 뿐만 아니라 뒤에있는 '\n'까지 가져와서 printf가 한 번 더 실행되는 것이라고 한다.. 그래서 if(password=='\n') 을 통해 예외상황을 주고 자 했는데 실행문을 어찌 써야할 지몰라서 일단 패스 해두었다.
# 심화과제 제출 양식( 안해도 됨 )
1. 어떤 수의 모든 약수를 출력하는 프로그램을 만드시오. http://tujanote.cafe24.com/bbs/board.php?bo_table=pds2&wr_id=62&sca=C 를 참조하시오.
가. num=10 을 선언하시오. 2~num 까지 i가 출력되도록 하시오. num을 i로 나눈 나머지가 0인지 검사하시오. 이 때, 나머지가 0이면 약수이므로 이를 출력하시오.
나. num=2~100까지 증가시키며 각 수의 모든 약수를 찾으시오. 이를 printf 하시오. 예를들어, "~의 약수는 ~,~,~ 입니다." 처럼 출력하시오. (힌트 : 출력문은 '~의 약수는'과 '~,~,~'과 '입니다'로 나뉨. '입니다'는 루프가 끝난 후 삽입하면 됨. '~의 약수는 1,'는 1은 모든수의 약수이므로 항상 삽입하면 됨. )
가.
#include<stdio.h>
#pragma warning (disable:4996)
int main()
{
for (int num = 2; num <= 10; num++) {
printf("%d의 약수 : ", num);
for (int i = 1; i <= num; i++) {
if (num % i == 0) {
printf("%d ", i);
}
}
printf("\n");
}
return 0;
나.
#include<stdio.h>
#pragma warning (disable:4996)
int main()
{
for (int num = 2; num <= 100; num++) {
printf("%d의 약수는 ", num);
for (int i = 1; i <= num; i++) {
if (num % i == 0) {
printf("%d, ", i);
}
}
printf("입니다.\n");
}
return 0;
}
2. 소수를 출력하는 프로그램을 만드시오. http://tujanote.cafe24.com/bbs/board.php?bo_table=pds2&wr_id=65&sca=C 를 참조하시오.
가. 특정 숫자가 소수인지 아닌지 판별하시오. 예를들어, '1.가'에서 2~num까지 탐색할 때 단 한번이라도 num을 i로 나눈 나머지가 0이 나오면 소수가 아니다. 따라서, 단 한번이라도 0이 나오면 2~num의 루프를 break 하면 된다.
나. 2~100 까지 숫자 중 모든 소수를 출력하도록 해 보시오. 이를 printf 하시오.
다. '가'에서 2~num 까지 탐색하지말고 2~num/2+1 까지만 탐색하여도 결과가 같음을 보이시오. 한편, 그 이유를 설명하시오.
#include<stdio.h>
#pragma warning (disable:4996)
int main()
{
int s;
for (int num = 2; num < 100; num++) {
s = 1;
for (int i = 2; i < num; i++)
{
if (num % i == 0)
{
s = 0;
break;
}
}
if (s==1)
printf("%d, ", num);
}
return 0;
}
처음에 int s; 를 선언하여 s가 0일 때와 1일 때로 나누어 생각하는 방식을 몰라 게시글을 참조하여 코드 작성하였음.
다. 아직 해결 못함
3. 점화식 A n+1 = pAn + q를 푸시오.
가. p와 q를 입력받으시오.
나. int A=1 에서 시작하시오.
다. 항번호 n을 입력받으시오.
라. for문을 이용하여 n번까지 A = p*A + q 를 반복하여 푸시오.
마. 복합산술연산자에 대해 조사하시오. https://wikidocs.net/11597를 참조하시오.
바. '라'에서 A *= p, A += q 를 사용하여도 동일한 결과가 나옴을 확인하시오.
#include<stdio.h>
#pragma warning (disable:4996)
int main()
{
int p, q, n;
printf("점화식 An+1 = pAn + q에서 p의 값을 입력하세요 : ");
scanf("%d", &p);
printf("점화식 An+1 = pAn + q에서 p의 값을 입력하세요 : ");
scanf("%d", &q);
printf("항번호 n의 값을 입력하세요 : ");
scanf("%d", &n);
int A = 1;
for (int i = 1; i <= n-1; i++) {
printf("A%d = %d*A%d + %d\n", i + 1, p, i, q);
A = p * A + q;
}
printf("A%d = %d", n, A);
return 0;
}
#include<stdio.h>
#pragma warning (disable:4996)
int main()
{
int p, q, n;
printf("점화식 An+1 = pAn + q에서 p의 값을 입력하세요 : ");
scanf("%d", &p);
printf("점화식 An+1 = pAn + q에서 p의 값을 입력하세요 : ");
scanf("%d", &q);
printf("항번호 n의 값을 입력하세요 : ");
scanf("%d", &n);
int A = 1;
for (int i = 1; i <= n-1; i++) {
printf("A%d = %d*A%d + %d\n", i + 1, p, i, q);
A *= p, A += q;
}
printf("A%d = %d", n, A);
return 0;
}
- 같은 결과가 나왔다.
복합 산술 연산자
: 연산과 대입을 한번에 하게 해주는 연산자로, a = a+5; 와 같은 형태는 a+=5; 로 간단하게 나타낼 수 있다.
'프로그래밍 > C' 카테고리의 다른 글
C언어 8주차 과제 (0) | 2020.11.22 |
---|---|
C언어 7주차 과제 (0) | 2020.11.11 |
C언어 5주차 과제 (0) | 2020.11.02 |
C언어 4주차 과제 (0) | 2020.10.25 |
C언어 3주차 과제 (0) | 2020.10.12 |