2016-11-06 5 views
3

새로운 사람이 여기 있고, 바보 같은 느낌이 든다. 솔직히 말해서.수학적 어려움

기본적으로 저는 대학에 있고 모듈 중 하나는 프로그래밍 입문 (학습 C)입니다. 나는 프로그래밍을 배우는 것을 정말로 즐겁게 생각하고 실제로 그것을 더 원한다. 그러나, 나는 수학/논리와 정말로 고심하고있다. 예를 들어, 매주 우리는 내가 수행하고있는 이러한 작은 테스트를 얻습니다. (복잡하지는 않지만 많은 사람들에게 보이는 것은 꽤 쉽습니다.) 수학적 라인의 코드가 포함되어 있지 않으면. 그래서 나는 기본적으로 (객관식 답변에서) 300,100,100 대답

#include<stdio.h> 

void main() 

{ 

    int a = 300, b = 100, c = 100; 

    if(a >= 400) 

     b = 300; 

    c = 200; 

    printf("%d, %d, %d\n", a, b, c); 

} 

: 다음 코드가 실행되는 출력은 다음의

: 여기

은 질문 중 하나입니다 그러나 그 대답은 300,100,200이었다. 그리고 만약 내가 300,300,200을 선택할 수있는 옵션이 객관식에 있다면 나는 그것을 선택했을 것입니다. 결과가 왜 - c의 값만 바뀌 었는지 이해할 수없는 것 같습니다.

정직하게 말하면, 프로그래밍의이 부분은 정말로 고심하고 있습니다. 그래도 계속 열심히 노력할 결심입니다.

귀하가 가진 조언이나 조언은 대단히 감사하겠습니다.

친절하게 제공합니다.

+1

이 줄은'c = 200;'은'c '가 변경되었음을 알려줍니다. –

+2

안녕하세요. 낙심하지 마십시오. 프로그램에서 명령문을 실행하는 방법과 과제가 어떻게 작동하는지 이해하는 것이 중요합니다. –

+4

디버거를 사용하면 프로그램 실행을 단계별로 보여줍니다.충돌이없는 경우에도 유용합니다 :) –

답변

4

코드를 보면 bc의 초기화 이후에 할당 된 값이 있습니다. 조건이 a >= 400b300 >= 400가 참이면 200로 설정, 즉 해당하는 경우

그러나 b 변경한다. 그게 사실이야? 아니요. 따라서 b은 변경되지 않습니다.

200은 코드에 관계없이 c에 할당됩니다.

a

전혀 변경되지 않는다 : a (= 300), b (= 100), 및 c (= 100)의 선언 이후 요약

.

b은 조건에 따라 변경됩니다. 그러나 그 조건은 거짓이므로 변경되지 않습니다.

c이고 항상이 변경되었습니다 (200이 할당 됨).

이제 답변이 왜 그렇게 작동 할 수 있습니까?

+0

시간 내 주셔서 감사합니다. 너희들이 여기서 아는 것보다 나를 도왔다. 나는 그걸 알아 내려고 애썼다. :) – sls1981

3

실행은 줄 단위로 진행되고 필요에 따라 분기를 제어합니다.

처음에는 초기화와 라인 실행 :

이 시점에서
int a = 300, b = 100, c = 100; 

, 값이 a = 300, b = 100c = 100이다.

if(a >= 400) 
    b = 300; 

다음과 같이 문을 작동하면 다음 condition사실입니다

if(condition) 
    then-statement; 

경우, then-statement가 실행됩니다. 그렇지 않으면 건너 뜁니다. 귀하의 예에서 우리는 이 a이 300 인 지금 300 >= 400이 아니기 때문에이 아니므로 b = 300을 건너 뜁니다. 이 시점에서

는, 값이 여전히 a = 300, b = 100c = 100는 (이후 우리는 아무것도 변경하지 않았다)이다. 경우

c = 200; 

이 명령문은에 의해 보호되지 않으므로이 항상이 실행됩니다

은 마지막으로 라인을 가지고있다. 따라서 c 값을 업데이트하고이를 200으로 설정합니다.

이 시점에서 값은 a = 300, b = 100c = 200입니다.

print 문에 도달하면 정확하게 인쇄되는 값입니다.

+0

이것은 훌륭합니다. 그렇다면 if 문은 다음 행 (b = 300;)에만 적용되고 c = 200 선언은 코드 자체의 새로운 행이고 c의 이전 값 선언을 무시합니다. 간단히 말해서 if 문 자체에 c = 200 행을 포함 시켰는데 잘못되었습니다. :) – sls1981

+1

if 문은 다음 행'if (condition) statement;'또는 다음 블록 (중괄호로 묶인 줄 묶음)에 적용됩니다.'if (condition) {statement-1; statement-2; ... statement-n;}'귀하의 예에서'if' 다음에 중괄호가 없으므로 'b = 300'과 **'c = 200'이 아닌 **에만 적용됩니다. – peteykun

+0

정말 고마워요. 정말 고마워요. :) – sls1981

1

실제 코드는 이와 같이 보입니다.

int a = 300, b = 100, c = 100; 

    if(a >= 400) 
     { 
     b = 300; 
     } 
    c = 200; 

    printf("%d, %d, %d\n", a, b, c); 
    } 

그것 (IF)의 일부가 될 경우 후이

if(a >= 400) 
     b = 300; 
     c= 200; 

바로 다음 라인 같은 경우. Foreg : (경우 다른 ..)

int c=10; 
if(c==10) 
printf("iam 10"); 
else 
printf("iam not 10"); 

출력이 '스피 (10)의' 조건문 것없이는 {} 바로 다음 라인에만 그 적용을 의미한다. 이것은 루핑 문 (for ... 동안)에도 동일합니다.

+0

고맙습니다. 그것이 그렇게 쓰여졌다면 나는 그것을 훨씬 더 빨리 이해할 수있었습니다. 나는 괄호로 if 문을 보는 데 익숙하다. 너희들 모두 대단하다. :) – sls1981

0

당신은로 시작 :

A (300)> 400 경우
int a = 300, b = 100, c = 100; 

다음 - 뭔가 b에 발생, 그것은 변경

if(a >= 400) 

     b = 300; 

300 그러나 지금,> 400 아니다 그 코드의 일부는 실행되지 않습니다. 그래서 여전히 300, 100, 100에 있습니다. 그런 다음 코드의 마지막 부분 : c = 200;은 독립적입니다. 트리거 조건은 없습니다. 해당 코드 줄에 도달하면 항상 c가 200으로 변경됩니다. 이제는 - a = 300, b = 100, c = 200