C언어 비트단기 4일차(배열과 포인터 실습)

=============================================================================

배열과 포인터 실습 프로그램


/*#include <stdio.h>


int main(void)

{

int i = 2;

int j = 2;


if(i == j)

{

printf("같다\n");

}

else

{

printf("다르다\n");

}

return 0;

}*/


/*#include <stdio.h>


int main(void)

{

int arr[2] = {1,2};

int arr2[2] = {1,2,};


if(arr == arr2)

{

printf("같다\n");

}

else

{

printf("다르다\n");

}

return 0;

}*/


/*#include <stdio.h>


int main(void)

{

int arr[3] = {1,2,3};

int *p;


printf("%d\n",*arr);

printf("%d\n",*(arr+1));


printf("%d\n",arr[0]);

printf("%d\n",arr[1]);

printf("%d\n",arr[2]);


printf("%d\n",1[arr]);

printf("%d\n",*(1+arr));


p = arr;

printf("%d\n",p); //주소

printf("%d\n",*p); //값

printf("%d\n",*(p+1));


return 0;

}*/


#include <stdio.h>


int main(void)

{

int i = 0;

int arr[3] = {1,2,3};

int *p;

int *p2;

p = arr;


for(i = 0 ; i < sizeof(arr)/sizeof(arr[0]);  i++) //포인터보다 속도가 느리다.

{

printf("%d\n",arr[i]);

}


p = arr;

p2 = arr+3;


for(p = arr;p<p2; p++) //배열보다 속도가 더 빠르다.

{

printf("%d\n",*p);

}

return 0;

}


=============================================================================

1. 한 학생의 국어 성적, 영어 성적, 수학 성적을 관리하는 배열을 선언하세요. 

     그리고 초기값으로 국어 성적은 80, 영어 성적은 60, 수학 성적은 90으로 지정하고 각 원소의 값을 출력하세요.


#include <stdio.h>


int main(void)

{

int student[3] = {80,60,90};

int i = 0;


printf("국어\t영어\t수학\t\n");

for(i = 0;  i < 3; i++)

{

printf("%d\t",*(student+i));

}


return 0;

}

=============================================================================

세 학생의 국어 성적, 영어 성적, 수학 성적을 관리하는 배열을 선언하세요.

    그리고 세 명의 성적을 입력받아 과목별 합계와 평균을 출력하시오.

    그리고 학생별로 합계와 평균을 출력하시오.



#include <stdio.h>


int main(void)

{

int korea[3] = {0};

int english[3] = {0};

int math[3] = {0};

int i = 0;

int sum[3] = {0};

int korea_sum = 0;

int math_sum = 0;

int english_sum = 0;

double korea_avg = 0.0;

double math_avg = 0.0;

double english_avg = 0.0;

double average[3] = {0.0};


printf("국어 성적을 입력하세요:\n");

for(i = 0 ; i <3 ; i++)

{

scanf_s("%d",&korea[i]);

}


printf("영어 성적을 입력하세요:\n");

for(i = 0 ; i <3 ; i++)

{

scanf_s("%d",&english[i]);

}


printf("수학 성적을 입력하세요:\n");

for(i = 0 ; i <3 ; i++)

{

scanf_s("%d",&math[i]);

}


for(i = 0 ; i <3 ; i++)

{

korea_sum += korea[i];

}

printf("국어 점수의 합계 = %d점\n",korea_sum);


korea_avg = (double)korea_sum / 3.0;


printf("국어 점수의 평균 = %.2lf점\n",korea_avg);

printf("\n");


for(i = 0 ; i <3 ; i++)

{

english_sum += english[i];

}

printf("영어 점수의 합계 = %d점\n",english_sum);


english_avg = (double)english_sum / 3.0;


printf("영어 점수의 평균 = %.2lf점\n",english_avg);

printf("\n");


for(i = 0 ; i <3 ; i++)

{

math_sum += math[i];

}

printf("수학 점수의 합계 = %d점\n",math_sum);


math_avg = (double)math_sum / 3.0;


printf("수학 점수의 평균 = %.2lf점\n",math_avg);

printf("\n");


for(i =0; i < 3 ; i++)

{

sum[i] += ((korea[i]) +(english[i]) +(math[i]));

}


for(i = 0 ; i < 3; i++)

{

*(average+i) = (double)*(sum+i) / 3.0;

}


for(i = 0 ; i < 3; i++)

{

printf("%d번째 학생 합계 = %d점, 평균 = %.2lf점입니다.\n",i+1,*(sum+i),*(average+i));

}

return 0;

}

=============================================================================

