C程序设计语言第一章练习题1-16

练习1-16 修改打印最长文本行的程序的主程序main,使之可以打印任意长度的输入行的长度,并尽可能多地打印文本。

#include <stdio.h>
#define MAX_LINE    10


int getline(char[], int);
void copy(char to[], const char from[]);

int main() {

    int len;
    int max;
    char line[MAX_LINE];
    char longest[MAX_LINE];

    max = 0;
    while ((len = getline(line, MAX_LINE)) > 0) {
        if (len > max) {
            max = len;
            copy(longest, line);
        }
    }
    if (max > 0) {
        printf("%s", longest);
    }
}

int getline(char s[], int len) {

    int c, i;
    // 直接将行中的字符复制到字符数组s中
    for (i = 0;; ++i) {
        c = getchar();
        if (c == EOF || c == '\n') break; // 当前行少于 len
        if (i < len - 1) s[i] = (char) c;  // 当前行超出 len
    }
    if (i > len - 1)
        s[len - 1] = '\0'; // 如果行的长度大于 len 在s结尾处写入 \0
    else
        s[i] = '\0'; // 如果行长度小于 len,在长度i的位置写入 \0
//    s[(i > len - 1) ? (len - 1) : i] = '\0'; // 以上 if else 使用三元运算符的简写形式
    return i;
}


void copy(char to[], const char from[]) {
    for (int j = 0;; ++j) {
        to[j] = from[j];
        if (from[j] == '\0') break;
    }
}

解题思路参考:https://www.cnblogs.com/DeadGardens/p/4781076.html

全国2020年10月高等教育自学考试C++程序设计试题《程序设计题》答案,答案是本人自己做的解答,不保证答案的正确性和完整性,内容仅供学习交流参考。
原题目如下:

五、程序设计题:本大题共2小题,第1小题5分,第2小题10分,共15分。
46.编写一个函数模板,实现将n个数据进行由小到大排序的功能。
47.有一个School类,保护数据成员Number和Name分别表示人的编号和姓名。学生类Student是School的派生类,新增数据成员班号Class_Num和总成绩Total.请用C++代码描述这两个类,并用Student
类的成员函数Display实现学生张小蒙的编号(2020150601)、姓名、班级(四班)和总成绩678的输出(要求编写派生类的构造函数)。

46题考查了模板函数的使用,以及基本的数据排序。
此函数实现可以参考教材第九章结9-3的示例程序。下载该文件sort.cpp.txt (UTF-8编码)。

// 交换数据函数
template<class T>
void mySwap(T &t1, T &t2) {
    T temp = t1;
    t1 = t2;
    t2 = temp;
}
// 比较函数
template<class T>
int myCompare(T t1, T t2) {
    if (t1 > t2) { return 1; }
    if (t1 < t2) { return -1; }
    if (t1 == t2) { return 0; }
}
// 排序函数
template<class T>
void mySort(T arr[], int length) {
    int  j;
    for(int i=0; i<length; i++) {
        j = i;
        while( j > 0 && myCompare<T>(arr[j], arr[j-1]) < 0) {
            mySwap(arr[j], arr[j-1]);
            j--;
        }
    }
}

验证以上程序:

int main() {
    int arr[10] = {1, 2, 3, 5, 4, 6, 9, 8, 7, 10};

    mySort(arr, 10);

    for (int i = 0; i < 10; ++i) {
        cout << arr[i] << ",";
    }
    cout << endl;

    char arr1[10] = {'a', 'c', 'b', 'd', 'f', 'e', 'h', 'i', 'j', 'g'};

    mySort(arr1, 10);

    for (int i = 0; i < 10; ++i) {
        cout << arr1[i] << ",";
    }
    cout << endl;

    return 0;
}

输出内容为:

1,2,3,4,5,6,7,8,9,10,
a,b,c,d,e,f,g,h,i,j,

