본문 바로가기
코스웨어/10년 스마트폰BSP

[BSP]업무일지-김석희-20100609

by 알 수 없는 사용자 2010. 6. 9.
728x90
반응형

c++

중첩for문

#include <iostream>
using namespace std;
void square(int a);
int main()
{
  int input;

  while(1)//숫자입력
  {
    cout<<"숫자입력(0 to exit!)!:";
    cin>>input;
    if(input==0)
    {
      break;
    }
    square(input);//사각형 함수 사용
    cout<<endl;
    
  }

  return 0;
}
void square(int a)
{  //맨윗행 출력
  for(int i=0;i<a;i++)
  {
    cout<<"*";
  }
  cout<<endl;
  for(int j=0;j<a-2;j++)
  {    //맨 왼쪽 열 출력
    cout<<"*";
    for(int k=0;k<a-2;k++)
    { //가운데 빈곳은 빈칸으로
      cout<<" ";
    }
    //맨 오른쪽 라인 출력
    cout<<"*"<<endl;
  }  
  for(int i=0;i<a;i++)//맨 아랫행 출력
  {
    cout<<"*";
  }
}
 

입력받은 만큼의 사각형을 만드는 프로그램


결과



홀수를 입력받아 마름모출력 프로그램
#include <iostream>
using namespace std;
int in_put();//입력 함수
void logenze(int& a);//마름모 출력함수
int main()
{
  int a;
  while(1)
  {
    a=in_put();
    if(a==0)//0이 입력되면 종료
    {
      break;
    }
    if(a%2==0)//짝수이면 다시 입력 받음
    {
      cout<<"홀수만입력하세요!"<<endl;
      continue;
    }
    logenze(a);//마름모 함수 콜
  }
  return 0;
}
int in_put()//입력함수 원형
{  
  int input;
  cout<<"홀수입력(0 to exit!)";
  cin>>input;//홀수 입력
  return input;//입력값 리턴
}
void logenze(int& a)//마름모 함수 원형
{
  int temp=a/2;//사각형 한 라인의 중앙점
  int t1=0;
  int t2=0;
  int c=1;
  int c1=1;
  int c2=temp+1;
  int c4=temp+1;
  for(int i=0;i<a;i++)
  {
    for(int j=0;j<a;j++)//처음 실행되는for문
    {  
      if(((i==0&& (j==temp))||((i==a-1)&&(j==temp)))
      {  //맨 윗행중앙점과 맨 아래행 중앙점 찍기
        cout<<"*";
      }
      else if(((i==temp) && (j==0))||((j==a-1)&&(i==temp)))
      { //맨 왼쪽 열의 중앙과 맨오른쪽 열 중앙에 점 찍기
        cout<<"*";
      }
      else if(i==c&&j==temp-c)//윗쪽의 왼쪽 대각선점찍기
      {
        cout<<"*";
        t1=c;
        c++;
      }
      else if(i==c1&&j==temp+c1)//윗쪽의 오른쪽 대각선점찍기
      {
        cout<<"*";
        t2=c1;
        c1++;
      }
      //======================
      else if(i==c2&&j==temp-t1)//아랫쪽의 왼쪽 대각선점찍기
      {
        cout<<"*";
        c2++;
        t1--;
      }
      else if(i==c4&&j==temp+t2)//아랫쪽의 오른쪽 대각선점찍기 
      {
        cout<<"*";
        c4++;
        t2--;
      }
      else//'*
'찍는곳 말고는 빈칸 출력
      {
        cout<<" ";
      }
    }
    cout<<endl;//개행
    
  }
}


결과


const
포인터가 가리키는 변수 상수화

포인터 상수화

포인트가 가리키는 변수 상수화 + 포인터 상수화

포인터 p가 가리키고 있는 변수의 값도 변경하지 못하고, 포인터 p 는 프로그램이 종료될때까지 a만 가르켜야 한다

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

c 언어

버블정렬

#include <stdio.h>

void bubble_sort(int array[],int count);
void swap(int *px,int *py);
void print(int v[],int n);

int main()
{
  int vector[5]={5,4,3,2,1};
  bubble_sort(vector,5);//c문법상 배열 자체를 못 넘김 
  return 0;             //그래서 배열의 시작주소를 넘김
}
void bubble_sort(int array[],int count)
{
  int i;
  int j;
  for(i=0;i<count-1;i++)
  {
    for(j=0;j<count-1-i;j++)
    {
      if(array[j]>array[j+1])  //바로 옆자리와 비교를해서 정렬하는 버블정렬 알고리즘
      {
        swap(&array[j],&array[j+1]);
        print(array,5);
      }
      
    }
    printf("\n");
  }
}
void swap(int *px, int *py)
{
  int temp=*px;
  *px=*py;
  *py=temp;

}
void print(int v[],int n)
{
  int i;
  for(i=0;i<n;i++)
  {
    printf("%5d",v[i]);
  }
  printf("\n");
}
결과

다중배열


배열의 주소 표시법
#include <stdio.h>

int main()
{
  int i;
  int j;
  int array[3][4]={{15,23,45,56},
       {34,52,76,23},
       {43,62,91,84}};


  printf("&array[0][0]=  %p\n",&array[0][0]);//그행의첫주소 1행1열
  printf("&array[1][0]=  %p\n",&array[1][0]);//2행1열
  printf("&array[2][0]=  %p\n",&array[2][0]);//3행1열
  printf("array=    %p\n",array);//배열시작주소이자1행1열주소
  
  printf("array[0]=  %\n",array[0]); //그 행의 첫주소 1행1열
  printf("array[1]=  %p\n",array[1]);//2행1열
  printf("array[2]=  %p\n",array[2]);//3행1열
  printf("array+1=  %p\n",array+1);//그행의 첫주소 1행1열
  printf("array+2=  %p\n",array+2);//2행1열
  printf("array+3=  %p\n",array+3);//3행1열
  printf("&a    %p\n",&array+1);//배열주소전체값을 플러스

  int *p=*array;
  for(i=1;i<13;i++)
  {  
    printf("%d ",*p[i-1]);
    if(i%4==0)
    {
      printf("\n");
    }
  }
  return 0;
}




배열의 값과 주소 표시법

1) array는 배열의 시작주소이다. 이주소는 배열의 첫번째 주소와 같다.     = array==&array[0]
2)array[0]은array[0][0]~[0][1]가지므로                                           = array==array[0]==&array[0][0]
3)포인터나 연산에서 1증가하면 원소크기만큼 증가 즉(array+1)==array[1]==1008이고,(array[0]+1)&array[0][1]==1004가된다
4)array[0]은array[0][0]이므로 *(array[0])==array[0][0]가된다. array==&array[0]로 첫번째 원소의 주소이고 *array==array[0]이다. array[0]==&array[0][0]이다.
따라서 **array == *(array[0])==array[0][0]가 된다. 따라서 array는 주소의 주소이다.


함수 인자로써의 배열


배열의 이름이 배열의 주소이기 때문에 함수 인자에 주소를 전달한다.


average함수 배열의 주소가 전달되기 때문에 int *sp 처럼 포인터로 받는다

결과

score주소와 인수로 받은 sp은 주소가 같다.

배열의 넘겨받는  형식인수 
float average(int *s, int n)
float average(int s[3],int n)
float average(int s[],int n)

다차원 배열의 형식 인수
float average(int s[][3], int n)

int *s vs int s[]
둘다 같은 의미를 지닌다.
int s[] 는 함수의 매개변수 선언시에만  사용 가능
728x90