C언어 비트단기 4일차(배열과 포인터 실습)
- C언어
- 2016. 4. 17. 22:01
=============================================================================
배열과 포인터 실습 프로그램
/*#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;
}
'C언어' 카테고리의 다른 글
C언어 비트단기 6일차(문자열 함수, 구조체) (0) | 2016.04.17 |
---|---|
C언어 비트단기 5일차(함수) (0) | 2016.04.17 |
C언어 비트단기 3일차(반복문과 제어문 ex) for, while, do-while) (0) | 2016.04.17 |
C언어 비트단기 2일차(printf,scanf_s) (0) | 2016.04.17 |
C언어 비트단기 1일차 학습 자료들(Hello World) (0) | 2016.04.17 |
이 글을 공유하기