整列

23289 ワード

<シナリオ>


※連続する項目が同じ大きさ順に並べられたデータの集合
1.同じ坪数で構成されたマンション
2. int x[5]; //4バイトの5家族

<プライマリアレイ>


※ int score[7];
1.配列名を作成するルールは、変数名を作成するルールと同じです.
2.アレイ宣言で使用されるラベルは正の整数であり、アレイのサイズ
3.score配列は7個の整数型データを格納できる
4.7個の空間を配列内の要素と呼ぶ

<アレイ要素の例>
#include <stdio.h>
int main(void)
{
int num[3]; 	<배열 선언시 첨자의 값은 배열의 크기>
num[0]=10; 	<배열 원소(element)의 첨자는 순서>
num[1]=20;
num[2]=30;
//num[3]=40; 	<num의 공간은 [0] [1] [2] 3칸이 끝이므로 오류가 발생한다>
printf("%d, %d, %d ",num[0],num[1],num[2]);
return 0;
}
<プライマリアレイの初期化>
●一次配列を初期化する方法
▶int score[5]={10,20,30,40,50};//int x = 10;
●ワード配列の初期化方法
▶char name[ ]={'H','a','n',' ','S',' ','H','\0'};
▶char name[ ]="Han S H";
1.アレイを宣言しながら初期化を行う場合、8要素を省略可能
2.文字配列の最後の要素は空の文字"0"でなければなりません.
#include <stdio.h>
int main(void)
{
int score[5] = { 10,20,30,40,50 };
char name[] = { 'H','a','n'
,' ','S',' ','H',
'\0' };
char name1[] = "Han S H";
printf("%d %d %d\n", score[0], score[1], score[4]);
printf("%c%c%c%c%c\n", name[1], name[7], name[0],name[3],name[0]);
printf("%c%c%c%c%c\n", name1[1], name1[7],name1[0],name1[3], name1[0]);
return 0;
}
1.アレイ要素が初期化データの数より多い場合、残りの要素は0に初期化されます.
  • int han[100]={10,20}
  • 2.アレイ要素の数が初期化データの数より少ない場合、「初期化データが多すぎる」というエラーが発生します.
  • int han[2]={10,20,30}
  • error C 2078:略語が多すぎる.
  • <アレイ初期化エラー>
    #include <stdio.h>
    int main(void)
    {
    int han[10] = { 10,20 };
    int han1[2] = { 10,20,30 }; <error C2078: 이니셜라이저가 너무 많습니다.>
    int han2[10] = {0};
    printf("%d %d %d %d\n", han[0], han[1], han[2],han[9]);
    printf("%d %d %d\n", han2[0], han2[1], han2[9]);
    return 0;
    }
    <イニシアチブの初期化と置換>
    #include <stdio.h>
    int main(void)
    {
    int han[10] = { 10,20 };<초기화>
    int x = 10;
    printf("%d %d %d %d\n", han[0], han[1],han[2],han[9]);
    x = 20;
    han[0] = 1; 		<대입>
    han[1] = 2; 		<대입>
    han[2] = 3; 		<대입>
    printf("%d %d %d %d\n", han[0], han[1], han[2], han[9]);
    return 0;
    }
    <最初の配列の名前:配列の開始アドレス>
    <han1의 주소는 &han1[0]의 주소와 같다.>
    #include <stdio.h>
    int main(void)
    {
    int i;
    int han1[3] = { 10,15 };
    int han2[3];
    for (i = 0; i < 3; i++)printf("han1[%d]=%d 주소=%p\n", i, han1[i], &han1[i]);
    printf("han1=%p\n", han1); //&han1[0]
    han2[0] = 10;
    han2[1] = 20;
    han2[2] = 30;
    for (i = 0; i < 3; i++)printf("han2[%d]=%d 주소=%p\n", i, han2[i], &han2[i]);
    printf("han2=%p\n", han2); //&han2[0]
    return 0;
    }
    <プライマリアレイの利用>
    #include
    <stdio.h>
    int main(void)
    {int i, sum = 0;
    int score[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10 };
    for(i = 0; i < 10;i++)
    sum = sum + score[i];
    printf("평균=%f\n", sum / 10.);
    return 0;
    }
    <2 Dアレイの初期化>
    #include <stdio.h>
    int main(void)
    {
    int x[2][3] = { 10,20,30,40,50,60 };
    printf("%d %d %d\n", x[0][0], x[0][1], x[0][2]);
    printf("%d %d %d\n", x[1][0], x[1][1], x[1][2]);
    printf("%d\n", x[2][3]); <오류는 나지 않지 않지만 엉뚱한 값이 나옴>
    return 0;
    }
    <2 Dアレイの初期化と置換>
    #include <stdio.h>
    int main(void)
    {
    int x[2][3] = { 10,20,30,40,50,60 };
    printf("%d %d %d\n", x[0][0], x[0][1], x[0][2]);
    x[0][0] = 1; x[0][1] = 2; x[0][2] = x[0][0];
    printf("%d %d %d\n", x[0][0], x[0][1], x[0][2]);
    x[1][0] = x[0][0] + 1;
    x[1][1] = x[0][0] + x[0][1];
    x[1][2] = x[1][0] * x[1][1];
    printf("%d %d %d\n", x[1][0], x[1][1], x[1][2]);
    return 0;
    }
    <2 Dアレイをプライマリアレイとして使用>
    #include <stdio.h>
    int main(void)
    {
    	int i, j;
    	int han[2][3] = { 10,20,30,40,50,60 };
    	for (i = 0; i < 2; i++) for (j = 0; j < 3; j++)
    		printf("han[%d][%d]=%d 주소=%p\n", i, j, han[i][j], &han[i][j]);
    	printf("han=%p\n", han);	 < 번째 원소의 주소>
    	printf("han[0]=%p\n", han[0]);   <han[0]으로 시작하는 원소의 시작 주소>
    	printf("han[1]=%p\n", han[1]);   <han[1]로 시작하는 원소의 시작 주소>
    	return 0;
    }
    <실행 결과>
    han[0][0] = 10 주소 = 0051FA80
    han[0][1] = 20 주소 = 0051FA84
    han[0][2] = 30 주소 = 0051FA88
    han[1][0] = 40 주소 = 0051FA8C
    han[1][1] = 50 주소 = 0051FA90
    han[1][2] = 60 주소 = 0051FA94
    han = 0051FA80
    han[0] = 0051FA80
    han[1] = 0051FA8C
    <文字レイアウトを初期化する方法>
    #include <stdio.h>
    int main(void)
    {
    	int i;
    	char st[] = "soft";
    	char ch[] = { 's', 'o', 'f', 't', '\0' };
    	for (i = 0; i < 5; i++)printf("st[%d] 주소 %p =%c\n", i, &st[i], st[i]);
    	for (i = 0; i < 5; i++)printf("ch[%d] 주소 %p =%c\n", i, &ch[i], ch[i]);
    	return 0;
    }
    <실행 결과>
    st[0] 주소 010FFC60 = s
    st[1] 주소 010FFC61 = o
    st[2] 주소 010FFC62 = f
    st[3] 주소 010FFC63 = t
    st[4] 주소 010FFC64 =
    ch[0] 주소 010FFC50 = s
    ch[1] 주소 010FFC51 = o
    ch[2] 주소 010FFC52 = f
    ch[3] 주소 010FFC53 = t
    ch[4] 주소 010FFC54 =
    <文字列の初期化と整列>
    #include <stdio.h>
    int main(void)
    {
    	char eng[5] = "A BC";
    	char kor[6] = "하이a";
    	printf("%p:%c ", eng, eng[0]);
    	printf("%p:%c ", eng + 1, eng[1]);
    	printf("%p:%c ", eng + 2, eng[2]);
    	printf("%p:%c ", eng + 3, eng[3]);
    	printf("%p:%c\n", eng + 4, eng[4]);
    	printf("%s\n", eng);
    	printf("%p:%c ", kor, kor[0]);
    	printf("%p:%c ", kor + 1, kor[1]);
    	printf("%p:%c ", kor + 2, kor[2]);
    	printf("%p:%c ", kor + 3, kor[3]);
    	printf("%p:%c ", kor + 4, kor[4]);
    	printf("%p:%c\n", kor + 5, kor[5]);
    	printf("%s\n", kor);
    	return 0;
    }
    <실행 결과>
    0073F970:A 0073F971 : 0073F972 : B 0073F973 : C 0073F974 :
    A BC
    <한글은 2바이트 인데 1바이트만 출력하므로 ?가 출력됨>
    0073F960 : ? 0073F961 : ? 0073F962 : ? 0073F963 : ? 0073F964 : a 0073F965 :
    하이a
    <名前を入力出力するプログラム>
    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    int main(void)
    {
    char name[10];
    printf("당신의 이름을 입력하세요=");
    scanf("%s", name); //gets(name);와 차이점?
    printf("당신의 이름은 %s입니다.\n", name);
    return 0;
    }
    <5個の入力と出力名のプログラム>
    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    int main(void)
    {
    int i;
    char name[5][10];
    for(i=0;i<5;i++)
    {
    printf("당신의 이름을 입력하세요=");
    scanf("%s",name[i]);
    }
    for(i=0;i<5;i++)
    printf("당신의 이름은 %s입니다.\n",name[i]);
    return 0;
    }
    #include <iostream>
    int main(void)
    {
    int x;
    int y = 10;
    char a, b = 'A';
    x = y;
    std::cout << "x=" << x << " y=" << y << std::endl;
    a = b;
    std::cout << "a=" << a << " b=" << b << std::endl;
    return 0;
    }
    <配列のコピーstrcpy()関数を使用>
    #define _CRT_SECURE_NO_WARNINGS <Visual Studio의 경우>
    #include <iostream>
    #include <string> 		<or string.h(clang++, gcc  주로 온라인 컴파일러)>
    int main(void)
    {
    char s1[5];
    char s2[5] = "soft"; 		<원본>
    //s1 = s2; 			<error C3863: 배열 형식 'char [5]'은(는) 할당할  없습니다.>
    strcpy(s1, s2); 		<s2주소의 문자열을  문자를 만날 때까지s1주소로 복사>
    std::cout << "s1=" << s1 << " s2=" << s2<< std::endl;
    return 0;
    }
    <ネコ類の例>
    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    #include <string> 			<string.h>
    using std::cout;
    class Cat {
    private: 				<생략가능>		
    	int age;
    	char name[20]; 		
    public:
    	int getAge();
    	const char* getName();
    	void setAge(int a);
    	void setName(const char* pName);
    };
    int Cat::getAge()
    {
    	return age;
    }
    void Cat::setAge(int a)
    {
    	age = a;
    }
    void Cat::setName(const char* pName)
    {
    	strcpy(name, pName);
    }
    const char* Cat::getName()
    {
    	return name;
    }
    int main()
    {
    	Cat nabi;
    	nabi.setName("나비");
    	nabi.setAge(3);			 <입력>		
    	cout << nabi.getName() << " 나이는 "<<nabi.getAge()<<"살이다.";
    		return 0;
    }
    <ネコ類例2>
    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    using std::string;
    using std::cout;			<C>
    class Cat {
    private: 				<생략가능>
    	int age;
    	string name;  			<C>
    public:
    	int getAge();
    	string getName();
    	void setAge(int a);
    	void setName(string pName);
    };
    int Cat::getAge()
    {
    	return age;
    }
    void Cat::setAge(int a)
    {
    	age = a;
    }
    void Cat::setName(string pName)
    {
    	// strcpy(name, pName);
    	name = pName; 			<C>
    }
    string Cat::getName()
    {
    	return name;
    }
    int main()
    {
    	Cat nabi;
    	nabi.setName("나비");
    	nabi.setAge(3); 		<입력>
    	cout << nabi.getName() << " 나이는 "<<nabi.getAge()<<"살이다.";
    		return 0;
    }
    <オブジェクト配列>
    #include <iostream>
    using std::cout;
    class Dog{
    private:
    int age;
    public:
    int getAge(){return age;} 	<자동 inline함수>
    void setAge(int a){age=a;} 	<자동 inline함수>
    };
    int main()
    {
    int i;
    Dog dd[5];			 <Dog클래스형 객체배열 dd, 강아지 5마리>>
    for(i=0;i<5;i++){
    dd[i].setAge(i);
    cout<<dd[i].getAge(); 		<01234>
    }
    return 0;
    }
    <ポインタオブジェクト>
    #include <iostream>
    using std::cout;
    class Dog{
    private:
    int age;
    public:
    int getAge(){return age;}
    void setAge(int a){age=a;}
    };
    int main()
    {
    Dog happy,*pd; 		 <일반 객체 happy와 포인터 객체 pd, int x, *px;>
    pd=&happy; //px=&x;
    happy.setAge(5);	 <일반 객체는 '.'으로 멤버를 접근>
    cout<< pd->getAge(); 	 <포인터 객체는 '->'로 멤버를 접근>
    return 0;
    }
    <オブジェクト配列とポインタ>
    #include <iostream>
    using std::cout;
    class Dog {
    private:
    	int age;
    public:
    	int getAge() { return age; }
    	void setAge
    	(int a) {
    		age = a;
    	}
    };
    int main() {
    	Dog dd[5];
    	Dog* pd;
    	pd = dd;		 		<배열의 이름은  배열의 시작주소이다.>
    		for (int i = 0; i < 5; i++) {
    			pd -> setAge(i);
    			cout << dd[i].getAge();
    			cout << pd-> getAge();
    			pd++; 			<다음 방의 주소로>
    		} 				<011223344>
    	return 0;
    }