본문 바로가기

학습공간/C, 프로그래밍기초

[10주차] 파일 입출력, 메모리 관리와 동적 할당

반응형

프로그래밍기초 연습문제 풀이

 

01. 파일의 읽기(read text)와 쓰기(write text)

#include <stdio.h> 
void main(){
 FILE *fi = fopen("abc.dat", "rt");
 FILE *fo = fopen("ccc.dat", "wt");
 char a[6];
 int i;
 for(i=0;i<3;i++){
  fscanf(fi, "%s", a);
  fprintf(fo, "%s\n", a);
 }
 fclose(fi);
 fclose(fo);
}

02. 파일의 읽기(read text)와 쓰기(write text)
#include <stdio.h> 
void main(){
 FILE *fi = fopen("abc.dat", "rt");
 FILE *fo = fopen("cba.dat", "wt");
 
 char a[4];
 int i;
 for(i=0;i<7;i++){
  fscanf(fi, "%s", a);
  fprintf(fo, "%s", a);
 }
 fclose(fi);
 fclose(fo);
}

03. 파일을 읽어들이고 입력받은 문자열 낱말의 갯수를 출력하기
#include <stdio.h> 
void main(){
 int i = 0;
 FILE *f = fopen("ddd.dat", "rt");
 char a[100];
 while(!feof(f)){
  i++;
  fscanf(f, "%s", a);
 }
 printf("낱말의 개수는 %d개입니다.\n", i);
 fclose(f);
}


04. 파일에 값을 입력받아 내보내기
#include <stdio.h> 
void main(){
 FILE *fi = fopen("base.dat", "rt");
 char name[10];
 int anta, tasu;
 int i;
 
 printf("------------------------------\n");
 printf("이름\t타수\t안타\t타율\n");
 printf("------------------------------\n");
 for(i=0;i<5;i++){
  fscanf(fi, "%s %d %d", name, &tasu, &anta);
  printf("%s\t%d\t%d\t%.2f\n", name, anta, tasu, (float)anta / tasu);
 }
 printf("------------------------------\n");
 
 fclose(fi);
}

 

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

함수의 정의 실습]

01. 정수를 입력받아 짝수, 홀수 구분하는 함수 만들기 
#include <stdio.h>
f(int a);
void main()
{
 int a;
 
 printf("한개의 정수를 입력하시오.>>");
 scanf("%d",&a);
 f(a);
}
 
f(int a)
{
 if(a%2==0)
  printf("짝수입니다.\n");
 else if(a%2==1)
  printf("홀수입니다.\n");
}
 
02. 두 정수를 입력받아 차이와 합계 구하는 함수 만들기 
#include <stdio.h> 
int sub(int x, int y)
{
 int z;
 z = x - y;
 return z;
}
int add(int x, int y)
{
 int z;
 z = x + y;
 return z;
}
void main()
{
 int a, b;
 printf("숫자 두 개를 입력하시오 :");
 scanf("%d %d", &a, &b);
 
 if(a>b)
  printf("%d - %d = %d\n", a, b, sub(a, b));
 else
  printf("%d + %d = %d\n", a, b, add(a, b));
}

03. 점수를 입력받아 학점으로 출력하는 함수 만들기
#include <stdio.h> 
int Sub(int x)
{
 if(x>=90)
  printf("A");
 else if(x>=80)
  printf("B");
 else if(x>=70)
  printf("C");
 else if(x>=60)
  printf("D");
 else
  printf("F");
 return x;
}
void main()
{
 int a;
 printf("학점 출력 프로그램\n");
 printf("점수를 입력 하세요: ");
 scanf("%d",&a);
 Sub(a);
 printf("%d\n",a);
}

 

구조체 함수의 정의 실습] 학생정보출력 프로그램

#include <stdio.h> 
struct student_t 
{ 
 char name[15]; 
 int score[3]; 
}; 
void calc(struct student_t *s1) 
{ 
 double sum = s1->score[0] + s1->score[1] + s1->score[2]; 
 double ave = sum/3; 
  
 printf("%s\t%d\t%d\t%d\t%.1f\t%.1f\t\n",s1->name,s1->score[0],s1->score[1],s1->score[2],sum,ave); 
} 
void main(void) 
{ 
 struct student_t s[3]; 
 int counter = 0; 
 int i; 
  
 for(counter=0; counter<3; counter++) 
 { 
  printf("학생이름 : "); 
  scanf("%s",&s[counter].name); 
  printf("국어점수 : "); 
  scanf("%d",&s[counter].score[0]); 
  printf("영어점수 : "); 
  scanf("%d",&s[counter].score[1]); 
  printf("수학점수 : "); 
  scanf("%d",&s[counter].score[2]); 
 } 
  
 printf("이름\t국어\t영어\t수학\t총점\t평균\n"); 
 printf("---------------------------------------------\n"); 
  for(i=0;i<counter;i++) 
   calc(&s[i]);   
} 

 

구조체 배열의 정의 실습] 학생정보출력 프로그램

