'x'값이 일 때 다음 코드에서으로 테스트 된 횟수는 몇 번입니까? 나에게for-loops에서의 작은 의심
int x;
for(x=0;x < 10; x++)
printf("%d",x);
는 대답은 11 것 같다하지만 내 모듈은 10 말한다?! 나는 무엇을 놓치고 있습니까?
'x'값이 일 때 다음 코드에서으로 테스트 된 횟수는 몇 번입니까? 나에게for-loops에서의 작은 의심
int x;
for(x=0;x < 10; x++)
printf("%d",x);
는 대답은 11 것 같다하지만 내 모듈은 10 말한다?! 나는 무엇을 놓치고 있습니까?
일레븐은 printf와 호출 전에 :
0 < 10 == true
1 < 10 == true
2 < 10 == true
3 < 10 == true
4 < 10 == true
5 < 10 == true
6 < 10 == true
7 < 10 == true
8 < 10 == true
9 < 10 == true
10 < 10 == false // exit from loop (printf not executed)
+1, 제거했습니다.하지만 좋은 전략은 $ x <1 $ = 2와 $ x <2 $ = 3, $ x
10 배 -
, 당신은 10 번 호출되는 루프 본문으로 끝낼 루프 후 2
-1입니다. 내 질문을 확인하십시오. 답을 편집하여 -1을 제거 할 수 있도록하십시오. – Quixotic
제 답변이 다소 정확했습니다. 나는 '테스트 된'부분을 겹쳐 쓰고 '10 '은 틀릴 수도 있지만 응답이 유효하다. 사람들에게 당신이 방금 그들을 downvoted했다는 것을 말하기보다는 오히려 그것을 읽을 시간이 있다면 - 이것은 내 동기를 확실히 증가시킬 것이다. 미래에 당신에게 응답하십시오. –
질문에 대한 요점은 for 루프가 어떻게 작동하는지 알지 못하는 것입니다. 내 대답은 그것을 설명합니다. –
예, x < 10
표현식은 11 번 평가됩니다. 처음 10 번은 사실이며 거짓 인 마지막 시간입니다 (x==10
).
0-9에 10 개의 값이 있지만, 이 테스트되었습니다. 11 번, 마지막으로 false가 반환되어 루프를 종료합니다.
예. TEST은 11 회 실행되며, 본문은 10 회만 실행됩니다.
for(x=0;x < 10; x++)
X 제로에서 시작하지만, x는 10 이하 그래서 여기에이 문제를 해결하기 위해 몇 가지 솔루션입니다 동안 코드 루프 때문에 9에서 끝 :
for(x=0;x <= 10; x++)
및
for(x=0;x < 11; x++)
가
이것들은 모두 11가됩니다.
디버거가 마음에 들지 않으면 속임수를 쓸 수 있습니다 :
당신이 일을 올바른 방법을하고 그 과정에서 디버깅 소프트웨어를 배우고 싶은 경우에testing 0
0
testing 1
1
testing 2
2
testing 3
3
testing 4
4
testing 5
5
testing 6
6
testing 7
7
testing 8
8
testing 9
9
testing 10
를 인쇄
int main() {
int x;
for(x=0;(printf("testing %d\n", x) || 1) && (x < 10); x++)
printf("%d\n",x);
return 0;
}
는 this을 읽고 시작합니다.
다음은 위의 코드가있는 gdb 세션입니다. 루프 테스트 라인에 도달 한 횟수를 세어 볼 수 있습니다. 11시입니다.
$ gdb loop
GNU gdb (GDB) 7.0.1-debian
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/nathan/c/loop...done.
(gdb) break 6
Breakpoint 1 at 0x4004ec: file loop.c, line 6.
(gdb) run
Starting program: /home/nathan/c/loop
Breakpoint 1, main() at loop.c:6
6 for(x=0; (printf("testing %d\n", x) || 1) && (x < 10); x++)
(gdb) n
testing 0
7 printf("%d\n",x);
(gdb)
0
6 for(x=0; (printf("testing %d\n", x) || 1) && (x < 10); x++)
(gdb)
testing 1
7 printf("%d\n",x);
(gdb)
1
6 for(x=0; (printf("testing %d\n", x) || 1) && (x < 10); x++)
(gdb)
testing 2
7 printf("%d\n",x);
(gdb)
2
6 for(x=0; (printf("testing %d\n", x) || 1) && (x < 10); x++)
(gdb)
testing 3
7 printf("%d\n",x);
(gdb)
3
6 for(x=0; (printf("testing %d\n", x) || 1) && (x < 10); x++)
(gdb)
testing 4
7 printf("%d\n",x);
(gdb)
4
6 for(x=0; (printf("testing %d\n", x) || 1) && (x < 10); x++)
(gdb)
testing 5
7 printf("%d\n",x);
(gdb)
5
6 for(x=0; (printf("testing %d\n", x) || 1) && (x < 10); x++)
(gdb)
testing 6
7 printf("%d\n",x);
(gdb)
6
6 for(x=0; (printf("testing %d\n", x) || 1) && (x < 10); x++)
(gdb)
testing 7
7 printf("%d\n",x);
(gdb)
7
6 for(x=0; (printf("testing %d\n", x) || 1) && (x < 10); x++)
(gdb)
testing 8
7 printf("%d\n",x);
(gdb)
8
6 for(x=0; (printf("testing %d\n", x) || 1) && (x < 10); x++)
(gdb)
testing 9
7 printf("%d\n",x);
(gdb)
9
6 for(x=0; (printf("testing %d\n", x) || 1) && (x < 10); x++)
(gdb)
testing 10
8 return 0;
(gdb)
9 }
+1 Lol! 정말 좋은,하지만 지금은 더 나은 수학 접근 방식으로 행복하게 :) – Quixotic
심각한가요? 이것은 직관적이어야합니다!
x
은 (n
는 10) n+1
시간, 을 테스트 있지만 <
연산자 *을 사용하는 경우에만 있기 때문에 조건이 만족 n 번!
int x;
for(x=0;x < 10; x++)
printf("%d",x);
printf("%d",x);
마지막 인쇄 문 x
한 번 더 시험을 나타냅니다 출력 10 (우리는 0에서 시작하기 때문에이 x
실제로 11 번 테스트)해야합니다
질문이 표현식 x < 10
의 평가 횟수와 관련이 있다면 대답은 - 다릅니다. 그것은 컴파일러 최적화에 달려있다. 컴파일러가 순진한 코드를 생성하면 11 번 평가됩니다. 컴파일러가 루프를 완전히 풀면 대답은 0이됩니다. 중간에있는 것도 가능합니다.
이것은 인터뷰 질문에서 일반적으로 묻는 두뇌 티저입니다. 쉽게 확인할 수있는 방법은 10에서 1로 변경하는 것입니다. 즉, 기본 사례 :
(x = 0; x < 1; x ++) printf ("% d", x);
1 회 인쇄됩니다. x = 1 일 때, 이것은 루프에서 빠져 나와 for 루프의 내용에 포함되지 않습니다. 따라서 "x + 1"시간이 아니라 "x"번 인쇄됩니다.
또한, 당신은이 일을 같이 그것에 대해 생각 할 수 있습니다에 대한 를 (X = 1; X < 2, X ++)
그것은 루프 내용을 X = 1,하지만 X = 2를 수행합니다 (2 - 1) 회. 기억해야 할 중요한 점은 실제로 루프에서 빠져 나가고 x의 값이 루프 내용 내에서 실행되는 경우입니다.
안녕하세요, 여러분, 그게 훨씬 쉽습니다!첫번째 반복 전에
: 같이 루프
보인다.
따라서 10 개의 인터렉션이 11 개의 테스트를 제공합니다. 단순한!
디버거는 친구입니다 –
@Ed Swangren : 저는 디버거를 사용하는 방법에 대해별로 몰라요. (필자는이 점에 관해 더 많은 도움을 주실 것입니다 :) – Quixotic
"테스트 된"의미는 무엇입니까? "내 모듈이 10이라고 말합니다"는 의미는 무엇입니까? –