728x90
교재 : 열혈 C 프로그래밍
20장 도전 프로그래밍 문제 풀어보는데 야구게임.. 재밌더라
여러분도 한 번 맞춰보세용~~
21장 문자와 문자열 관련 함수
1. getchar함수와 putchar함수
2. 소문자->대문자, 대문자->소문자
3. 알파벳 이외는 에러 메세지
#include <stdio.h>
int main(void){
int ch;
printf("문자 입력 : ");
ch = getchar();
if ((int)ch >= 65 && (int)ch <= 90) { //대문자 65~90, 소문자 97~122
ch =(int)ch + 32;
} else if ((int)ch >= 97 && (int)ch <= 122) {
ch = (int)ch - 32;
}else {
puts("뭐여~");
}
putchar(ch);
return 0;
}
getchar | 한 글자만 입력받음 |
putchar | 한 글자만 출력함 |
대문자와 소문자가 32씩 차이나는 거. 아스키 코드값을 잘 외워두면 조타~~
1. 문자열을 입력받음
2. 문자열 속의 숫자의 합 계산
#include <stdio.h>
#include <string.h>
int main(void){
char str[50];
int len;
int sum = 0;
int diff = 1 - '1'; //★★★★
printf("문자열 입력 : ");
fgets(str, sizeof(str), stdin);
len = strlen(str);
for (int i = 0; i < len; i++) {
if ('1' <= str[i] && str[i] <= '9') { //★★★★
sum += (str[i] + diff); //★★★★
}
}
printf("숫자의 총 합 : %d \n", sum);
return 0;
}
22장~23장 구조체와 사용자 정의 자료형
구조체 정의
종업원 이름 / 주민등록번호 / 급여 정보
#include <stdio.h>
struct employee {
char name[20];
char pid[20];
int salary;
};
int main(void){
struct employee arr[3];
for (int i = 0; i < 3; i++) {
printf("이름 : ");
scanf_s("%s", arr[i].name, 20); //문자열은 버퍼 크기 정해주기!
printf("주민번호 : ");
scanf_s("%s", arr[i].pid, 20);
printf("급여 : ");
scanf_s("%d", &arr[i].salary);
}
for (int i = 0; i < 3; i++) {
printf("이름 : %s \n", arr[i].name);
printf("주민번호 : % s \n", arr[i].pid);
printf("급여 : %d \n", arr[i].salary);
}
return 0;
}
구조체 정의 정돈 간단~
두 구조체의 값 바꿔주기
#include <stdio.h>
typedef struct point {
int xpos;
int ypos;
}point;
void swap(point* ptr1, point* ptr2) {
point temp = *ptr1;
*ptr1 = *ptr2;
*ptr2 = temp;
}
int main(void){
point pos1 = { 2,4 };
point pos2 = { 5,7 };
swap(&pos1, &pos2);
printf("[%d %d] \n", pos1.xpos, pos1.ypos);
printf("[%d %d] \n", pos2.xpos, pos2.ypos);
return 0;
}
1. 구조체 xpos, ypos
2. 구조체의 변수를 인자로 받아 직사각형의 넓이 구하는 함수
3. 네 점의 좌표 정보를 출력하는 함수
#include <stdio.h>
typedef struct point {
int xpos;
int ypos;
}point;
typedef struct rectangle {
point ul; //좌상단
point lr; //우하단
}rectangle;
void showArea(rectangle rec) {
printf("넓이 : %d \n", (rec.lr.xpos - rec.ul.xpos) * (rec.lr.ypos - rec.ul.ypos));
}
void showPos(rectangle rec) {
printf("좌 상단 : [%d, %d] \n", rec.ul.xpos, rec.ul.ypos);
printf("좌 하단 : [%d, %d] \n", rec.ul.xpos, rec.lr.ypos);
printf("우 상단 : [%d, %d] \n", rec.lr.xpos, rec.ul.ypos);
printf("우 하단 : [%d, %d] \n", rec.lr.xpos, rec.lr.ypos);
}
int main(void){
rectangle rec = { {1,1},{4,4} };
showArea(rec);
showPos(rec);
return 0;
}
25장 메모리 관리와 메모리의 동적 할당
코드 영역 | 코드가 저장되는 메모리 공간 |
데이터 영역 | 전역 변수, static 변수 |
스택 영역 | 지역 변수, 매개 변수 |
힙 영역 | 프로그래머가 관리하는 공간 |
1. 최대길이 정보, 문자열 입력 받기
2. 단어를 역으로 출력
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void){
int maxlen;
printf("문자열의 최대 길이 입력: ");
scanf_s("%d", &maxlen);
getchar(); //\n 문자의 삭제
char* str = (char*)malloc(sizeof(char) * (maxlen + 1));
printf("문자열 입력 : ");
fgets(str, maxlen + 1, stdin);
str[strlen(str) - 1] = 0; //\n 문자의 삭제
int len = strlen(str);
for (int i = len; i > 0; i--) {
if (str[i] == ' ') {
printf("%s ", &str[i + 1]);
str[i] = 0;
}
}
printf("%s", &str[0]);
free(str);
return 0;
}
1. -1이 정수 입력될 때까지 계속 입력받기
2. 길이가 5인 배열을 힙에 할당
3. 배열이 꽉 찰 때마다 길이를 3씩 증가
4. 순서대로 정수 출력
#include <stdio.h>
#include <stdlib.h>
int main(void){
int arrlen = 5;
int idx = 0;
int* arr = (int*)malloc(sizeof(int) * arrlen);
while (1) {
printf("정수 입력 : ");
scanf_s("%d", &arr[idx]);
if (arr[idx] == -1) break;
if (arrlen == idx + 1) {
arrlen += 3;
arr = (int*)realloc(arr, sizeof(int) * arrlen); //★★★★★
}
idx++;
}
for (int i = 0; i < idx; i++) printf("%d ", arr[i]);
free(arr);
return 0;
}
중요포인트!!!!
1. realloc 사용법 및 메모리 상태
arr = (int*)realloc(arr, sizeof(int) * arrlen);
- 전
- 후
뭔가 빠진게 있어보이지 않는가? 잘 모르겠다면 위의 내용을 유심히 살펴보아라...
.
.
.
.
맞다 24장 파일 입출력이 빠져있다!!!!! 지금 시험 공부가 산더미라서.. 다음에 시간나면.. 아니 난 평생 안 볼 거다.
아디오스!!
'C' 카테고리의 다른 글
여러 분은 이 답이 뭐라고 생각하십니까? 알면 상위 1% 코딩 실력을 가진 사람 (3) | 2022.07.22 |
---|---|
[C언어 문법] 20장 도전 프로그래밍 3 (0) | 2021.12.11 |
[C언어 문법] part03 포인터와 배열의 완성 (0) | 2021.12.09 |
[열혈 C 프로그래밍] 도전! 프로그래밍2 (1) | 2021.10.21 |
[열혈 C 프로그래밍] 도전! 프로그래밍1 (0) | 2021.10.21 |