Skip to content

기글하드웨어기글하드웨어

인터넷 / 소프트웨어 : 윈도우즈, 리눅스, 기타 운영체제, 각종 어플리케이션, 프로그램, 소프트웨어, 인터넷, 인터넷 서비스에 대한 이야기, 소식, 테스트, 정보를 올리는 게시판입니다.

일반
2016.08.16 11:12

뜬금없이 만져보는 C언어.

profile
조회 수 968 댓글 30
Extra Form

모 님이 주기적으로 자게에 올리는 프로그래밍 근황 글을 보고 C언어에 관심이 쵸큼 생겨, 더듬거려가며 간단히 C언어를 조금 만져보고 있습니다. 하라는 VBA는 안 하고!!
 

근데 제가 컴맹이다 보니까, 처음부터 막히는 데가 생기는군요.
 

#include <stdio.h>

unsigned int exponential (int a, int b)
{
    int i;
    int result = a;
    
    for (i = 1; i < b; i++)
    {
        result *= a;
    };
    
    return result;
};

int main (int argc, char **argv)
{
    //int a = (int)argv[1];
    //int b = (int)argv[2];
    
    int a = 2;
    int b = 3;
    int c = exponential(a, b);
    printf("%d\n", c);
    
    return 0;
};

간단하게 명령행에서 인자로 숫자 2개를 받아 a^b를 계산하여 출력하는 프로그램을 짜려고 했는데, 인자를 받아들이는 곳에서 막혀 버렸습니다. 이거 해결하려면 그 포인터인가 뭐시긴가부터 먼저 좀 알아야 할 것 같은데, 맞나 모르겠네요. 중괄호나 문장 끝에 붙이는 ; 이것도 익숙하지 않고, 프로그램의 진입점인 main() 함수가 맨 아래인 것도 그렇고, 좀 헷갈리네요. 좋은 독학용 책이라도 추천받아야 할까봐요.
 

하여튼, 이런 거 만져보다 보니 파이썬이 얼마나 편한 언어였는지 새삼 깨닫게 되네요. 근데 난 지금 VBA를 만져야 하는데, 대체 뭐하는 건지…
 

추가 :
여러분들의 도움을 받아 다음과 같이 의도한 대로 동작하는 코드를 작성할 수 있었습니다. 감사합니다.
 

#include <stdio.h>
#include <stdlib.h>

unsigned int exponential (int a, int b);

int main (int argc, char **argv)
{
    if (argc != 2+1)
    {
        printf("Please enter 2 arguments together.\n");
        exit(1);
    };
    
    int a = atoi(argv[1]);
    int b = atoi(argv[2]);
    
    int c = exponential(a, b);
    printf("%d\n", c);
    
    return 0;
};

