1. 소개

프로그래밍에는 새로운 보편적인 알고리즘 모델이 필요하며 하드웨어는 다른 형식뿐만 아니라 다른 알고리즘 모델인 자동화를 기반으로 알고리즘을 구현합니다. 하드웨어 개발에서 기술을 차용하는 것이 자동 프로그래밍의 핵심 아이디어입니다. 그러나 합성 디지털 기기프로그래밍과 다릅니다. 그러나 모델을 빌리면 한편으로는 크게 변경하는 것이 바람직하지 않으며 다른 한편으로는 이미 존재하는 프로그래밍 이론과 실습을 고려하지 않는 것이 불가능합니다.

다음으로 항상 유사한 프로세스를 접하게 되는 자동 프로그램 설계를 위한 SWITCH 기술에 대해 살펴보겠습니다. 한편으로 그녀는 모델을 너무 많이 바꿨습니다. 상태 머신, 실제로 오토마타 이론의 범위를 벗어났습니다. 그리고 다른 한편으로는 프로그래머가 거의 인식하지 못하고 때로는 단순히 불필요한 개념을 프로그래밍에 도입합니다. 프로그램 이론과 프로그래밍 실습에서 더 친숙한 유사점이 있습니다.

자동 프로그래밍의 문제를 논의하기 위한 기초로 Shalyto A.A.의 최근 강의를 들었습니다. 오토마타 프로그래밍 패러다임의 정의에 대한 그의 "소프트웨어" 논문.

C++(c-plus-plus로 발음)는 모든 복잡성 수준의 프로그램을 만드는 데 사용할 수 있는 컴파일되고 정적으로 유형이 지정된 범용 프로그래밍 언어입니다.
20년 이상 동안 이 언어는 가장 인기 있고 수요가 많은 프로그래밍 언어 상위 3위 안에 들었습니다. (티오베 홈페이지에서 확인 가능합니다.)
이 언어는 1980년대 초 Bell Labs 직원인 Björn Stroustrup이 자신의 필요에 따라 C 언어에 대한 여러 개선 사항을 생각해 냈을 때 시작되었습니다.

Bjarne Stroustrup - C++ 언어 창시자

Stroustrup은 Simula 언어에서 사용할 수 있는 기능으로 C 언어를 확장하기로 결정했습니다. Bell 컴퓨터가 실행되는 UNIX 시스템의 기본 언어인 C 언어는 빠르고 기능이 풍부하며 이식성이 있습니다. Stroustrup은 클래스와 객체로 작업할 수 있는 기능을 추가했습니다. 결과적으로 실제 모델링 문제는 개발 시간(Simula 유사 클래스 사용으로 인해)과 계산 시간(C의 속도로 인해) 모두에서 접근할 수 있는 것으로 나타났습니다.
다음은 언어 개발자 자신이 말하는 방식입니다.



1998년 C++98로 알려진 첫 번째 언어 표준이 표준 위원회에서 발표되었습니다. C++는 최신 요구 사항을 충족하기 위해 계속 발전하고 있습니다. C++ 언어를 개발하고 이를 개선하기 위해 C++ 표준화 위원회에 제안을 보내는 그룹 중 하나는 다음과 같습니다. 후원, 무엇보다도 메타프로그래밍 기능을 추가하여 언어의 기능을 향상시키는 것을 다룹니다. 최신 표준은 2017년에 발표되었으며 C++17. 다음 표준은 머지 않아 2020년에 나올 것으로 예상됩니다.
아무도 C++ 언어에 대한 권리를 소유하지 않으며 무료입니다. 2016년 3월 러시아는 작업 그룹 WG21 C++. 이 그룹은 C++ 표준에 대한 제안을 수집하여 위원회에 제출하고 국제 표준화 기구 총회에서 이를 변호하기 위해 구성되었습니다.
C++은 다중 패러다임 언어입니다(패러다임이라는 단어에서 - 쓰기 스타일 컴퓨터 프로그램), 여기에는 다양한 프로그래밍 스타일과 기술이 포함됩니다. 흔히 객체지향 언어라고 하지만 엄밀히 말하면 그렇지 않다. 작업 과정에서 개발자는 도구 선택에 있어 절대적인 자유를 얻음으로써 하나 또는 다른 접근 방식을 사용하여 해결된 문제가 가능한 한 효율적으로 해결되도록 합니다. 다시 말해서, C++는 프로그래머가 하나의 프로그램 개발 스타일(예: 객체 지향)만을 고수하도록 강요하지 않습니다.
C++에는 공통 컨테이너 및 알고리즘, I/O, 정규식, 멀티스레딩 지원 및 기타 기능. C++는 Java, C#, D를 비롯한 많은 프로그래밍 언어에 영향을 미쳤습니다. C++는 C 언어 구문을 기반으로 하는 언어 계열에 속하므로 이 계열의 다른 프로그래밍 언어를 쉽게 마스터할 수 있습니다. JavaScript , PHP, Perl, Objective-C 등. 등, 모국어 자체 포함 - C. ()
C++ 언어가 존재하는 동안 안정적인 신화가 확립되어 쉽게 반박할 수 있습니다(여기: 파트 1 및 파트 2 참조).

언어의 역사와 표준 출시

1983

언어 제작자 - Bjorn Stroustrup, Bell Labs에서 C++의 초기 버전("C with Classes")을 소개했습니다.

1985

C++의 첫 번째 상용 릴리스, 언어가 현대적인 이름을 가짐

1986

Bjorn Stroustrup이 저술한 C++ 책 The C++ Programming Language 초판 출간

1998

국제 C++ 언어 표준 비준: ISO/IEC 14882:1998 "Standard for C++ Programming Language"

2003
2005

라이브러리 기술 보고서 ​​1(TR1)이 발표되었습니다. 공식적으로 표준의 일부는 아니지만 보고서에 포함되어야 하는 표준 라이브러리에 대한 확장이 설명되어 있습니다. 다음 버전 C++ 언어