47题简单考察了类的编写,类的继承和构造函数的编写,完整实现代码如下:
下载 stu.cpp.txt(GBK编码)。

#include <iostream>
using namespace std;

class School {

protected:
    string Number;
    string Name;

public:
    School() {}

    School(string number, string name): Number(number), Name(name) {}

};


class Student: public School {

    string Class_Num;
    int Total;

public:

    Student() {}

    Student(string number, string name, string class_num, int total) : School(number, name), Class_Num(class_num), Total(total){}

    void display() {
        cout << "学号:"<< Number << ",姓名:" << Name << ",班级:" << Class_Num << ",总成绩:" << Total << endl;
    }
};

int main() {

    Student student("2020150601", "张小蒙", "四班", 678);
    student.display();
    return 0;
}

编译后输出的内容为:

学号:2020150601,姓名:张小蒙,班级:四班,总成绩:678

代码中的SchoolStudent类中的默认构造函数部分均可省略不写。如果编译运行出现乱码或报错,可能需要修改文件的编码为GBK。

可以使用以下的方式在nginx配置文件中实现类似 if A and B的条件判断:

set $test A;
if ($arg_a = "A") {
    set $test "${test}A";
}
if ($arg_b = "B") {
    set $test "${test}B";
}
if ($test = AB) {
    return 301 /if-and/;
}

可以使用以下的方式在nginx配置文件中实现类似 if A or B的条件判断:

set $test 0;
if ($arg_a = "1") {
    set $test 1;
}
if ($arg_b = "1") {
    set $test 1;
}
if ($test = 1) {
    return 301 /if-or/;
}

在location块内使用if语句的行为可能与预期不符,更多相关内容请参阅:
nginx.com: If is Evil... when used in location context
agentZH: How nginx "location if" works

参考内容:
Stackoverflow: How can I use an "or" operator in an nginx "if" statement?
nginx.org: Module ngx_http_rewrite_module

招商银行境外汇款汇入英文资料

最近需要外币汇入招商,电话咨询招行客服相关资料的英文版本后,收到包含以下资料的答复短信。完整内容如下:
【招商银行】
需给汇款行的资料(注意:因各外币币种汇入需使用的代理行不同.代理行信息可登录我行网站www.cmbchina.com,在主页中点击“境外汇款”链接查询):
(1)Beneficiary’s Bank 收款行名称: China Merchants Bank, H.O. Shenzhen, China.
(2)SWIFT Code: CMBCCNBS。
(3)Beneficiary’s name 收款人姓名
(4)Beneficiary’s A/C No.收款人账号
(5)Beneficiary's Bank Address 收款行地址: China Merchants Bank Tower NO.7088, Shennan Boulevard, Shenzhen, China.

简单的复制**文库的Word文档内容的方法分享

  1. 在浏览器中打开需要复制文本的文档,按F12或者
  2. Edge/Firefox/Chrome:右键选择检查(元素)
  3. Chrome: Ctrl+Shift+I
  4. 选择控制台console
  5. 将以下的代码复制到控制台 >后面,
  6. 复制完后点击回车,双击显示的文本内容即可完成复制。

此方法只能复制文本内容,无法保留文档格式。

const page = parseInt(document.querySelector('.goto-page > span:nth-child(3)').textContent);
let d = ''; 
for(let i = 1; i<=page; i++) {
    d = d + document.querySelector('#pageNo-' + i).textContent;
}
console.log(d);

好奇如何实现的复制?以下是代码简单解析:

document.querySelector('.goto-page > span:nth-child(3)').textContent 取得文档总页数(字符串);
使用parseInt取得文档页数(整形);
document.querySelector('#pageNo-' + i).textContent取得第i页中的文本,在循环中将文本连接起来;
最后使用console.log打印连接起来的文本。

不懂程序代码,但是想要进一步了解相关实现和原理?可以参阅以下的免费内容继续学习:

Web教程-Web入门
querySelector
Selector
parseInt
for 语句
console.log