본문 바로가기

c언어/자료

c언어 8일차

 

 

 

 

 

-------------------------------------------------------------------------------------------------------------

 

#include <stdio.h>

struct tagData{
 int data1;
 int data2;
};

void CallByValue(struct tagData _data);
void CallByReference(struct tagData* _pData);

void main()
{
 struct tagData data={1,2};

 CallByValue(data);
 CallByReference(&data);
}
void CallByValue(struct tagData _data)
{
 printf("data:%d,data:%d \n",_data.data1,_data.data2);
}
void CallByReference(struct tagData* _pData)
{
 printf("data:%d,data:%d \n",_pData->data1,(*_pData).data2);
}

 

-------------------------------------------------------------------------------------------------------------

#include <stdio.h>

struct simple{
 int data1;
 int data2;
};

void show (struct simple ts);

int main()
{
 struct simple s1 ={1,2};
 struct simple s2;

 s2=s1;
 show(s2);
 return 0;
}
void show(struct simple ts)
{
 printf("data:%d, data2:%d\n",ts.data1,ts.data2);
}

-------------------------------------------------------------------------------------------------------------

#include <stdio.h>

struct simple{
 int data1;
 int data2;
};

void show (struct simple ts);
struct simple getdata(void);

int main()
{
 struct simple s= getdata();
 show(s);

 return 0;
}
void show(struct simple ts)
{
 printf("data:%d, data2:%d\n",ts.data1,ts.data2);
}
struct simple getdata(void)
{
 struct simple temp;
 scanf("%d %d", &temp.data1,&temp.data2);
 return temp;
}

-------------------------------------------------------------------------------------------------------------

#include <stdio.h>

struct point{
 int x;
 int y;
};
struct circle{
 struct point p;
 double radius;
};

int main()
{
 struct circle c1 = {10,10,1.5};
 struct circle c2 = {{30,30},2.4};

 printf("circle1\n");
 printf("x:%d,y:%d\n", c1.p.x,c1.p.y);
 printf("radius:%f \n",c1.radius);


 printf("circle2\n");
 printf("x:%d,y:%d\n", c2.p.x,c2.p.y);
 printf("radius:%f \n",c2.radius);
 return 0;
}

-------------------------------------------------------------------------------------------------------------

 

#include <stdio.h>


/* INT 사용하는 곳에 unsigned int 로 바꾸고 싶다면
 이곳만 수정하면 됨 . 이식성 증가 */


typedef int INT;
typedef int *P_INT; 
typedef unsigned int UINT;  // 코드 길이를 줄이는 이점, 가독성 증가
typedef unsigned int *P_UINT;
typedef unsigned char UCHAR;
typedef unsigned char *P_UCHAR;

int main(void)
{
 INT a =10;
    P_INT pA=&a;

    UINT b = 100;
    P_UINT pB=&b;

    UCHAR c='a';
    P_UCHAR pC= &c;

   printf("%d,%d,%c \n", *pA,*pB,*pC);

return 0;
}

 

-------------------------------------------------------------------------------------------------------------

// 사용하기 편한거  

#include <stdio.h>

struct Data
{
 int data1;
 int data2;
};

typedef struct Data DATA;

int main(void)
{
 DATA d= {1,2};
 return 0;
}

 

#include <stdio.h>

typedef struct Data
{
 int data1;
 int data2;
}DATA;

 

int main(void)
{
 DATA d= {1,2};
 printf("%d %d ",d,d);
 return 0;
}

 

 

 

-------------------------------------------------------------------------------------------------------------

 

// 오류나는 소스 코드 ㅋ

 

#include <stdio.h>

typedef struct Dog  // 선언타입1
{
 int data1;
 int data2;
}Dog;

typedef struct  //선언타입2
{
 int data1;
 int data2;
}Cat;


int main(void)
{
 Dog d1;
 struct Dog d2;   // 이전형식 O

 Cat c1;          //  <- 오류 부분 
 struct Cat c2;  // 이전형식 X 

 return 0;
}

 

-------------------------------------------------------------------------------------------------------------

 

#include <stdio.h>

    union u_data{
 int d1;
 double d2;
 char d3;
};
int main(vodi)
{
 union u_data data;
 data.d2=3.3;
 printf("%d, %f, %c \n",data.d1, data.d2, data.d3);

 data.d1=2;
 printf("%d, %f, %c \n",data.d1, data.d2, data.d3);


 data.d3='a';
 printf("%d, %f, %c \n",data.d1, data.d2, data.d3);

 return 0;
}

 

-------------------------------------------------------------------------------------------------------------

 

// 열거형 사용 예

#include <stdio.h>

enum color{red,green=100,blue};

int main()
{
 enum color c1=red;
 enum color c2=green;
 enum color c3=blue;

 printf("열거형 변수 출력 : %d, %d, %d \n",c1,c2,c3);
 printf("상수 출력 : %d, %d, %d \n",red,green,blue);

 return 0;
}

 

 

-------------------------------------------------------------------------------------------------------------