char 형식을 원소로 하는 포인터 변수 p를 선언하고 1000으로 초기화하세요. 

    그리고 p에 4를 더한 후에 p가 얼마인지 출력하세요


#include <stdio.h>


int main(void)

{

char *p = (char *)1000;


p = p+4;


printf("p = %d\n",p);

}

=============================================================================

short 형식을 원소로 하는 포인터 변수 p를 선언하고 1000으로 초기화하세요. 

    그리고 p에 4를 더한 후에 p가 얼마인지 출력하세요. 

#include <stdio.h>


int main(void)

{

short *p = (short*)1000;


p = p + 4;


printf("p = %d\n",p);

return 0;

}

=============================================================================

int 형식을 원소로 하며 원소 개수가 10인 배열 arr을 선언하세요.

     int 형식을 원소로 하는 포인터 변수 p를 선언하고 arr+5로 초기화하세요. 

     arr과 p의 값을 출력하세요.


#include <stdio.h>


int main(void)

{

int arr[10] = {0};

int *p;


p = arr+5;


printf("arr = %d\n",arr);

printf("p = %d\n",p);


return 0;

}

=============================================================================

 2. 한 명의 국어, 영어, 수학 성적을 관리하는 프로그램을 작성하시오.  (배열 버전)

       a. 국어, 영어, 수학 성적은 초기값을 -1로 설정합니다.   

       b. 프로그램은 다음을 반복합니다.

           b.1 “I: 추가 D: 삭제 S:검색 L:전체 출력 E:종료”를 화면에 출력

          b.2 하나의 문자를 입력받음

          b.3 입력받은 문자가 ‘i’ 혹은 ‘I’일 때는 추가, ‘d’ 혹은 ‘D’일 때는 삭제 , ‘s’ 혹은 ‘S’일 때는 검색, 

                 ‘l’, ‘L’일 때는 전체 출력을 수행합니다.  

     * 추가 기능에서는 과목을 선택한 후에 성적을 입력받아 해당 과목의 성적을 설정합니다.  

     *삭제 기능에서는 과목을 선택한 후에 선택한 과목의 성적을 -1로 설정합니다.  

      *검색 기능에서는 과목을 선택한 후에 선택한 과목의 성적을 출력합니다.  

     *전체 출력에서는 모든 과목의 성적을 출력합니다.

        (단, E를 누르면 프로그램을 종료)



#include <stdio.h>

#include <stdlib.h>


int main(void)

{

int korea[1] = {-1};

int english[1] = {-1};

int math[1] = {-1};

char munja = ' ';

int num = 0;


while(1)

{

printf("I : 추가 D : 삭제 S : 검색 L : 전체출력 E : 종료\n");

scanf_s(" %c",&munja,1);


switch(munja)

{

case 'i':

case 'I':

printf("어떤 과목을 선택하시겠습니까? \n");

printf("1 : 국어 2 : 영어 3 : 수학");

scanf_s("%d",&num);



if(num == 1)

{

printf("국어 성적 입력하세요 :\n");

scanf_s("%d",&korea[0]);


if(korea[0] > 100 || korea[0] < 0)

{

printf("잘못된 수 입력\n");

korea[0] = -1;

}

}

else if(num == 2)

{

printf("영어 성적 입력하세요 :\n");

scanf_s("%d",&english[0]);


if(english[0] > 100 || english[0] < 0)

{

printf("잘못된 수 입력\n");

english[0] = -1;

}

}

else if(num == 3)

{

printf("수학 성적 입력하세요 :\n");

scanf_s("%d",&math[0]);


if(math[0] > 100 || math[0] < 0)

{

printf("잘못된 수 입력\n");

math[0] = -1;

}

}

system("pause");

system("cls");

break;


case 'd':

case 'D':

printf("어떤 과목을 삭제 하시겠습니까? \n");

printf("1 : 국어 2 : 영어 3 : 수학");

scanf_s("%d",&num);


if(num == 1)

{

korea[0] = -1;


if(korea[0] == -1)

{

printf("삭제되었습니다.\n");

}

else

{

printf("삭제 실패\n");

}

}

else if(num == 2)

{

english[0] = -1;


if(english[0] == -1)

{

printf("삭제되었습니다.\n");

}

else

{

printf("삭제 실패\n");

}

}

else if(num == 3)

{

math[0] = -1;


if(math[0] == -1)

{

printf("삭제되었습니다.\n");

}

else

{

printf("삭제 실패\n");

}

}

system("pause");

system("cls");

break;


case 's':

case 'S':

printf("어떤 과목을 검색 하시겠습니까? \n");

printf("1 : 국어 2 : 영어 3 : 수학");

scanf_s("%d",&num);


if(num == 1)

{

if(korea[0] == -1)

{

printf("성적 미입력 검색 실패 \n");

}

else

{

printf("국어 성적 검색 성공\n");

printf("국어 성적 = %d점\n",korea[0]);

}

}

else if(num == 2)

{

if(english[0] == -1)

{

printf("성적 미입력 검색 실패 \n");

}

else

{

printf("영어 성적 검색 성공\n");

printf("영어 성적 = %d점\n",english[0]);

}

}

else if(num == 3)

{

if(math[0] == -1)

{

printf("성적 미입력 검색 실패 \n");

}

else

{

printf("수학 성적 검색 성공\n");

printf("수학 성적 = %d점\n",math[0]);

}

}

system("pause");

system("cls");

break;


case 'l':

case 'L':

printf("국어 성적 = %d점\n",korea[0]);

printf("영어 성적 = %d점\n",english[0]);

printf("수학 성적 = %d점\n",math[0]);

system("pause");

system("cls");

break;

case 'E':

printf("프로그램을 종료합니다.\n");

return 0;

break;

}

}

return 0;

}