unsigned int exponential (int a, int b)
{
    int i;
    int result = a;
    
    for (i = 1; i < b; i++)
    {
        result *= a;
    };
    
    return result;
};


  • profile
    라임베어      성공한 사람은 포장되어 일반인을 망친다. 2016.08.16 11:29
    unsigned int expotential(int a, int b)
    {
    if( b == 0) return 1;
    return a*expotential(a, b-1)
    }

    제곱은 재귀함수 처리 하면 편합니다..
  • profile
    쮸쀼쮸쀼 2016.08.16 11:30
    이건 그냥 제어문 구조에 익숙해지려고 써본 거라서요. 이런 경우는 재귀가 확실히 편하고 깔끔하기는 하죠.
  • ?
    Φloteer      🤔 2016.08.16 14:18
    근데 재귀는 편할 수는 있어도 (혹은 목적에 따라서는 보기 깔끔할 수는 있어도) 이론적으로 좋은 기술은 아니지요. 컴파일러가 최적화해줄 수 있는 부분은 최적화해주기는 하지만...
  • profile
    쮸쀼쮸쀼 2016.08.16 14:22
    일찍이 귀도 반 로썸 선생님께서도 “Is it really such a big deal to rewrite your function to use a loop?”라고 말씀하셨다고 하죠.
    http://gigglehd.com/zbxe/14093956#comment_14094213
  • ?
    Minny      Main System : Microsoft Surface Go (Model 1824) Intel® Pentium® Proces... 2016.08.16 11:41
    위에 함수 쓸거 선언 해 두고 난 다음에 밑에 함수를 만들게 되면, 매인을 위에 올릴 수 있죠...

    그리고 딱히 코드에 문제는 없는데.... 요. 매개변수 받는거랑 리턴하는것도 그냥 잘 되어 있고...
  • profile
    쮸쀼쮸쀼 2016.08.16 11:44
    main 함수 안의 주석처리해둔 부분이 문제가 되는 부분입니다. 저는 이게 인자들의 내용을 배열에다가 넣어둔 것이라 생각하고 배열의 요소 2개를 가져와 변수에다가 넣으려 한 것인데, 저 부분을 그대로 쓰면 뭔가 경고와 함께 이상한 결과값이 나오더군요. 그래서 일단 문제가 되는 부분을 주석처리한 뒤, 하드코딩으로 계산할 값을 넣어둔 게 위 코드입니다.

    그나저나 C언어에서는 함수도 변수처럼 미리 선언을 해야 하나 보군요. 메모메모.
  • profile
    설아      ShellCat ː 雪雅 - 1st shell 2016.08.16 12:14
    저거 대로 받아오면 argv에 들어가 있는 값이 문자 1에 해당하는 아스키 값이..들어가 있을텐데...
    아닌가?...
  • profile
    쮸쀼쮸쀼 2016.08.16 12:53
    저도 그리 예상했는데, 어째 잘 안 되네요.
  • profile
    순딩sheep      회사에서 살아남기 2016.08.16 18:32
    처음에 하셨던 것 처럼 함수를 아예 만들어두셔도 됩니다만,
    그냥 함수 선언만 해두고 나중에 해당 함수를 만들어두면 깔끔하고 보기도 좋으니까요.
    미리 다른 함수들이 있으면 main문 찾으려고 스크롤 엄청 해야하니, main문 바로 나오게 하는거죠.
  • profile
    쮸쀼쮸쀼 2016.08.16 18:42
    그냥 헤더 파일로 빼버리는 것이 깔끔하겠네요.
  • ?
    Minny      Main System : Microsoft Surface Go (Model 1824) Intel® Pentium® Proces... 2016.08.16 20:21
    아하,,, 주석 해 둔 부분 자체를 그냥 생략하고 넘어가버렸네요...

    머리속에 컴파일러... ;;;
  • profile
    쮸쀼쮸쀼 2016.08.16 22:28
    히익 이분 최소 인공지능;
  • ?
    Φloteer      🤔 2016.08.16 12:03
    히익 어려운 언어 하신다..
  • profile
    쮸쀼쮸쀼 2016.08.16 12:03
    뉴비는 늅늅하고 웁니다. C언어 가르쳐주세요!!
  • ?
    Φloteer      🤔 2016.08.16 12:51
    #include <stdio.h>
    #include <stdlib.h>

    unsigned int expotential(int a, int b);

    int main(int argc, char **argv)
    {
    int a = atoi(argv[1]);
    int b = atoi(argv[2]);

    //int a = 2;
    //int b = 3;
    int c = expotential(a, b);
    printf("%d\n", c);

    return 0;
    }

    unsigned int expotential(int a, int b)
    {
    int i;
    int result = a;

    for (i = 1; i < b; i++)
    {
    result *= a;
    }

    return result;
    }

    대충 이런 느낌을 원하셨던 거려나요? atoi말고 더 안전한 함수도 있는데 (콘솔 입력인 경우 그런 걸 쓰는 게 맞을텐데) 일단 기본적으로는..
  • profile
    쮸쀼쮸쀼 2016.08.16 12:55
    atoi라, 처음 보네요. 다른 함수는 어떤 것이 있나요?
  • ?
    Φloteer      🤔 2016.08.16 12:58
    ascii를 integer로 바꾼다고 해서 atoi입니다. string->int라면 여기 좀 더 자세한 답이 있습니다.
    http://stackoverflow.com/questions/27260304/equivalent-of-atoi-for-unsigned-integers
  • profile
    쮸쀼쮸쀼 2016.08.16 13:17
    컴파일해보니까 런타임에 Segmentation fault 오류가 뜨는군요…라고 썼다가 다시 보니 인자를 안 넣었네요. 인자를 넣으니까 작동되긴 합니다. 감사합니다.
  • ?
    analogic 2016.08.16 12:25
    고전중의 고전인 터보C 정복 책을 읽어보시면 설명이 자세히 나옵니다.
  • profile
    쮸쀼쮸쀼 2016.08.16 12:48
    어디서 구할 수 있나요?
  • ?
    amor&spero 2016.08.16 13:05
    (몇주만에 써보는 댓글이 C라니...흑흑)
    main함수가 받아들이는 argv가 char**, 즉 char의 포인터의 포인터(...)라서
    다르게 보면 C에서 보통 string을 char*로 갖고 있기도 하니 결국 string의 배열로 볼 수 있습니다.
    그래서 아마 제생각에는 argv[1]을 가지고 strtol같은 함수를 써보심이 어떤지..
  • profile
    쮸쀼쮸쀼 2016.08.16 13:23
    아직 포인터가 뭔지 잘 몰라서…
  • ?
    amor&spero 2016.08.16 13:36
    핰 ㅠㅠ C에서 포인터는 약간 마의 장벽같은 느낌이죠... 그거 이해하고 쓰는데 몇개월은 걸린것같은..
  • ?
    Φloteer      🤔 2016.08.16 14:48
    참고로 말하자면 효율적으로 짜인 정수 제곱 함수는 이런 느낌입니다.
    http://stackoverflow.com/a/101613
    물론 이렇게 안해도 32비트급 변수에 들어가는 수준의 결과를 한두번 계산하는 수준이라면 엔간히 느린 구현도 괜찮습니다만.. 속도가 필요한 경우에는요.
  • profile
    쮸쀼쮸쀼 2016.08.16 15:00
    이거 비트연산 맞죠? 근데 봐도 모르겠네요;
  • ?
    Φloteer      🤔 2016.08.16 15:04
    저 알고리즘 밑에 나와있는 설명( http://stackoverflow.com/a/108959 , https://en.wikipedia.org/wiki/Exponentiation#Efficient_computation_with_integer_exponents )과 같은 원리입니다. 그저 그걸 좀 더 최적화하기 위해 비트연산도 쓴 듯 합니다.
    외에도 다른 댓글에는 아예 룩업테이블을 도입한 구현도 있고 그러네요. 당연하지만 엄청 자주 연산해야 하거나 하는 경우가 아니면 32~64비트는 꼭 이렇게 안해도 크게 체감차이가 나지는 않습니다. 걍 필요하면 이렇게 하기도 한다 정도..
  • profile
    쮸쀼쮸쀼 2016.08.16 15:10
    흐에에에… 역시 머리 좋은 사람들은 다르네요. 봐도 뭐가 뭔지 하나도 모르겠어요.
  • ?
    Φloteer      🤔 2016.08.16 15:11
    그래서 저는 직접 뭘 최적화하는 건 엔간해선 포기하고 다른사람 걸 가능한한 끌어다 쓰는걸로 방침을 (..)
  • ?
    퀘윈 2016.08.19 06:59
    3을 7번 곱한다 -> 3을 111(2진수)번 곱한다
    3^7 = (3^1) * (3^2) * (3^4) 이런 식으로 작동되는 거에요.
  • profile
    쮸쀼쮸쀼 2016.08.19 10:12
    아하… 역시 주석이란 중요하군요!

작성된지 4주일이 지난 글에는 새 코멘트를 달 수 없습니다.


  1. 구글, 윈도우 취약점을 공개

    구글이 자사 블로그에 윈도우의 취약점 정보를 공개했습니다. 구글은 win32k.sys로 인한 로컬 권한 상승 허용 취약점을 발견하고, 20월 21일에 마이크로소프트와 어도비에 연락해 어도비는 26일자로 플래시를 업데이트했습니다. 마이크로...
    Date2016.11.01 소식 By낄낄 Reply1 Views762 file
    Read More
  2. 아기가 깼는지를 확인하는 딥 러닝 기술

    NVIDIA의 엔지니어인 Benjamin Lui는 테슬라 그래픽카드에 Caffe 딥 러닝 아키텍처를 결합하고 NVIDIA DIGITS 딥 러닝 트레이닝 시스템을 더해, 아기의 상태를 실시간으로 판단-분석하는 BabbyCam 시스템을 만들었습니다. 아기의 상태와 ...
    Date2016.11.01 소식 By낄낄 Reply1 Views629 file
    Read More
  3. No Image

    심심하면 오피스,윈도우7 인증이 풀리는 이유가 뭘까요?

    고객센터에 왜 이 난리냐고 물어봐야 하나...   (애초에 전화해보니 안내를 위해선 따로 요금을 내야 한다더라구요. 왓?)   돈을 냈으면 버그는 둘째치고 인증풀리는건 없어야 하는거 아닌지...   아침부터 중요한 문서 작업해야 해서 워...
    Date2016.11.01 질문 By타미타키 Reply2 Views1026
    Read More
  4. No Image

    이상하게 구글만 느리네요

    그제랑 어제는 구글을 별로 안 들어가봐서 모르겠고. 오늘은 구글이 꽤나 느립니다. 다른 사이트들은 멀쩡하고요. 중국/해외 포함. 아주 안 뜨는 건 아니고 딜레이가 몇초 정도 걸리는데, 이게 구글 번역 같은 연동 서비스까지 다 그렇게 ...
    Date2016.11.01 일반 By낄낄 Reply1 Views355
    Read More
  5. 나이트메어 이미지를 만들어주는 사이트

    NVIDIA GTX 타이탄 X를 사용해, 딥 러닝으로 나이트메어 이미지를 만들어주는 사이트인 나이트메어 머신입니다. 적용 전과 후를 비교하면 어떤 식인지 감이 되실 듯. http://nightmare.mit.edu/
    Date2016.10.31 소식 By낄낄 Reply1 Views641 file
    Read More
  6. No Image

    윈도우에 쓸만한 사전 프로그램은 없을까요?

    인터넷을 쓸 수 없는 환경인데 사전이 필요합니다   맥을 우연히 만지다가 사전을 사용해봤는데 굉장히 강력하더군요   반면, 윈도우는 그런사전을 본적이 없습니다   혹시, 윈도우에는 그런 사전이 없을까요?
    Date2016.10.31 질문 Byhjk9860 Reply9 Views5765
    Read More
  7. 윈도우 절전 옵션이 계속 고성능으로 변해요

        균형조정에다가 화면안꺼짐, 하드디스크 안꺼짐을 걸어놨는데.. 계속 화면이 꺼지고 디스크 돌아가는 소리 (왜애앵)이 나서 뭔가 했더니 이게 고성능으로 계속 변하네요...;;   지금까지 3번인가 변했는데 뭐 때문에 변했는지를 모르...
    Date2016.10.30 질문 By케닌 Reply8 Views848 file
    Read More
  8. MSI 애프터버너 4.3.0 정식 발표

    MSI 애프터버너 4.3.0 정식 버전이 발표됐습니다. NVIDIA 파스칼 아키텍처의 지포스 GTX 1080, 1070, 160과 폴라리스 아키텍처의 AMD RX 480, RX 470, RX 460 등을 지원합니다. 그래픽카드 소비 전력 측정과 그래프 표시 기능, NVIDIA 파...
    Date2016.10.28 소식 By낄낄 Reply0 Views504 file
    Read More
  9. 윈도우 10 크리에이터스 업데이트가 내년에

    마이크로소프트가 2017년에 이루어질 윈도우 10의 첫 메이저 업데이트를 윈도우 10 크리에이터스 업데이트라고 명명했습니다. 윈도우 10은 2015년 7월 29일에 발표돼, 11월에 첫번째 소규모 업데이트인 11월 업데이트(스레쉬홀드 1, 버전...
    Date2016.10.27 소식 By낄낄 Reply7 Views2913 file
    Read More
  10. 윈도우 10, 4억대 이상의 디바이스에 설치

    마이크로소프트는 윈도우 10이 설치된 디바이스(활성화된 디바이스)의 수가 4억대를 넘었다고 발표했습니다. 평균 1시간에 6백명이 새 시스템으로 업데이트하며, 윈도우 10의 총 사용 시간은 2천억 시간이 넘는다고 합니다. 윈도우 10의 ...
    Date2016.10.27 소식 By낄낄 Reply0 Views396 file
    Read More
  11. No Image

    파일입력을 하면 segmentation fault(core dumped)가 뜨네요

    검색을 이것저것해보니 침범하면 안되는 메모리 영역에 쓰려해서 그렇다는데   제 코드는 그냥   #include <iostream> #include <fstream> #include <cstdlib> #include <ctime> using namespace std; class Array{         private:     ...
    Date2016.10.25 질문 By주기율표 Reply7 Views845
    Read More
  12. No Image

    새나루 입력기가 윈도 10에서 작동하지 않는군요.

    새나루 입력기가 윈도 10에서 작동하지 않는군요. 저는 한글 2벌식+영어 드보락 자판으로 쓰고 있는데, 새나루 입력기를 쓸 수 없으니 상당히 난감하네요. 날개셋 입력기를 설치해 봤는데 영어 드보락 입력은 되는데, 단축키는 쿼티 자판 ...
    Date2016.10.24 일반 By부녀자 Reply2 Views1324
    Read More
  13. 블루스크린을 흉내내는 악성코드

    윈도우 10의 블루스크린이 어떻게 생겼는지는 다들 알고 계시지요? 이게 윈도우 10의 블루스크린이 맞다고 생각하셨다면 틀렸습니다. 윈도우 10은 화면 제일 아랫줄에 나온대로, 전화번호를 안내하진 않거든요. 이 악성코드는 윈도우 시큐...
    Date2016.10.24 소식 By낄낄 Reply5 Views1727 file
    Read More
  14. No Image

    저번 주말 밤동안 Dyn DNS를 공격한 범인이 샤오미 IoT 디바이스들이네요.

    지난 주말 미국을 대혼란으로 몰아넣은 대규모 해킹에 중국 샤오미가 만든 전자 제품이 숙주로 악용된 것으로 나타났다. 이전과 달리 도처에 깔린 사물인터넷(IoT) 기기(디바이스)의 보안 취약점을 악용한 이번 해킹은 “인터넷 공격이 새...
    Date2016.10.24 일반 By청솔향 Reply22 Views1228
    Read More
  15. MS 주가 6% 상승, 17년만에 최고치

    마이크로소프트는 2017회계년도 1분기 실적을 발표했습니다. 지난 분기의 매출은 204.53억 달러로 순수익은 46.9억 달러를 기록했습니다. 가장 돋보인 사업은 인텔리전트 클라우드, 서피스 등의 제품군, 그리고 오피스입니다. 인텔리전트 ...
    Date2016.10.22 소식 By낄낄 Reply2 Views658 file
    Read More
목록
Board Pagination Prev 1 ... 580 581 582 583 584 585 586 587 588 589 ... 601 Next
/ 601

최근 코멘트 30개

한미마이크로닉스
AMD
더함
MSI 코리아

공지사항        사이트 약관        개인정보취급방침       신고와 건의


기글하드웨어는 2006년 6월 28일에 개설된 컴퓨터, 하드웨어, 모바일, 스마트폰, 게임, 소프트웨어, 디지털 카메라 관련 뉴스와 정보, 사용기를 공유하는 커뮤니티 사이트입니다.
개인 정보 보호, 개인 및 단체의 권리 침해, 사이트 운영, 관리, 제휴와 광고 관련 문의는 이메일로 보내주세요. 관리자 이메일

sketchbook5, 스케치북5

sketchbook5, 스케치북5

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소