#include <stdio.h> 
#include <string.h> 
struct student_t 
 
 char name[10]; 
 char phone[10]; 
 char adress[10]; 
 char major[10]; 
  
}; 
int main() 
{ 
 struct student_t p[3]; 
  
 int i; 
 char search[10]; 
  
 for(i=0;i<3;i++) 
 { 
  printf("이름 : "); scanf("%s", p[i].name); 
  printf("주소 : "); scanf("%s", p[i].adress); 
  printf("전화번호 : "); scanf("%s", p[i].phone); 
  printf("전공 : "); scanf("%s", p[i].major); 
   
 } 
  
 printf("이름을 입력 하세요 : "); 
 scanf("%s", search); 
  
 for(i=0;i<3;i++) 
 { 
  if(strcmp(p[i].name, search) == 0) 
  { 
   printf("이름 %s\n", p[i].name); 
   printf("주소 %s\n",p[i].adress); 
   printf("전화번호 %s\n",p[i].phone); 
   printf("전공 %s \n",p[i].major); 
   return 1; 
  } 
 } 
 printf("이름이 없습니다.\n"); 
 return 0; 
}

 

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

프로젝트 1] 의료진단 프로그램

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define PAU system("pause")
#define CLS system("cls")
void Reset(int *imoney,int cout);
void AllPrint(int *num,char name[][15],int *jmoney,int *imoney,int *Allmoney,char code[][5],int cout);
void Print(int *num,char name[][15],int *jmoney,int *imoney,int *Allmoney,char code[][5],int a);
void Menu();
void SetName(char name[][15],int cout);
void SetIn(int *jmoney,int cout,int *imoney);
void SetCode(char code[][5],int cout);
void SetMoney(int random,int *jmoney,int cout);
void SearchNum(int *num,char name[][15],int *jmoney,int *imoney,int *Allmoney,char code[][5]);
void SearchName(int *num,char name[][15],int *jmoney,int *imoney,int *Allmoney,char code[][5],char input);
void Searchcode(int *num,char name[][15],int *jmoney,int *imoney,int *Allmoney,char code[][5]);
void title();
void fals();
int SetNum(int *num,int cout);
int Month2(int *imoney,int cout);
int Month(int *imoney,int cout);
int Week3(int *imoney,int cout);
int Week2(int *imoney,int cout);
int GetAllmoney(int *jmoney, int *imoney,int *Allmoney,int cout);
int Random();
void main()
{
 char name[15][15];
 char code[15][5];
 char s_name;
 
 int input;
 int num[15];
 int cout=0;
 int random;
 int jmoney[15];
 int imoney[15];
 int Allmoney[15];
 
 while(1)
 {
  CLS;
 
  random=Random();
 
  Menu();
 
  scanf("%d",&input);
 
  CLS;
  switch(input)
  {
     
  case 1:
   if(cout>=15)
   {
    printf("더이상 입력 받지 못합니다.!!\n");
    break;
   }
  
   else
   {
    printf("-----------------------------------\n");
    printf("\t환자 입력\n");
    printf("-----------------------------------\n\n\n");
    printf("등록번호 %d 환자 입니다.!!\n",SetNum(num,cout));
    printf("환자의 이름 >> ");
    SetName(name,cout);
    printf("진료 코드 내과(ns)/외과(os) >> ");
    SetCode(code,cout);
    SetMoney(random, jmoney, cout);
   
    PAU;
   
    if(jmoney[cout]>10000)
     SetIn(jmoney, cout, imoney);
   
    else
    {
     Reset(imoney,cout);
  printf("진료비가 10000 원 미만 이므로 ");
     printf("환자의 상태가 양호합니다.!!\n");
     printf("입원하실 필요가 없습니다.!!\n");
    }
   
    GetAllmoney(jmoney, imoney, Allmoney, cout);
   
    cout++;
   }
   break;
  
  case 2:
   printf("1. 등록 번호로 찾기\n");
   printf("2. 이름으로 찾기\n\n");
   printf("선택해 주세요 >> ");
   scanf("%d",&input);
  
   if(input==1)
    SearchNum(num,name,jmoney,imoney,Allmoney,code);
  
   else if(input==2)
   {
    printf("이름으로 검색합니다.!!\n");
    printf("검색할 이름은 >> ");
   
    scanf("%s",&s_name);
    SearchName(num,name,jmoney,imoney,Allmoney,code,s_name);
   }
  
   else
    printf("잘못 입력하셨습니다...\n");
  
   break;
  
  case 3:
   Searchcode(num,name,jmoney,imoney,Allmoney,code);
   break;
  
  case 4:
   AllPrint(num,name,jmoney,imoney,Allmoney,code,cout);
   break;
  
  case 5:
   printf("프로그램을 종료합니다.!!\n");
   PAU;
   return;
  
  default:
   fals();
   break;
  }//switch
  printf("메인으로 돌아갑니다..\n");
  PAU;
 }
}
void fals()
{
 printf("잘못 입력하셨습니다.!! ");
 printf("다시 입력해 주세요.!!\n");
}
void Reset(int *imoney,int cout)
{
 imoney[cout]=0;
}
void AllPrint(int *num,char name[][15],int *jmoney,int *imoney,int *Allmoney,char code[][5],int cout)
{
 int a;
 
 if(cout!=0)
 {
  title(); 
  for(a=0;a<cout;a++)
   printf("%d\t%s\t%s\t%d\t%d\t%d\n",num[a],name[a],code[a],jmoney[a],imoney[a],Allmoney[a]);
 
  printf("--------------------------------------------------\n");
 }
 else
  printf("입력된 환자가 없습니다.!! 다시 확인해 주세요!!\n");
}
void Print(int *num,char name[][15],int *jmoney,int *imoney,int *Allmoney,char code[][5],int a)
{
 printf("%d\t%s\t%s\t%d\t%d\t%d\n",num[a],name[a],code[a],jmoney[a],imoney[a],Allmoney[a]);
 printf("--------------------------------------------------\n");
}
void Menu()
{
 printf("***********************************\n");
 printf("\t의료카드 프로그램\n");
 printf("***********************************\n\n\n");
 
 printf("1. 환자입력\n");
 printf("2. 환자정보검색\n");
 printf("3. 외과, 내과 진료 기록 출력\n");
 printf("4. 진료금액계산\n");
 printf("5. 프로그램 종료\n\n");
 printf("선택해 주세요 >> ");
}
void SetName(char name[][15],int cout)
{
 scanf("%s",&name[cout]);
}
int Random()
{
 srand(time(NULL));
 return rand()%50+1;
}
int SetNum(int *num,int cout)
{
 return num[cout]=cout+1;
}
void SetCode(char code[][5],int cout)
{
 scanf("%s",&code[cout]);
}
void SetMoney(int random,int *jmoney,int cout)
{
 jmoney[cout]=random*1000;
}
int Month2(int *imoney,int cout)
{
 return imoney[cout]=(10000*60)-((10000*60)*7/10);
}
int Month(int *imoney,int cout)
{
 return imoney[cout]=(10000*30)-((10000*30)*8/10);
}
int Week3(int *imoney,int cout)
{
 return imoney[cout]=(10000*21)-((10000*21)*8/10);
}
int Week2(int *imoney,int cout)
{
 return imoney[cout]=(10000*14)-((10000*14)*8/10);
}
void SetIn(int *jmoney,int cout,int *imoney)
{
 printf("진료비가 %d 원 입니다.!!\n",jmoney[cout]);
 printf("환자의 상태가 좋지 않으므로 입원하셔야 됩니다.!!\n");
 printf("입원 기간은.. ");
 
 if(jmoney[cout]>40000)
 {
  printf("2달 입니다.!!\n");
  Month2(imoney,cout);
 }
 else if(jmoney[cout]>30000)
 {
  printf("1달 입니다.!!\n");
  Month(imoney, cout);
 }
 else if(jmoney[cout]>20000)
 {
  printf("3주일 입니다.!!\n");
  Week3(imoney,cout);
 }
 else
 {
  printf("2주일 입니다.!!\n");
  Week2(imoney,cout);
 }
}
int GetAllmoney(int *jmoney, int *imoney,int *Allmoney,int cout)
{
 return Allmoney[cout]=jmoney[cout]+imoney[cout];
}
void SearchNum(int *num,char name[][15],int *jmoney,int *imoney,int *Allmoney,char code[][5])
{
 int input,a,b=0;
 printf("-------------------------------------------\n");
 printf("\t등록번호로 검색합니다.!!\n");
 printf("-------------------------------------------\n");
 printf("등록번호를 입력해 주세요 >> ");
 
 scanf("%d",&input);
 title();
 for(a=0;a<15;a++)
 {
  if(input==num[a])
  {
   Print(num,name,jmoney,imoney,Allmoney,code,a);
   b++;
  }
 
  if(b==0)
   printf("환자가 없습니다..!! 다시 확인해 주세요!! \n");
 }
}
void SearchName(int *num,char name[][15],int *jmoney,int *imoney,int *Allmoney,char code[][5],char input)
{
 
 int a,b=0;
 
 title();
 for(a=0;a<15;a++)
 {
  if(input==name[a][0])
  {
   Print(num,name,jmoney,imoney,Allmoney,code,a);
   b++;
  }
 
  if(b==0)
   printf("환자가 없습니다..!! 다시 확인해 주세요!! \n");
 }
}
void Searchcode(int *num,char name[][15],int *jmoney,int *imoney,int *Allmoney,char code[][5])
{
 char input;
 int a,b=0;
 
 printf("-------------------------------------------\n");
 printf("\t외과, 내과 진료 기록 출력\n");
 printf("-------------------------------------------\n\n");
 printf("내과(ns)/외과(os) 중 선택해 주세요 >> ");
 scanf("%s",&input);
 
 title();
 for(a=0;a<15;a++)
 {
  if(input==code[a][0])
  {
   Print(num,name,jmoney,imoney,Allmoney,code,a);
   b++;
  }
 
  if(b==0)
   printf("환자가 없습니다..!! 다시 확인해 주세요!! \n");
 }
}
void title()
{
 printf("--------------------------------------------------\n");
 printf("등록번호  이름  진료과  입원비  진료비  진료금액\n");
 printf("--------------------------------------------------\n");
}

의료진단 프로그램

반응형