U E D R , A S I H C RSS

새싹교실/2012/AClass/2회차 (rev. 1.2)

새싹교실/2012/AClass/2회차

곽길문


복습과제

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

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
printf("*");
}
printf("\n");

}
for(i=0;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 a7= {7,4,2,9,3,1,2};
int i=0;


for(i=0;i<7;i++){
if(ai==3)
printf("3이 있습니다.");

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

#include<stdio.h>

int main()
{

int a7= {7,4,2,9,3,1,2};
int i=0;
int count=0;

for(i=0;i<7;i++){
count+=1;
if(ai==1){

printf("1이 %d번째에 있습니다.", count);
}
}

}
15.배열에 {7,4,2,9,3,1,2}가 들어있습니다. 이 배열에서 2가 있는지 없는지를 검사하고, 있다면 어디에 있는지 전부 출력해주는 프로그램을 작성해주세요.
// 몇번째 있는지는 if문이 두 번돌아서 3번째 7번째 뜨는데.. 한번에 출력하는 거는 잘 못하겠어요…
#include<stdio.h>

int main()
{

int a7= {7,4,2,9,3,1,2};
int i=0;
int count=0;

for(i=0;i<7;i++){
count+=1;
if(ai==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 list7={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",listi);

}

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

int i,j,temp;
for(i=0;i
for(j=i+1;j
if(ai>aj){
temp=ai;
ai=aj;
aj=temp;
}

}

}

}




•예습과제

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

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

#include<stdio.h>

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

x00 = 1;
x01 = 2;
x02 = 3;
x10 = 4;
x11 = 5;
x12 = 6;


sum=0;
for(j=0;j<2;j++) //행
for(k=0;k<3;k++) // 열
sum=sum+xjk;
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 a3, int *ptr =a;
배열과 선어문 ---> a0 == *ptr
a1 == *(ptr+1)
a2 == *(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
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
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
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
for(j=1 ; 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(arri==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(arri==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(arri==2) c++;
}
if(c!=0){
printf("2 있음\n");
for(i=0 ; i<7 ; i++){
if(arri==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 ",arri);
printf("\n");

for(i=0 ; i<6 ; i++){
for(j=i+1 ; j<7 ; j++){
if(arri>=arrj){
temp=arri;
arri=arrj;
arrj=temp;
}
}
}

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

return 0;
}//16.c



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

#include <stdio.h>
int main(){
int arr33 = {
{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 ",arrij);
}
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은 주소를 나타냄
- arri와 *(p+i)는 같음
- arri와 pi는 같음
- *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
{
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 in50,out50;
int i,len;
int diff='a'-'A';

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

len = strlen(in);
for(i=0;i
{
if(('A'<=ini) && (ini<='Z'))
outi = in i + diff;
else if (('a'<=ini) && (ini<='z'))
outi = ini-diff;
else
outi = ini;
}
outi = '\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 arr33;
int i,j;
int k=1;

for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
arrij=k;
k++;
}
}

printf("arr00부¬I터I arr33까지 출력\n");

for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
printf("%2d",arrij);
}
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 a23; // 2행 3열의 2차원 배열
2. srand()함수가 무엇인지 찾아쓰고, time()을 이용해 랜덤으로 숫자를 하나 출력하는 프로그램을 작성해주세요.
-srand함수는 여러 개의 난수표 중 하나를 선택하는 것이고, rand 함수는 선택된 난수표로부터 값을 꺼내오는 것이다. srand함수에는 인자가 하나 들어가는데, 그것을 seed값이라고 한다.
3. 포인터가 무엇인지 쓰고, 포인터를 선언하는 방법을 쓰세요.
- 포인터는 가리키는 변수의 시작주소(메모리의 위치)를 기호화 한 것
int a;
int *pa; // a의 포인터변수
pa=&a; // 포인터 변수의 초기화
4. 배열과 포인터의 공통점과 차이점을 찾아보고, 써보도록 하세요.
공통점 : 배열이름만 쓰면 주소를 가리킨다.
차이점 : 포인터는 언제든지 다른 대상을 가리킬 수 있지만 배열은 값이 고정되어 있다.


Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:29:45
Processing time 0.0960 sec