2011

새로운 표준의 출시 - C++11 또는 ISO/IEC 14882:2011; 새로운 기준 TR1의 대부분을 포함하여 언어의 핵심에 대한 추가 및 표준 라이브러리에 대한 확장 포함

2014

C++14 표준 출시("국제 표준 ISO/IEC 14882:2014(E) 프로그래밍 언어 C++"); C++14는 대부분 버그 수정과 사소한 개선을 포함하는 C++11의 작은 확장으로 볼 수 있습니다.

2017

새 표준의 릴리스는 C++1z(C++17)입니다. 이 표준은 많은 변경 및 추가를 수행했습니다. 예를 들어 STD에는 C11 표준 라이브러리가 포함되어 있습니다. 파일 시스템, 실험적인 TS I 라이브러리의 큰 부분인 boost::filesystem을 기반으로 합니다.

2020

C++20은 C++ 프로그래밍 언어에 대한 ISO/IEC 표준의 비공식 이름으로, C++17 이후로 예상됩니다. N4800 표준의 초안.

철학 C++

Design and Evolution of C++(2007)에서 Bjorn Stroustrup은 C++를 설계할 때 따랐던 원칙을 설명합니다(약식 형식으로 제공).

  • 정적 데이터 유형, C의 효율성 및 이식성을 갖춘 범용 언어를 얻으십시오.
  • 다양한 프로그래밍 스타일을 직접적이고 종합적으로 지원합니다.
  • 프로그래머가 잘못 선택할 수 있는 기회를 주더라도 선택의 자유를 주십시오.
  • C와의 호환성을 최대한 유지하여 프로그래밍에서 C로 쉽게 전환할 수 있습니다.
  • C와 C++ 간의 불일치를 피하십시오. 두 언어에서 모두 유효한 구성은 각 언어에서 동일한 것을 의미해야 하며 동일한 프로그램 동작으로 이어집니다.
  • 플랫폼 종속적이거나 보편적이지 않은 기능은 피하십시오.
  • "사용하지 않는 것에 대해 비용을 지불하지 마십시오" - 어떤 언어 기능도 그것을 사용하지 않는 프로그램의 성능 저하를 일으키지 않아야 합니다.
  • 너무 복잡한 프로그래밍 환경을 요구하지 마십시오.

C 및 C++

C++ 구문은 C 언어에서 상속됩니다.공식적으로 C++의 원칙 중 하나는 C 언어와의 호환성을 유지하는 것이지만 실제로 이러한 언어의 표준화 그룹은 상호 작용하지 않으며 변경 사항이 make 는 상관관계가 없을 뿐만 아니라 이데올로기적으로 서로 근본적으로 모순되는 경우가 많습니다. 따라서 새로운 C 표준이 커널에 추가하는 요소는 C ++ 표준의 표준 라이브러리 요소이며 일반적으로 커널에는 없습니다(예: 동적 배열, 고정 경계가 있는 배열, 병렬 처리 기능). Stroustrup은 이 두 언어의 발전을 결합하는 것이 큰 이점이 될 것이라고 생각하지만 정치적인 이유로 거의 불가능합니다. 따라서 C와 C++ 간의 실질적인 호환성은 점차 상실될 것입니다.
이 예, 사용된 컴파일러에 따라 "C++" 또는 "C"가 출력됩니다.

프로그램 9.1

#포함 int main() ( printf("%s\n", (sizeof("a") == sizeof(char)) ? "C++" : "C"); 반환 0; )

이것은 C의 문자 상수가 int 유형이고 C++에서는 char 유형이지만 이러한 유형의 크기가 다르기 때문입니다.

애플리케이션 수명 주기 모델

라이프 사이클 소프트웨어생성의 필요성에 대한 결정이 내려진 순간부터 시작되는 기간입니다. 소프트웨어 제품운영을 완전히 중단하는 순간 종료됩니다. 이 주기는 소프트웨어(SW)를 구축하고 개발하는 과정입니다. 여러 모델이 있습니다 라이프 사이클.
캐스케이드 모델라이프 사이클(영어 폭포 모델)은 1970년 Winston Royce에 의해 제안되었습니다. 엄격하게 고정 된 순서로 프로젝트의 모든 단계를 순차적으로 구현합니다. 다음 단계로의 이행은 이전 단계의 작업이 완전히 완료되었음을 의미합니다. 요구 사항 생성 단계에서 정의된 요구 사항은 다음 형식으로 엄격하게 문서화됩니다. 위임 사항프로젝트 기간 동안 고정됩니다. 각 단계는 릴리스로 끝납니다. 완전한 세트다른 개발 팀에서 개발을 계속할 수 있도록 충분한 문서.
폭포수 모델에 따른 프로젝트 단계:

  1. 요구 사항의 형성;
  2. 설계;
  3. 구현;
  4. 테스트;
  5. 구현;
  6. 운영 및 유지 보수.

폭포수 모델에서 한 프로젝트 단계에서 다른 단계로의 전환은 이전 단계의 결과가 완전히 정확하다고 가정합니다. 대규모 프로젝트에서는 이를 달성하기가 거의 불가능합니다. 따라서 이러한 모델은 소규모 프로젝트의 개발에만 적합합니다. (W. Royce 자신은 이 모델을 고수하지 않고 반복 모델을 사용했습니다).
반복 모델
폭포수 모델의 대안은 70년대에 T. Gilb로부터 받은 반복 및 증분 개발(IID) 모델입니다. 진화 모델의 이름. IID 모델은 프로젝트의 수명 주기를 일련의 반복으로 나눕니다. 각 반복은 프로젝트 전체에 비해 더 작은 기능의 생성에 적용되는 모든 개발 프로세스를 포함하여 "미니 프로젝트"와 유사합니다. 각 반복의 목표는 모든 이전 및 현재 반복의 통합 콘텐츠에 의해 정의된 기능을 포함하여 소프트웨어 시스템의 작동 버전을 얻는 것입니다. 최종 반복의 결과에는 제품에 필요한 모든 기능이 포함됩니다. 따라서 각 반복이 완료되면 제품은 기능에 대한 증분(증가)을 수신하므로 진화적으로 발전합니다.


