首页 > 编程语言 >第 1 章 C++编程基础 Basic C++ programming

第 1 章 C++编程基础 Basic C++ programming

时间:2023-03-11 16:55:15浏览次数:38  
标签:cout int programming C++ 运算符 vector Basic include size

1.1 如何撰写C++程序_How to Write a C++ Program

练习1.4,在终端上让用户输入fast name和last name并打印出来

练习1.4
#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main()
{
    vector<string> user_name(2);
    cout << "Please enter your first name: ";
    cin >> user_name[0];
    cout << "hi," << user_name[0]
         << " Please enter your last name: ";
    cin >> user_name[1];
    cout << "\nHello, "
         << user_name[0] << " " << user_name[1]
         << "...and goodbye!\n";

    return 0;
}
编译后终端显示结果:

Please enter your first name: Kyla
hi,Kyla Please enter your last name: Crane

Hello, Kyla Crane...and goodbye!

1.2对象与初始化_Defining and Initializing a Data Object

一般来讲内置数据类型(如bool,int,float,char等)可以直接用assignment运算符(=)进行初始化
int val = 0;
float score = 88.8;
bool real = true;
string name = "eva";
也可以使用构造函数语法(constructor syntax)进行初始化
int val(0);
float score(88.8);
bool real(true);
string name("eva");
当对象需要多个初值时,(=)方法就没法完成任务了,于是可以用“多值初始化”的构造函数初始化语法(constructor initialization syntax),这里用复数(complex number)类为例,它有实部虚部两个初值
complex<double> temp(0.0, 7);
若有类似最大最小值,圆周率之类的长久不变的常量,可以使用const定义
const double PI = 3.1415926; //若在使用中企图为const对象指定新值,会产生编译错误

