= 곽길문 =

복습과제

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>

int main()
{
	int i,j;
	int num=1;
	int a;

	
	int k=0;

	printf("정수 입력:");
	scanf("%d",&a);
	

           //규칙 
	
	for(i=0;i<a;i++){
		
		for(j=0;j<=i;j++){
			
			printf("%d",num);
			printf(" ");
			num+=1;
		
		}
		
		printf("\n");
	}

	return 0;

}

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)
{
	int i,j;
	for(i=0;i<=a/2;i++){
		for(j=a/2;j>i;j--){
			printf(" ");
		}
		for(j=0;j<=i;j++){
			printf("*");
		}
		for(j=0;j<i;j++){
			printf("*");
		}
		printf("\n");
	
	}
	for(i=0;i<a/2;i++){
		for(j=0;j<=i;j++){
			printf(" ");
		
		}
		for(j=a/2;j>i;j--){
			printf("*");
		}
		for(j=a/2;j>i+1;j--){
			printf("*");
		
		}
	printf("\n");
	
	}
	return i,j;
}
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++)
		printf("%d\n",list[i]);

}

void sort(int a[], int n)
{

	int i,j,temp;
	for(i=0;i<n-1;i++){
	
		for(j=i+1;j<n;j++){
			if(a[i]>a[j]){
				temp=a[i];
				a[i]=a[j];
				a[j]=temp;
			}
		
		}
	
	}

}




•예습과제

1.2차원 배열이 무엇인지 쓰고, 어떻게 선언하는지도 작성한 뒤, 이를 이용한 간단한 프로그램을 작성해주세요.

-동일한 데이터형의 많은 변수를 처리하기 위한 단수 변수를 사용하면 변수이름을 각각 다른 이름으로 사용해야하기 때문에 많은 불편이 따른다. 이러한 불편함을 덜기 위하여 같은 데이터형인 일련의 기억장소를 표현한 변수를 '배열변수'라 한다. 즉 배열을 이용하면 여러개의 변수를 간단히 표현할 수가 있다. 2차원 배열은 '데이터형,배열명,그리고 [행]과[열]'을 나타내어 표현한다. 1차원 배열은 배열 요소의 크기와 데이터형이 동일한 기억장소를 1개의 차원으로 선언하였다고 말하면 2차원 배열은 2차원으로 선언(행과열)한 것이다. 

#include<stdio.h>

int main()
{
	static int x[2][3];   //2행 3열의 2차원 배열선언
	int j,k,sum;

	x[0][0] = 1;
	x[0][1] = 2;
	x[0][2] = 3;
	x[1][0] = 4;
	x[1][1] = 5;
	x[1][2] = 6;


	sum=0;
	for(j=0;j<2;j++)                //í–‰
		for(k=0;k<3;k++)  // ì—´
			sum=sum+x[j][k];
	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
	                 a[1] == *(ptr+1)
                             a[2] == *(ptr+2)

위와 같은 표현 가능하다.(포인터명에 *을 사용하는 것은 지시하는 곳에 저장된 값을 나타내는 것이다.)

차이점으로는 포인터는 변수인데 비해 배열은 상수이고 포인터는 언제든지 다른 대상을 가리킬수 있지만 배열은 선언될 때 그 위치가 이미 고정되어 다른 대상을 가리킬 수 없다.또한 포인터는 동적으로 결정할수 있지만 배열이 가리키는 배열의 크기는 선언할 때부터 정적으로 결정되어있다. 배열로 []연산자를 이용해 그 값을 읽는 것과 포인터 간접 참조 연산으로 그 값을 읽는 것의 속도 차이가 있다.

= 도상희 =

복습과제
1. 0과 1000 사이의 정수를 입력받아 모든 자릿수를 더하여 출력하는 프로그램을 짜 주세요.
/10, %10 등을 이용해서 해 보세요.
#include <stdio.h>
int main(){

	int num;
	int temp1, temp2, temp3;
	int	sum=0;
		
	printf("0-1000사이의 수 입력: ");
	scanf("%d", &num);

	if(num>=0 && num<=1000)
	{
		temp1=num/1000;
		temp2=num%1000;
		sum=temp1;
		temp1=temp2/100;
		temp3=temp2%100;
		sum+=temp1;
		temp1=temp3/10;
		temp2=temp3%10;
		sum+=temp1;
		sum+=temp2;
		printf("%d\n",sum);
	}else printf("0-1000사이의 숫자 아님\n");

	return 0;
}//01.c


2. 소문자를 대문자로 바꾸는 프로그램을 작성해 주세요.
#include <stdio.h>
int main(){

	char al1,al2 ;
	printf("ìž…ë ¥: ");
	scanf("%c",&al1);

	if(al1>='a' && al1<='z') //소문자일 경우
		al2=al1-32; //아스키코드에서 32빼서 소문자로 변환
	else if(al1>'A' && al1<='Z') //대문자일 경우
		al2=al1+32; //아스키코드에서 32를 더해서 대문자로 변환

	printf("%c\n",al2);

	return 0;
}//인터넷 참조했음! 02.c







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=1 ; i<=6 ; i++){
		for(j=1 ; j<i+1 ; j++){
			printf("%3d",num);
			num+=1;
		}
		printf("\n");
	}

	return 0;
}//03.c


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(){

	int i, j, k;
	int num=1;

	for(i=1 ; i<=6 ; i++){
		for(j=5 ; j>=i ; j--){
			printf("   ");
		}
		for(k=1 ; k<i+1 ; k++){
			printf("%3d",num);
			num+=1;
		}
		printf("\n");
	}

	return 0;
}//04.c
5. 위 두 프로그램을 일반화 시켜 입력받은 숫자만큼 출력해주는 프로그램을 작성해주세요.(위 프로그램은 21을 입력)
#include <stdio.h>
int main(){

	int i, j, n;
	int num=1;

	scanf("%d",&n);

	for(i=1 ; ; i++){
		for(j=1 ; j<i+1 ; j++){
			if(n==num){
				printf("%3d",num);
				printf("\n");
				return 0;
			}
			printf("%3d",num);
			num+=1;
		}
		printf("\n");
	}

	return 0;
}//05.c 