=============================================================================

아래와 같이 10명의 성적을 기억하는 배열 scores를 선언하였다.

     int scores[10]={90,38,45,67,98,87,88,20,98,85};

     그리고 다음과 같이 포인터 변수 p를 scores로 초기화하였다.

     int *p = scores;  

     반복문과 조건문과 포인터 변수와 더하기 연산, 간접 연산을 이용하여 최대값이 있는 원소가 몇 번째 원소인지 판단하는 코드를 작성하시오.   


#include <stdio.h>


int main(void)

{

int scores[10] = {90,38,45,67,99,87,88,20,98,100};

int *p;

int i = 0;

int max ;

int max_index = 0;


p = scores;


max = *p;

for(i = 0; i < 10; i++)

{

if(max < *(p+i) )

{

max = *(p+i);

max_index = i;

}

}


printf("최대값 = %d\n",max);

printf("최대값 위치 = %d\n",max_index+1);

printf("인덱스 번호 = %d\n",max_index);

return 0;

}


=============================================================================

4 명의 국어 성적을 관리할 수 있는 배열을 선언하시오.

     그리고 첫번째 학생은 90점, 두번째 학생은 85, 세번째 학생은 69, 네번째 학생은 75점으로 대입합니다.

     네 명의 국어 성적과 합계, 평균을 출력하는 프로그램을 작성하시오.


#include <stdio.h>


int main(void)

{

int korea[4] = {90,85,69,75};

int sum = 0;

double average = 0.0;

int i = 0;


for(i = 0 ; i < 4; i++)

{

sum += korea[i];

}

printf("국어점수 합 = %d점 입니다.\n",sum);

average = (double)sum / 4.0;

printf("국어점수 평균 = %.2lf점 입니다.\n",average);

return 0;

}


=============================================================================

 2. 한 명의 국어, 영어, 수학 성적을 관리하는 프로그램을 작성하시오.  (포인터 버전)

       a. 국어, 영어, 수학 성적은 초기값을 -1로 설정합니다.   

       b. 프로그램은 다음을 반복합니다.

           b.1 “I: 추가 D: 삭제 S:검색 L:전체 출력 E:종료”를 화면에 출력

          b.2 하나의 문자를 입력받음

          b.3 입력받은 문자가 ‘i’ 혹은 ‘I’일 때는 추가, ‘d’ 혹은 ‘D’일 때는 삭제 , ‘s’ 혹은 ‘S’일 때는 검색, 

                 ‘l’, ‘L’일 때는 전체 출력을 수행합니다.  

     * 추가 기능에서는 과목을 선택한 후에 성적을 입력받아 해당 과목의 성적을 설정합니다.  

     *삭제 기능에서는 과목을 선택한 후에 선택한 과목의 성적을 -1로 설정합니다.  

      *검색 기능에서는 과목을 선택한 후에 선택한 과목의 성적을 출력합니다.  

     *전체 출력에서는 모든 과목의 성적을 출력합니다.

        (단, E를 누르면 프로그램을 종료)


#include <stdio.h>

#include <stdlib.h>


int main(void)

