archive
[세연교재] 2과 풀이 본문
17. 학생 열 명의 국어, 영어, 수학 성적을 처리하여 다음과 같이 출력하는 프로그램을 작성하세요. (단, 배열을 사용해 학생들의 학번, 국어, 영어, 수학, 총점, 평균을 저장)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
/*
int sum(int korean, int english, int math);
int average(int korean, int english, int math);
*/
int main(void) {
int grade[10][3]={
{80,70,90},
{30,50,40},
{70,90,100},
{100,100,100},
{90,95,60},
{75,45,75},
{80,90,90},
{10,20,30},
{50,70,75},
{100,90,40}
};
int korean, english, math;
printf(" 학번 국어 영어 수학 총점 평균 \n");
printf("***************************************\n"); // 이거 정렬을 깔끔하게 어떻게 할까
for (int i = 0; i < 10; i++) {
korean = grade[i][0];
english = grade[i][1];
math = grade[i][2];
int sum = korean + english + math;
int average = (korean + english + math) / 3;
printf(" %d %d %d %d %d %d\n", i+1, korean, english, math, sum, average);
}
}
/*
int sum(int korean, int english, int math) {
return (korean + english + math);
}
int average(int korean, int english, int math) {
return (korean + english + math) / 3;
}
*/
18. 정수형 1차원 배열을 {19, 2, 25, 92, 36, 45}로 초기화하고,다음을 수행하는 프로그램을 작성
-배열에 저장된 원소들을 화면에 출력
-배열 원소들 중에서 최솟값과 최댓값을 출력한다
-배열 원소들의 평균을 구하세요
-배열 원소들의 분산을 구하세요
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void) {
int arr[6] = { 19, 2, 25, 92, 36, 45 };
// 1번 프로그램
for (int i = 0; i < 6; i++) {
printf("%d ", arr[i]);
}
printf("\n");
//2번 프로그램
int max = arr[1];
int min = arr[1];
for (int i = 1; i < 6; i++) {
if (max < arr[i])
max = arr[i];
if (min > arr[i])
min = arr[i];
}
printf(" 배열 내부의 최대값은 %d, 최소값은 %d\n", max, min); // 포인터 안 써도 되나?
//3번 프로그램
int sum=0;
for (int i = 0; i < 6; i++) {
sum += arr[i];
}
int average = sum / sizeof(arr);
printf("배열 원소들의 평균은 %d\n", average);
//4번 프로그램
int sumforvariance=0;
for (int i = 0; i < 6; i++) {
int num = average - arr[i];
sumforvariance += num * num;
}
int variance = sumforvariance / sizeof(arr);
printf("배열 원소들의 분산값은 %d", variance);
}
20. 문자열 두 개를 입력받고 문자열이 같은지 다른지 출력하는 함수를 만들어라
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void) {
char word1[20], word2[20];
printf("첫 번째 문자열을 입력하세요>>>");
scanf("%s", &word1);
printf("두 번째 문자열을 입력하세요>>>");
scanf("%s", &word2);
while (1) {
for (int i = 0; i != NULL; i++) {
if (word1[i] != word2[i])
printf("두 개의 문자열은 다릅니다.");
}
printf("두 개의 문자열은 같습니다.");
break;
}
}
21. 포인터를 사용해 실수값 두 개를 교환하여 저장하고 출력하는 함수를 만들어라
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void) {
int num1=5, num2=10;
printf("원본 x의 값은 %d, y의 값은 %d이다", num1, num2);
int* p = &num1;
int* q = &num2;
int x = *p;
*p = *q;
*q = x;
printf("변경된 x의 값은 %d, y의 값은 %d이다", num1, num2);
}
22. 문자열을 입력받아 대문자는 소문자로, 소문자는 대문자로 변환하여 출력하는 프로그램을 작성하여라.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void) {
char str[20];
printf("문자열을 대소문자를 구분하여 20자 이내로 입력하세요 >>> ");
scanf("%s", str);
for (int i = 0; str[i] != '\0';i++) {
if (str[i] >= 65 && str[i] <= 90)
str[i] = str[i] + 32;
else if (str[i] >= 97 && str[i] <= 122)
str[i] = str[i] - 32;
}
puts(str);
}
++ 풀면서 복습 겸 다시 한 번 깨달은 점
C에서 for문 작성할 때 괄호 안 첫 번째 요소가 반복 시작점, 두 번째 요소가 반복 끝 점이 아니고
첫 번째 요소가 초기값, 두 번째 요소가 반복 조건이라는 점을 다시 한 번 머리게 빡 박고 간다... 반성 반성
++ 아스키 코드 이용해서 풀이하는 건 다른 사람 코드 보고 영감 받은 건데, 이제 머리에 빡 박고 다음부터 이런 문제 나오면 바로 적용할 수 있도록 아이디어 체화하고 잊지 말자
23. 입력받은 문자를 역순으로 출력하는 reverse 함수를 작성하세요
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
char reverse(char str[], int strlength);
int main(void) {
int strlength;
char str[30];
printf("문자열을 입력하세요>>> ");
gets(str);
strlength = strlen(str);
reverse(str, strlength);
}
char reverse(char str[], int strlength) {
for (int i = strlength; i >= 0; i--)
{
printf("%c", str[i]);
}
printf("\n");
}
24. 주소록 프로그램
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
void lookup(yellowbook* pl, int len); //구조체를 함수 인자로 받을 때는 포인터 변수 사용
void add(yellowbook* pl, int len);
void search(yellowbook* pl, int len);
void delete(yellowbook* pl, int len);
typedef struct {
char name[10];
char number[13];
char address[30];
char birthday[10]; //2001-02-09의 형식으로 입력
}yellowbook;
int main(void) {
int i;
int length = 0;
yellowbook pl[] = (yellowbook*)malloc(100 * sizeof(yellowbook));
int x;
printf("주소록 프로그램 기능 보기입니다.\n");
printf("목록 보기 (1), 추가하기 (2), 탐색하기 (3), 삭제하기 (4)을 입력하세요. >>> ");
scanf("%d", &x);
if (x == 1)
lookup(pl, length);
else if (x == 2)
add(pl, length);
else if (x == 3)
search(pl, length);
else
delete(pl.)
}
void lookup(yellowbook* pl, int len) {
for (int i = 0; i < len; i++) {
printf("%s", pl[i].name);
printf("%s", pl[i].number);
printf("%s", pl[i].address);
printf("%s", pl[i].birthday);
}
}
void add(yellowbook* pl, int len) {
int i;
printf("주소록 프로그램입니다.\n");
printf("이름, 전화번호, 주소와 생일(****-**-**의 형태) 을 순서대로 입력하세요, 입력을 마치려면 0을 입력합니다.\n");
while (i != 0) {
printf(">>>");
if (scanf("%s", &i) == "0")
break;
else {
scanf("%s", &pl[i].name);
scanf("%s", &pl[i].number);
scanf("%s", &pl[i].address);
scanf("%s", &pl[i].birthday);
len++;
}
}
}
void search(yellowbook* pl, int len) {
char finder[10];
printf("찾을 정보의 이름을 입력하세요.>>> ");
scanf("%s", &finder);
for (int i = 0; i < len;) {
if (pl[i].name == finder)
printf("찾으시는 &s의 전화번호는 &s, 주소는 &s, 생일은 &s입니다.", pl[i].name, pl[i].number, pl[i].address, pl[i].birthday);
else
i++;
}
}
void delete(yellowbook* pl, int len) {
char deleter[10];
printf("t삭제할 정보의 이름을 입력하세요.>>> ");
scanf("%s", &deleter);
for (int i = 0; i < len;) {
if (*pl[i].name == deleter)
free(*pl[i]);
else
i++;
}
}
25. 정수값을 입력받고 1부터 입력받은 값까지의 합을 구하는 프로그램을 재귀호출을 이용해 작성
++다시
'C \ C++ > C 스터디 예제 풀이' 카테고리의 다른 글
[과제] sparse matrix transpose 개작 (0) | 2023.04.12 |
---|---|
[누렁이] 1과 예제 풀이 (0) | 2023.03.18 |
(자료구조론 필사) 2장 배열과 구조 (0) | 2023.02.24 |
(자료구조론 필사) 1장 기본개념 (0) | 2023.02.13 |
11-22 C 스터디 예제 풀이) 구조체와 공용체 (0) | 2022.11.27 |