자기주도C언어프로그래밍 Chapter10. 배열2 - 연습문제&자가진단
http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&sca=10a0
JUNGOL
www.jungol.co.kr
사이트에서 직접 프로그램을 돌려볼 수 있습니다.
교재 P.194 연습문제1
#include <stdio.h>
int main(){
int num, i;
int count[11] = {0};
while(1){
scanf("%d", &num);
if(num < 1 || num > 10) break;
count[num]++;
}
for(i=1;i<=10;i++){
if(count[i] > 0){
printf("%d : %d개\n", i, count[i]);
}
}
return 0;
}
교재 P.196 자가진단1
#include <stdio.h>
int main(){
int i, count[26] = {0};
char alpha;
while(1){
scanf(" %c", &alpha);
if(alpha < 'A' || alpha > 'Z')
break;
count[alpha-'A']++;
}
for(i=0;i<26;i++){
if(count[i] > 0)
printf("%c : %d\n", 'A' + i, count[i]);
}
return 0;
}
※ 전 이게 정말 어려웠네요... 원래 저번주에 하다가 이 문제에서 멘탈이 반쯤 나가서 ... 이번주에 글을 쓰네요...ㅋㅋ
교재 P.197 연습문제2
#include <stdio.h>
int main(){
int num, i;
int count[10] = {0};
while(1){
scanf("%d", &num);
if(num==0) break;
count[num % 10]++;
}
for(i=0;i<10;i++){
if(count[i]>0){
printf("%d : %d개\n", i, count[i]);
}
}
return 0;
}
교재 P.198 자가진단2
#include <stdio.h>
int main(){
int i, num, count[10] = {0};
while(1){
scanf("%d", &num);
if(num==0)
break;
count[num / 10]++;
}
for(i=0;i<10;i++){
if(count[i] > 0){
printf("%d : %d\n", i, count[i]);
}
}
return 0;
}
교재 P.199 연습문제3
#include <stdio.h>
int main(){
int i;
int fibo[41] = {0, 1, 1};
for(i=3;i<=40;i++){
fibo[i] = fibo[i-1] + fibo[i-2];
}
for(i=10;i<=40;i+=10){
printf("피보나치 수열 %d항 : %d\n", i, fibo[i]);
}
return 0;
}
교재 P.200 자가진단3
#include <stdio.h>
int main(){
int i=0, num;
int array[10000] = {100};
scanf("%d", &num);
array[1] = num;
while(1){
array[i+2] = array[i] - array[i+1];
if(array[i] >= 0)
printf("%d ", array[i]);
else{
printf("%d ", array[i]);
break;
}
i++;
}
return 0;
}
※ 배열의 크기는 임의로 10000을 넣었습니다.
※ while(1)로 해두고 음수일때 출력을 한다음에 break;를 하는게 뭔가 어색해서 수정해 봤습니다.
교재 P.200 자가진단3 - 2
#include <stdio.h>
int main(){
int i=0, num;
int array[10000] = {100};
scanf("%d", &num);
array[1] = num;
do{
array[i+2] = array[i] - array[i+1];
printf("%d ", array[i]);
i++;
}while(array[i-1]>0);
return 0;
}
※ do-while문(먼저 한번 실행 한 다음 조건을 체크함)을 이용하여 먼저 array[0]의 값을 출력해주고
i++에 의해 i=1이 됩니다. 이 이후로는 array[i-1]의 값이 항상 존재하므로(array[0]부터 출발함) 출력하는데 오류가 없고
while(array[i-1]>0)은 마지막에 array[i] 가 음수가 되었을 때 종료해야 하는데 그러기 위해선 그 전 값(array[i-1])이 마지막 양수면 되므로 이렇게 작성하였습니다.
교재 P.201 연습문제4
#include <stdio.h>
int main(){
int i, j;
int arr[3][3] = {{3, 5, 4}, {2, 6, 7}, {8, 10, 1}};
for(i=0;i<3;i++){
for(j=0;j<3;j++){
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
교재 P.202 자가진단4
#include <stdio.h>
int main(){
int i, j, array[3][5] = {{5, 8, 10, 6, 4}, {11, 20, 1, 13, 2}, {7, 9, 14, 22, 3}};
for(i=0;i<3;i++){
for(j=0;j<5;j++){
printf("%2d ", array[i][j]);
}
printf("\n");
}
return 0;
}
교재 P.203 연습문제5
#include <stdio.h>
int main(){
int i, j;
int a[3][3], b[3][3], hap[3][3];
for(i=0;i<3;i++){
printf("첫 번째 배열 %d행 ", i+1);
for(j=0;j<3;j++){
scanf("%d", &a[i][j]);
}
}
for(i=0;i<3;i++){
printf("두 번째 배열 %d행 ", i+1);
for(j=0;j<3;j++){
scanf("%d", &b[i][j]);
}
}
for(i=0;i<3;i++){
for(j=0;j<3;j++){
hap[i][j] = a[i][j] + b[i][j];
}
}
for(i=0;i<3;i++){
for(j=0;j<3;j++){
printf("%d ", hap[i][j]);
}
printf("\n");
}
return 0;
}
※ 교재에는 "첫번째"와 "두번째"가 이어져 써있으나 웹 상에서 돌렸을땐 "첫 번째"와 "두 번째"로 써야 정답 처리가 됩니다.
교재 P.205 자가진단5
#include <stdio.h>
int main(){
int i, j, arr1[2][4], arr2[2][4], result[2][4];
printf("first array\n");
for(i=0;i<2;i++){
for(j=0;j<4;j++){
scanf("%d", &arr1[i][j]);
}
}
printf("second array\n");
for(i=0;i<2;i++){
for(j=0;j<4;j++){
scanf("%d", &arr2[i][j]);
}
}
for(i=0;i<2;i++){
for(j=0;j<4;j++){
result[i][j] = arr1[i][j] * arr2[i][j];
printf("%d ", result[i][j]);
}
printf("\n");
}
return 0;
}
교재 P.205 연습문제6
#include <stdio.h>
int main(){
int i, j;
int score[4][4] = {{0}};
for(i=0;i<3;i++){
printf("%d번째 학생의 점수 ", i+1);
for(j=0;j<3;j++){
scanf("%d", &score[i][j]);
score[i][3] += score[i][j];
score[3][j] += score[i][j];
score[3][3] += score[i][j];
}
}
printf(" 국어 영어 수학 총점\n");
for(i=0;i<4;i++){
if(i<3) printf(" %d번", i+1);
else printf("합계");
for(j=0;j<4;j++){
printf("%4d", score[i][j]);
}
printf("\n");
}
return 0;
}
교재 P.208 자가진단6
#include <stdio.h>
int main(){
int i, j, count=0, array[5][5];
for(i=0;i<5;i++){
for(j=0;j<4;j++){
scanf("%d", &array[i][j]);
array[i][4] = (array[i][0] + array[i][1] + array[i][2] + array[i][3]) / 4;
}
}
for(i=0;i<5;i++){
if(array[i][4] >= 80){
printf("pass\n");
count++;
}
else
printf("fail\n");
}
printf("Successful : %d", count);
return 0;
}
※ 배열의 행을 하나 더 만들어 평균을 저장하고 평균 값을 이용하여 pass와 fail을 구분하였습니다.
교재 P.208 연습문제7
#include <stdio.h>
int main(){
int i, j;
int pas[6][6] = {0};
pas[1][1] = 1;
for(i=2;i<6;i++){
for(j=1;j<=i;j++){
pas[i][j] = pas[i-1][j-1] + pas[i-1][j];
}
}
for(i=1;i<6;i++){
for(j=1;j<=i;j++){
printf("%d ", pas[i][j]);
}
printf("\n");
}
return 0;
}
교재 P.210 자가진단7
#include <stdio.h>
int main(){
int i, j, array[5][5];
for(i=0;i<5;i++){
for(j=0;j<5;j++){
array[i][0] = 1;
array[0][j] = 1;
if(i>0 && j>0){
array[i][j] = array[i-1][j] + array[i][j-1];
}
}
}
for(i=0;i<5;i++){
for(j=0;j<5;j++){
printf("%d ", array[i][j]);
}
printf("\n");
}
return 0;
}
자가진단1을 하다 막혀서 나중에 해야지 하다 결국 한 주가 밀렸네요...ㅋㅋ;;
원래는 3/12(일)에 연습문제와 자가진단을 끝내려고 했는데 중간에 캡스톤 디자인 회의가 잡혀서 타임오버...가 됐네요
어제 감기에 걸려서 몸 상태가 안좋아기도 하고 내일 10시 수업이라 형성평가까지는 힘들거 같아요...
형성평가는 평일 중에 작성하겠습니다.