민트맛뚱이
kwangkwang우럭따
민트맛뚱이
전체 방문자
오늘
어제
  • 분류 전체보기 (16)
    • C (12)
    • C programming (2)
    • digital engineering (1)
    • machine learning (0)
    • Data communication (0)
    • signal processing (0)
    • computer architecture (RISC.. (0)
    • project (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
민트맛뚱이

kwangkwang우럭따

뚱이가 알려주는 소프트웨어

(C언어) 기말고사 전 과제들 - (2)
C

(C언어) 기말고사 전 과제들 - (2)

2022. 12. 18. 04:02

 C언어 진짜 많이 했네요,,, 빨리 다른것도 올리고 싶은데, C언어만 올리니깐 1학년 때 생각나고 좋나...? 엥 말하고 보니깐 오랜만에 봐서 좋은거 같기도 어쨋든 계속 올려볼게요! 도움이 될 만한 코드들로~

출발


#1. 구조체로 첫 알파벳만 출력, 지정한 단어 출력

#include<stdio.h>
#include<string.h>
struct p1{
	char a[3][6];
	int x[3];
};

int main(){
	struct p1 p2;
	int i, j;
	
	printf("Enter the name : ");
	for(i=0; i<3; i++){
		gets(p2.a[i]);
	}

	for(i=0; i<3; i++){
	p2.x[0]+=strlen(p2.a[i]);
	}
	printf("strlen is %d\n", p2.x[0]);
	
	for (i=0; i<3; i++){
		printf("%c",p2.a[i][0]);
	}
	
	printf("\nwhich do you select?\n");
	scanf("%d", &i);
	
	if(i==1)
	printf("%s", p2.a[0]);
	if(i==2)
	printf("%s", p2.a[1]);
	if(i==3)
	printf("%s", p2.a[2]);
}

 혹시 구조체 기억 안 날까봐, 하나 더 넣긴 했는데 이해가 안 될 수 있으니깐, 저번에는 문법 설명만 간략하게 했는데, 코드를 설명해주면, 띄어쓰기를 제외한 단어를 하나 입력하면, 그 단어의 첫 시작을 뽑아서 출력하고, 전체 단어를 출력할 숫자를 선택하여 단어까지 출력합니다. 이때는 알다시피 구조체가 필요 없긴 하지만 쓰는게 도움이 될거 같아서 가져왔어요~~

나중에 자바 object의 개념이라 기억해두면 좋아요!


#2. 구조체

#include<stdio.h>
#include<string.h>

struct stores{
	char a[3][10];
	float p[3];
	int q[3];
	int sum[3];
};stores s;

void sum(struct stores s){
	for(int i=0; i<3; i++){
	s.sum[i]=s.p[i]*s.q[i];
	printf("%s price is %d\n", s.a[i], s.sum[i]);
}
	int max=0;
	for(int i=0; i<3; i++){
	if(s.p[i]>max)
	max=s.p[i];
}
	printf("highest p is %d\n", max);
	max=0;
	for(int i=0; i<3; i++){
	if(s.q[i]>max)
	max=s.q[i];
}
	printf("highest q is %d", max);
}

int main(){
	printf("Enter the name : ");
	gets(s.a[0]);
	printf("Enter the second name : ");
	gets(s.a[1]);
	printf("Enter the second name : ");
	gets(s.a[2]);
	
	s.p[0]=100;
	s.q[0]=20;
	s.p[1]=123;
	s.q[1]=22;
	s.p[2]=125;
	s.q[2]=23;
	
	sum(s);
}

구조체와 사용자 지정 함수를 사용하는 것이네요. 여기서 우리는 코드를 보고 딱 두 가지를 깨달으면 좋을거 같아요. 눈치를 채도 좋고, 못 채도 좋아요. 어짜피 눈치 못 채도 지금 배우면 그만이니깐요? 저는 더 심했으니깐 괜찮아요,,여러분 저는 몇 번을 했는데 아직도 헷갈려요

 여튼 핵심 1. string 헤더파일이 필요없는데 왜 들어가있는가? 2. 사용자 지정함수에서 매개변수에 스트럭트 구조를 선언했다. 이 두 가지!!를 꼭 기억하면 그냥 끝 사용자지정함수 매개변수에 등록된 저 부분은 struct stores s = s; 의 구조와 똑같죠? 여기서 main 함수의 s변수와 sum 함수의 s는 다른 변수이니깐 헷갈리면 UML 코드를 작성해보면 편할거같아요~ 1번은 안쓰는 헤더파일을 빼는게 좋지 않을까...? 싶네요 사실 뭐 넣어도 괜찮은데, 자바에서는 안 쓰면 빼라고 경고하더라고요...ㅎㅎ 머쓱


#3. 포인터

#include<stdio.h>

void swap(int *p1, int *p2){
    int temp = *p1;
    *p1=*p2;
    *p2=temp;
}

int main(){	
    int p1=10;
    int p2=20;
    swap(p1, p2)
    printf("%d,%d", p1, p2);
    swap(&p1, &p2)
    printf("%d,%d", p1, p2);
}

 드디어 포인터 부분이 왔습니다. 포인터를 완벽히 이해하고 사용하는 사람은 극히 일부일거라고 저는 조심스럽게 판단을 해보면서, 가볍게 생각을 할 수 있는 부분은 값을 할당하는 주소를 불러와 주소에 할당되어있는 값을 변형할 수 있다~ 라고 생각하면 말은 참 쉽죠? 우리는 이를 call by reference라고 불러요~

 

자 간단하게!!

Q: 진짜 간단하게 우리가 값을 사용자지정함수에서 메인함수로 넘겨주려면 어떻게 해야되죠?

A: return을 써서 값을 넘겨줘야합니다!

Q: 그런데용 이를 안 쓰고 그냥 사용자 지정함수에 저렇게 swap을 해준다면 값이 바뀔까요?

A: 안 바뀌겠죠

 

 여기서 깨닫는 한 가지! 아! 그럴려고 만든 것이 포인터구나!!!

 

 자 이렇게 왜 쓰게 됐는지 알게 됐으니깐, 실습 결과를 사용하기 위한 포인터 문법은 우리 모두 구글링을 통해 알아보도록하구, 알게 됐다면 이 말을 이해하게 될거에요. 일단 포인터는 주소를 변수에 할당하고, 그 주소에 값을 제어하는 것은 *를 통해 사용한다. 그렇다면, 그 주소를 통해 값을 통제하기 때문에 지역변수 꼴로 사용할 수 있다. 


 

'C' 카테고리의 다른 글

(C언어) 기말고사  (0) 2022.12.20
(C언어) 기말고사 전 과제들 - (3)  (0) 2022.12.18
(C언어) 기말고사 전 과제들 - (1)  (1) 2022.12.17
(C언어) 기말고사 전 과제들  (1) 2022.12.17
(C언어) 모의중간고사, 중간고사  (1) 2022.12.17
    민트맛뚱이
    민트맛뚱이
    암 벅

    티스토리툴바