반복적 접근 방식의 다양한 변형은 대부분의 최신 개발 방법론에서 구현됩니다.

개발 프로세스 - RUP(Rational Unified Process)

합리적 통합 프로세스(RUP)(합리적인 통합 프로세스)은 Rational Software(IBM)에서 유지 관리하는 소프트웨어 개발 방법론입니다. 방법론은 비즈니스 모델링에서 완성된 프로그램의 테스트 및 커미셔닝에 이르기까지 모든 개발 단계에 대한 권장 사항을 제공합니다. UML(Unified Modeling Language)은 모델링 언어로 사용됩니다.
전체 제품 개발 수명 주기는 4단계로 구성되며 각 단계에는 하나 이상의 반복이 포함됩니다.

  • 초기 단계(Inception)
  • 프로젝트의 범위와 필요한 자원의 양을 결정합니다. 제품의 주요 요구 사항, 제한 사항 및 주요 기능이 결정됩니다. 위험이 평가됩니다. 행동 계획. 시작 단계가 끝나면 라이프사이클 목표 이정표의 달성이 평가되며, 이는 프로젝트를 계속하기 위한 이해 관계자 간의 동의를 의미합니다.

  • 동화
  • 요구 사항 문서. 실행 가능한 아키텍처의 설계, 구현 및 테스트. 조건 및 비용의 사양. 주요 위험 감소. 개발 단계를 성공적으로 완료한다는 것은 라이프사이클 아키텍처 이정표에 도달했음을 의미합니다.

  • 건설
  • "빌드" 단계에서는 제품의 대부분의 기능이 구현됩니다. 애플리케이션의 설계가 완료되고, 원천쓴. 빌드 단계는 시스템의 첫 번째 외부 릴리스와 초기 운영 기능 이정표로 끝납니다.

  • 구현(전환)
  • "구현" 단계에서 제품의 최종 버전이 생성되어 개발자로부터 고객에게 전달됩니다. 여기에는 베타 테스트 프로그램, 사용자 교육 및 제품 품질 보증이 포함됩니다. 품질이 사용자의 기대치나 시작 단계에서 설정한 기준에 맞지 않을 경우 구현 단계를 다시 반복합니다. 모든 목표를 달성한다는 것은 완제품(제품 출시)의 이정표에 도달하고 전체 개발 주기를 완료하는 것을 의미합니다.



« 정보 기술. 시스템 및 소프트웨어 엔지니어링. 라이프 사이클 프로세스 소프트웨어 도구» . 이 표준은 러시아 연방 기술 규제 및 계측을 위한 연방 기관에서 채택했으며 국제 표준 ISO/IEC 12207:2008과 유사합니다. 이 표준, 소프트웨어 산업에서 지침으로 사용할 수 있는 소프트웨어 수명 주기 프로세스에 대한 일반적인 프레임워크를 설정합니다. 표준은 제공하지 않습니다 특정 모델라이프 사이클. 그 조항은 소프트웨어 생성을 위한 모든 수명 주기 모델, 방법 및 기술에 공통적입니다. 이러한 프로세스에 포함된 활동 및 작업을 구현하거나 수행하는 방법을 지정하지 않고 수명 주기 프로세스의 구조를 설명합니다.

수업을 위한 프레젠테이션
메시지 주제
  • 자유 소프트웨어 재단(FSF)
  • 무료 소프트웨어 라이선스
  • 무료 소프트웨어 및 오픈 소스
  • 프로그래밍 언어 개발의 역사
  • C.C와 C++의 역사
  • 이야기
  • C++에 대한 비판
  • 유닉스의 역사
  • 나선형 소프트웨어 수명 주기 모델
  • UML(영어 통합 모델링 언어 - 통합 모델링 언어)
  • 마이크로소프트 솔루션 프레임워크
  • Windows에서 C/C++ 프로그래밍을 위한 IDE
  • C/C++ 컴파일러
  • Windows에서 콘솔 애플리케이션 생성
질문
  1. 폭포수 소프트웨어 개발 모델이 대규모 프로젝트에서 사용되지 않는 이유는 무엇입니까?
  2. 폭포수와 반복 개발 모델의 차이점은 무엇입니까?
  3. RUP(Rational Unified Process) 방법론에서 소프트웨어 개발 단계 나열

C++ 프로그래밍 언어의 기본과 미묘함을 배웁니다. 튜토리얼 실제 작업및 테스트. 프로그래밍 방법을 배우고 싶습니까? 그렇다면 당신은 바로 이곳에 있습니다 - 여기 무료 교육프로그램 작성. 경험이 있든 없든 이 프로그래밍 수업은 다양한 개발 환경에서 C++ 프로그램을 만들고 컴파일하고 디버깅하는 데 도움이 될 것입니다. 비주얼 스튜디오, 코드::블록, Xcode 또는 Eclipse.

많은 예제와 자세한 설명. 초보자(인형)와 고급 사용자 모두에게 적합합니다. 모든 것은 처음부터 가장 작은 세부 사항까지 설명됩니다. 이 수업(200개 이상)은 C ++뿐만 아니라 다른 프로그래밍 언어에서도 프로그래밍을 이해하는 데 좋은 기초/기초를 제공합니다. 그리고 그것은 절대적으로 무료입니다!

또한 C ++, SFML 그래픽 라이브러리 및 C ++에 대한 기술과 지식을 테스트하기 위한 50개 이상의 작업으로 게임을 단계별로 생성하는 방법을 다룹니다. 추가 보너스는 입니다.