6. 위 프로그램처럼 숫자를 순서대로 출력하는 프로그램을 피라미드 형태로 작성해 주세요.
#include <stdio.h>
int main(){

	int i, j, k, n;
	int num=1;
	scanf("%d",&n);

	for(i=0;i<n;i++){
		for(j=1 ; j<n-i ;j++){
			printf("   ");
		}
		for(k=0 ; k<2*i+1 ; k++){
			printf("%3d",num);
			num++;
		}
		printf("\n");
	}

	return 0;
}


7. 위 프로그램처럼 숫자를 순서대로 출력하는 프로그램을 다이아몬드 형태로 작성해 주세요.




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-1)/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;
	}		
}//08.c 인터넷참조!



9. 101부터 200까지의 모든 정수를 더해서 반환하는 '함수'를 작성해주세요.
(main문에는 sum=Sum(); printf("%d",sum);이 있도록해주세요)
#include <stdio.h>
int Sum(void);
int main(){
	int sum;
	sum = Sum();
	printf("%d\n",sum);
	return 0;
}
int Sum(void){
	int x=101;
	int sum=0;
	for(x=101 ; x<=200 ; x++)
		sum+=x;
	
	return sum;
}//09.c









10. 재귀함수를 이용해 n!을 출력하는 프로그램을 작성해 주세요.
#include <stdio.h>

int fac(int);
int main(){
	int num;
	printf("숫자 입력 : ");
	scanf("%d", &num);

	printf("%d! = %d\n",num, fac(num));
	return 0;
}

int fac(int x){
	if(x==1)
		return 1;
	else
		return x*fac(x-1);
}//10.c



11. n!을 출력하는 프로그램을 for문으로 작성해주세요.
#include <stdio.h>
int main(){

	int i, num;
	int fac=1;
	printf("숫자 입력 : ");
	scanf("%d", &num);

	for(i=1 ; i<=num ; i++){
		fac *= i;
	}
	printf("%d! = %d\n",num, fac);

	return 0;
}//11.c



12. 재귀함수를 이용해 1부터10까지를 더하는 프로그램을 작성해 주세요.
#include <stdio.h>
int sum(int);
int main(){

	printf("1부터 10까지 합 : %d\n", sum(10));
	return 0;
}

int sum(int x){
	
	if(x>0)	return (x+sum(x-1));
	else return 0;

}
13. 배열에 {7,4,2,9,3,1,2}가 들어있습니다. 이 배열에서 3이 있는지 없는지를 찾아서 출력해주는 프로그램을 작성해주세요.
#include <stdio.h>
int main(){

	int arr[] = {7,4,2,9,3,1,2};
	int i;
	int k=0;
	for(i=0 ; i<7 ; i++){
		if(arr[i]==3) k++;
	}
	if(k!=0)
		printf("3 존재\n");
	else
		printf("3 없음\n");

	return 0;
}//13.c


