#include <stdio.h>
struct list{
char name[20];
char sex;
int age;
};
// inp 함수 구현, 사용자로부터 이름, 성별, 나이를 입력 받아 저장하는 기능
void inp1(struct list * pman );
void main(){
struct list man;
inp1(&man);
printf("\n Name Sex Age\n");
printf("-------------------------\n");
printf("%s %c %d\n", man.name, man.sex, man.age);
}
void inp1(struct list * pman)
{
//1번째 방법 : 임시변수를 선언해서 입력받은 후
// 대입연산을 통해 원본의 값에 저장하는 방법
//char name[20];
//char sex;
//int age;
//printf("이름 : "); gets(name);
//printf("성별 : "); scanf("%c", &sex);
//printf("나이 : "); scanf("%d", &age);
//pman->sex = sex;
//pman->age = age;
//strcpy(pman->name , name);
//2번째 방법 : 직접 입력받는 방법
printf("이름 : "); gets(pman->name);
printf("성별 : "); scanf("%c", &pman->sex);
printf("나이 : "); scanf("%d", &pman->age);
}
}
struct list{
char name[20];
char sex;
int age;
};
// inp 함수 구현, 사용자로부터 이름, 성별, 나이를 입력 받아 저장하는 기능
void inp2(char *name, char *psex, int *page);
// struct list함수의 멤버와 차수 동일
void main(){
struct list man;
// inp1(&man);
inp2(man.name, &man.sex, &man.age);
//<====== struct list함수의 멤버와 차수 동일
printf("\n Name Sex Age\n");
printf("-------------------------\n");
printf("%s %c %d\n", man.name, man.sex, man.age);
}
void inp2(char *name, char *psex, int *page)
{
printf("이름 : "); gets(name);
printf("성별 : "); scanf("%c", psex);
printf("나이 : "); scanf("%d", page);
}
struct student_t{
char name[20];
int kor;
int eng;
int mat;
int total;
float aver;
char grad;
};
void fun_inputjumsu(struct student_t * stulist, int size);
void fun_printstudent(const struct student_t * stulist, int size);
void fun_input_sum(struct student_t * stulist, int size);
void fun_input_aver(struct student_t * stulist, int size);
void fun_printresult(const struct student_t * stulist, int size);
void fun_input_grad(struct student_t * stulist, int size);
int main(){
struct student_t stulist[4] = { 0 };
fun_inputjumsu(stulist, 4);
fun_input_sum(stulist, 4);
fun_input_aver(stulist, 4);
fun_input_grad(stulist, 4); //<==================
fun_printstudent(stulist, 4);
fun_printresult(stulist, 4);
return 0;
}
void fun_input_grad(struct student_t * stulist, int size)
{
int i;
for (i = 0; i < size; i++)
{
if (stulist[i].aver >= 90.0f && stulist[i].aver <= 100.0f)
{
stulist[i].grad = 'A';
}
else if (stulist[i].aver >= 80.0f && stulist[i].aver <= 89.0f)
{
stulist[i].grad = 'B';
}
else if (stulist[i].aver >= 70.0f && stulist[i].aver <= 79.0f)
{
stulist[i].grad = 'C';
}
else if (stulist[i].aver >= 60.0f && stulist[i].aver <= 69.0f)
{
stulist[i].grad = 'D';
}
else
{
stulist[i].grad = 'F';
}
}
}
void fun_printresult(const struct student_t * stulist, int size)
{
int i;
float kor_sum = 0, eng_sum = 0, mat_sum = 0;
for (i = 0; i < size; i++)
{
kor_sum = kor_sum + stulist[i].kor;
eng_sum = eng_sum + stulist[i].eng;
mat_sum = mat_sum + stulist[i].mat;
}
printf(" >> 국어 평균 : %.2f\n", (float)kor_sum / size);
printf(" >> 영어 평균 : %.2f\n", (float)eng_sum / size);
printf(" >> 수학 평균 : %.2f\n", (float)mat_sum / size);
}
void fun_input_aver(struct student_t * stulist, int size)
{
int i;
for (i = 0; i < size; i++)
{
stulist[i].aver = stulist[i].total / 3.0f;
}
}
void fun_input_sum(struct student_t * stulist, int size)
{
int i;
for (i = 0; i < size; i++)
{
stulist[i].total = stulist[i].kor + stulist[i].eng + stulist[i].mat;
}
}
void fun_inputjumsu(struct student_t * stulist, int size)
{
//국어, 영어, 수학
int i;
for (i = 0; i < size; i++)
{
printf("[%d] 번째 학생 성적 입력(국어, 영어, 수학)\n", i + 1);
printf(" >> 입력 예) 홍길동 100 90 80 : ");
scanf("%s", stulist[i].name);
scanf("%d%d%d", &stulist[i].kor, &stulist[i].eng, &stulist[i].mat);
printf("\n");
}
}
void fun_printstudent(const struct student_t * stulist, int size)
{
int i;
printf("%10s%10s%10s%10s%10s%10s%10s\n",
"이름", "국어", "영어", "수학", "총점", "평균", "등급");
printf("======================================================================\n");
for (i = 0; i < size; i++)
{
printf("%10s%10d%10d%10d%10d%10.2f%10c\n",
stulist[i].name,
stulist[i].kor, stulist[i].eng, stulist[i].mat,
stulist[i].total, stulist[i].aver,
stulist[i].grad);
}
printf("======================================================================\n");
}
#include <stdio.h>
/*
비트필드 구조체는 일반적으로 동일타입으로 맴버가 구성된다.
주로 사용되는 타입은 unsignd int
>> 맴버들은 unsigned int 타입의 크기를
비트단위로 나누어 사용한다.
>> 목적은 메모리 효율성..............
사용방법은 구조체 사용법과 동일하나
단 하나, 맴버변수에 직접 입력할 수 없다.
*/
/*
struct AAA
{
unsigned int num1 : 3;
unsigned int num2 : 4;
unsigned int num3 : 1;
};
void main()
{
printf("%dbyte\n", sizeof(struct AAA));
}
[예제] 사용자 글씨체에 대한 선택정보를 구조체 비트 필드를 이용하여 저장하는 프로그램
#include <stdio.h>
struct font { unsigned int bold : 1; // 1비트 : 0 or 1의 값만 갖는다.
unsigned int italic : 1; // 1비트 : 0 or 1의 값만 갖는다.
unsigned int size : 7; // 7비트 : 0 ~ 127 사이의 값을 갖는다.
};
int main(void)
{
struct font myfont = {0,0,10};
char ch;
unsigned int res;
printf("기본 글씨체:%s %s, 크기:%d 입니다.\n", (myfont.bold == 1?"굵고":"얇고"),
(myfont.italic == 1? "이탤릭체이며":"이탤릭체가 아니며"), myfont.size);
printf("글씨체를 바꾸시겠습니까? (Y or N) : "); scanf("%c", &ch);
if (ch == 'Y' || ch == 'y')
{
printf("굵은 글씨체로 하시겠습니까? (1 or 0) : "); scanf("%d", &res);
myfont.bold = res;
printf("이탤릭체로 하시겠습니까? (1 or 0) : "); scanf("%d", &res);
myfont.italic = res;
printf("크기는 몇으로 하시겠습니까? (1 ~ 127) : "); scanf("%d", &res);
myfont.size = res;
printf("선택한 글씨체:%s %s, 크기:%d 입니다.\n",(myfont.bold == 1?"굵고":"얇고"),
(myfont.italic == 1? "이탤릭체이며":"이탤릭체가 아니며"), myfont.size);
}
return 0;
}
*/
#include <stdio.h>
struct font {
unsigned int bold : 1; // 1비트 : 0 or 1의 값만 갖는다.
unsigned int italic : 1; // 1비트 : 0 or 1의 값만 갖는다.
unsigned int size : 7; // 7비트 : 0 ~ 127 사이의 값을 갖는다.
unsigned int rest : 23; // 남는 공간
};
int main(void)
{
struct font myfont = { 0, 0, 10 };
char ch;
unsigned int res;
printf("기본 글씨체:%s %s, 크기:%d 입니다.\n",
(myfont.bold == 1 ? "굵고" : "얇고"),
(myfont.italic == 1 ? "이탤릭체이며" : "이탤릭체가 아니며"), myfont.size);
printf("글씨체를 바꾸시겠습니까? (Y or N) : "); scanf("%c", &ch);
if (ch == 'Y' || ch == 'y')
{
printf("굵은 글씨체로 하시겠습니까? (1 or 0) : ");
scanf("%d", &res);
myfont.bold = res;
printf("이탤릭체로 하시겠습니까? (1 or 0) : "); scanf("%d", &res);
myfont.italic = res;
printf("크기는 몇으로 하시겠습니까? (1 ~ 127) : "); scanf("%d", &res);
myfont.size = res;
printf("선택한 글씨체:%s %s, 크기:%d 입니다.\n", (myfont.bold == 1 ? "굵고" : "얇고"),
(myfont.italic == 1 ? "이탤릭체이며" : "이탤릭체가 아니며"), myfont.size);
}
return 0;
}
#include <stdio.h>
/*
공용체
*/
#pragma pack(1) // 바이트 메모리 저장 단위
struct AAA
{
int num1 ;
char num2 ;
char num3[20];
};
union BBB
{
char num2;
int num1;
char num3[20];
};
void main()
{
struct AAA a;
union BBB b;
printf("%d : %d : %d\n", &a.num1, &a.num2, &a.num3);
printf("%d : %d : %d\n", &b.num1, &b.num2, &b.num3);
printf("%dbyte\n", sizeof(struct AAA)); //25
printf("%dbyte\n", sizeof(union BBB)); //25
}
'01.Bit 단기 > C' 카테고리의 다른 글
27_파일IO기본코드 (0) | 2018.04.28 |
---|---|
26_typedef사용법 (0) | 2018.04.28 |
24_구조체포인터및인자전달 (0) | 2018.04.28 |
23_구조체배열 (0) | 2018.04.28 |
22_구조체1 (0) | 2018.04.28 |
댓글