카르마와 감사에 대한 재게시 +20!

챕터 번호 0. 소개. 작업 시작

1장. C++의 기초

2장. C++의 변수 및 기본 데이터 유형

챕터 번호 3. C++의 연산자

4장. C++의 변수 범위 및 기타 유형

챕터 번호 5. 프로그램에서 코드가 실행되는 순서입니다. C++의 루프, 분기

C/C++ 표준 라이브러리에는 콘솔(키보드 및 모니터)을 읽고 쓰기 위한 여러 기능이 포함되어 있습니다. 이러한 함수는 데이터를 단순한 문자 스트림으로 읽고 씁니다.

프로그래밍에서 사용되는 스트림(스트림)의 개념은 이 단어에 대한 일반적이고 일상적인 이해와 밀접한 관련이 있습니다. 입력 스트림은 물(정보)이 수영장(컴퓨터 메모리)에 들어가는 파이프, 출력 스트림은 물이 수영장에서 나가는 파이프와 비교할 수 있습니다. 이 파이프의 중요한 기능은 데이터가 한 번에 한 방향으로만 이동할 수 있다는 것입니다. 입구와 출구에 동일한 파이프를 사용하더라도 동시에 발생할 수 없습니다. 흐름의 방향을 전환하려면 흐름을 멈추고 일부 조치를 취한 다음 반대 방향으로 흐름을 유도해야 합니다. 스트림의 또 다른 특징은 거의 마르지 않는다는 것입니다. 가끔 마를 때도 있지만 시스템이 정상적으로 작동한다면 이 기간은 길지 않습니다.

printf() 표준 출력 함수

printf() 함수는 표준 출력 함수입니다. 이 기능을 사용하면 모니터 화면에 문자열, 숫자, 변수 값을 표시할 수 있습니다 ...

printf() 함수에는 stdio.h 파일에 프로토타입이 있습니다.
int printf(char *제어 문자열, ...);

성공하면 printf() 함수는 인쇄된 문자 수를 반환합니다.

제어 문자열에는 화면에 직접 표시되는 문자와 인수를 출력하는 방법을 결정하는 형식 지정자의 두 가지 유형의 정보가 포함됩니다.

printf() 함수는 형식이 지정된 출력 함수입니다. 이는 함수 매개변수에서 출력할 데이터의 형식을 지정해야 함을 의미합니다. 데이터 형식은 형식 지정자로 지정됩니다. 형식 지정자는 %로 시작하고 그 뒤에 형식 코드가 옵니다.

형식 지정자:

%와 함께 상징
%디 정수 십진수
%나 정수 십진수
%이자형 x.xx e+xx 형식의 십진수
%이자형 x.xx E+xx 형식의 십진수
%에프
%에프 십진 부동 소수점 xx.xxxx
%g %f 또는 %e 중 더 짧은 것
%G %F 또는 %E 중 더 짧은 쪽
%영형 8진수
%에스 문자열
%유 부호 없는 십진수
%엑스 16진수
%엑스 16진수
%% 기호 %
%피 바늘
%N 바늘

또한 l 및 h 수정자를 형식 명령에 적용할 수 있습니다.

%ld 긴 정수 인쇄
%hu 서명되지 않은 짧은 인쇄
%Lf 긴 이중 인쇄

형식 지정자에서 % 기호 뒤에 정밀도(소수점 뒤의 자릿수)를 지정할 수 있습니다. 정밀도는 다음과 같이 설정됩니다. %.n<код формата>. 여기서 n은 소수점 이하 자릿수이고,<код формата>- 위의 코드 중 하나.

예를 들어 float 유형의 변수 x=10.3563이 있고 그 값을 소수점 이하 3자리의 정확도로 표시하려면 다음과 같이 작성해야 합니다.

printf("변수 x = %.3f",x);

결과:
변수 x = 10.356

인쇄할 여백의 최소 너비를 지정할 수도 있습니다. 문자열이나 숫자가 지정된 필드 너비보다 크면 문자열이나 숫자가 전체로 인쇄됩니다.

예를 들어 다음을 작성하는 경우:

printf("%5d",20);

결과는 다음과 같습니다.
20

숫자 20은 줄의 맨 처음부터 인쇄되지 않았습니다. 필드의 사용하지 않는 위치를 0으로 채우려면 필드 너비 앞에 문자 0을 넣어야 합니다.

예를 들어:

printf("%05d",20);

결과:
00020

데이터 형식 지정자 외에도 제어 문자열에는 제어 문자가 포함될 수 있습니다.

\비 BS, 바닥 구멍
\에프 새 페이지, 페이지 번역
\N 새 줄, 줄 바꿈
\아르 자형 캐리지 리턴
\티 가로 탭
\V 세로 탭
\" 큰따옴표
\" 아포스트로피
\\ 백슬래시
\0 널 문자, 널 바이트
\ㅏ 신호
\N 8진 상수
\xN 16진수 상수
\? 물음표

대부분 \n 문자를 사용합니다. 이 제어 문자를 사용하면 새 줄로 이동할 수 있습니다. 프로그램의 예를 보면 모든 것을 이해할 수 있습니다.

프로그램 예제.

/* 예제 1 */
#포함

무효 메인(무효)
{
정수 a, b, c; // 기원 후 변수 a,b,c
a=5;
b=6;
c=9;
printf("a=%d, b=%d, c=%d",a,b,c);
}

프로그램 결과:
a=5, b=6, c=9

/* 예제 2 */
#포함

무효 메인(무효)
{
float x,y,z;

X=10.5;
y=130.67;
z=54;

Printf("객체 좌표: x:%.2f, y:%.2f, z:%.2f", x, y, z);
}

프로그램 결과:
객체 좌표: x:10.50, y:130.67, z:54.00

/* 예제 3 */
#포함

무효 메인()
{
intx;

X=5;
printf("x=%d", x*2);
}

