U E D R , A S I H C RSS

새싹교실/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.1353 sec