일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- golang
- 장고 웹 만들기
- 중위수식을 후위수식
- 스택 자료구조
- flex html
- 장고 하는법
- 스택 후위수식
- 스택 구현
- Django tutorial
- 자료구조 데크
- 스택 중위수식
- restapi graphql
- 스택 유효성
- 풀스택?
- grid html
- grid flex
- 중위수식
- 스택 괄호
- 괄호 짝 잘맞는지
- rest gql
- 풀스택
- https://stackoverflow.com/questions/219110/how-python-web-frameworks-wsgi-and-cgi-fit-together/219124#219124
- go
- 괄호 유효성
- 스택 삭제
- 스택 삽입
- rest graphql
- 루비 초보
- 데크 구현
- 후위수식
- Today
- Total
donchanee
동적할당에 대한 4문제 본문
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void compareString(char p[], char q[]);
int main() {
char *p=NULL, *q=NULL;
p = (char *)malloc(50*sizeof(char)); // 문자열 1번 동적할당 받는다.
if(p==NULL) return -1;
q = (char *)malloc(50*sizeof(char)); // 문자열 2번 동적할당 받는다.
if(q==NULL) return -1;
gets(p);
gets(q); // 공백을 포함하는 문자열을 입력받는다.
compareString(p, q); // 두 문자열을 비교하는 함수, 출력값대로 출력한다.
free(p);
free(q); // 동적할당된 메모리를 해제해준다.
return 0;
}
void compareString(char p[], char q[]) {
if(strcmp(p, q) == 0) {
printf("identical"); // 두 문자열이 같으면 identical 출력
}
else
printf("different"); // 아니라면 different 출력
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct st {
char *str;
int cnt;
}stu; // 문제에 나온대로 구조체 선언한다.
int main() {
int N, i, j, count;
unsigned long leng;
char **p=NULL;
stu *q, tmp;
scanf("%d" , &N);
p = (char **)malloc(N*sizeof(char *)); // 문자열 배열을 동적할당 받는다.
if ( p==NULL )
return -1;
for(i=0; i<N; i++) {
p[i] = (char *)malloc(101*sizeof(char)); // 문자열 배열의 배열부분 동적할당
if(p==NULL)
return -1;
}
q = (stu *)malloc(N*sizeof(stu)); // 구조체를 동적할당 받는다.
for(i=0;i<N;i++) {
scanf("%s", p[i]);
q[i].str = p[i]; // 구조체의 문자열 포인터에 문자열을 연결시킨다.
leng = strlen(p[i]);
count = 0; // 자음의 개수를 셀 변수이다.
for(j=0; j<leng; j++) {
if(!(p[i][j] == 'a' || p[i][j] == 'e' || p[i][j] == 'i' || p[i][j] == 'o' || p[i][j] == 'u' ||
p[i][j] == 'A' || p[i][j] == 'E' || p[i][j] == 'I' || p[i][j] == 'O' || p[i][j] == 'U')) {
count++; // 문자가 모음이 아닐 시, 카운트를 증가시킨다.
}
}
q[i].cnt = count; // 자음의 개수를 각각의 구조체 숫자에 대입시킨다.
}
for(i=N-1;i>0;i--) { // 버블정렬을 사용해야 검사하지 않는 문자열이 없다.
for(j=0;j<i;j++) { // 선택정렬을 사용하면 검사하지 않는 빈공간이 생긴다.
if(q[j].cnt < q[j+1].cnt) { // 검사하려는 문자열 바로 뒤의 문자열과 비교.
tmp = q[j];
q[j] = q[j+1];
q[j+1] = tmp;
}
}
}
for(i=0; i<N; i++) {
printf("%s\n", q[i].str); // 출력한다.
}
for(i=0;i<N;i++) {
free(p[i]); // 동적할당 해제한다.
}
free(p);
free(q); // 마찬가지로 동적할당을 해제해준다.
return 0;
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
int N, M, **p, i, j, cnt=0, avg;
scanf("%d %d", &N, &M); // 행과 열을 입력받음.
p = (int **)malloc(N*sizeof(int *)); // 동적할당 받는다.
if(p==NULL) return -1;
for(i=0;i<N;i++) {
p[i] = (int *)malloc(M*sizeof(int)); // 이차원 배열 동적할당.
if(p[i]==NULL) return -1;
}
for(i=0;i<N;i++) {
for(j=0;j<M;j++) {
scanf("%d", &p[i][j]); // 입력받는다.
cnt += p[i][j]; // 평균을 바로 구하기 위해 입력받을 때마다 더해놓는다.
}
}
avg = cnt / (N*M); // 정수연산으로 평균을 구한다.
for(i=0;i<N;i++) {
for(j=0;j<M;j++) {
if(p[i][j] < avg)
p[i][j] = 0; // 평균보다 작으면 0으로 바꾸고
printf("%d ", p[i][j]); // 출력한다.
}
printf("\n"); // 행이 바뀔때 개행한다.
}
for(i=0;i<N;i++) {
free(p[i]); // 동적할당 해제한다.
}
free(p);
return 0;
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int createMatrix (int ***p ,int N); // 2차원 배열 생성함수 부분
void freeMatrix (int **p, int N); // 2차원 배열 동적할당 해제 부분
int main() {
int N, **p=NULL, **q=NULL, **r=NULL, i, j, o;
scanf("%d", &N);
createMatrix(&p, N);
createMatrix(&q, N);
createMatrix(&r, N); // 행렬의 곱 결과값을 저장할 배열을 생성한다.
for(i=0;i<N;i++) {
for(j=0;j<N;j++) {
scanf("%d", &p[i][j]); // 첫번째 이차원 배열 입력받는다.
}
}
for(i=0;i<N;i++) {
for(j=0;j<N;j++) {
scanf("%d", &q[i][j]); // 두번째 이차원 배열 입력받는다.
}
}
for(i=0;i<N;i++) {
for(j=0;j<N;j++) {
for(o=0;o<N;o++) {
r[i][j] += p[i][o] * q[o][j]; // 행렬의 곱을 구한다.
}
}
}
for(i=0;i<N;i++) {
for(j=0;j<N;j++) {
printf("%d ", r[i][j]); // 행렬의 곱을 출력한다.
}
printf("\n");
}
freeMatrix(p, N);
freeMatrix(q, N);
freeMatrix(r, N); // 동적할당을 해제한다.
return 0;
}
int createMatrix (int ***p ,int N) {
int i;
*p = (int **) malloc(N * sizeof(int *)); // 삼중 포인터를 사용하여 함수를 만들었다.
if(p==NULL) return -1;
for(i=0;i<N;i++) {
(*p)[i] = (int *) malloc(N * sizeof(int)); // 이차원 배열을 동적할당 받고 있다.
if((*p)[i] == NULL) return -1;
}
return 0;
}
void freeMatrix (int **p, int N) { // 동적할당을 해제하는 함수
int i;
for(i=0;i<N;i++) {
free(p[i]);
}
free(p);
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int createMatrix (int ***p ,int N);
void freeMatrix (int **p, int N); // 4-2에서 사용한 것과 같음.
int main() {
int N, **p=NULL, **q=NULL, **r=NULL, i, j, o;
scanf("%d", &N);
createMatrix(&p, N);
createMatrix(&q, N);
createMatrix(&r, N); // 역시나 4-2와 같음.
for(i=0;i<N;i++) {
for(j=0;j<N;j++) {
scanf("%d", &p[i][j]); // 입력부분
}
}
for(i=0;i<N;i++) {
for(j=0;j<N;j++) {
scanf("%d", &q[i][j]); // 입력부분
}
}
for(i=0;i<N;i++) {
for(j=0;j<N;j++) {
for(o=0;o<N;o++) {
r[i][j] += p[i][o] * q[o][j]; // 행렬의 곱 연산
}
}
}
o=0; // o 인자에 최종결과값을 저장하기 위해 초기화시킨다.
for(i=0;i<N;i++) {
printf("%d ", r[i][i]); // 왼쪽부터 오른쪽 대각선을 출력하고
o += r[i][i]; // 즉시 최종결과값을 위해 더해놓는다.
}
printf("\n");
for(i=0;i<N;i++) {
j=N-i-1; // 오른쪽부터 왼쪽 대각선을 출력하기 위해 j값을 정하고,
printf("%d ", r[i][j]); // 출력하고,
o -= r[i][j]; // 최종결과값을 위해 빼준다.
}
printf("\n");
if(o>0)
printf("%d", o); // 최종결과값이 양수라면 그대로 출력
else
printf("%d", -o); // 음수라면 부호를 바꿔서 출력한다.
freeMatrix(p, N);
freeMatrix(q, N);
freeMatrix(r, N); // 동적할당 해제
return 0;
}
int createMatrix (int ***p ,int N) { // 4-2에서 사용한 함수와 같은 2차원 배열 생성함수
int i, j;
*p = (int **) malloc(N * sizeof(int *));
if(p==NULL) return -1;
for(i=0;i<N;i++) {
(*p)[i] = (int *) malloc(N * sizeof(int));
if((*p)[i] == NULL) return -1;
}
for(i=0;i<N;i++) {
for(j=0;j<N;j++) {
(*p)[i][j] = 0;
}
}
return 0;
}
void freeMatrix (int **p, int N) { // 동적할당 해제 함수
int i;
for(i=0;i<N;i++) {
free(p[i]);
}
free(p);
}
'프로그래밍 > C언어' 카테고리의 다른 글
합병정렬에 대한 문제. (0) | 2018.12.07 |
---|---|
구조체에 대한 5문제 (0) | 2018.12.07 |
문자열에 대한 3문제 (0) | 2018.12.07 |
포인터에 대한 4문제 (0) | 2018.10.02 |
배열 문제 #7. (0) | 2018.05.22 |