프로그램 결과:
x=10

/* 예제 4 */
#포함

무효 메인(무효)
{
printf("\"따옴표로 묶은 텍스트\"");
printf("\n산소 함량: 100%%");
}

프로그램 결과:
"따옴표 안의 텍스트"
산소 함량: 100%

/* 예제 5 */
#포함

무효 메인(무효)
{
정수

A=11; // 10진수로 11은 16진수로 b와 같습니다.
printf("a-dec=%d, a-hex=%X",a,a);
}

프로그램 결과:
a-dec=11, a-hex=b

/* 예제 6 */
#포함

무효 메인(무효)
{
문자 ch1,ch2,ch3;

Ch1="A";
채널2="B";
ch3="C";

Printf("%c%c%c",ch1,ch2,ch3);
}

프로그램 결과:
알파벳

/* 예제 7 */
#포함

무효 메인(무효)
{
char *str="내 문자열입니다.";

Printf("%s입니다",str);
}

프로그램 결과:
이것은 내 라인입니다.

/* 예제 8 */
#포함

무효 메인(무효)
{
printf("안녕하세요!\n"); // 인쇄 후 새 행이 표시됩니다. - \n
printf("내 이름은 폴입니다."); // 이것은 새 라인에 인쇄됩니다.
}

프로그램 결과:
안녕하세요!
내 이름은 파벨입니다.

scanf() 표준 입력 함수

scanf() 함수는 형식이 지정된 입력 함수입니다. 이를 통해 표준 입력 장치(키보드)에서 데이터를 입력할 수 있습니다. 입력은 정수, 부동 소수점 숫자, 문자, 문자열 및 포인터일 수 있습니다.

scanf() 함수에는 stdio.h에 다음 프로토타입이 있습니다.
int scanf(char *제어 문자열);

이 함수는 값이 할당된 변수의 수를 반환합니다.

제어 문자열에는 형식 지정자, 공백 및 기타 문자의 세 종류가 포함됩니다. 형식 지정자는 % 문자로 시작합니다.

형식 지정자:

scanf() 함수(형식 지정자 %s)를 사용하여 문자열을 입력할 때 문자열은 첫 번째 공백까지 입력됩니다!! 저것들. "Hello world!" 문자열을 입력하면 scanf() 함수를 사용하여


scanf("%s",str);

그런 다음 str 배열에 저장될 결과 문자열을 입력한 후 "Hello"라는 단어로 구성됩니다. 함수는 첫 번째 공간까지 문자열을 입력합니다! 공백이 있는 문자열을 입력하려면 함수를 사용하십시오.

char *gets(char *buf);

gets() 함수를 사용하면 전체 문자열을 입력할 수 있습니다. gets() 함수는 문자가 나타날 때까지 키보드에서 문자를 읽습니다. 개행(\N). Enter 키를 누르면 줄 바꿈 문자 자체가 나타납니다. 함수는 buf에 대한 포인터를 반환합니다. buf - 입력 문자열에 대한 버퍼(메모리).

gets()는 이 글의 범위를 벗어났지만 키보드로 한 줄 전체를 입력하여 화면에 표시할 수 있는 예제 프로그램을 작성해 보겠습니다.

#포함

무효 메인(무효)
{
차버퍼; // 입력 문자열에 대한 배열(버퍼)

가져오기(버퍼); // 문자열을 입력하고 Enter 키를 누릅니다.
printf("%s", 버퍼); // 입력한 문자열을 화면에 출력
}

또 하나의 중요한 메모! scanf() 함수를 사용하여 데이터를 입력하려면 변수 자체가 아니라 변수의 주소를 매개변수로 전달해야 합니다. 변수의 주소를 얻으려면 변수 이름 앞에 &(앰퍼샌드)를 붙입니다. & 기호는 주소를 의미합니다.

주소은 무슨 뜻인가요? 나는 설명하려고 노력할 것이다. 프로그램에는 변수가 있습니다. 변수는 그 값을 컴퓨터 메모리에 저장합니다. 따라서 &로 얻은 주소는 변수 값이 저장된 컴퓨터 메모리의 주소입니다.

& 사용 방법을 보여주는 예제 프로그램을 살펴보겠습니다.

#포함

무효 메인(무효)
{
intx;

Printf("변수 x를 입력하세요:");
scanf("%d",&x);
printf("변수 x=%d",x);
}

이제 scanf() 함수의 제어 라인으로 돌아갑시다. 다시:

int scanf(char *제어 문자열);

제어 라인의 공백 문자는 입력 스트림에서 하나 이상의 공백을 건너뛰도록 지시합니다. 공백 외에도 탭 또는 줄 바꿈 문자를 사용할 수 있습니다. 널이 아닌 문자는 해당 문자를 읽고 버리라는 것을 나타냅니다.

두 입력 숫자 사이의 구분 기호는 공백, 탭 또는 개행 문자입니다. % 뒤와 형식 코드(형식 지정자) 앞의 *는 지정된 유형의 데이터를 읽도록 지시하지만 해당 값을 할당하지 않습니다.

예를 들어:

scanf("%d%*c%d",&i,&j);

50+20을 입력하면 i는 50으로, j는 20으로 설정되고 +는 읽고 무시됩니다.

format 명령은 읽을 최대 필드 너비를 지정할 수 있습니다.

예를 들어:

scanf("%5s",str);

입력 스트림에서 처음 5자를 읽도록 지정합니다. 1234567890ABC를 입력하면 str 배열에는 12345만 포함되고 나머지 문자는 무시됩니다. 구분 기호: 공백, 탭 및 개행 - 문자를 입력할 때 다른 모든 문자와 같이 처리됩니다.

제어 문자열에 다른 문자가 있는 경우 해당 문자를 확인하고 건너뛰기 위한 것입니다. 운영자별 10plus20 문자 스트림

scanf("%dplus%d",&x,&y);