14. 배열에 {7,4,2,9,3,1,2}가 들어있습니다. 이 배열에서 1이 몇번째에 있는지를 찾아서 출력해주는 프로그램을 작성해주세요. (단, 7은 첫번째입니다)
#include <stdio.h>
int main(){
	int arr[]={7,4,2,9,3,1,2};
	int i;
	for(i=0 ; i<7 ; i++){
		if(arr[i]==1)
			printf("%d 번째\n",i+1);
	}
	return 0;
}//14.c

15. 배열에 {7,4,2,9,3,1,2}가 들어있습니다. 이 배열에서 2가 있는지 없는지를 검사하고, 있다면 어디에 있는지 전부 출력해주는 프로그램을 작성해주세요.
#include <stdio.h>
int main(){
	int i;
	int c=0;
	int arr[]={7,4,2,9,3,1,2};

	for(i=0 ; i<7 ; i++){
		if(arr[i]==2) c++;
	}
	if(c!=0){
		printf("2 있음\n");
		for(i=0 ; i<7 ; i++){
			if(arr[i]==2) printf("%d번째 존재\n",i+1);
		}
	}else printf("2 없음\n");
	return 0;
}//15.c



16. 배열에 {7,4,2,9,3,1,2}가 들어있습니다. 이 배열을 정렬(오름차순으로)하고, 출력하는 프로그램을 작성해주세요.
#include <stdio.h>
int main(){

	int arr[]={7,4,2,9,3,1,2};
	int temp;
	int i,j;

	for(i=0 ; i<7 ;i++)	printf("%d  ",arr[i]);
	printf("\n");

	for(i=0 ; i<6 ; i++){
		for(j=i+1 ; j<7 ; j++){
			if(arr[i]>=arr[j]){
				temp=arr[i];
				arr[i]=arr[j];
				arr[j]=temp;
			}
		}
	}

	for(i=0 ; i<7 ;i++)	printf("%d  ",arr[i]);
	printf("\n");

	return 0;
}//16.c



예습과제
1. 2차원 배열이 무엇인지 쓰고, 어떻게 선언하는지도 작성한 뒤, 이를 이용한 간단한 프로그램을 작성해주세요.
int arr[i][j];
길이가 i인 int형 배열을 j개 모아 놓은 배열.
첫번째 인덱스 값(i)이 의미하는 바는 세로줄(열)의 길이이고, 두번째 인덱스 값(j)이 의미하는 바는 가로줄(행)의 길이.

#include <stdio.h>
int main(){
	int arr[3][3] = {
		{1,2,3},
		{4,5,6},
		{7,8,9},
	};
	int i,j;
	for(i=0 ; i<3 ; i++){
		for(j=0 ; j<3 ; j++){
			printf("%d  ",arr[i][j]);
		}
		printf("\n");
	}
	return 0;
}
2. srand()함수가 무엇인지 찾아쓰고, time()을 이용해 랜덤으로 숫자를 하나 출력하는 프로그램을 작성해주세요.
seed값을 입력받아 난수를 생성하는 함수.
rand()%a+b : a부터 b까지 수 랜덤 출력
#include <stdio.h>
#include <stdlib.h> //rand함수 사용 
#include <time.h> //time함수 사용

int main(){

	srand(time(NULL));
	printf("%d\n",rand()%100+1); //1-100중 하나 출력

	return 0;
}//1_02.c


3. 포인터가 무엇인지 쓰고, 포인터를 선언하는 방법을 쓰세요.
포인터란 메모리의 주소 값을 저장하기 위한 변수. 타입에 상관없이 크기는 4바이트(컴퓨터 주소 체계가 4바이트로 표현된다는 것을 의미)

int *a; //int형 변수의 주소 값을 지닐 수 있는 int형 포인터.
char *b; // char형 변수의 주소 값을 지닐 수 있는 char형 포인터.
double *c; // double형 변수의 주소 값을 지닐 수 있는 double형 포인터.


4. 배열과 포인터의 공통점과 차이점을 찾아보고, 써보도록 하세요.
배열 arr가 선언되어 있고, 포인터 p이 배열의 시작주소를 가리키고 있다면!

<배열과 포인터의 공통점>
 - arr와 p은 주소를 나타냄
 - arr[i]와 *(p+i)는 같음
 - arr[i]와 p[i]는 같음
 - *arr 혹은 *p이 가능함
 - *(arr+i) 혹은 *(p+i)가 가능
 
 <배열과 포인터의 차이점>
 - 배열명은 상수이고 포인터는 변수
 - 배열명에 주소를 대입할 수 없다.
 - 배열명에 증감연산자(array++, array--)를 쓸 수 없다