{

int korea[1] = {-1};

int english[1] = {-1};

int math[1] = {-1};

char munja = ' ';

int num = 0;


while(1)

{

printf("I : 추가 D : 삭제 S : 검색 L : 전체출력 E : 종료\n");

scanf_s(" %c",&munja,1);


switch(munja)

{

case 'i':

case 'I':

printf("어떤 과목을 선택하시겠습니까? \n");

printf("1 : 국어 2 : 영어 3 : 수학");

scanf_s("%d",&num);



if(num == 1)

{

printf("국어 성적 입력하세요 :\n");

scanf_s("%d",korea);


if((*korea) > 100 || (*korea) < 0)

{

printf("잘못된 수 입력\n");

*korea = -1;

}

}

else if(num == 2)

{

printf("영어 성적 입력하세요 :\n");

scanf_s("%d",english);


if(*english > 100 || *english < 0)

{

printf("잘못된 수 입력\n");

*english = -1;

}

}

else if(num == 3)

{

printf("수학 성적 입력하세요 :\n");

scanf_s("%d",math);


if(*math > 100 || *math < 0)

{

printf("잘못된 수 입력\n");

*math = -1;

}

}

system("pause");

system("cls");

break;


case 'd':

case 'D':

printf("어떤 과목을 삭제 하시겠습니까? \n");

printf("1 : 국어 2 : 영어 3 : 수학");

scanf_s("%d",&num);


if(num == 1)

{

*korea = -1;


if(*korea == -1)

{

printf("삭제되었습니다.\n");

}

else

{

printf("삭제 실패\n");

}

}

else if(num == 2)

{

*english = -1;


if(*english == -1)

{

printf("삭제되었습니다.\n");

}

else

{

printf("삭제 실패\n");

}

}

else if(num == 3)

{

*math = -1;


if(*math == -1)

{

printf("삭제되었습니다.\n");

}

else

{

printf("삭제 실패\n");

}

}

system("pause");

system("cls");

break;


case 's':

case 'S':

printf("어떤 과목을 검색 하시겠습니까? \n");

printf("1 : 국어 2 : 영어 3 : 수학");

scanf_s("%d",&num);


if(num == 1)

{

if(*korea == -1)

{

printf("성적 미입력 검색 실패 \n");

}

else

{

printf("국어 성적 검색 성공\n");

printf("국어 성적 = %d점\n",*korea);

}

}

else if(num == 2)

{

if(*english == -1)

{

printf("성적 미입력 검색 실패 \n");

}

else

{

printf("영어 성적 검색 성공\n");

printf("영어 성적 = %d점\n",*english);

}

}

else if(num == 3)

{

if(*math == -1)

{

printf("성적 미입력 검색 실패 \n");

}

else

{

printf("수학 성적 검색 성공\n");

printf("수학 성적 = %d점\n",*math);

}

}

system("pause");

system("cls");

break;


case 'l':

case 'L':

printf("국어 성적 = %d점\n",*korea);

printf("영어 성적 = %d점\n",*english);

printf("수학 성적 = %d점\n",*math);

system("pause");

system("cls");

break;

case 'E':

printf("프로그램을 종료합니다.\n");

return 0;

break;

default:

printf("잘못된 문자를 입력하였습니다.\n");

break;

}

}

return 0;

}


=============================================================================

크기가 10인 int형 배열을 선언하고 arr[i] 에는 0부터 i까지의 합을 대입하는 프로그램을 구현하시오.


#include <stdio.h>


int main(void)

{

int arr[10] = {0};

int i = 0;

int sum = 0;


for(i =0;  i < 10; i++)

{

sum += i;

}

printf("합계 = %d입니다.\n",sum);


return 0;

}


=============================================================================

크기가 10인 char 타입 배열에 이름을 입력하는 프로그램을 구현하시오.


#include <stdio.h>


int main(void)

{

char name[10];


printf("이름을 입력하세요 :\n");

scanf_s("%s",name,sizeof(name));


printf("이름 = %s입니다.\n",name);


return 0;

}


=============================================================================

10 개의 정수를 입력받아 크기 순으로 정렬하시오.


#include <stdio.h>


int main(void)

{

int arr[10] = {0};

int i = 0;

int j = 0;

int temp = 0;

printf("10개의 정수를 입력하세요 :\n");

for(i = 0 ; i < 10; i++)

{

scanf_s("%d",&arr[i]);

}


for(i = 10; i >= 0; i--)

{

for(j = 0; j < i; j++)

{

if(arr[j-1] > arr[j])

{

temp = arr[j-1];

arr[j-1] = arr[j];

arr[j] = temp;

}

}

}


printf("정렬 후 : \n");

for(i = 0 ; i < 10; i++)

{

printf("%3d",arr[i]);

}

}