// 잘못됨 한번 찾아볼것.

 

 

#include <stdio.h>

int Write(int nNum,char* pFileName,char str[][100]);
void main()
{
 char str[3][100];
 int nNum = 0;

 while (1){
  printf("문자열 입력:");
  scanf( "%s", str[nNum] );
  nNum++;
  if(nNum==3)break;
 }
 Write(nNum,"test.txt",str);
 {
  int i;
  FILE *fp;
  fp=fopen(pFileName,"w");
  if(fp==NULL){
   printf("파일 존재 하지 않습니다.\n");
  }else{
   fprintf(fp,"%d\n",nNum);
   for(i=0;i<nNum;i++){
    fprintf(fp,"%s\n",str[i]);
   }
   fclose(fp);
  }
  for(i=0;i<nNum;i++){
   printf("%s\n",str[i]);
  }
  return 1;
 }
}

 

 

 

 

 

 

-------------------------------------------------------------------------------------------------------------

//file read

#include <stdio.h>

int Read(char *PFileName, char str[][100]);

void main()
{
 char str[3][100];

 if(Read("Test.txt",str)==0)
 {
  printf("실패 \n");
 }
}
int Read(char *pFileName, char str[][100])
{
 int nNum,i;
 FILE *fp;
  fp=fopen(pFileName,"r");
 if(fp==NULL){
  printf("파일이 존재하지 안습니다.\n");
  return 0;
 }else {
  fscanf(fp,"%d",&nNum);
  for(i=0;i<nNum;i++){
   fscanf(fp,"%s",str[i]);
  }
  fclose(fp);
 }
 for(i=0;i<nNum;i++){
  printf("%s\n",str[i]);
 }
 return 1;
}

 

-------------------------------------------------------------------------------------------------------------

//메모리 동적 할당   > 프로그램실행후에도 메모리에 남아있어서 직접 지워주어야한다. 집에서 한번 다시 해볼것.

#include <stdio.h>
#include <stdlib.h> // malloc 과 free,exit를 사용하기 위함
#include <string.h> // memset 사용하기위함

int main(void)
{
 int* a;
 a = (int*)malloc(sizeof(int));  //메모리 할당
 //malloc은 할당 후 쓰레기값이 있으므로 memset으로 초기화

 memset(a,0,sizeof(int));
 if(a==NULL){
  puts("메모리 할당에 실패!");  //문자열 출력 전용 함수
  // puts(1) 이나 puts('a')등은 안됨 오직 문자열만!
  exit(1); // 실행중인 프로그램 종료 함수
 }
 *a=20;
 printf("힙에 저장된 변수 a : %d \n",*a);
 free(a); // 메모리 해제
 return 0;
}

 

-------------------------------------------------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>


int main(void)
{
 int size, i;
 int * arr;
 printf("할당할 메모리 갯수 : ");
 scanf("%d",&size);
 //calloc은 malloc과 사용 형태가 다르고 할당과 동시에 0으로 초기화됨
 //나머지는 malloc과 같으나 자동으로 초기화하기 때문에 비용 소모

 arr=(int*)calloc(size,sizeof(int));
// arr=(int*)malloc(size*sizeof(int)); //malloc 사용 예
 for(i=0;i<size;i++)
  scanf("%d",& arr[i]);
 for(i=0;i<size;i++)
  printf("%d번째 요소 : %d \n",i,arr[i]);
 free(arr);

}

 

-------------------------------------------------------------------------------------------------------------

 

//extern 사용 법

 

// main.c

#include <stdio.h>

extern int cal_num;

double add(double a, double b);
double minus(double a, double b);
double multiple(double a, double b);
double divide(double a, double b);

void main()

{
 double a=10.2;
 double b= 2.1;

   printf("덧셈 : %f \n",add(a,b));
   printf("뺄셈 : %f \n",minus(a,b));
   printf("곱셈 : %f \n",multiple(a,b));
   printf("나눗셈 : %f \n",divide(a,b));

   printf("총 연산수 :%d \n", cal_num);

 
}

//test.c

 

#include <stdio.h>
int cal_num=0;

double add(double a, double b){
 cal_num++;
 return a+b;
}
double minus(double a, double b){
 cal_num++;
 return a-b;
}
double multiple(double a, double b){
 cal_num++;
 return a*b;
}
double divide(double a, double b){
 cal_num++;
 return a/b;
}

 

-------------------------------------------------------------------------------------------------------------

// 헤더 파일에 조건부 컴파일

#ifndef _TEST_H_
#define _TEST_H_


extern int cal_num;


double add(double a, double b);
double minus(double a, double b);
double multiple(double a, double b);
double divide(double a, double b);

#endif

 

-------------------------------------------------------------------------------------------------------------

 

 

 

 

 

 

 

 

'c언어 > 자료' 카테고리의 다른 글

c언어 7일차  (0) 2014.05.03
c언어 6일차  (0) 2014.04.27
c언어 5일차  (0) 2014.04.26
c언어 4일차  (0) 2014.04.20
c언어 3일차  (0) 2014.04.19