= 한송이 =
복습과제
1. 0과 1000 사이의 정수를 입력받아 모든 자릿수를 더하여 출력하는 프로그램을 짜 주세요.(/10, %10 등을 이용해서 해 보세요.)
#include <stdio.h>

int main()
{
	int num,a,b,c,d;

	printf("숫자를 입력하세요 :  ”);
	scanf("%d",&num);

	if(99<num && num<1000)
	{
		a=num/100;
		b=num%100;
		c=b/10;
		d=b%10;
		printf("%d의 자리수의 합은 %d입니다.\n",num,a+c+d);
	}

	else if(num<100)
	{
		a=num/10;
		b=num%10;
		printf("%d의 자리수의 합은 %d입니다.\n",num,a+b);
	}

}

2. 소문자를 대문자로 바꾸는 프로그램을 작성해 주세요.
#include<stdio.h>
#include<string.h>


int main()
{
	char in[50],out[50];
	int i,len;
	int diff='a'-'A';

	printf("문자 입력 : ");
	gets(in);

	len = strlen(in);
	
	for(i=0;i<len;i++)
	{
		if(('A'<=in[i]) && (in[i]<='Z'))
			out[i] = in [i] + diff;
		else if (('a'<=in[i]) && (in[i]<='z'))
			out[i] = in[i]-diff;
		else
			out[i] = in[i];
	}
	out[i] = '\0';

	printf("변환된 문자 : %s \n", out);
}
////책에서 참고
3. 다음 모양을 출력하는 프로그램을 작성해 주세요.
o	한자리 숫자이다가 2자리 숫자이면서 깨지는 것은 예외처리해주셔도 되고 하지 않으셔도 됩니다.
o	방법은 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

4. 다음 모양을 출력하는 프로그램을 작성해 주세요.
                1
             2  3
          4  5  6
       7  8  9 10
   11 12 13 14 15
16 17 18 19 20 21

5. 위 두 프로그램을 일반화 시켜 입력받은 숫자만큼 출력해주는 프로그램을 작성해주세요.(위 프로그램은 21을 입력)

6. 위 프로그램처럼 숫자를 순서대로 출력하는 프로그램을 피라미드 형태로 작성해 주세요.

7. 위 프로그램처럼 숫자를 순서대로 출력하는 프로그램을 다이아몬드 형태로 작성해 주세요.

8. 아래 프로그램을 참고하여 60점 이하는 F, 61~70점 D, 71~80 C, 81~90 B, 90~ A인 프로그램을 작성해주세요.
#include <stdio.h>
int main()
{
	int num;
	char grade;

	printf("성ù¨¬적u 입O력¤A : ");
	scanf("%d", &num);

	switch(num/10){
	    case 10 :
		printf("A\n");
			break;
		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 n);

int main()
{
	int sum;
	sum=Sum(200);
	printf("101~200까¾i지o의C 합O은¨¬ %d\n",Sum);
	return 0;
}
int Sum(int n)
{
	if(n==101)
		return 0;
	else 
	return n+Sum(n-1);
}


10. 재귀함수를 이용해 n!을 출력하는 프로그램을 작성해 주세요.
#include <stdio.h>

int fact(int n);

int main()
{
	int n;

	printf("숫자를 입력하세요 : ");
	scanf("%d",&n);
	printf("fact(%d) = %1d입니다. \n",n,fact(n));

}

int fact(int n)
{
	if(n==0)
		return 1;
	else 
		return n*fact(n-1);
}

11. n!을 출력하는 프로그램을 for문으로 작성해주세요.
#include <stdio.h>


int main()
{
	int n,i;
	int fact=1;

	printf("숫자를 입력하세요 : ");
	scanf("%d",&n);

	for(i=1;i<=n;i++)
	{
		fact =i*fact;
		

	 }
	printf("%d! = %d\n",n,fact);
	 

	return 0;
}



12. 재귀함수를 이용해 1부터10까지를 더하는 프로그램을 작성해 주세요.
.#include <stdio.h>

int hap(int n);

int main()
{
	printf("1~10까지의 합은 %d\n",hap(10));
	return 0;
}
int hap(int n)
{
	if(n==0)
		return 0;
	else 
	return n+hap(n-1);
}

13. 배열에 {7,4,2,9,3,1,2}가 들어있습니다. 이 배열에서 3이 있는지 없는지를 찾아서 출력해주는 프로그램을 작성해주세요.

#include<stdio.h>


int main()
{
	int arr[] = {7,4,2,9,3,1,2};
	int i;

	for(i=0;i<=7;i++ )
	{


	
	}
	printf("3이 있습니다.");
}
	
//////For문 안에 어떻게 해야할지 잘 모르겠어요 


14. 배열에 {7,4,2,9,3,1,2}가 들어있습니다. 이 배열에서 1이 몇번째에 있는지를 찾아서 출력해주는 프로그램을 작성해주세요. (단, 7은 첫번째입니다)



15. 배열에 {7,4,2,9,3,1,2}가 들어있습니다. 이 배열에서 2가 있는지 없는지를 검사하고, 있다면 어디에 있는지 전부 출력해주는 프로그램을 작성해주세요.


16. 배열에 {7,4,2,9,3,1,2}가 들어있습니다. 이 배열을 정렬(오름차순으로)하고, 출력하는 프로그램을 작성해주세요.


•  예습과제
1.	2차원 배열이 무엇인지 쓰고, 어떻게 선언하는지도 작성한 뒤, 이를 이용한 간단한 프로그램을 작성해주세요.
배열의 첨자가 두 개인 배열
원소 자료형 배열이름[배열크기1][배열크기2];
#include<stdio.h>

int main()
{
	int arr[3][3];
	int i,j;
	int k=1;

	for(i=0;i<3;i++)
	{
		for(j=0;j<3;j++)
		{
			arr[i][j]=k;
			k++;
		}
	}

	printf("arr[0][0]부¬I터I arr[3][3]까지 출력\n");

	for(i=0;i<3;i++)
	{
		for(j=0;j<3;j++)
		{
			printf("%2d",arr[i][j]);
			
		}
		printf("\n");
	}

}


2.	srand()함수가 무엇인지 찾아쓰고, time()을 이용해 랜덤으로 숫자를 하나 출력하는 프로그램을 작성해주세요.
Void srand(unsigned int SEED);
Rand가 생성하는 초기 난수를 변경함. SEED는 초기 난수를 변경하는데 사용되지만 SEED자체가 초기난수가 되는 것은 아님
헤더파일 : <stdlib.h>

3.	포인터가 무엇인지 쓰고, 포인터를 선언하는 방법을 쓰세요.
포인터 – 메모리에 부여된 주소 주소‘값’을 나타낼 때는 포인터 상수라 하고, 주소를 저장할 수 있는 ‘변수’를 나타내는 포인터 변수라 한다.
자료형*포인터 변수; 
4. 배열과 포인터의 공통점과 차이점을 찾아보고, 써보도록 하세요.
***공통점
배열과 포인터 둘다 메모리 주소값을 나타낸다.
*** 차이점
1)포인터는 변수인데 비해 배열은 상수이다.
2)포인터가 가르키는 배열의 크키는 동적으로 결정할 수 있지만 배열의 크기는 선언할 때 정적으로 결정된다.
3)배열은 그 자체가 크기 때문에 함수의 인수로 전달할 수 없지만 포인터는 대상체가 무엇이든간에 4바이트와 크기밖에 차지하지 않으므로 함수로 전달할 수 있다.
4)배열로 요소를 읽는 것과 포인터로 대상체를 읽는 동작의 속도 차이가 있다.

