복습과제
1.0과 1000 사이의 정수를 입력받아 모든 자릿수를 더하여 출력하는 프로그램을 짜 주세요.
#include<stdio.h>
int main()
{
int num =0;
int sum =0;
printf("0과 1000사이의 정수를 입력 :\n");
scanf("%d", &num);
do
{
sum += num %10;
num/=10;
}while(!(num == 0));
printf("각 자리수들의 합 : %d \n",sum);
return 0;
}
2.소문자를 대문자로 바꾸는 프로그램을 작성해 주세요.
#include <stdio.h>
int main()
{
char replace;
printf("소문자 : ");
scanf("%c",&replace);
if( 97 <= replace && replace <= 129){
printf("대문자는 :%c\n", replace-32);
}else if( 65 <=replace && replace <= 90){
printf("대문자는 :%c\n", replace+32);
}
return 0;
}
3.다음 모양을 출력하는 프로그램을 작성해 주세요.
한자리 숫자이다가 2자리 숫자이면서 깨지는 것은 예외처리해주셔도 되고 하지 않으셔도 됩니다.
방법은 if(10>x) printf(" ");입니다.
1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
16 17 18 19 20 21
#include<stdio.h>
int main()
{
int i,j;
int num=1;
for(i=0;i<5;i++){
for(j=0;j<=i;j++){
printf("%d",num);
printf(" ");
num+=1;
}
printf("\n");
}
return 0;
}
4.다음 모양을 출력하는 프로그램을 작성해 주세요.
1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
16 17 18 19 20 21
#include<stdio.h>// 자리 못 맞추겠음..
int main(void)
{
int a;
int b;
int num = 1;
for(a=1;a<6;a++){
for(b=6;b>a;b--){
printf(" ");
}
for(b=1;b<=a;b++){
printf("%d",num);
num+=1;
}
printf("\n");
}
}
5.위 두 프로그램을 일반화 시켜 입력받은 숫자만큼 출력해주는 프로그램을 작성해주세요.(위 프로그램은 21을 입력)
//1.3.6.10 수열이 규칙을 찾아서 행을 만들어 주려고 한다… 코딩 생각 하는데 시간이 세시간 초과.. 그래서 6을 입력하면 행이 6이 되는 삼각형 만듬..
#include<stdio.h>
6.위 프로그램처럼 숫자를 순서대로 출력하는 프로그램을 피라미드 형태로 작성해 주세요.
// 숫자로 못하겠어서 별로 만들어 봤어요.
#include<stdio.h>
int main()
{
int i;
int star;
int blank;
int scan;
printf("행수 입력:");
scanf("%d",&scan);
for(i=1;i<=scan;i++)
{
for(blank=scan; blank>i;blank--)
printf(" ");
for(star=1;star<=2*i-1;star++)
printf("*");
printf("\n");
}
}
7.위 프로그램처럼 숫자를 순서대로 출력하는 프로그램을 다이아몬드 형태로 작성해 주세요.
// *로 해봤어요..
#include<stdio.h>
int diamond(int a);
int main()
{
int i;
printf("행수 입력-홀수: ");
scanf("%d",&i);
diamond(i);
return 0;
}
int diamond(int a)
{
}
8.아래 프로그램을 참고하여 60점 이하는 F, 61~70점 D, 71~80 C, 81~90 B, 90~ A인 프로그램을 작성해주세요.
#include <stdio.h>
int main(){
int num;
printf("성적 입력 : ");
scanf("%d", &num);
switch(num/10){
case 10 :
case 9 :
printf("A\n");
break;
case 8 :
printf("B\n");
break;
case 7 :
printf("C\n");
break;
case 6:
printf("D\n");
break;
default :
printf("F\n");
break;
}
}
9.101부터200까지의 모든 정수를 더해서 반환하는 '함수'를 작성해주세요.(main문에는 sum=Sum(); printf("%d",sum);이 있도록해주세요)
#include<stdio.h>
int Sum(int x);
int main()
{
int su;
int sum;
sum=Sum(su);
printf("101부터 200까지의 합: %d\n",sum);
return 0;
}
int Sum(int x)
{
int sum=0;
for(x=100;x<201;x++)
sum+=x;
return x,sum;
}
10.재귀함수를 이용해 n!을 출력하는 프로그램을 작성해 주세요.
#include<stdio.h>
int factorial(int x);
int main()
{
int n;
printf("수 입력:");
scanf("%d",&n);
factorial(n);
printf("%d! = %d\n",n,factorial(n));
return 0;
}
int factorial(int x){
if(x==1)
return 1;
else return
x*factorial(x-1);
}
11.n!을 출력하는 프로그램을 for문으로 작성해주세요.
#include<stdio.h>
int main()
{
int j;
int a;
int factorial=1;
printf("factorial,input number:");
scanf("%d",&a);
if(a==1)
return 1;
for(j=1;j<=a;j++){
factorial *=j;
}
printf("%d\n",factorial);
return 0;
}
12.재귀함수를 이용해 1부터10까지를 더하는 프로그램을 작성해 주세요.
#include<stdio.h>
int self(int x);
int main(){
int result;
int a;
result =self(a);// 재귀 함수
printf("%d\n",result);
return 0;
}
int self(int x){
int sum=0;
for(x=1;x<11;x++){
sum=x+sum;
}
return x,sum;
}
13.배열에 {7,4,2,9,3,1,2}가 들어있습니다. 이 배열에서 3이 있는지 없는지를 찾아서 출력해주는 프로그램을 작성해주세요.
#include<stdio.h>
int main()
{
int a
7= {7,4,2,9,3,1,2};
int i=0;
for(i=0;i<7;i++){
if(a
i==3)
printf("3이 있습니다.");
}
return 0;
}
14.배열에 {7,4,2,9,3,1,2}가 들어있습니다. 이 배열에서 1이 몇번째에 있는지를 찾아서 출력해주는 프로그램을 작성해주세요. (단, 7은 첫번째입니다)
#include<stdio.h>
int main()
{
int a
7= {7,4,2,9,3,1,2};
int i=0;
int count=0;
for(i=0;i<7;i++){
count+=1;
if(a
i==1){
printf("1이 %d번째에 있습니다.", count);
}
}
}
15.배열에 {7,4,2,9,3,1,2}가 들어있습니다. 이 배열에서 2가 있는지 없는지를 검사하고, 있다면 어디에 있는지 전부 출력해주는 프로그램을 작성해주세요.
// 몇번째 있는지는 if문이 두 번돌아서 3번째 7번째 뜨는데.. 한번에 출력하는 거는 잘 못하겠어요…
#include<stdio.h>
int main()
{
int a
7= {7,4,2,9,3,1,2};
int i=0;
int count=0;
for(i=0;i<7;i++){
count+=1;
if(a
i==2){
printf("2가 %d번째에 있습니다.\n", count);
}
}
}
16.배열에 {7,4,2,9,3,1,2}가 들어있습니다. 이 배열을 정렬(오름차순으로)하고, 출력하는 프로그램을 작성해주세요.
#include<stdio.h>
void sort(int a[], int n);
void main()
{
int list
7={7,4,2,9,3,1,2};
int n=sizeof(list)/sizeof(int);
int i;
sort(list,n);
for(i=0;i<7;i++)
}
void sort(int a[], int n)
{
int i,j,temp;
for(i=0;i
}
}
•예습과제
1.2차원 배열이 무엇인지 쓰고, 어떻게 선언하는지도 작성한 뒤, 이를 이용한 간단한 프로그램을 작성해주세요.
-동일한 데이터형의 많은 변수를 처리하기 위한 단수 변수를 사용하면 변수이름을 각각 다른 이름으로 사용해야하기 때문에 많은 불편이 따른다. 이러한 불편함을 덜기 위하여 같은 데이터형인 일련의 기억장소를 표현한 변수를 '배열변수'라 한다. 즉 배열을 이용하면 여러개의 변수를 간단히 표현할 수가 있다. 2차원 배열은 '데이터형,배열명,그리고
행과
열'을 나타내어 표현한다. 1차원 배열은 배열 요소의 크기와 데이터형이 동일한 기억장소를 1개의 차원으로 선언하였다고 말하면 2차원 배열은 2차원으로 선언(행과열)한 것이다.
#include<stdio.h>
int main()
{
static int x
23; //2행 3열의 2차원 배열선언
int j,k,sum;
x
00 = 1;
x
01 = 2;
x
02 = 3;
x
10 = 4;
x
11 = 5;
x
12 = 6;
sum=0;
for(j=0;j<2;j++) //행
printf("2차원 배열의 합=%d\n",sum);
}
2.srand()함수가 무엇인지 찾아쓰고, time()을 이용해 랜덤으로 숫자를 하나 출력하는 프로그램을 작성해주세요.
- 난수(random number)를 생성할때 stdlib.h헤더파일을 코드에 포함시키고 srand()를 사용한다.rand()함수는 매번 그 값이 같은 반면에 매실행때마다 난수를 다르게 생성하기 위해서 srand()를 사용한다.
srand역시 stdlib.h에 포함되어 있다. srand는 시드값을 주어 사용하는 것이고 그 시드값으로부터 특정한 법칙으로 난수를 생성하는 것이다.따라서 매번 다른 난수를 얻으려면 시드값을 계속 바꾸어주어야 한다.
이러한 코드개선을 위해서 time()함수를 사용해야 한다. 이 함수를 사용하기 위해 time.h 헤더 파일을 코드에 포함시켜야 한다. 또한 time함수는 1970년 1월 1일 이후 경과된 시간을 초 단위로 반환하는 함수 이다.
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int a=0;
printf("rand()함수를 사용,1개의 random number 나타내기 \n");
srand(time(NULL)); //시드값 = 시간
printf("%d\n",rand());
return 0;
}
3.포인터가 무엇인지 쓰고, 포인터를 선언하는 방법을 쓰세요.
-포인터는 기억장소에 있는 어떤 변수의 주소를 말한다. 즉, 다른 기억장소 위치의 주소를 갖고 있는 변수이다.포인터는 두개의 단일 연산자인 &와 *로서 정의한다. &연산자는 일반적인 변수 이름으로 사용되고 그 변수의 주소를 의미한다. 즉 &a는 a의 주소를 의미한다. *p는 p안에 있는 주소 위치의 내용을 의미한다. &는 주소 연산자이고 , *는 간접 연산자로 포인터선언을 의미한다. 일반적인 포인터 선언형식: 데이터형 *포인터변수명; 이다.
4.배열과 포인터의 공통점과 차이점을 찾아보고, 써보도록 하세요.
-공통적인 부분은 배열이 첨자에 의해서 행해지는 조작은 포인터로서 모두 표현할 수 있다는 것이다.
예를 들어
선언문 ---> int a
3, int *ptr =a;
배열과 선어문 ---> a
0 == *ptr
위와 같은 표현 가능하다.(포인터명에 *을 사용하는 것은 지시하는 곳에 저장된 값을 나타내는 것이다.)
차이점으로는 포인터는 변수인데 비해 배열은 상수이고 포인터는 언제든지 다른 대상을 가리킬수 있지만 배열은 선언될 때 그 위치가 이미 고정되어 다른 대상을 가리킬 수 없다.또한 포인터는 동적으로 결정할수 있지만 배열이 가리키는 배열의 크기는 선언할 때부터 정적으로 결정되어있다. 배열로 []연산자를 이용해 그 값을 읽는 것과 포인터 간접 참조 연산으로 그 값을 읽는 것의 속도 차이가 있다.