배열의 사용새를 다시 상기하면
1. 반복
2. 문자열
이런 방식으로 사용된다.
이번 포스팅은 2번 방식인 문자열의 사용 방식에 대하여
먼저 알아본다.
문자열을 표현하는법은 쌍따옴표를 사용한다.
" " 를 사용함
문자열의 마지막은 항상 널값을 준다. 널을 주는방법은 \0 을 사용한다.
따라서 문자열은 5개를 적겠다고 선언을 하려면 6개를 선언해주어야 5개를
적을수 있다. 이를 지키지 않으면 오류가 나타난다.
선언 방식은 다음과 같다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
문자 자료형(=string) 변수이름 [개수] ;
char str [4] ;
str[3]=\0; 으로 반드시 처리해준다. (이것이 가장 중요하다!!!!!)
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
문자열의 초기화 방식은 여러가지 있다
(초기화란 변수에 값을 넣어주는것 을 말한다)
char str[4]={'a','b','c','\0'};
char str[4]="abc"; (이건 자동으로 마지막처리가 된다.)
char str[4]="abcdef"; (이건 그릇 보다 커지므로 안된다.)
char str[4]=""; (널값들로 저절로 그릇이 초기화 되어있다)
char str[]="abc"; (쌉가능, 물론 널값도 저절로 된다.)
문자열의 입출력
printf와 scanf에서 %s를 통해 입출력한다
단! scanf에서는 &를 사용하지 않는다(문자열 의 변수를 넣는다면.)
다음 예제들로 파악 해본다.
문자열의 마지막은 널값임을 실감해보는 예제
int main()
{
int i;
char a[4];
a[0]='a';
a[1]='s';
a[2]='d';
a[3]='\0';
i=0;
while(a[i]!='\0')
{
printf("%c",a[i]);
i++;
}
printf("\n");
return 0;
}
이 결과
asd
이래 나옴
다음은 문자열의 입출력을 보여주는 예제이다.
int main()
{
char q[]="my name is wow?(y/n)";
char answer[100];
printf("%s",q);
scanf(" %s",answer);
if(answer[0]=='y')
{
printf("맞음 \n");
}
else
{
printf("틀림 \n");
}
printf("\n");
return 0;
}
그 결과
my name is wow?(y/n)y
맞음
이래 나옴
다음은 널값을 제외한 문자열의 길이를 계산하는 프로그램이다.
int main()
{
char s[10];
int i=0;
printf("문자열을 입력하시오:");
scanf("%s",s);
while(s[i]!='\0')
{
i++;
}
printf("문자열의 길이: %d",i);
printf("\n");
return 0;
}
결과
문자열을 입력하시오:wow
문자열의 길이: 3
이래 나온다.
이것을 함수로 만들어서 프로그램을 만들어보면 다음과 같다.
int strnum();
int main()
{
int i;
i=strnum();
printf("문자열 길이는:%d",i);
printf("\n");
return 0;
}
int strnum()
{
char s[100];
int i=0;
printf("문자열을 입력하시오:");
scanf("%s",s);
while(s[i]!='\0')
{
i++;
}
return i;
}
이 결과
문자열을 입력하시오:owoooow
문자열 길이는:7
이래 나온다.
물론 이것말고도 다르게 함수를 만들어서 간단하게 사용할 수 있지만
그것은 개인차이므로 다른방식으로도 해보는것을 추천한다.
함수를 만든다는 의미는 메인이 일을 시켜서 보조을 해준다는 의미 라는것을
다시 생각하여 만들어보자.
int strnum(char a[]);
int main()
{
char s[100];
int i;
printf("문자열을 입력하시오:");
scanf("%s",s);
i=strnum(s);
printf("문자열 길이는:%d",i);
printf("\n");
return 0;
}
int strnum(char a[])#문자열을 받는 함수임.
{
int i=0;
while(a[i]!='\0')
{
i++;
}
return i;
}
이렇게 메인함수와 만든함수가 서로의 부족한 면을 채워주는 분담형식의 역할을 하게 된다.
이런 방식이 잘 만든 함수 라고 할 수 있다.
여기서 글자수가 100자로 제한이 되어 있는데 이것의 제한을 없애는 방법은
나중에 배울 포인터의 개념으로 할 수 있다.
참고로
while(s[i]!='\0') 에서 '\0' 를 "\0" 같이 쌍따옴표로 바꾸면 에러가 난다.
이제 배열을 응용하는 예제들을 해본다
배열의 최소값 최대값 구하는 방법
int main()
{
//srand(time(NULL));
//int r=rand();
int s[size]={12,1,2,3,4,5,6,0,10};
int i;
int min;
min=s[0];
for(i=0;i<size;i++)
{
if(s[i]<min)
{
min=s[i];
}
}
printf("최솟값은 %d입니다", min);
printf("\n");
return 0;
}
이 결과
최솟값은 0입니다
이래 나옴
이번엔 랜덤으로 배열을 만들고 최대값 까지 출력해본다.
#include <stdlib.h>
#include <time.h>
으로 랜덤을 부른다.
다음과 같다.
#define size 10
int main()
{
int s[size];
int i;
int min;
int max;
srand(time(NULL));
printf("랜덤으로 만든 배열:\n");
for(i=0;i<size;i++)
{
s[i]=rand();
printf(" %d ",s[i]);
}
min=s[0];
max=s[0];
for(i=0;i<size;i++)
{
if(s[i]<min)
{
min=s[i];
}
if(s[i]>max)
{
max=s[i];
}
}
printf("\n");
printf("최솟값은 %d입니다 \n", min);
printf("최대값은 %d입니다 \n", max);
printf("\n");
return 0;
}
결과는
랜덤으로 만든 배열:
31331 8871 24751 12304 23477 10460 14547 11159 4228 31359
최솟값은 4228입니다
최대값은 31359입니다
이래 나온다.
이번엔 어느 배열에서 자신이 입력한 값이 몇번째 자리에 있는지 확인하는 프로그램이다.
int main()
{
int key,i;
int list[size]={1,2,3,4,5,6,7,8,9};
printf("자리수를 알고싶은 값 입력:");
scanf("%d",&key);
for(i=0;i<size;i++)
{
if(list[i]==key)
{
printf("키값은 %d번째 배열에 위치함 \n",i);
}
}
printf("\n");
return 0;
}
이 결과로
자리수를 알고싶은 값 입력:5
키값은 4번째 배열에 위치함
이래 나온다.
이번엔 어느 배열에서 같은 키값의 개수가 몇개인지 알려주는 프로그램을 만들어본다.
int main()
{
int key,i;
int list[size]={1,2,3,3,3,3,3,8,9};
int sum=0;
printf("몇개가 있는지를 알고싶은 값 입력:");
scanf("%d",&key);
for(i=0;i<size;i++)
{
if(list[i]==key)
{
sum+=1;
}
}
printf("%d은 %d개가 존재함",key,sum);
printf("\n");
return 0;
}
이 결과
몇개가 있는지를 알고싶은 값 입력:3
3은 5개가 존재함
이래 나온다.
이번엔 n번째 후보가 몇개의 표를 얻었는지 보여주는 프로그램을 만들어 본다.
#define size 11
int main()
{
int fre[size]={0}; //0으로 배열 전부 초기화
int i,person;
while(1)
{
printf("몇번째 후보자를 선택 하시겠습니까? (종료=100) ");
scanf("%d", &person);
if (person==100)
{
break;
}
fre[person]+=1;
}
printf("후보번호 투표결과 \n");
for(i=1;i<size;i++)
{
printf("%3d %3d \n",i,fre[i]);
}
printf("\n");
return 0;
}
이 결과
몇번째 후보자를 선택 하시겠습니까? (종료=100) 1
몇번째 후보자를 선택 하시겠습니까? (종료=100) 1
몇번째 후보자를 선택 하시겠습니까? (종료=100) 1
몇번째 후보자를 선택 하시겠습니까? (종료=100) 2
몇번째 후보자를 선택 하시겠습니까? (종료=100) 2
몇번째 후보자를 선택 하시겠습니까? (종료=100) 100
후보번호 투표결과
1 3
2 2
3 0
4 0
5 0
6 0
7 0
8 0
9 0
10 0
이래 나온다.
이번엔 후보의 값이 아니라 후보의 이름을 출력하는 코드이다.
int main()
{
int fre[5]={0}; //0으로 배열 전부 초기화
char per[5][10]={"aaaa","bdfdfd","csdsd","dasas","eqwqw"};
int i,j,person;
while(1)
{
printf("어느 후보자를 선택 하시겠습니까? (종료=100) ");
scanf("%d", &person);
if (person==100)
{
break;
}
fre[person]+=1;
}
printf("후보이름 투표결과 \n");
for(i=0;i<5;i++)
{
for(j=0;j<10;j++)
{
printf("%c",per[i][j]);
}
printf(" %d \n",fre[i]);
}
printf("\n");
return 0;
}
다음은 2차원 배열이다
2차원 배열은 행렬과 같게 보면 이해하기 쉽다
행은 ㅡㅡㅡㅡㅡㅡㅡㅡㅡ 이것이고
열은
ㅣ
ㅣ
ㅣ
ㅣ
ㅣ
ㅣ
이렇게 된것으로 생각한다
int a[][] ; 이런 방식으로 사용한다.
초기화방식은 아까 사용한방법과 비슷한데
[] 한번더 사용하는것의 차이가 난다.
보통 2차원배열에서는 for문 2번 사용하는 방식으로 진행된다.
행렬의 덧셈을 해본다.
#define row 3
#define col 5
int main()
{
int a[row][col]={{1,1,1,1,1},{2,2,2,2,2},{3,3,3,3,3}};
int b[row][col]={{4,4,4,4,4},{5,5,5,5,5},{6,6,6,6,6}};
int c[row][col];
int i,j;
for(i=0;i<row;i++)
for(j=0;j<col;j++)
{
c[i][j]=a[i][j]+b[i][j];
}
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
printf("%d",c[i][j]);
}
printf("\n");
}
printf("\n");
return 0;
}
이 결과
55555
77777
99999
이래 나온다.
'관 > 솔직한 c 언어 공부' 카테고리의 다른 글
C언어 간단공부(2020ver). (2) | 2020.07.28 |
---|---|
c언어 기초 공부 11.(총 복습) (3) | 2019.12.16 |
c언어 기초 공부 09.(배열) (0) | 2019.11.12 |
c언어 기초 공부 08. (0) | 2019.11.09 |
c언어 기초 공부 07. (0) | 2019.11.07 |
댓글