학생구조체(이름, 학번, 성적)을 최대 10개까지 입력받을수 있음. 

q 또는 Q 입력시 종료, 입력받은 순서대로 출력후 성적으로 정렬후 내림차순으로 다시 출력

학번 중복시 다시 입력


#include <stdio.h>

#include <ctype.h>

#include <string.h>


#define MAX 10 //입력받을수있는최대학생수


/* 학생구조체*/

typedef struct student{

char name[15];  //이름

char stdnum[11]; //학번

int grade;   //성적

}std;


int main()

{

int i=0, j=0, num=0, total=0, count=0;

float ave = 0;

std member[MAX]; //구조체std형의배열

std *ptr[MAX];

std *temp;


/* 구조체를가르키는포인터초기화*/

for(i=0; i<MAX; i++)

ptr[i] = &member[i];


for(i=0, count=1; i<MAX; i++, count++) 

{

printf("%d Student >> \n", count);

printf("\tEnter a student's name : ");

scanf("%s", &member[i].name);

/* q 또는Q가입력시입력중단*/

if((member[i].name[0] == 'q') || (member[i].name[0] == 'Q')) {

numi-1; //입력한학생수

break;

}

printf("\tEnter the student's number : ");

scanf("%s", &member[i].stdnum);


/* 학번중복체크후중복시재입력*/

if(i>0

{

for(j=i; j>0; j--) 

{

if(strcmp(member[i-j].stdnum, member[i].stdnum) == 0

{

printf("\tEnter the student's number : ");

scanf("%s", &member[i].stdnum);

}

}

}

printf("\tEnter the student's grade : ");

scanf("%d", &member[i].grade); 

printf("**********************************************************\n");

num = i;     //입력하는학생수계산

total += member[i].grade; //성적총합

}

ave = (float)total/(num+1);  //성적평균


/* 입력한순서대로출력*/

printf("----------------------- Print student!! ----------------------\n");

for(i=0, count=0; i<num+1; i++, count++) 

{

printf("%d Student >> \n", count);

printf("\tName : %s \n", ptr[i]->name);

printf("\tStudent number : %s \n", ptr[i]->stdnum);

printf("\tGrade : %d \n", ptr[i]->grade);

}

printf("\n-> Grade Average : %.2f \n", ave);


/* 성적순으로내림차순으로학생정렬*/

for(j=0; j<num+1; j++) 

{

for(i=0; i<num; i++) 

{

if(ptr[i]->grade < ptr[i+1]->grade

{

temp = ptr[i];

ptr[i] = ptr[i+1];

ptr[i+1] = temp;

}

}

}

/* 정렬후출력*/

printf("------------ Print student after grade sorting!! ------------\n");

for(i=0, count=1; i<num+1; i++, count++) 

{

printf("%d Student >> \n", count);

printf("\tName : %s \n", ptr[i]->name);

printf("\tStudent number : %s \n", ptr[i]->stdnum);

printf("\tGrade : %d \n", ptr[i]->grade);

}

printf("\n-> Grade Average : %.2f \n", ave);

printf("******************* Program Exit. Bye~ ^^ ******************* \n");

return 0;

}


'컴&프로그래밍 > C' 카테고리의 다른 글

팩토리얼 수 구하기 (재귀함수)  (0) 2014.10.24
피라미드 별찍기  (0) 2014.10.12
정수부분, 소수부분 2진수 변환  (0) 2014.10.11
이진검색  (0) 2014.10.11
파일 복사 하기  (0) 2014.10.11
정수 입력하여 16진수 변환후 2씩 곱해가기  (0) 2014.10.11
진법 계산  (0) 2014.10.11
대소문자 바꿔서 출력  (0) 2014.10.11
3n + 1 문제 (The 3n+1 Problem)  (0) 2014.10.11