센트리 레이트 2013C++펜 시험지 B
1. 다음 프로그램의 출력 결과:
char *p1= “123”, *p2 = “ABC”, str[50]= "xyz";
strcpy(str+2,strcat(p1,p2));
cout << str;
2. 부동점수와 비트 연산:
모든 비트 연산은 부동점수를 직접 조작할 수 없지만 우리는 간접적으로 부동점수에 대해 비트 연산을 할 수 있다. 예를 들어float 데이터를 취하여 주소(&)를 정형(int 등) 바늘로 강제로 전환한 후 값(*)을 추출한 후 정형변수(int 등)에 값을 부여하면 이 변수에 대해 비트 연산을 할 수 있다.[주] 부동점수에 대해 비트 연산을 하는 것은 일반적으로 의미가 없다. 부동점수의 저장 구조는 세 부분으로 나뉘기 때문에 비트 연산을 한 후에 얻은 결과는 원시 부동점수와 그다지 큰 관계가 없다.
3. 내연 함수: 클래스에서 내연 함수를 사용하는 곳은 컴파일 단계에서 내연 함수체로 대체됩니다.
프로그래밍 문제
1. n 개의 파일 길이가 부호가 없는 64비트 정수 그룹에 unsignedint64 file_length[n], 이 n개의 파일을 논리적으로 순서대로 처음부터 끝까지 연결하여 논리적인 큰 파일을 만들고 각 블록의 길이를 unsigned blocklength는 이 논리적인 큰 파일을 크기가 같은 데이터 블록으로 구분합니다. (물론 마지막 블록은 Block length보다 작을 수 있습니다.) 함수를 정의하고 실현하십시오. 경계 블록의 번호 집합을 함수의 호출자에게 되돌려 주십시오. (첫 번째 데이터 블록의 번호는 0)주: 경계 블록은 여러 파일에 걸쳐 있는 데이터 블록을 가리킨다.
2. 하나의 함수를 실현하여 두 개의 큰 것부터 작은 것까지의 질서 체인 테이블을 하나의 체인 테이블로 합치십시오. 새로운 체인 테이블은 작은 것부터 큰 것까지의 질서 체인 테이블입니다.
/*
, , 。
*/
#include <iostream>
#include <cstdlib>
using namespace std;
struct list
{
int value;
list* next;
};
list * merge(list *list1_head, list*list2_head)
{
if (!list1_head && !list2_head)
return NULL;
else if (!list1_head)
return list2_head;
else if (!list2_head)
return list1_head;
else{
list *p = list1_head, *q = list2_head, *r = NULL;
list *rHead = NULL, *rEnd = rHead;
while (p && q)
{
if (p->value <= q->value)
{
r = p->next;
if (rHead == NULL)
{
rHead = p;
rEnd = rHead;
rEnd->next = NULL;
}//if
else{
rEnd->next = p;
p->next = NULL;
rEnd = p;
}//else
p = r;
}//if
else{
r = q->next;
if (rHead == NULL)
{
rHead = q;
rEnd = rHead;
rEnd->next = NULL;
}//if
else{
rEnd->next = q;
q->next = NULL;
rEnd = q;
}//else
q = q->next;
}//else
}//while
while (p)
{
r = p->next;
rEnd = p;
p->next = NULL;
rEnd = p;
p = r;
}//while
while (q)
{
r = q->next;
rEnd = q;
q->next = NULL;
rEnd = q;
q = r;
}//while
return rHead;
}//else
}
3. 만약 두 개의 영문 단어가 그것들을 구성하는 문자 집합이 같고 같은 문자가 나타나는 횟수도 같다면 이 두 단어가 일치한다고 한다. 예를 들어'abbc'와 단어'babc'가 일치한다고 한다.문자열 그룹 const char* dictionary[n]에 저장된 사전이 있습니다. 그룹의 모든 요소는 하나의 단어입니다.임의로 주어진 문장에 대해.문장의 단어는 공백으로 분할한다.다음 함수를 실현하여 문장에 있는 단어와 사전의 단어가 일치하는지 판단하십시오.bool is_matching( const char* dictionary[],int n, const char* sentence);
/*
, , , :
: ”abbc” ”babc” 。 , const char* dictionary[n] ,
。 。 。
, 。
bool is_matching( const char* dictionary[],int n, const char* sentence);
*/
#include <iostream>
#include <cstdlib>
#include <vector>
using namespace std;
bool isMatch(const char*str1, const char *str2)
{
int len1 = 0, len2 = 0;
const char *p = str1, *q = str2;
/* */
while (*p++ != '\0')
++len1;
while (*q++ != '\0')
++len2;
if (len1 != len2)
return false;
vector<char> vMap(256, 0);
p = str1;
while (*p != '\0')
{
++vMap[*p];
++p;
}//while
/* */
q = str2;
while (*q != '\0')
{
if (--vMap[*q] < 0)
return false;
++q;
}//while
return true;
}
bool is_matching(const char* dictionary[], int n, const char* sentence)
{
if (!sentence)
return false;
int len = 0;
const char *p = sentence;
while (*p++ != '\0')
++len;
char *word = new char[len + 1];
word[0] = '\0';
/* sz*/
int sz = 0;
p = sentence;
while (*p != '\0')
{
if (*p == ' ')
{
word[sz] = '\0';
for (int i = 0; i < n; ++i)
{
if (isMatch(word,dictionary[i]))
return true;
}//for
sz = 0;
word[sz] = '\0';
}
else{
word[sz++] = *p;
}//else
++p;
}//while
/* */
word[sz] = '\0';
for (int i = 0; i < n; ++i)
{
if (isMatch(word, dictionary[i]))
return true;
}//for
return false;
}
int main()
{
const char *dictionary[] = { "I", "am", "a", "good", "student." };
const char *s = "very good ";
cout << is_matching(dictionary, 5, s) << endl;
system("pause");
return 0;
}
뉴커넷
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Access Request, Session and Application in Struts2If we want to use request, Session and application in JSP, what should we do? We can obtain Map type objects such as Req...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.