학생구조체(이름, 학번, 성적)을 최대 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')) {
num = i-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 |