단원:
8. 배열
9. 문자배열과 문자열
[프로그래밍 연습 8.5]학생 100명의 시험결과가 다음과 같이 입력된다고 하자. (학생번호 과목1점수 과목2점수 과목3점수)
ex)
1 80 70 56
2 40 50 100
먼저 데이터를 읽어 들인 후 다음과 같은 계산을 하는 프로그램을 작성하시오.
(a) 각 학생의 과목 총점
(b) 각 과목에 대하여 최고 점수와 해당 학생번호
(c) 최고 합산 점수를 기록한 학생번호
코드:
#include<stdio.h> main() { int i, m, n, k, column, row, stop, mode; int scoredata[100][4] = { {0,0,0,0} }; //데이터 입력부 for (row = 0;; row++) { printf("%d 번째 학생의 학생번호,과목1 점수, 과목2 점수, 과목 3 점수를 입력하세요.\n 입력을 중단하려면 -1을 입력하세요\n", (row + 1)); for (column = 0; column < 4; column++) { scanf("%d", &scoredata[row][column]); if (scoredata[row][0] == -1) break; //입력 중단조건 } if (scoredata[row][0] == -1) break; //입력 중단조건 } //총점 계산부 int total[100]; for (row = 0;; row++) { total[row] = scoredata[row][1] + scoredata[row][2] + scoredata[row][3]; if (scoredata[row][0] == -1) break; } select: //모드 선택부 printf("계산하고자 하는 정보를 입력하세요.\n 1번은 특정 학생의 총점 출력\n 2번은 특정 과목에 대하여 최고점 및 해당 학생번호\n 3번은 최고 합산 점수를 기록한 학생의 학생번호와 그 총점입니다.\n"); scanf("%d", &mode); switch (mode) { case(1): //총점 출력 부 { printf("총점을 구할 학생의 학번을 입력하세요.\n"); scanf("%d", &i); for (row = 0;; row++) { if (i == scoredata[row][0]) //학번i가 scoredata의 [row][0]즉 학번 데이터와 일치하는 경우에만 출력 { printf("%d\n", total[row]); break; } } break; } case(2): //각 과목에 대하여 최고점수 및 해당 학생번호 { printf("최고점수 및 해당 학생을 구할 과목번호를 입력하세요\n"); int scoreindex, studentindex[100] = { 0 }, maxscore = 0; int naturalnumber[100]; int index; scanf("%d", &scoreindex); for (row = 0; row < 100; row++) { if (scoredata[row][scoreindex] >= maxscore) maxscore = scoredata[row][scoreindex]; } for (row = 0; row < 100; row++) { if (scoredata[row][scoreindex] == maxscore) studentindex[row] = scoredata[row][0]; //maxscore와 점수가 같은 학생들의 학번을 변수 studentindex에 저장 } printf("%d 과목 최고점수는 %d점, 최고점 득점 학생의 학번은\n", scoreindex, maxscore); for (row = 0; row < 100; row++) { if (studentindex[row] != 0) printf("%d, ", studentindex[row]); //studentindex가 0이 아닌 데이터만 출력 } break; } case(3): //최고 합산 점수인 학생번호 출력 { int maxtotal = 0, maxstudent[100] = { 0 }; int stumaxindex[100] = { 0 }; for (row = 0; row < 100; row++) { if (total[row] >= maxtotal) maxtotal = total[row]; } for (row = 0; row < 100; row++) { printf("최고 합산 점수를 얻은 학생들의 학번은:\n"); if (maxtotal == total[row]) printf("%d,", scoredata[row][0]); } printf("이며 합산 점수는 %d 점입니다.\n", maxtotal); break; } default: { printf("올바른 입력이 아닙니다.\n"); goto select; } } } |
[프로그래밍 연습 8.7]다음처럼 동일한 행과 열의 개수를 가지는 두 개의 행렬을 입력받아 곱셈을 통하여 세번째 행렬이 나오는 프로그램을 작성하라.
A = [a(i,j)] B = [b(i,j)] i = 1, … n, j = 1, …, n
C = [c(i,j)] c(i,j) = Sum_k=1to n ( a(i,k)b(k,j) )
코드:
#include<stdio.h> main() { int row, column, size, i, j, k; float matrixA[100][100] = { 0 }, matrixB[100][100] = { 0 }, matrixM[100][100] = { 0 }; float row_A[100] = { 0 }, column_B[100] = { 0 }; float element, product; printf("정사각행렬의 곱셈을 구하는 프로그램입니다. 행과 열의 개수를 지정하세요."); scanf("%d", &size); retype: //재입력 //행렬 A입력부 printf("행렬 A를 입력하세요. 각 원소의 구분은 띄어쓰기, 각 행의 구분은 개행을 사용합니다.\n"); for (row = 0;; row++) { if (row >= size) { printf("행렬 A의 입력이 완료되었습니다.\n"); break; } else { for (column = 0;column<size; column++) scanf("%f", &matrixA[row][column]); } } //행렬 B입력부 printf("행렬 B를 입력하세요. 각 원소의 구분은 띄어쓰기, 각 행의 구분은 개행을 사용합니다.\n"); for (row = 0;; row++) { if (row >= size) { printf("행렬 B의 입력이 완료되었습니다.\n"); break; } else { for (column = 0; column<size; column++) { scanf("%f", &matrixB[row][column]); } } } //행렬 입력 확인부 printf("입력한 행렬은 다음과 같습니다.\n\n"); printf("행렬 A:\n"); for (row = 0; row < size; row++) { for (column = 0; column < size; column++) { printf("%7.2f", matrixA[row][column]); } printf("\n"); } printf("행렬 B:\n"); for (row = 0; row < size; row++) { for (column = 0; column < size; column++) { printf("%7.2f", matrixB[row][column]); } printf("\n"); } printf("\n입력한 행렬이 맞으면 숫자 1을, 다시 입력하려면 아무 키나 누르세요.\n"); //행렬 계산부// for (row = 0; row < size; row++) { for (column = 0; column < size; column++) { element = 0; i = row; j = column; product = 0; element = 0; int k; for (k = 0; k < size; k++) { product = matrixA[i][k] * matrixB[k][j]; element = element + product; } matrixM[row][column] = element; } } //입력 확인부// scanf("%d", &k); if (k == 1) { printf("-------------------------------------------------------------\nA X B:\n"); for (row = 0; row < size; row++) { for (column = 0; column < size; column++) { printf("%7.2f", matrixM[row][column]); } printf("\n"); } printf("-------------------------------------------------------------\n"); } else goto retype; } |
[프로그래밍 연습 8.9]선택정렬(선택 정렬 - 위키백과, 우리 모두의 백과사전 (wikipedia.org))을 구현하시오.
코드:
#include<stdio.h> main() { int i, j, k, maxvalue=0, maxindex, tmp; int arrayee[9] = { 1,6,2,4,5,9,8,3,7 }; printf("정렬 전:\n"); for (k = 0; k < 9; k++) printf("%d", arrayee[k]); printf("\n"); for (j = 8; j > 0; j--) { for (i = 0; i <= j; i++) { if (arrayee[i] > maxvalue) { maxvalue = arrayee[i]; maxindex = i; } } tmp = arrayee[j]; arrayee[j] = maxvalue; arrayee[maxindex] = tmp; maxvalue = 0; } printf("정렬 결과:\n"); for (k = 0; k < 9; k++) printf("%d", arrayee[k]); } |
[프로그래밍 연습 8.10]이진탐색(이진 검색 알고리즘 - 위키백과, 우리 모두의 백과사전 (wikipedia.org))을 구현하시오.
코드:
#include<stdio.h> main() { float arrayee[9] = { 8,12,23,47,75,106,117,708,900 }; int maxindex = 8, lowindex = 0, index; float find; while (1 == 1) { maxindex = 8, lowindex = 0; scanf("%f", &find); while (1 == 1) { if (lowindex > maxindex) { printf("can't find %.2f\n", find); break; } index = (maxindex + lowindex) / 2; if (arrayee[index] < find) lowindex = index + 1; else if (arrayee[index] > find) maxindex = index - 1; else if (arrayee[index] == find) { printf("%.2f의 위치 = 왼쪽에서 %d 번째 위치", find, index + 1); break; } } } } |
[프로그래밍 연습 9.8]키보드로 문자열을 읽어 그 문자열이 왼쪽이나 오른쪽 방향 어느쪽으로 읽어도 같은지 검사하는 프로그램을 작성하시오. (예를 들어 Madam 이나 Anna는 앞에서나 뒤로부터 알파벳순서가 동일하다)
코드:
#include<stdio.h> #include<string.h> main() { char string[20] = {0}; char compare[20] = { 0 }; int i, k, index, tmp = 0; gets(string); k = strlen(string); index = k - 1; for (i = 0;i<=index+1; i++) //모든 소문자를 대문자로 변경 { if ((97 <= string[i])||(string[i] <= 122)) //ASCII 코드값을 사용하여 소문자->대문자 변환 string[i] = string[i] - 32; } for (i = 0; i<=index ; i++) { compare[index - i] = string[i]; } for(i=0 ; i<index ; i++) { if (compare[i] != string[i]) { printf("같지 않습니다.\n"); tmp = 1; break; } } if (tmp == 0) printf("같습니다.\n"); } |
문제 소스:
책정보, ANSI C 프로그래밍 : 네이버 책 (naver.com)
ANSI C 프로그래밍
책으로 만나는 새로운 세상
book.naver.com
'프로그래밍 > C,C++' 카테고리의 다른 글
[명품 C++ programming]2,3장 실습문제 (0) | 2022.01.06 |
---|---|
[ANSI C 프로그래밍]13장 프로그래밍 연습 (0) | 2022.01.06 |
[ANSI C 프로그래밍]10장 프로그래밍 연습 (0) | 2022.01.06 |
[ANSI C 프로그래밍]5,6,7장 프로그래밍 연습 (0) | 2022.01.06 |
[ANSI C 프로그래밍]2,3,4장 프로그래밍 연습 (0) | 2022.01.06 |