一些常见的转义字符(escape cequence):

  • '\n'——换行符(newline)
  • '\t'——制表符(tab)
  • '\0'——null
  • '''——单引号(single quote)
  • '"'——双引号(souble quote)
  • '\'——反斜线(backslash)

1.3撰写表达式_Writing Expressions

表达式就是一个或多个常量、变量和运算符的组合:

  • 赋值运算符:=
  • 条件运算符:?:
  • 算数运算符:+、-、*、/、%
  • 关系运算符:==、!=、<、>、<=、>=
  • 逻辑运算符:OR(||)、AND(&&)、NOT(!)
  • 复合赋值运算符:+=、-=、*=、/=、%=
    运算符的优先级:
    image

1.4条件语句和循环语句_Writing Conditional and Loop Statements

  1. 条件语句:
if语句
if ( 0 <= val )
    --val;	//如果条件表达式为true,则执行该语句

//如果在条件判断之后想要执行多条语句需要加语句块
if ( 0 <= val ) { //语句块由此开始
    --val;
    print = val;
    } //语句块由此结束
if-else
//else自句与if配合使用,当if的条件判断为flase时执行else语句块
if (val % 2) {
    std::cout << "奇数";
} else {
    std::cout << "偶数";
}
else-if
//else-if的判断和if的判断属于同一层平行关系,只能有一个为true,其他的都为false
if (conditionOne) { //若为true后续的else-if都不再执行判断
    std::cout << "飞禽";
} else if (conditionTwo) {
    std::cout << "走兽";
} esle if (conditionThree) {
    std::cout << "游鱼";
} else { //若所有的判断都为false执行该语句块
    std::cout << "虫豸";
}
switch
//switch可以用来替换一长串的if-else-if的子句
switch (number) { //switch的条件判断要为整数或者枚举
    case 1:
        std::cout << "飞禽\n";
        break;
    case 2:
        std::cout << "走兽\n";
        break; //break,执行满足条件的case标签语句块后跳出switch;
    case 3:
        std::cout << "游鱼\n";
        break;
    default: //若所有的case标签都不符合,则执行default标签
        std::cout << "虫豸\n";
        break;
}
//若上述代码不加break且number == 2,输出结果为:
//走兽
//游鱼
//虫豸
  1. 循环语句:
while
//只要条件判断表达式为true,则语句块就会不断执行
int val(0);
while ( val < 10 ) {
    cout << val << ' ';
    ++val;
}
//打印结果为:0 1 2 3 4 5 6 7 8 9

//continue,结束当前循环迭代,进入下一次循环
int val(0);
while ( val < 10 ) {
    if ( val % 2 ) { //奇数为true
        ++val;
        continue; //奇数不打印,只打印偶数
    }
    cout << val << ' ';
    ++val;
}
//打印结果为:0 2 4 6 8

//break,直接跳出循序且不再进入循环
int val(0);
while ( val < 10 ) {
    if ( 5 == val ) { //当val为5时直接跳出循环
        break;
    }
    cout << val << ' ';
    ++val;
}
//打印结果为:0 1 2 3 4

1.5如何运用Array和Vector_How to Use Arrays And Vectors

注意,这里的array指的是C++的内置数组类型,并非STL库的array容器

  • 定义
    定义array时需指定元素类型(element type)、名称(name)和尺度大小(必须为常量表达式(constant expression))
    const int size = 18;
    int arr[size];
    定义vector时同上,但大小不一定为常量表达式
    #include <vector> //要包含容器所在头文件
    vector<int> arr(size);
  • 访问
    array和vector都可以通过下标运算符([])来进行索引操作访问指定元素
    arr[0] = 1; //指定第一个元素为1
    迭代array和vector中的多个元素时,通常用到for循环
for循环访问array和vector
/*
for (init-statement; condition; expression) {
    statement
}
init-statement:进入循环前执行,多用于设置初值,只执行一次
condition:循环判断条件
expression:每次迭代结束执行一次
以上三个元素可以留空,但';'必须写:
for ( ; ; ) {
statement
}
*/

for (int i = 0; i < size; ++i) {
    cout << arr[i] << ' '; //for循环中使用[]运算符访问多个元素
}
- 初始化列表
array和vector初始化列表
const int size = 18;
//array:初始化列表元素不能超过size,若有不足剩余位置自动初始化为0
int arr_1[size] = {
    1, 2, 3,
    3, 4, 7,
    2, 5, 12,
    3, 6, 10,
    4, 9 16,
    5, 12, 22,
};
//若是不指明array大小,编译器会根据初始化列表算出大小为18
int arr_2[] = {
    1, 2, 3,
    3, 4, 7,
    2, 5, 12,
    3, 6, 10,
    4, 9 16,
    5, 12, 22,
};

//vector不支持上述初始化列表写法,有个类似的冗长写法
vector<int> val_1(size);
val_1[0] = 1;
val_1[1] = 2;
// ...
val_1[size - 1] = 22;
//另一种是用array来初始化vector
vector<int> val_2(arr_1, arr_1 + size);

1.6指针带来的弹性_Pointers Allow for Flexibility

通常,指针具有以下形式:
type_of_object_to * name_of_pointer_object
以int为例,我们要的指针要指向int,因此命名为pi,并赋初值为0:
int *pi = 0; //此时pi不指向任何对象,称之为null指针,操作null指针会出现段错误

操作指针
int ival = 1024;
int *pi = 0;
pi = &ival; //指针pi通过取址运算符(&)指向ival的内存地址
cout << *pi << ' ' << ival; //通过指针,读取ival的值,打印1024 1024
*pi = 2048; //通过指针更改ival值
cout << *pi << ' ' << ival; //打印2048 2048

//指针的成员选择运算符不一样
vector<int> fibonacci;
for (int i = 0, i < 10; ++i) {
    if (i < 2) {
        fibonacci.push_back(1);
    } else {
        fibonacci.push_back(fibonacci[i - 1] + fibonacci[i - 2]);
    }
}
vector<int> *pv = &fibonacci;
//查看第二个元素是否为1
if (! fibonacci.empty() && (1 == fibonacci[1])) //这里使用dot成员选择运算符
if (pv && ! pv->empty() && (1 == (*pv)[1])) //这里使用arrow成员选择运算符

1.7文件读写_Writing and Reading Files

要对文件进行读写操作,要包含fstream头文件:
#include <fstream>

打开文件的模式
//以输出模式打开一个可供输出的文件
//若不存在text.txt则会产生一个文件
//若存在text。txt则会清空数据
ofstream outfile("text.txt");
//若不想清空数据,则需要以追加模式打开,新数据会加到文件末尾
ofstream outfile("text.txt", iios_base::app);

//以读取模式打开文件
ofstream infile("test.txt");

//以读写模式打开文件
fstream iofile("text.txt", ios_base::in | ios_base::app); //此时所在位置在文件末尾
iofile.seekg(0); //将文件重新定位到文件起始位置

练习1.5用户输入姓名(不小于两个字符)并响应信息。请以两种方式实现:第一种C-style字符串,第二种使用string对象

C-style
//C-style需要手动分配固定的空间,并且不记录自生长度,需要便利其中元素(strlen()可以实现)
#include <iostream>
#include <iomanip>
#include <cstring>

using namespace std;

int main()
{
     const int maxSize = 128;
     char userName[maxSize];
     cout << "Please enter your name: ";
     cin >> setw(maxSize) >> userName; // setw()需要填充多少字符串,默认' '

     switch (strlen(userName))
     {
     case 1:
          cout << "你好," << userName << "单字名,有个性!\n";
          break;
    //其他长度的名字就不写了
     case 127:
          cout << "名也太长了,你写名字要多久?\n";
          break;

     default:
          cout << "你好," << userName << "祝你幸运每一天\n";
          break;
     }
     return 0;
}
string
//string的存储空间会根据存储的元素数量动态变化
#include <iostream>
#include <string>

using namespace std;

int main()
{
     string userName;
     cout << "Please enter your name: ";
     cin >> userName;

     switch (userName.size())
     {
     case 1:
          cout << "你好," << userName << "单字名,有个性!\n";
          break;
    //其他长度的名字就不写了
     case 127:
          cout << "名也太长了,你写名字要多久?\n";
          break;

     default:
          cout << "你好," << userName << "祝你幸运每一天\n";
          break;
     }
     return 0;
}

练习1.6从标准输入设备读一串整数到array和vector,并遍历求和取平均值打印

array
#include <iostream>

using namespace std;

int main()
{
     const int arraySize = 128;
     int ia[arraySize];
     int ival;
     int icnt = 0;

     while (icnt < arraySize && cin >> ival)
     {
          ia[icnt++] = ival;
          if ('\n' == cin.get())
               break;
     }
     int sum = 0;
     for (int i = 0; i < icnt; ++i)
     {
          sum += ia[i];
     }
     int average = sum / icnt;

     cout << "Sum: " << sum
          << "\nAverage: " << average << endl;
     return 0;
}
vector
#include <iostream>
#include <vector>

using namespace std;

int main()
{
     vector<int> ivec;
     int ival;
     while (cin >> ival)
     {
          ivec.push_back(ival);
          if ('\n' == cin.get())
               break;
     }

     int sum = 0;
     for (int i = 0; i < ivec.size(); ++i)
     {
          sum += ivec[i];
     }
     int average = sum / ivec.size();
     cout << "Sum: " << sum
          << "\nAverage: " << average << endl;

     return 0;
}

练习1.7打开已有数据的文本文件text.txt,读取数据到vector中并遍历打印,然后用泛型算法sort()(头文件为algorithm)排序后输出到另一个文件sort.txt中

读写文件
#include <iostream>
#include <vector>
#include <string>
#include <fstream>
#include <algorithm>

using namespace std;

int main()
{
     // 判断文件打开是否正常
     ifstream inFile("./text.txt");
     if (!inFile)
     {
          cerr << "opps! Unable to open input file\n";
          return -1;
     }
     ofstream outFile("./sort.txt");
     if (!outFile)
     {
          cerr << "opps! Unable to open output file\n";
          return -2;
     }

     string word;
     vector<string> text;
     while (getline(inFile, word)) // 将数据读出来,按行读取打印出的排版好看些
     {
          text.push_back(word);
     }

     int index = 0;
     cout << "Unsorted text: \n";
     for (; index < text.size(); ++index)
     {
          cout << text[index] << '\n';
     }
     cout << endl;

     sort(text.begin(), text.end()); //按行排序,行内单词顺序不变
     outFile << "Sorted text: \n";
     for (index = 0; index < text.size(); ++index)
     {
          outFile << text[index] << '\n';
     }
     outFile << endl;

     return 0;
}

标签:cout,int,programming,C++,运算符,vector,Basic,include,size
From: https://www.cnblogs.com/null-lei/p/17181659.html

相关文章

  • MySQL :: MySQL Installation Guide :: 7.6.1 Basic Steps for MySQL Server Deployme
    MySQL::MySQLInstallationGuide::7.6.1BasicStepsforMySQLServerDeploymentwithDockerWarningTheMySQLDockerimagesmaintainedbytheMySQLteamar......
  • 对C++做爬虫的代码进行简单分析
    有这样一段代码#include<stdio.h>#include<tchar.h>#include<windows.h>#include<urlmon.h>#pragmacomment(lib,"urlmon.lib")intmain(){ TCHARurl[]=TE......
  • C# 调用 c++ DLLL试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B
     网上各种设置目标编译平台为x86都解决不了问题,有可能是DLL依赖的文件的位数有问题1、先查一下被调用的DLL用了那些DLLvs的开发人员工具控制台输入 dumpbin/depe......
  • C++ 标准库中的 vector
    标准库类型vector表示对象的集合,其中所有对象的类型都相同。集合中的每个对象,都有一个与之对应的索引,索引用于访问对象。vector是一个类模板,编译器根据模板创建类或者函......
  • C++ | 計算兩點的角度
    #include<math.h>#include<iostream>#include<stdio.h>#definePI3.141592654#defineEARTH_RADIUS6378.137//地球近似半徑u......
  • C++协程
    参考C++那些事之C++20协程#include<iostream>#include<coroutine>structgenerator{structpromise_type{intcurrent_value;std::suspend......
  • C/C++小学生测验[2023-03-10]
    C/C++小学生测验[2023-03-10]题目2:小学生测验面向小学1~2年级学生,随机选择两个整数和加减法形成算式要求学生解答。功能要求:(1)进入测试之前先输入用户名、密码登录,......
  • C++的常量
    在C++中,常量可以分为以下几种类型:1、整型常量(IntegerConstants):整数常量,可以是十进制、八进制或十六进制,例如42、052、0x2A等。整型常量可以使用后缀来指定类型。u......
  • 如何通过C++ 将数据写入 Excel 工作表
    直观的界面、出色的计算功能和图表工具,使Excel成为最流行的个人计算机数据处理软件。在独立的数据包含的信息量太少,而过多的数据又难以理清头绪时,制作成表格是数据管理的最......
  • C++ 数组 指针小记
    voidfun(int*aa){return;}int*a=newint[16];memset(a,0,16);fun(a);voidfun(int*aa){return;}inta[16]={0};fun(a);  总之,两......