x는 10, y는 20으로 지정하고 더하기 문자는 제어 라인에서 발생하기 때문에 건너뜁니다.

scanf() 함수의 강력한 기능 중 하나는 스캔 세트(scanset)를 지정하는 기능입니다. 검색 세트는 scanf()에서 읽은 문자를 비교할 문자 세트를 정의합니다. scanf() 함수는 검색 세트에 있는 한 문자를 읽습니다. 입력한 문자가 검색 세트에서 발견되지 않으면 scanf() 함수는 다음 형식 지정자로 이동합니다. 검색 세트는 대괄호로 묶인 문자 목록으로 정의됩니다. 여는 괄호 앞에 % 기호가 옵니다. 이를 예를 들어 살펴보겠습니다.

#포함

무효 메인(무효)
{
문자 str1, str2;
scanf("%%s", str1, str2);
printf("\n%s\n%s",str1,str2);
}
문자 집합을 입력해 보겠습니다.
12345abcdefg456

화면에 프로그램이 표시됩니다.
12345
abcdefg456

검색 세트를 지정할 때 하이픈 문자를 사용하여 공백과 입력 필드의 최대 너비를 지정할 수도 있습니다.

scanf("%10", str1);

검색 세트에 없는 문자를 정의할 수도 있습니다. 이러한 문자 중 첫 번째 문자 앞에는 ^ 기호가 옵니다. 문자 집합은 소문자와 대문자를 구분합니다.

scanf() 함수를 사용할 때 변수의 주소를 매개변수로 전달해야 함을 상기시켜 드리겠습니다. 위의 코드는 다음과 같이 작성되었습니다.

문자 str; // 80자 배열
scanf("%s",str);

str 앞에 &가 오지 않습니다. str이 배열이고 배열의 이름 str이 배열의 첫 번째 요소에 대한 포인터이기 때문입니다. 따라서 & 기호를 넣지 않습니다. 우리는 이미 주소를 scanf() 함수에 전달하고 있습니다. 간단히 말해서 str은 배열의 첫 번째 요소 값이 저장될 컴퓨터 메모리의 주소입니다.

프로그램 예제.

실시예 1
이 프로그램은 "당신은 몇 살입니까?:"라는 쿼리를 표시하고 입력을 기다립니다. 예를 들어 숫자 20을 입력하면 프로그램은 "You are 20 years old."라는 문자열을 표시합니다. scanf() 함수를 호출할 때 scanf() 함수는 변수의 주소를 필요로 하기 때문에 age 변수 앞에 &를 붙였습니다. scanf() 함수는 다음에 따라 입력된 값을 씁니다. 지정된 주소. 우리의 경우 입력된 값 20이 age 변수의 주소에 기록됩니다.

/* 예제 1 */

#포함

무효 메인(무효)
{
정수 나이;

Printf("\n몇살이세요?:");
scanf("%d",&나이);
printf("당신은 %d세입니다.", age);
}

실시예 2
계산기 프로그램. 이 계산기는 숫자만 추가할 수 있습니다. 100+34를 입력하면 프로그램은 100+34=134의 결과를 반환합니다.

/* 예제 2 */

#포함

무효 메인(무효)
{
정수 x, y;

Printf("\n계산기:");
scanf("%d+%d", &x, &y);
printf("\n%d+%d=%d", x, y, x+y);
}

실시예 3
이 예는 읽기 필드 너비를 설정하는 방법을 보여줍니다. 이 예에서 필드 너비는 5자입니다. 더 많은 문자가 포함된 문자열을 입력하면 5번째 이후의 모든 문자가 삭제됩니다. scanf() 함수 호출에 주의하십시오. 배열 이름의 이름이 배열의 첫 번째 요소 주소이기 때문에 & 기호가 배열 이름 앞에 오지 않습니다.

/* 예제 3 */

#포함

무효 메인(무효)
{
문자 이름;

Printf("\n사용자 이름을 입력하세요(최대 5자):");
scanf("%5s", 이름);
printf("\n%s을(를) 입력했습니다", 이름);
}

실시예 4
이 문서의 마지막 예는 조회 세트를 사용하는 방법을 보여줍니다. 프로그램 시작 후 2~5 사이의 숫자를 입력하세요.

/* 예제 4 */

#포함

무효 메인(무효)
{
숯불;

Printf("당신의 점수는 2,3,4,5입니다:");
scanf("%", &bal);
printf("\n점수 %c", bal);
}

컴퓨터는 아마도 인류가 처분할 수 있는 가장 다재다능한 도구일 것입니다. 그들은 놀라운 계산을 수행 할 수 있으며 저장할 수 있습니다. 큰 금액정보는 행성의 다른 부분에 완전히 있으며 동시에 위치에 관계없이 쉽게 교환할 수 있습니다. 컴퓨터는 일을 더 쉽게 만든다 일상 업무, 그리고 사람이 수행하기에는 매우 지루하고 지루한 많은 일상적인 프로세스를 자동화할 수 있습니다. 컴퓨터가 할 수 있는 일은 많지만 여전히 컴퓨터는 인간만큼 지능적이지 않습니다. 가장 단순한 프로세스라도 자동화하려면 정확히 무엇을 해야 하는지 컴퓨터에 명확하고 모호하지 않게 알려야 합니다. 불행히도 우리의 언어와 컴퓨터 언어는 완전히 다릅니다. 따라서 기계와 사람 사이에는 심각한 언어 장벽이 있습니다. 어떻게든 극복해야 합니다. 그렇지 않으면 컴퓨터가 우리를 이해하지 못합니다. 그리고 컴퓨터는 우리를 이해하지 못하지만 스스로 아무 것도 하지 않을 것입니다. 사람과 컴퓨터 간의 통신 수단으로 수많은 프로그래밍 언어가 발명되었습니다. 프로그래밍 언어의 도움으로 우리는 프로그램을 만들고 컴퓨터는 이미 프로그램과 직접 작동합니다. 프로그램 자체는 컴퓨터가 이해하고 실행할 수 있는 일련의 명령입니다.