완전히 못푼문제
 :3,4,5,6,7,14,15,16

= 황혜림 =
예습과제
1. 2차원 배열이 무엇인지 쓰고, 어떻게 선언하는지도 작성한 뒤, 이를 이용한 간단한 프로그램을 작성해주세요.
- 배열의 첨자가 두 개인 배열이다. 
int a[2][3]; // 2행 3열의 2차원 배열
2. srand()함수가 무엇인지 찾아쓰고, time()을 이용해 랜덤으로 숫자를 하나 출력하는 프로그램을 작성해주세요.
-srand함수는 여러 개의 난수표 중 하나를 선택하는 것이고, rand 함수는 선택된 난수표로부터 값을 꺼내오는 것이다. srand함수에는 인자가 하나 들어가는데, 그것을 seed값이라고 한다.
3. 포인터가 무엇인지 쓰고, 포인터를 선언하는 방법을 쓰세요.
- 포인터는 가리키는 변수의 시작주소(메모리의 위치)를 기호화 한 것
int a;
int *pa; // a의 포인터변수 
pa=&a; // 포인터 변수의 초기화
4. 배열과 포인터의 공통점과 차이점을 찾아보고, 써보도록 하세요.
공통점 : 배열이름만 쓰면 주소를 가리킨다.
차이점 : 포인터는 언제든지 다른 대상을 가리킬 수 있지만 배열은 값이 고정되어 있다.