#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
using namespace std;
class Seller {
string name;
int applePrice, numApple, money;
public:
Seller(string a, int y, int z) {
name = a;
applePrice = (rand() % 1500 + 500) / 100 * 100;
numApple = y;
money = z;
}
void show() {
cout << "----가게 정보----\n가게명 : " << name << ", 사과 가격 : "
<< applePrice << ", 사과 개수 : " << numApple << ", 돈 : " << money << endl;
}
int get_Price() {
//멤버변수가 private이기 때문에
//반환을 통해서 사과 가격 얻기
return applePrice;
}
void Sell(int n) {
numApple -= n;
money += n*applePrice;
cout << "남은 사과 수 : " << numApple << ", 돈 : " << money << endl;
}
};
class Buyer {
string name;
int list, money;
public:
Buyer(string a, int y, int z) {
name = a;
list = b;
money = z;
}
void show() {
cout << "이름 : " << name << "장바구니 : " << list << ", 돈 : " << money << endl;
}
void buy(Seller* p) {
int num; //구매할 사과 개수
cout << "구매하실 사과 개수 입력 : ";
cin >> num;
//만약, 구매할 사과 개수가 Seller의 사과 개수보다 적거나,
//구매자의 돈이 구매할 사과의 가격보다 많을 경우 "구매가능" 문구 출력 if (num <= (*p).get_Number() && money >= num*p->get_Price()) {
cout << "구매 가능" << endl;
p->Sell(num);
list += num;
money += num*p->get_Price();
show();
//돈 감소, 장바구니 증가
//seller sell함수 만들어서 구매한 만큼 사과 개수 감소, 돈 증가
}
else cout << "구매 불가능" << endl;
}
}
void main() {
srand(time(NULL));
Seller s1("a", 12, 8000);
Seller s2("b", 19, 10000);
Seller s3("c", 26, 24500);
s1.show();
s2.show();
s3.show();
Buyer b1(" 가", 13, 20000);
b1.show();
int m1 = s1.get_Price();
int m2 = s2.get_Price();
int m3 = s3.get_Price();
int lowest = 0;
if (m1 < m2) lowest = m1;
else lowest = m2;
if (m3 < lowest) lowest = m3;
if (lowest == m1) s1.show();
else if (lowest == m2) s2.show();
else if (lowest == m3) s3.show();
// if (m1 < m2 && m1 < m3) s1.show();
//else if (m2<m1 && m2<m3) s2.show();
//else if (m3 <m1 && m3<m2) s3.show();
}
8.08.2017
8.05.2017
08.05 creating character
#include <stdio.h>
#include <stdlib.h>
typedef struct Character {
char nickname[12];
int strength, level, exp; //체력, 레벨, 경험치
}character;
character* c;
void create(int index) {
c = (character*)realloc(c, sizeof(character) * (index+ 1));
printf("Enter character's nickname.\n");
scanf("%s", c[index].nickname);
printf("Enter character's strength.\n");
scanf("%d", &c[index].strength);
printf("Enter character's level.\n");
scanf("%d", &c[index].level);
printf("Enter character's experience point.\n");
scanf("%d", &c[index].exp);
}
void show(int index) {
for (int i = 0; i < index; i++) {
printf("About your character...\n");
printf("nickname : %s \n", c[i].nickname);
printf("strength : %d \n", c[i].strength);
printf("level : %d \n", c[i].level);
printf("experience point : %d \n", c[i].exp);
}
}
void deleteCharacter(int index) {
char name[20];
printf("Which nickname do you want to erase?");
scanf("%s", name);
for (int i = 0; i < index; i++) {
if (!strcmp(c[i].nickname, name));
//strcmp (compare values) : if same -> 0
// if different -> 1, -1
for (int k = i; k < index- 1; k++) {
//앞으로 당겨주는 작업을 할 반복문
c[i] = c[i + 1];
c = (character*)realloc(c, sizeof(character)*(index- 1));
}//end for(k)
break; //더 이상 입력할 닉네임을 찾을 필요가 없기 때문
}//end if
}
void main() {
int input = 0, index = 0;
c = (character*)malloc(sizeof(character));
while (input != 4) {
printf("[menu]\n1.Create your own Character 2.Show your character 3.Delete your character 4.End this program\n");
scanf("%d", &input);
if (input == 1) {
create(index);
index++;
}
else if (input == 2) show(index);
else if (input == 3) {
deleteCharacter(index);
index--;
}
}
}
#include <stdlib.h>
typedef struct Character {
char nickname[12];
int strength, level, exp; //체력, 레벨, 경험치
}character;
character* c;
void create(int index) {
c = (character*)realloc(c, sizeof(character) * (index+ 1));
printf("Enter character's nickname.\n");
scanf("%s", c[index].nickname);
printf("Enter character's strength.\n");
scanf("%d", &c[index].strength);
printf("Enter character's level.\n");
scanf("%d", &c[index].level);
printf("Enter character's experience point.\n");
scanf("%d", &c[index].exp);
}
void show(int index) {
for (int i = 0; i < index; i++) {
printf("About your character...\n");
printf("nickname : %s \n", c[i].nickname);
printf("strength : %d \n", c[i].strength);
printf("level : %d \n", c[i].level);
printf("experience point : %d \n", c[i].exp);
}
}
void deleteCharacter(int index) {
char name[20];
printf("Which nickname do you want to erase?");
scanf("%s", name);
for (int i = 0; i < index; i++) {
if (!strcmp(c[i].nickname, name));
//strcmp (compare values) : if same -> 0
// if different -> 1, -1
for (int k = i; k < index- 1; k++) {
//앞으로 당겨주는 작업을 할 반복문
c[i] = c[i + 1];
c = (character*)realloc(c, sizeof(character)*(index- 1));
}//end for(k)
break; //더 이상 입력할 닉네임을 찾을 필요가 없기 때문
}//end if
}
void main() {
int input = 0, index = 0;
c = (character*)malloc(sizeof(character));
while (input != 4) {
printf("[menu]\n1.Create your own Character 2.Show your character 3.Delete your character 4.End this program\n");
scanf("%d", &input);
if (input == 1) {
create(index);
index++;
}
else if (input == 2) show(index);
else if (input == 3) {
deleteCharacter(index);
index--;
}
}
}
08.05. 문자입력, 출력, 종료
#include <stdio.h>
#include <stdlib.h>
char* arr;
void input(int i) {
arr = (char*)realloc(arr, sizeof(char) * i);
while (getchar() != '\n');
scanf("%c", &arr[i-1]);
}
void show(int n) {
for (int i = 0; i < n-1; i++) {
printf("%c", arr[i]);
}
}
void main() {
arr = (char*)malloc(sizeof(char) * 1);
int a = 6, b = 1;
while (a != 3) {
printf("[menu]\n1. 문자입력 2. 모든 문자 출력 3. 종료\n");
scanf("%d", &a);
if (a == 1) {
input(b);
b++;
}
else if (a == 2)show(b);
}
}
#include <stdlib.h>
char* arr;
void input(int i) {
arr = (char*)realloc(arr, sizeof(char) * i);
while (getchar() != '\n');
scanf("%c", &arr[i-1]);
}
void show(int n) {
for (int i = 0; i < n-1; i++) {
printf("%c", arr[i]);
}
}
void main() {
arr = (char*)malloc(sizeof(char) * 1);
int a = 6, b = 1;
while (a != 3) {
printf("[menu]\n1. 문자입력 2. 모든 문자 출력 3. 종료\n");
scanf("%d", &a);
if (a == 1) {
input(b);
b++;
}
else if (a == 2)show(b);
}
}
0805 자료구조 복습
#include <stdio.h>
#include <stdlib.h>
void main() {
/*
정적할당 : 고정되어있는 값만 사용
ex) int num, int arr[5];
동적할당 : 계속해서 변하는 값
컴파일을 실행할 때 저장할 변수를 늘리거나 줄일 때 사용
#include <stdlib.h>
할당 : malloc(), calloc() //재할당 : realloc()
*/
//(void*)malloc(바이트크기)
int* p = (int*)malloc(sizeof(int) * 4);
// malloc를 이용하여 4개짜리 배열
// 생성 후, 포인터 변수 p 에 배열의 첫번쨰 인덱스의 주소(배열의 시작주소)를 대입해줬다.
/*
0번째 인덱스 = 10, 1 = 20, 2 = 30
*/
/*int arr[5];
int* p;
*/
*p = 10;
p[1] = 20;
p[2] = 30;
printf("%d %d %d \n", *(p + 0), p[1], p[2]);
//calloc(개수, 사이즈);
// c : clean
// 값이 없을 경우엔 0으로 초기화
int* c = (int*)calloc(4, sizeof(int));
*&c[0] = 50;
c[1] = 60;
c[2] = 70;
printf("%d %d %d \n", c[0], c[1], c[2]);
printf("c : %d, m : %d \n", c[3], p[3]);
//_msize() : 동적할당된 배열의 사이즈
// sizeof : 정적할당된 변수
printf("&dbyte \n", _msize(p)); //16byte
printf("&dbyte \n", _msize(c)); //16byte
//realloc(누구, 사이즈?);
p = (int*)realloc(p, sizeof(int)* 5);
//4개짜리 공간 -> 5개짜리 공간
printf("%dbyte \n", _msize(p)); //20byte
printf("%d %d %d \n", p[0], p[1], p[2]); //20byte
/*
*& : 서로 상쇄
&* 상쇄(X)
arr[0] == *p == *(p+0) == *&p[0] == p[0]
arr[1] == *(p+1) == *&p[1] == p[1]
*/
/*int num;
int *p2 = #
*p2 = 20;
*/
// *p2 == num
// p2가 가지고 있는 주소로 접근(num으로 이동)하여 20을 대입하겠다.
}
#include <stdlib.h>
void main() {
/*
정적할당 : 고정되어있는 값만 사용
ex) int num, int arr[5];
동적할당 : 계속해서 변하는 값
컴파일을 실행할 때 저장할 변수를 늘리거나 줄일 때 사용
#include <stdlib.h>
할당 : malloc(), calloc() //재할당 : realloc()
*/
//(void*)malloc(바이트크기)
int* p = (int*)malloc(sizeof(int) * 4);
// malloc를 이용하여 4개짜리 배열
// 생성 후, 포인터 변수 p 에 배열의 첫번쨰 인덱스의 주소(배열의 시작주소)를 대입해줬다.
/*
0번째 인덱스 = 10, 1 = 20, 2 = 30
*/
/*int arr[5];
int* p;
*/
*p = 10;
p[1] = 20;
p[2] = 30;
printf("%d %d %d \n", *(p + 0), p[1], p[2]);
//calloc(개수, 사이즈);
// c : clean
// 값이 없을 경우엔 0으로 초기화
int* c = (int*)calloc(4, sizeof(int));
*&c[0] = 50;
c[1] = 60;
c[2] = 70;
printf("%d %d %d \n", c[0], c[1], c[2]);
printf("c : %d, m : %d \n", c[3], p[3]);
//_msize() : 동적할당된 배열의 사이즈
// sizeof : 정적할당된 변수
printf("&dbyte \n", _msize(p)); //16byte
printf("&dbyte \n", _msize(c)); //16byte
//realloc(누구, 사이즈?);
p = (int*)realloc(p, sizeof(int)* 5);
//4개짜리 공간 -> 5개짜리 공간
printf("%dbyte \n", _msize(p)); //20byte
printf("%d %d %d \n", p[0], p[1], p[2]); //20byte
/*
*& : 서로 상쇄
&* 상쇄(X)
arr[0] == *p == *(p+0) == *&p[0] == p[0]
arr[1] == *(p+1) == *&p[1] == p[1]
*/
/*int num;
int *p2 = #
*p2 = 20;
*/
// *p2 == num
// p2가 가지고 있는 주소로 접근(num으로 이동)하여 20을 대입하겠다.
}
8.03.2017
08.03 TV
#include <iostream>
using namespace std;
struct TV {
private:
bool power;
int volume, channel;
public:
TV(bool a, int b, int c) {
power = a;
volume = b;
channel = c;
}
void power_change() {
power = !power;
}
void Volume_Up() {
if (volume < 100)
volume++;
}
void Volume_Down() {
if (volume > 0)
volume--;
}
void Channel_Up() {
channel++;
}
void Channel_Down() {
if (channel > 0)
channel--;
}
bool getPower() {
return power; //현재 파워 상태 반환
}
void show() {
cout << "----현재 상태----\n전원 : " << power << ", 채널 : " << channel << ", 볼륨 : " << volume;
}
};
void main() {
int input, answer;
TV t = TV(false, 0, 0);
/*
TV 구조체 생성
멤버변수 : 전원(bool), 볼륨, 채널
구조체 함수 :
power_change() : 전원 On, Off 가능
Volume_Up : 볼륨 1씩 증가
Volume_Down : 볼륨 1씩 감소
Channel_Up : 채널 1씩 증가
Channel_Down : 채널 1씩 감소
전원을 켜시겠습니까? (1.y 2.n)
1일 경우,
*/
cout << "전원을 켜시겠습니까? yes-> 1, no -> 2" << endl;
cin >> answer;
if (answer == 1)
t.power_change();
while (t.getPower() == true) {
t.show();
cout << "\n[menu]\n1.전원OFF 2.채널UP 3.채널Down 4.볼륨Up 5.볼륨Down" << endl;
cin >> input;
if (input == 1) t.power_change();
else if (input == 2)t.Channel_Up();
else if (input == 3)t.Channel_Down();
else if (input == 4)t.Volume_Up();
else if (input == 5)t.Volume_Down();
}
}
using namespace std;
struct TV {
private:
bool power;
int volume, channel;
public:
TV(bool a, int b, int c) {
power = a;
volume = b;
channel = c;
}
void power_change() {
power = !power;
}
void Volume_Up() {
if (volume < 100)
volume++;
}
void Volume_Down() {
if (volume > 0)
volume--;
}
void Channel_Up() {
channel++;
}
void Channel_Down() {
if (channel > 0)
channel--;
}
bool getPower() {
return power; //현재 파워 상태 반환
}
void show() {
cout << "----현재 상태----\n전원 : " << power << ", 채널 : " << channel << ", 볼륨 : " << volume;
}
};
void main() {
int input, answer;
TV t = TV(false, 0, 0);
/*
TV 구조체 생성
멤버변수 : 전원(bool), 볼륨, 채널
구조체 함수 :
power_change() : 전원 On, Off 가능
Volume_Up : 볼륨 1씩 증가
Volume_Down : 볼륨 1씩 감소
Channel_Up : 채널 1씩 증가
Channel_Down : 채널 1씩 감소
전원을 켜시겠습니까? (1.y 2.n)
1일 경우,
*/
cout << "전원을 켜시겠습니까? yes-> 1, no -> 2" << endl;
cin >> answer;
if (answer == 1)
t.power_change();
while (t.getPower() == true) {
t.show();
cout << "\n[menu]\n1.전원OFF 2.채널UP 3.채널Down 4.볼륨Up 5.볼륨Down" << endl;
cin >> input;
if (input == 1) t.power_change();
else if (input == 2)t.Channel_Up();
else if (input == 3)t.Channel_Down();
else if (input == 4)t.Volume_Up();
else if (input == 5)t.Volume_Down();
}
}
0803 공부
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
typedef struct Account {
char name[12], id[20], password[20];
int accountNumber, surplus;
}account;
void Create(account* a) {
printf("이름을 입력하시오.\n");
scanf("%s", (*a).name);
printf("아이디를 입력하시오.\n");
scanf("%s", a->id);
printf("비밀번호를 입력하시오.\n");
scanf("%s", a->password);
printf("계좌번호를 입력하시오.\n");
scanf("%d", &a->accountNumber);
printf("잔금을 입력하시오.\n");
scanf("%d", &a->surplus);
}
void main() {
int b = 0;
//배열 아니면 scanf에서 주소연산자가 필요
// ' ' : 문자
account a;
while(b!=3){
printf("메뉴 // 1. 회원가입 2.로그인 3.종료");
scanf("%d", &b);
if (b == 1)
Create(&a);
else if (b == 2) {
char id2[20], password2[20];
printf("아이디 입력");
scanf("%s", id2);
printf("비밀번호 입력");
scanf("%s", password2);
// -> : * .
if (!strcmp(id2, a.id) && !strcmp(password2, a.password)) { //(id2 == a->id) && (password2 == a->password)
printf("이름은 %s", a.name);
printf("계좌번호는 %d", a.accountNumber);
printf("잔금은 %d", a.surplus);
}
}
else if (b == 3) {
printf("프로그램 종료");
}
}
/*
함수의 차이점
C언어 : 인자값이 2개면, 매개변수는 2개여야만 한다.
함수의 매개변수에 초기값 대입은 불가능하다.
C++ : 인자값이 2개일 때, 매개변수가 여러 개 여도 상관없다.
단, 매개 변수에 초기값이 되어야만 한다.
인자값 보다는 매개변수가 많아야 한다.
만약, 보내주는 값이 있을 경우 그 값으로 대체한다.
*/
}
#include <stdio.h>
#include <string.h>
typedef struct Account {
char name[12], id[20], password[20];
int accountNumber, surplus;
}account;
void Create(account* a) {
printf("이름을 입력하시오.\n");
scanf("%s", (*a).name);
printf("아이디를 입력하시오.\n");
scanf("%s", a->id);
printf("비밀번호를 입력하시오.\n");
scanf("%s", a->password);
printf("계좌번호를 입력하시오.\n");
scanf("%d", &a->accountNumber);
printf("잔금을 입력하시오.\n");
scanf("%d", &a->surplus);
}
void main() {
int b = 0;
//배열 아니면 scanf에서 주소연산자가 필요
// ' ' : 문자
account a;
while(b!=3){
printf("메뉴 // 1. 회원가입 2.로그인 3.종료");
scanf("%d", &b);
if (b == 1)
Create(&a);
else if (b == 2) {
char id2[20], password2[20];
printf("아이디 입력");
scanf("%s", id2);
printf("비밀번호 입력");
scanf("%s", password2);
// -> : * .
if (!strcmp(id2, a.id) && !strcmp(password2, a.password)) { //(id2 == a->id) && (password2 == a->password)
printf("이름은 %s", a.name);
printf("계좌번호는 %d", a.accountNumber);
printf("잔금은 %d", a.surplus);
}
}
else if (b == 3) {
printf("프로그램 종료");
}
}
/*
함수의 차이점
C언어 : 인자값이 2개면, 매개변수는 2개여야만 한다.
함수의 매개변수에 초기값 대입은 불가능하다.
C++ : 인자값이 2개일 때, 매개변수가 여러 개 여도 상관없다.
단, 매개 변수에 초기값이 되어야만 한다.
인자값 보다는 매개변수가 많아야 한다.
만약, 보내주는 값이 있을 경우 그 값으로 대체한다.
*/
}
8.01.2017
0801 C++공부
#include <iostream>
using namespace std;
void Func(int num) {
if (num > 2) return;
Func(num + 1);
cout << num << endl;
}
/*void Function(int num) {
if (num > 10) return;
Function(num + 1);
if (num <= 1) {
cout << num;
}
else {
cout << num << ", " ;
}
}*/
void Function2(int a) {
int sum = 0;
sum += a;
if (a <= 1) {
cout << sum;
}
else cout << sum << " + ";
Function2(a - 1);
}
int Function3(int i, int end, int total){
if (i >= end) {
cout << i << " + ";
total += i;
return total;
}
else {
total += i;
total = Function3(i + 1, end, total);
if (i == 1) cout << i;
else cout << i << " + ";
}
return total;
}
void main() {
/*
재귀함수 : 자기자신을 다시 호출
: 또 다른 반복문
: 코드를 반복문보다 간결화한다
void func(){
if문 return; //함수를 종료시킬 수 있게 함
func();
)
*/
int num = 1, integer, total = 0;
cin >> integer;
//Function(num);
cout << " = " << Function2(integer);
cout << " = " << Function3(num, integer, total);
}
============================================================================
#include <stdio.h>
typedef struct Test{
int num;
char ch;
double db;
}test;
typedef int a; //int형을 a라는 이름으로 재정의
//a == int
//함수 사용 이유
//: 공통적 재사용성
void main() {
/*
구조체 : 하나 이상의 자료형을 모아놓은 사용자 지정 자료형
C언어 : 변수만 생성가능
변수에는 포기값 대입(x)
C++ : 함수, 변수 둘 다 사용 가능
변수에 초기값 대입(o)
구조체 생성
struct 구조체네임{
(정수형, 문자, 문자열, 포인터, 배열)변수1;
변수2;
변수3;
};
//--C언어--
//구조체 변수
//struct 구조체네임 변수네임;
*/
/*
struct Test t1; // t1이라는 struct Test 자료형
//struct Test == test
test t2; // struct Test t2;
test t3 = { 10, 'A', 10.1234 };
//구조체 변수 초기화
//구조체 변수네임 = {};
//- 구조체 변수를 만들었을 때 바로 초기화
//- 순차적으로 변수에 값이 들어가게 됨
// . : 연결자(도트 연산자)
t1.num = 10; // t1변수 안에 있는 num 변수 구조체 변수 생성
t1.ch = 'A';
t1.db = 10.1234;
t2.num = 20;
t2.ch = 'B';
t2.db = 20.1234;
printf("%d %c %lf \n", t1.num, t1.ch, t1.db);
printf("%d %c %lf \n", t2.num, t2.ch, t2.db);
test t;
test* p;
p = &t;
//포인터 변수 p를 이용하여 t구조체 변수의 num에 10 대입
(*p).num = 10; //p->num = 10;
printf("%d\n", t.num);
//도트연산자가 접근연사자보다 우선순위가 높아서 괄호로 묶음
//포인터 : int -> int*
*/
}
===============================================================================
#include <stdio.h>
typedef struct Student {
char name[12];
int kor, math, eng, total;
double average;
}student;
void input(student* s) {
//접근 : student* s = &s1;
//값 변경 시 포인터 이용 : student* s = &s2;
printf("학생의 이름을 입력하시오.\n");
scanf("%s", s->name);
printf("학생의 국어, 수학, 영어 점수를 입력하시오.\n");
scanf("%d", &s->kor); //&s->kor == &(*s).kor
scanf("%d", &s->math);
scanf("%d", &s->eng);
s->total = s->kor + s->math + s->eng;
s->average = (double)s->total / 3;
}
void disp(student s) {
//복사(대입) student s = s1;
printf("학생들의 정보");
printf("학생 이름 : &s \n", s.name);
printf("국어점수 : &d \n", s.kor);
printf("수학점수 : &d \n", s.math);
printf("영어점수 : &d \n", s.eng);
printf("총합점수 : &d \n", s.total);
printf("평균점수 : %.2lf \n", s.average);
}
void main() {
/* Student 구조체 생성
구조체 내의 변수(멤버변수) :
이름, 국어, 수학, 영어, 총점, 평균
s1,s2,s3 구조체 변수 생성 후
input 함수 : 모든 학생의 이름, 국어, 수학, 영어 입력
disp함수 : 모든 학생의 정보 출력
*/
student s1;
student s2;
student s3;
input(&s1);
input(&s2);
input(&s3);
disp(s1);
disp(s2);
disp(s3);
/*
c언어 구조체 : 구조체 멤버변수에 초기화 불가능
무조건 변수만 들어가야함
접근 지정자 typedef을 이용하여 이름의 재정의를 해줌
ex) typedef struct Test{}test; == test
공통점 :
구조체 생성 시 struct 예약어를 사용한다.
구조체 변수 구조체명 구조체 변수;
포인터(*) : 주소를 저장할 변수를 만들 때 사용
주소를 저장하여 접근하기 위해 사용
*/
/*char name[12];
scanf("%s", name);
printf("%c%c", name[0], name[1]);
printf("%c%c", name[2], name[3]);
*/
}
using namespace std;
void Func(int num) {
if (num > 2) return;
Func(num + 1);
cout << num << endl;
}
/*void Function(int num) {
if (num > 10) return;
Function(num + 1);
if (num <= 1) {
cout << num;
}
else {
cout << num << ", " ;
}
}*/
void Function2(int a) {
int sum = 0;
sum += a;
if (a <= 1) {
cout << sum;
}
else cout << sum << " + ";
Function2(a - 1);
}
int Function3(int i, int end, int total){
if (i >= end) {
cout << i << " + ";
total += i;
return total;
}
else {
total += i;
total = Function3(i + 1, end, total);
if (i == 1) cout << i;
else cout << i << " + ";
}
return total;
}
void main() {
/*
재귀함수 : 자기자신을 다시 호출
: 또 다른 반복문
: 코드를 반복문보다 간결화한다
void func(){
if문 return; //함수를 종료시킬 수 있게 함
func();
)
*/
int num = 1, integer, total = 0;
cin >> integer;
//Function(num);
cout << " = " << Function2(integer);
cout << " = " << Function3(num, integer, total);
}
============================================================================
#include <stdio.h>
typedef struct Test{
int num;
char ch;
double db;
}test;
typedef int a; //int형을 a라는 이름으로 재정의
//a == int
//함수 사용 이유
//: 공통적 재사용성
void main() {
/*
구조체 : 하나 이상의 자료형을 모아놓은 사용자 지정 자료형
C언어 : 변수만 생성가능
변수에는 포기값 대입(x)
C++ : 함수, 변수 둘 다 사용 가능
변수에 초기값 대입(o)
구조체 생성
struct 구조체네임{
(정수형, 문자, 문자열, 포인터, 배열)변수1;
변수2;
변수3;
};
//--C언어--
//구조체 변수
//struct 구조체네임 변수네임;
*/
/*
struct Test t1; // t1이라는 struct Test 자료형
//struct Test == test
test t2; // struct Test t2;
test t3 = { 10, 'A', 10.1234 };
//구조체 변수 초기화
//구조체 변수네임 = {};
//- 구조체 변수를 만들었을 때 바로 초기화
//- 순차적으로 변수에 값이 들어가게 됨
// . : 연결자(도트 연산자)
t1.num = 10; // t1변수 안에 있는 num 변수 구조체 변수 생성
t1.ch = 'A';
t1.db = 10.1234;
t2.num = 20;
t2.ch = 'B';
t2.db = 20.1234;
printf("%d %c %lf \n", t1.num, t1.ch, t1.db);
printf("%d %c %lf \n", t2.num, t2.ch, t2.db);
test t;
test* p;
p = &t;
//포인터 변수 p를 이용하여 t구조체 변수의 num에 10 대입
(*p).num = 10; //p->num = 10;
printf("%d\n", t.num);
//도트연산자가 접근연사자보다 우선순위가 높아서 괄호로 묶음
//포인터 : int -> int*
*/
}
===============================================================================
#include <stdio.h>
typedef struct Student {
char name[12];
int kor, math, eng, total;
double average;
}student;
void input(student* s) {
//접근 : student* s = &s1;
//값 변경 시 포인터 이용 : student* s = &s2;
printf("학생의 이름을 입력하시오.\n");
scanf("%s", s->name);
printf("학생의 국어, 수학, 영어 점수를 입력하시오.\n");
scanf("%d", &s->kor); //&s->kor == &(*s).kor
scanf("%d", &s->math);
scanf("%d", &s->eng);
s->total = s->kor + s->math + s->eng;
s->average = (double)s->total / 3;
}
void disp(student s) {
//복사(대입) student s = s1;
printf("학생들의 정보");
printf("학생 이름 : &s \n", s.name);
printf("국어점수 : &d \n", s.kor);
printf("수학점수 : &d \n", s.math);
printf("영어점수 : &d \n", s.eng);
printf("총합점수 : &d \n", s.total);
printf("평균점수 : %.2lf \n", s.average);
}
void main() {
/* Student 구조체 생성
구조체 내의 변수(멤버변수) :
이름, 국어, 수학, 영어, 총점, 평균
s1,s2,s3 구조체 변수 생성 후
input 함수 : 모든 학생의 이름, 국어, 수학, 영어 입력
disp함수 : 모든 학생의 정보 출력
*/
student s1;
student s2;
student s3;
input(&s1);
input(&s2);
input(&s3);
disp(s1);
disp(s2);
disp(s3);
/*
c언어 구조체 : 구조체 멤버변수에 초기화 불가능
무조건 변수만 들어가야함
접근 지정자 typedef을 이용하여 이름의 재정의를 해줌
ex) typedef struct Test{}test; == test
공통점 :
구조체 생성 시 struct 예약어를 사용한다.
구조체 변수 구조체명 구조체 변수;
포인터(*) : 주소를 저장할 변수를 만들 때 사용
주소를 저장하여 접근하기 위해 사용
*/
/*char name[12];
scanf("%s", name);
printf("%c%c", name[0], name[1]);
printf("%c%c", name[2], name[3]);
*/
}
피드 구독하기:
글 (Atom)