프로그램 유형

정확히 우리가 원하는 컴퓨터와 효과적으로 의사 소통하기 위해 다양한 프로그래밍 언어가 있습니다.

프로젝트 유형에 따라 프로그래밍 언어를 선택할 때 고려해야 할 많은 요소가 있습니다. 다음은 가장 주목할만한 요소 목록입니다.

컴파일, 해석 및 JIT 컴파일

컴파일 프로세스는 프로그래밍 언어로 작성된 코드를 대상 머신의 모국어로 번역합니다. 이 과정을 수행하는 프로그램을 컴파일러라고 합니다. 컴파일은 특히 컴파일러가 최적화에 효율적인 경우 코드를 상당히 빠르게 실행할 수 있습니다. 그러나 사실은 결과 코드가 다양한 운영체제, 그리고 컴파일 과정은 시간이 걸리고 코드가 많을수록 컴파일 과정이 길어집니다. 프로그램 코드를 변경할 때 컴파일한 다음 실행해야 한다는 점은 주목할 가치가 있습니다.

해석된 프로그래밍 언어는 인터프리터라는 프로그램에 의해 읽고 동일한 프로그램에 의해 실행됩니다. 해석된 프로그래밍 언어는 인터프리터와 같은 다른 운영 체제에서 실행할 수 있으며 컴파일 시간이 길지 않습니다. 그러나 해석 언어로 작성된 프로그램은 동등한 컴파일된 프로그램보다 훨씬 느린 경향이 있습니다.

마지막으로 소위 즉석 컴파일(또는 JIT 컴파일)입니다. 이러한 언어는 프로그램이 실행될 때 빠르게 컴파일됩니다. 일반적으로 JIT 언어로 작성된 프로그램은 최적화되지 않으므로 컴파일 프로세스의 속도가 빨라지고 성능과 플랫폼 간 균형이 복원됩니다.

높거나 낮은 프로그래밍 수준

저수준 언어는 대부분 하드웨어와 직접 작동하므로 장치 드라이버를 작성하는 데 가장 적합합니다. 드라이버는 하드웨어를 제어하고 하드웨어에 직접 액세스할 수 있는 프로그램입니다. 그러나 저수준 언어로 작성된 프로그램은 일반적으로 다른 플랫폼으로 이식하기 어렵습니다. 따라서 각 OS에 대해 동일한 장치에 다른 드라이버가 함께 제공됩니다. 저수준 프로그래밍 언어는 거의 항상 컴파일됩니다.

고급 언어에서는 언어의 개념에 중점을 둡니다. 즉, 이러한 프로그래밍 언어는 데이터를 배열, 문자열, 객체 등으로 표현하는 것과 같이 이해하기 쉬워야 합니다. 일반적으로 고급 언어는 저수준 언어보다 이해하기 쉽습니다. 그리고 일반적으로 저수준 언어보다 고급 언어로 프로그램을 개발하는 것이 훨씬 쉽고 빠릅니다. 보시다시피 다른 수준프로그래밍 언어는 완전히 다른 작업을 위해 설계되었으며 다단계 언어의 기능을 비교할 가치가 없으며 의미가 없습니다.

프로그래밍 언어의 데이터 유형 시스템

모든 프로그래밍 언어에는 프로그래밍 언어가 따라야 하는 다양한 규칙을 정의하는 사양이 있습니다. 일부 언어에는 데이터 유형이 없으므로 적용되지 않습니다. 그러나 대부분의 언어(C++ 포함)에는 데이터 유형이 있으므로 이 정보가 유용할 것입니다.

강하거나 약한 데이터 유형 시스템

약한 입력 시스템은 어떤 제한도 두지 않으며 프로그래머는 이를 따라야 합니다. "라고 약한 시스템 data" 내 말은 그러한 데이터 시스템을 가진 언어가 사용 가능한 데이터 유형 캐스트를 엄격하게 규제하지 않는다는 것을 의미합니다. 예를 들어, 문자열이나 문자가 숫자 대신 곱셈 함수에 전달되면 문자열에 a 숫자. 게다가 이 무의미한 곱셈의 결과는 예측할 수 없습니다. 프로그래밍 언어가 강력한 형식이면 컴파일 단계에서 컴파일러가 오류를 보고하고 프로젝트 빌드 프로세스를 중지합니다. 예를 들어,

// 샘플 C++ 프로그램 #include 네임스페이스 std 사용 int main()(문자열 = "예제"; int 번호 = 5; cout<< string * number << endl; // умножаем строку на число }

결과적으로 컴파일러는 오류를 보고합니다.

오류: 'char' 및 'int' 유형의 피연산자가 이진 'operator*'에 대해 유효하지 않습니다.

우리는 강력하지 않은 유형의 프로그래밍 언어인 php에서 동일한 작업을 시도할 것입니다. 변수를 선언할 때에도 데이터 유형을 지정할 필요가 없습니다.

이 코드를 실행한 결과는 0이 됩니다. 문자열에 숫자를 곱하는 것이 불가능해 보이지만 오류는 발생하지 않습니다. 그러나 PHP에서는 모든 것이 가능합니다. PHP 언어 컴파일러는 오류를 보고하지 않고 스크립트가 작동하고 결과를 제공하기도 합니다. 프로그램이 1000줄의 코드로 구성된 경우 이 오류를 찾기가 어려울 것입니다. 이것은 "약한 데이터 유형 시스템"을 가진 프로그래밍 언어의 대표적인 예입니다. 즉, 그러한 부조리한 작업을 방지하는 것은 전적으로 프로그래머의 책임입니다.

정의되거나 정의되지 않은 데이터 유형