=============================================================================

 2. 한 명의 국어, 영어, 수학 성적을 관리하는 프로그램을 작성하시오.  (포인터 버전)

       a. 국어, 영어, 수학 성적은 초기값을 -1로 설정합니다.   

       b. 프로그램은 다음을 반복합니다.

           b.1 “I: 추가 D: 삭제 S:검색 L:전체 출력 E:종료”를 화면에 출력

          b.2 하나의 문자를 입력받음

          b.3 입력받은 문자가 ‘i’ 혹은 ‘I’일 때는 추가, ‘d’ 혹은 ‘D’일 때는 삭제 , ‘s’ 혹은 ‘S’일 때는 검색, 

                 ‘l’, ‘L’일 때는 전체 출력을 수행합니다.  

     * 추가 기능에서는 과목을 선택한 후에 성적을 입력받아 해당 과목의 성적을 설정합니다.  

     *삭제 기능에서는 과목을 선택한 후에 선택한 과목의 성적을 -1로 설정합니다.  

      *검색 기능에서는 과목을 선택한 후에 선택한 과목의 성적을 출력합니다.  

     *전체 출력에서는 모든 과목의 성적을 출력합니다.

        (단, E를 누르면 프로그램을 종료)


#include <stdio.h>

#include <stdlib.h>


int main(void)

{

int korea[1] = {-1};

int english[1] = {-1};

int math[1] = {-1};

char munja = ' ';

int num = 0;

int *k = korea;

int *e = english;

int *m = math;


while(1)

{

printf("I : 추가 D : 삭제 S : 검색 L : 전체출력 E : 종료\n");

scanf_s(" %c",&munja,1);


switch(munja)

{

case 'i':

case 'I':

printf("어떤 과목을 선택하시겠습니까? \n");

printf("1 : 국어 2 : 영어 3 : 수학");

scanf_s("%d",&num);



if(num == 1)

{

printf("국어 성적 입력하세요 :\n");

scanf_s("%d",k);


if((*k) > 100 || (*k) < 0)

{

printf("잘못된 수 입력\n");

*k = -1;

}

}

else if(num == 2)

{

printf("영어 성적 입력하세요 :\n");

scanf_s("%d",e);


if(*e > 100 || *e < 0)

{

printf("잘못된 수 입력\n");

*e = -1;

}

}

else if(num == 3)

{

printf("수학 성적 입력하세요 :\n");

scanf_s("%d",m);


if(*m > 100 || *m < 0)

{

printf("잘못된 수 입력\n");

*m = -1;

}

}

else

{

printf("잘못된 수를 입력하였습니다.\n");

}

system("pause");

system("cls");

break;


case 'd':

case 'D':

printf("어떤 과목을 삭제 하시겠습니까? \n");

printf("1 : 국어 2 : 영어 3 : 수학");

scanf_s("%d",&num);


if(num == 1)

{

if(*k == -1)

{

printf("삭제 실패.\n");

}

else

{

printf("삭제 성공\n");

}

*k = -1;

}

else if(num == 2)

{

if(*e == -1)

{

printf("삭제 실패.\n");

}

else

{

printf("삭제 성공\n");

}

*e = -1;

}

else if(num == 3)

{

if(*m == -1)

{

printf("삭제 실패.\n");

}

else

{

printf("삭제 성공\n");

}

*m = -1;

}

else

{

printf("잘못된 수를 입력하였습니다.\n");

}

system("pause");

system("cls");

break;


case 's':

case 'S':

printf("어떤 과목을 검색 하시겠습니까? \n");

printf("1 : 국어 2 : 영어 3 : 수학");

scanf_s("%d",&num);


if(num == 1)

{

if(*k == -1)

{

printf("성적 미입력 검색 실패 \n");

}

else

{

printf("국어 성적 검색 성공\n");

printf("국어 성적 = %d점\n",*k);

}

}

else if(num == 2)

{

if(*e == -1)

{

printf("성적 미입력 검색 실패 \n");

}

else

{

printf("영어 성적 검색 성공\n");

printf("영어 성적 = %d점\n",*e);

}

}

else if(num == 3)

{

if(*m == -1)

{

printf("성적 미입력 검색 실패 \n");

}

else

{

printf("수학 성적 검색 성공\n");

printf("수학 성적 = %d점\n",*m);

}

}

else

{

printf("잘못된 수를 입력하였습니다.\n");

}

system("pause");

system("cls");

break;


case 'l':

case 'L':

printf("국어 성적 = %d점\n",*k);

printf("영어 성적 = %d점\n",*e);

printf("수학 성적 = %d점\n",*m);

system("pause");

system("cls");

break;

case 'E':

printf("프로그램을 종료합니다.\n");

return 0;

break;

default:

printf("잘못된 문자를 입력하였습니다.\n");

break;

}

}

return 0;

}



728x90

이 글을 공유하기

댓글

Designed by JB FACTORY