프로 그래 밍 기본 개념 (면접 보전 독서 노트 1)

23888 단어 독서 노트
프로그래머 면접 보전 2 판 독서 노트 (1)
1:i++;
 What will be the output of the following C code ? 

  
    
#include < stdio.h >

int main() {
int b = 3 ;
int arr[] = { 6 , 7 , 8 , 9 , 10 };
int * ptr = arr;
* (ptr ++ ) += 123 ;
printf(
" %d, %d
" , * ptr, * ( ++ ptr));
}


2: 프로 그래 밍 스타일 
We have two pieces of code, which one do you prefer, and tell why ?

  
    
if ( ' A ' == a) {
a
++ ;
}
B
if (a == ' A ' ) {
a
++ ;
}


Answer:
인터넷 상의 토론 과 논쟁 이 꽤 많다.
/ * 수정 중 C 언어 는 함수 매개 변수 스 택 순서 에 대해 규정 하지 않 았 고 구체 적 으로 컴 파일 환경 과 관련 이 있 습 니 다.
또한 스 택 순서 와 구 치 순서 사이 에는 필연 적 인 관계 가 없다.(보류)
   논란 이 있 습 니 다. 여 기 는 사용 을 피 하 는 것 을 권장 합 니 다. (매개 변수 목록 에서 i + 와 같은 문 구 를 사용 하지 마 세 요. 한 마디 로 좋 은 습관 은 아 닙 니 다.) * /
1: C 에서 printf 가 파 라 메 터 를 계산 할 때 오른쪽 에서 왼쪽으로 스 택 을 눌 렀 기 때문에 8 입 니 다.
  관련 지식 포인트: (a) 부작용 과 시퀀스 점  (b) 스 택 순서 와 값 순서
         
3: 형식 변환:
3.1
다음 프로그램의 출력 결 과 는 얼마 입 니까?

  
    
#include < iostream >
using namespace std;

int main() {
unsigned
char a = 0xA5 ;
unsigned
char b = ~ a >> 4 ;
printf(
" %d
" , b);
return 0 ;
}


Answer:
2: A 가 좋 습 니 다. 첫 번 째 쓰기 때문에 '=' 을 '=' 으로 잘못 썼 습 니 다. 상수 에 값 을 부여 하 는 것 을 허락 하지 않 기 때문에 컴 파일 러 가 잘못 보고 할 수 있 습 니 다.
3.2
다음 프로그램의 출력 결 과 는 얼마 입 니까?

  
    
#include < iostream >
using namespace std;

int main() {
float a = 1.0f ;
cout
<< ( int )a << endl; // a
cout << & a << endl; // a
cout << ( int & )a << endl; // a , 。
cout << boolalpha << ( ( int )a == ( int & )a ) << endl;
// ?
float b = 0.0f ;
cout
<< ( int )b << endl;
cout
<< & b << endl;
cout
<< ( int & )b << endl;
cout << boolalpha << ( ( int )b == ( int & )b ) << endl;
    // ?
return 0 ;
}


Answer:
3.1:245
  (1) unsigned char b = ~a >> 4;계산 할 때 컴 파일 러 는 먼저 a 와 4 의 값 을 int (즉 정수 향상) 로 바 꾼 후에 계산 하고 결 과 를 계산한다.
나 온 후에 결 과 를 unsigned char 할당 b 로 변환 합 니 다.
    (2) >> 우선 순위 가 ~ 보다 높 습 니 다.
3.3
다음 프로그램의 출력 결 과 는 얼마 입 니까?

  
    
#include < stdio.h >

int main() {
unsigned
int a = 0xfffffff7 ;
unsigned
char i = (unsigned char )a;
char * b = ( char * ) & a;
printf(
" %08x, %08x
" , i, * b);
}


Answer:
3.2:false  true
 

  
    
/*
(int&)a, , a , 。
(int)a ,a int
float ,
754 :
( ),
1.0f
0011 1111 1000 0000 0000 0000 0000 0000
0x3f800000,
int float 1.0f , false。
0 , true。
*/

   
4: 비 또는 문제
4.1 하나의 표현 식 으로 하나의 수 x 가 2 ^ N (2, 4, 8, 16..) 인지 판단 하고 순환 문 구 를 사용 할 수 없습니다.
Answer
 3.3:000000f7, fffffff7
 unsigned int 변수 가 unsigned char 에 할당 되 었 을 때 바이트 절단 이 발생 합 니 다 (3 비트 와 3 비트 이상 의 버 림, 낮은 두 자리 남기 기).
4.2 다음 프로그램의 결 과 는 얼마 입 니까?

  
    
#include < iostream >
using namespace std;
int main() {
int count = 0 ;
int m = 9999 ;
while (m) {
count
++ ;
m
= m & (m - 1 );
}
cout
<< count << endl;
}

 
Answer: 4.1
!x&(x-1)
5: a, b 교환
There are two int variables:a and b, don't use "if", "? :", "switch" or other judgement statements, find out 
  the biggest one of the two numbers.
Answer:4.2:
8
m 의 이 진 은 1 에 나타 난 개 수 를 나타 낸다. 즉, count 의 값 으로 m & (m - 1) 연산 을 할 때마다 맨 오른쪽 에 있 는 1 을 제거 하 는 것 이다.
     
6: C 와 C + + 의 관계
Answer 5:
(1)int max = (a + b + abs(a - b)) / 2;
(2)
 

  
    
#include < cstdio >
using namespace std;

int main () {
int a, b;
while (scanf( " %d %d " , & a, & b) == 2 ) {
int c = a - b;
char * str[ 2 ] = { " a " , " b " };
c
= unsigned(c) >> ( sizeof ( int ) * 8 - 1 );
/*

int c 【-2^31, 2^31 - 1】
if (c < 0) {
unsigned(c) c + 2^32;
} else {
unsigned(c) c ;
}
unsigned 32 , c 31 , 0, 1
if (a >= b) {
then c >= 0
unsigned(c) = c; 【0,2^31 - 1】 0
} else {
then c < 0
c 【-2^31, 0)
unsigned(c) = c + 2^32 >= 2^31 , 1
}
*/
printf(
" %s
" , str[c]);
}
return 0 ;
}

6.1: C + + 프로그램 에서 C 컴 파 일 러 에 의 해 컴 파 일 된 함 수 를 호출 합 니 다. 왜 extern "C" 를 추가 합 니까?
6.2: 헤더 파일 의 ifndef / define / endif 는 무엇 에 사용 합 니까?
Answer:
6.1
C + + 는 리 셋 함 수 를 지원 합 니 다. C 언어 는 리 셋 함 수 를 지원 하지 않 습 니 다.함수 가 C + + 로 컴 파일 된 후 라 이브 러 리 함수 의 이름과 C 언어의 차이 가 있 습 니 다.
예: 만약 함수 원형 이 void foo (int x, int y) 라면. C 컴 파일 후 라 이브 러 리 의 이름 은 입 니 다.foo,
C + + 컴 파 일 러 는foo_int_int 같은 이름...
6.2: 이 헤더 파일 이 중복 참조 되 는 것 을 방지 합 니 다.
오리지널 글 은 전재 할 때 다음 과 같이 명시 해 주 십시오. { 잊어버리다 }
본문 주소: http://www.cnblogs.com/slave_wc

좋은 웹페이지 즐겨찾기