이것은 컴파일된 언어와 해석된 언어 모두에 적용됩니다. 많은 언어는 변수 유형에 대한 명시적인 정의가 필요하므로 불확실성이 없으며 컴파일러와 인터프리터는 무엇을 해야 하는지 명확하게 알고 있습니다. 일부 프로그래밍 언어는 변수 유형을 명시적으로 정의할 필요가 없습니다. 데이터 유형은 변수의 내용에 따라 자동으로 결정됩니다.

정적 또는 동적 데이터 유형

언어가 정적으로 유형이 지정되면 컴파일러/인터프리터는 컴파일/해석 프로세스 전에 유형 검사를 한 번 수행합니다. 데이터 유형이 동적이면 데이터 유형은 런타임에 확인됩니다.

안전하거나 안전하지 않은 데이터 유형 시스템

예측할 수 없는 결과나 오류가 발생할 수 있는 상황이 있습니다. 안전한 언어는 그러한 상황이 발생하지 않도록 최대한 많은 제한을 도입할 것입니다. 안전하지 않은 언어는 프로그래머에게 모든 책임이 있습니다.

이러한 요소는 하나의 프로그래밍 언어와 여러 프로그래밍 언어의 특징을 나타낼 수 있습니다.

지원되는 프로그래밍 패러다임

프로그래밍 패러다임은 프로그래밍 언어가 지원하는 방법론 또는 프로그래밍 방식입니다. 다음은 주요 패러다임 목록입니다.

선언적 패러다임

선언적 프로그래밍 언어는 목적을 위한 수단보다 목적에 더 중점을 둡니다. 달성해야 할 것을 나타내는 것으로 충분하며 사용할 수단을 나타낼 필요는 없습니다. 이 패러다임은 자신의 코드를 작성할 때 발생할 수 있는 원치 않는 부작용을 방지합니다.

기능적 패러다임

함수형 프로그래밍은 수학 방정식과 함수의 관점에서 문제를 해결하려고 시도하는 선언적 프로그래밍의 하위 집합입니다. 함수형 프로그래밍은 명령형 언어와 달리 변수와 객체를 공유되지 않는 데이터로 취급합니다.

일반화된 패러다임

일반 프로그래밍은 정의할 데이터 유형의 관점에서 알고리즘을 작성하는 데 중점을 둡니다. 즉, 동일한 알고리즘이 다른 유형의 데이터에 대해 작동할 수 있습니다. 이 접근 방식은 매우 강력한 도구가 될 수 있지만 제대로 구현된 경우에만 가능합니다.

명령형 패러다임

명령형 언어를 사용하면 프로그래머가 작업을 완료하는 데 필요한 명령 목록을 컴퓨터에 제공할 수 있습니다. 명령형 프로그래밍 언어는 선언적 프로그래밍 언어와 반대입니다.

구조적 패러다임

구조적 프로그래밍 언어는 어떤 형태의 코드, 즉 계층 구조를 제공하는 것을 목표로 합니다. 코드의 구조가 명확하게 보이면 명령문이 실행되는 순서가 직관적이 됩니다. 이러한 언어는 일반적으로 C 및 C++에 정의된 잘 알려진 goto 연산자와 같이 코드의 한 부분에서 다른 부분으로 "점프"하는 것을 싫어합니다.

절차적 패러다임

절차적 프로그래밍 언어는 절차 또는 서브루틴의 개념을 지원하는 구조화된 프로그래밍 언어를 말합니다.

객체 지향 패러다임

객체 지향 프로그래밍(OOP로 약칭되기도 함)은 프로그램을 "객체"로 표현하는 구조화된 프로그래밍의 하위 집합입니다. 이 패러다임을 사용하면 코드를 재사용할 수 있고 이해하기 쉽습니다.

표준화

언어에 공식 표준이 있습니까? 표준화는 다양한 컴파일러/인터프리터가 프로그램을 충돌 없이 이해할 수 있도록 하는 데 매우 중요합니다. 일부 언어는 ANSI(American National Standards Institute)에서 표준화하고 다른 언어는 ISO(International Organization for Standardization)에서 표준화합니다. 모든 프로그래밍 언어는 표준화되어야 합니다. 그렇지 않으면 구문에서 옳고 그른 것에 대해 동의할 수 없습니다.

C++ 프로그래밍 언어를 특성화하자

프로그래밍 언어의 주요 특징을 살펴보았으니 이제 C++ 프로그래밍 언어가 만족하는 요소를 알아보자.

C++는 ISO 표준 프로그래밍 언어입니다.

한동안 C++에는 공식적인 표준이 없었지만 1998년부터 ISO 위원회에서 C++를 표준화했습니다.

C++ 컴파일 언어.

C++는 기계어로 직접 컴파일되어 세계에서 가장 빠른 언어 중 하나입니다.

C++는 강력한 형식의 언어입니다.

C++는 프로그래머가 자신이 하는 일을 알고 있고 상상에 의해서만 제한되는 엄청난 가능성을 허용한다는 것을 의미합니다.

C++는 정적 및 동적 데이터 유형을 지원합니다.

따라서 데이터 유형 검사는 컴파일 시간이나 런타임에 수행할 수 있습니다. 그리고 이것은 C++의 유연성을 다시 한 번 증명합니다.

C++는 많은 패러다임을 지원합니다.

C++는 다른 많은 패러다임 중에서 절차적, 일반 및 객체 지향 프로그래밍 패러다임을 지원합니다.

C++는 이식 가능한 프로그래밍 언어입니다.

세계에서 가장 많이 사용되는 언어 중 하나이자 개방형 언어인 C++에는 다양한 플랫폼에서 실행되는 광범위한 컴파일러가 있습니다. C++ 표준 라이브러리 코드는 많은 플랫폼에서 작동합니다.

C++는 C 언어와 완벽하게 호환됩니다.

C++에서는 C 라이브러리를 사용할 수 있으며 제대로 작동합니다.