分类 C/C++ 下的文章

5.1编写一个程序,将从键盘输入的n个字符串保存在一个一维数组A中。在输入字符串之前,先输入n的值。要求,数组A需要动态申请空间,程序运行结束前再释放掉。

#include <iostream>

using namespace std;

int main() {
    int n;
    cin >> n;
    string *A = new string[n];
    for (int i = 0; i < n; ++i) {
        cin >> A[i];
    }
    delete []A;

}

本题目主要考察使用new动态申请内存,以及使用 delete[] 释放数组内存。

5.2 在题目1的基础上,输出n个字符中最长的和最短的串,计算n个串的平均长度并输出结果。

#include <iostream>

using namespace std;

int main() {

    int n, sum = 0;
    int lIndex = 0, sIndex = 0;
    double avg;
    cin >> n;
    string *A = new string[n];
    for (int i = 0; i < n; i++) {
        cin >> A[i];
        if (A[i].length() > A[lIndex].length()) lIndex = i; // 记录最长的字符串的索引
        if (A[i].length() < A[sIndex].length()) sIndex = i; // 记录最短的字符串的索引
        sum = sum + A[i].length();
    }
    avg = sum / (double) n;
    cout << avg << endl;
    cout << A[lIndex] << endl;
    cout << A[sIndex] << endl;
    delete []A;

}

解题思路:声明字符串长度的和sum,最长字符串的索引lIndex及最短字符串的索引sIndex,并设其值均为0(即初始化为第一个字符串为最长和最短的字符串),然后在读入字符串的过程中求和,及比较字符串的长度记录最长及最短字符串的索引。

声明:以上答案是本人自己做的解答,不保证答案的正确性和完整性,内容仅供学习交流参考。

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。

课程名称:C++程序设计课程代码:04737(理论与实践相结合课程)

C++程序设计考试大概.pdf 文件下载:C++程序设计考试大概 课程代码04737(理论与实践相结合课程).pdf

第一部分 课程性质与目标

  1. 课程性质与特点

C++程序设计课程在软件工程专业(本科)的自学考试计划中,是一门重要的专业核心必考课。它是满足计算机应用领域对计算机应用人才的需要而设置的。本课程的任务是通过学习,使考生为以后学习软件工程和Java语言等后继课程及开展课程设计打下必备的基础,并且为以后从事应用软件开发提供合适的工具。

  1. 课程目标与基本要求

学生应了解计算机程序设计的基本知识,掌握C++语言程序设计的基本方法和使用计算机处理问题的思维方法,具有应用计算机编程的初步能力。1、了解C++语言的特点,掌握语言的成份及其使用方法,能够阅读及编写简单的应用程序;2、掌握最基本的算法和实现的方法;3、掌握结构化程序设计的方法,能编制出风格良好的程序;4、掌握C++语言程序调试的基本技能。

(三)与本专业其他课程的关系

1.本课程的先修课程为高级语言程序设计和计算机系统结构,以便对程序设计、计算机结构、软硬件等概念有一个初步了解。

2.本课程的后继课程是软件工程和Java语言。C++程序设计(实践)是课程设计的任选课程之一,学好本门课程将有助于课程设计。

第二部分 考核内容与考核目标

第一章 C++语言概述

(一)学习目的与要求

本章的目的是引入C++如何兼容面向过程设计、C++的基

本程序结构及开发环境与C语言的异同。

本章要求熟悉C++的基本程序结构。初步理解面向对象程序设计的思想及C++语言中的新思想和特点。要求初步掌握Visual C++ 6.0开发环境。

(二)考核知识点与考核目标

1、C++程序的结构(重点)

识记:预处理命令基本概念,C++中程序注释与C的不同

理解:理解C与C++语言的关系

应用:熟练掌握C++程序的基本结构,数据的输入/输出格式

2、Visual C++ 6.0的开发环境(次重点)

识记:Visual C++开发环境的特点

理解:Visual C++和工程和文件的产生方法

应用:熟练掌握C++语言程序的编写和运行

3、C++语言的发展及特点及程序设计方法(一般)

识记:C++语言及其发展历史

理解:C++语言的特点

应用:熟练掌握面向对象程序设计方法的特点

第二章 数据类型、运算符和表达式

(一)学习目的与要求

本章的目的是引入C++中数据类型及其特点、常量和变量、数值表达式、逻辑型数据和逻辑表达式、自定义类型修饰符。

本章要求熟悉数据类型及其特点。初步理解不同类型数据之间的转换规则。要求初步掌握运算符与表达式的规则和使用方法。

(二)考核知识点与考核目标

1、常量和变量(重点)

识记:常量、变量和引用的定义

理解:符号常量与常值变量的划分

应用:熟练掌握常量和变量的具体应用

2、运算符和表达式(次重点)

识记:数据表达式与运算符的概念

理解:理解各表达式和运算符之间的关系

应用: 熟练掌握运算符与表达式的转换

3、数据类型(一般)

识记:数据类型的概念

理解:基本数据类型的存储

应用:熟练掌握各数据类型的分类及更快地识别他们

第三章C++基本语句

(一)学习目的与要求

本章的目的是介绍各种语句,包括声明语句、输入输出语句、分支语句、循环语句、转向语句。要求掌握他们的性质及使用主法。

本章要求熟悉各种语句概念及其特点。初步理解选择型和循环型程序设计方法。要求初步掌握辅助控制语句和中止函数使用规则和方法。

(二)考核知识点与考核目标

1、输入/输出语句(重点)

识记:输入/输出时常用的控制符的概念

理解:控制格式符的使用

应用:输入/输出语句在程序中的具体格式

2、分支语句/循环语句(次重点)

识记:if语句和while语句概念

理解:多分支选择语句——switch语句/循环语句类型

应用:简单if语句/双分支if语句/多分支的if语句使用方法以及3种循环语句的使用方法

3、转向语句/声明语句(一般)

识记:声明语句概念

理解:转向语句4种类型

应用:掌握4种转向语句使用方法

第四章 数组

(一)学习目的与要求

本章的目的是建立数组的概念,要求重点掌握一维数组、二维数组、字符数组和字符串的定义初始化和数组元素的引用及基本操作。掌握数组的基本编程方法:数据的交换排序等。(二)考核知识点与考核目标

1、一维数组(重点)

识记:一维数组定义格式

理解:正确理解一维数组的初始化

应用:熟练引用数组元素及对能正确对其进行基本操作

2、字符数组与字符串(次重点)

识记:字符数组与字符串定义与初始化

理解:正确理解字符与字符串区别

应用:熟练掌握4种字符串处理函数及其格式

3、二维数组(一般)

识记:二维数组定义格式

理解:正确理解二维数组的初始化

应用:熟练引用数组元素及对能正确对其进行基本操作

第五章 函数

(一)学习目的与要求

本章的目的是将一般成员函数的特征集中在函数中讨论,以便为设计类打下基础,本章的知识很重要,要求能够熟练、正确地设计函数原形和参数类型,并将其推广到函数模板。

本章除了要求掌握函数参数的传递方式和返回值等问题之外,还要求掌握内联函数和函数重载。

(二)考核知识点与考核目标

1、函数调用中的参数传递(重点)

识记:函数调用中的参数传递概念

理解:熟练理解函数调用中的参数传递4大分类

应用:熟练掌握4大参数调用在各种程序中的具体应用

2、函数和变量的作用域(次重点)

识记:作用域概念

理解:熟练理解全局变量和局部变量

应用:掌握函数的作用域和变量的作用域(可见性)及生存期(存在性)

3、内联函数、函数重载和函数的调用(一般)

识记:函数的定义和声明

理解:理解函数的调用格式、调用过程

应用:熟练掌握函数重载的机制与应用和内联函数格式及应用

第六章 指针

(一)学习目的与要求

本章的目的是引入指针,要求掌握利用指针操作数组和内存,并熟练掌握字符指针与函数指针的使用。

(二)考核知识点与考核目标

1、指针与数组(重点)

识记:指针与数组以及指针数组的概念

理解:指针与一维数组和二维数组定义与使用方法

应用:熟练掌握使用指针操纵数组和内存

2、指针与函数(次重点)

识记:指针与函数的关系

理解:理解指针作为参数传递的函数

应用:熟练掌握指针做为参数以及指针函数和函数指针在程序中的应用

3、指针、指针变量、指针与字符串(一般)

识记:指针、字符指针和字符数组的概念

理解:指针变量的定义和初始化、字符指针与字符数组的区别

应用:熟练掌握指针的各种运算

第七章 结构与联合

(一)学习目的与要求

本章的目的是引入结构与联合的概念,要求掌握它们的性质,并通过学习一个多文件编程范例,掌握使用结构类型访问成员。同时掌握结构与指针,结构与函数的具体应用。

(二)考核知识点与考核目标

1、结构、结构变量、结构成员(重点)

识记:结构定义

理解:结构变量的定义和初始化

应用:掌握结构类型中结构成员的访问

2、结构与函数、结构与指针(次重点)

识记:结构与函数的关系

理解:结构变量与指针的关系

应用:熟练掌握结构变量作为函数的参数、结构指针访问结构成员具体应用

3、联合(一般)

识记:联合的概念

理解:联合的定义和访问

应用:掌握用联合来处理数据

第八章 类与对象

(一)学习目的与要求

本章的目的是建立类和对象的概念,要求重点掌在C++定义类、建立和使用对象的基本方法。

(二)考核知识点与考核目标

1、类的成员函数(重点)

识记:成员函数的概念

理解:构造函数和析构函数的定义

应用:熟练掌握构造函数和析构函数的使用方法和调用顺序

2、类与对象的定义(次重点)

识记:类与对象的概念

理解:类的定义格式和使用说明

应用:熟练掌握对象的定义及访问

3、类的静态成员、友元函数(一般)

识记:静态成员和友元函数的概念

理解:理解友元函数的应用

应用:熟练掌握静态数据成员和静态成员函数的格式和具体应用

第九章 继承与派生

(一)学习目的与要求

本章的目的是介绍C++语言继承方面的语法特征,要求通过仔细研读实例,掌握派生和包含的设计方法。

(二)考核知识点与考核目标

1、继承与派生类(重点)

识记:继承与派生的概念

理解:派生类的定义

应用:掌握派生类的三种继承方式

2、多重继承(次重点)

识记:多重继承的概念

理解:多重继承的声明和多重继承中的同名问题

应用:熟练掌握多重继承的构造函数和析构函数的应用

3、虚基类(一般)

识记:虚基类的定义

理解:虚基类声明的一般形式

应用:虚基类的初始化

第十章 多态性

(一)学习目的与要求

本章的目的是引入C++语言的多态性的用途,要求理解编译时的多态性和运行时的多态性,掌握运算符、虚函数、抽象类与纯虚函数的有关知识。

(二)考核知识点与考核目标

1、运算符重载(重点)

识记:进行运算符重载的必要性

理解:理解运算符重载的规则

应用:掌握运算符重载的方法

2、虚函数、抽象类与纯虚函数(次重点)

识记:虚函数的定义

理解:纯虚函数和抽象类概念

应用:掌握纯虚函数的声明格式和抽象类的使用

3、多态性(一般)

识记:多态性的概念

理解:理解多态性的两种形态概念

应用:掌握编译时的多态性和运行时的多态性

第十一章 模板

(一)学习目的与要求

本章的目的是介绍设计C++函数模板和类模板的概念,要求掌握函数模板和类模板的定义及简单的使用。

(二)考核知识点与考核目标

1、函数模板的定义和使用(重点)

识记:函数模板的概念

理解:函数模板的定义的一般形式

应用:熟练掌握函数模板和模板函数的使用

2、类模板的定义和使用(次重点)

识记:类模板的概念

理解:类模板的定义的一般形式

应用:熟练掌握类模板的使用

第十二章C++输入输出流

(一)学习目的与要求

本章的目的是学习流类库的概念及使用流类库进行文件夹存取的概念,希望通过文件存取综合实例,掌握进行文件存取的最基本方法。

(二)考核知识点与考核目标

1、格式控制(重点)

识记:常用的格式控制操作符的功能

理解:ios类中的其他成员函数

应用:熟练掌握用ios类成员函数进行格式控制

2、文件的I/O操作(次重点)

识记:文件与文件流概念

理解:文件流对象的建立、文件的打开与关闭

应用:熟练掌握二进制文件和文本文件的I/O操作

3、C++流(一般)

识记:C++流的概念

理解:ios类的概念和ios类的派生关系

应用:掌握标准输入流与标准输出流的使用

第三部分 实践教学过程性考核训练

  1. 实践考核训练

计算机机上考核

(二)考核知识点和考核目标

子项目Ⅰ:编程,当输入一个年份时,该程序判断是否为闰年并输出判断结果

1、考核的目的与要求

通过上机实训,掌握C++基本语句,包括分支语句中简单的if语句、双分支if语句和多分支的if语句用法。(重点应用)

2、考核的内容

1)知识点:

①分支if语句用法

②逻辑表达式用法

2)操作内容:

设年份为变量year,则year是闰年的条件应符合下面二者之一:能被4整除,但不能被100整除;能被400整除。(重点 应用)

子项目Ⅱ:设计一个程序,实现指针的综合运用

  1. 考核的目的与要求

通过上机实训,掌握指针与数组、指针与函数的相关内容,在实际应用中要灵活使用指针,才能更好地发挥它的作用。

2、考核的内容(重点 应用)

1)知识点:

①指针与函数

②指针与数组

③对不同函数的调用

④函数指针作为函数参数

2)操作内容:

要求给出一个一维数组的元素值,先后调用某个函数,实现如下要求:(重点 应用)

(1)数组元素值之和

(2)所有元素的最大值

(3)下标为奇数的元素之和

(4)所有数组元素的平均值

(三)实践考核训练项目成绩的评定

应考者必须按照实践考核项目要求进行每一个子项目的实践,记录子项目实践内容和心得体会,实践结束时写出实践报告。指导教师根据应考者实践报告及学习过程中的表现进行'口试',评出实践教学过程性考核成绩。

第四部分 有关说明与实施要求

(一)考核的能力层次表述

本大纲在考核目标中,按照"识记"、"理解"、"应用"三个能力层次规定其应达到的能力层次要求。各能力层次为递进等级关系,后者必须建立在前者的基础上,其含义是:

识记:能知道有关的名词、概念、知识的含义,并能正确认识和表述,是低层次的要求。

理解:在识记的基础上,能全面把握基本概念、基本原理、基本方法,能掌握有关概念原理、方法的区别与联系,是较高层次的要求。

应用:在理解的基础上,能运用基本概念、基本原理、基本方法联系学过的多个知识点分析和解决有关的理论问题和实际问题,是最高层次的要求。

(二)教材

1、指定教材

《C++程序设计》,范双南主编,冶金工业出版社。

(三)自学方法指导

1、应仔细阅读课程大纲的第一部分,了解课程的性质、地位和任务,熟悉课程的基本要求以及本课程与有关课程的联系,紧密围绕大纲要求自学。

2、在阅读某一章教材内容前,应先认真阅读大纲中该章的考核知识点、自学要求和考核要求,注意对各知识点的能力层次要求,以便在阅读教材时做到心中有数。

3、考生应根据大纲要求,认真理解、吃透每个知识点。对基本概念必须深刻理解,基本原理必须牢固掌握,在阅读中遇到个别细节问题不清楚,在不影响继续学习的前提下,可暂时搁置,留待以后对课程知识认识理解能力提高后再解决。

4、在自学过程中,既要思考问题,也要做好阅读笔记,把教材中的基本概念、原理、方法等加以整理,这可从中加深对问题的认知、理解和记忆,以利于突出重点,并涵盖整个内容,可以不断提高自学能力。

5、学完教材的每一章节内容后,应根据大纲要求,完成教材中的练习题和思考题,这对理解、消化和巩固所学的知识,增加分析问题、解决问题的能力有很大帮助。

在做练习之前,应认真阅读教材,按考核目标所要求的不同层次,掌握教材内容,在练习过程中对所学知识进行合理的回顾与发挥,注重理论联系实际和具体问题具体分析,解题时应注意培养逻辑性,针对问题围绕相关知识点进行层次(步骤)分明的论述或推导,明确各层次(步骤)间的逻辑关系。

6、教材中未列入本大纲的其它章节不作考试要求。

(四)对社会助学的要求

1、应熟知考试大纲对课程提出的总要求和各章的知识点。

2、应掌握各知识点要求达到的能力层次并深刻理解对各知识点的考核目标。

3、辅导时,应以考试大纲为依据,指定的教材为基础,不要随意增删内容,以免与大纲脱节。

4、辅导时,应对学习方法进行指导,宜提倡"认真阅读教材,刻苦钻研教材,主动争取帮助,依靠自己学通"的方法。

5、辅导时,要注意突出重点,对考生提出的问题,不要有问即答,要积极启发引导。

6、辅导时,应注意指导考生加强本学科研究方法的训练,注重对考生能力的培养,特别是自学能力及创新意识的培养,要引导考生逐步学会独立学习、独立创作,不断提高观察和思维理解能力、分析和解决问题的能力。

7、要使考生了解试题的难易与能力层次高低两者不完全是一回事,在各个能力层次中会存在着不同难度的试题。

8、助学学时:本课程共8学分,总课时100学时,助学课时分配如下:

学时.png

(五)关于命题考试的若干规定

1、本课程为实践考试课程,本大纲各章所提到的内容、考核目标以及实践教学过程性考核项目都是考试内容。

2、考核形式(试题类型)一般为计算机机上考核。

3、考试方式和课程最终成的评定采用终结性上机实验报告考核方式。

4、考试时间为实践考试180分钟、纸笔理论考试60分钟,考试成绩评定可采用百分制、五等第制以及两等第制等方式。凡按照考试大纲要求,成绩评定达到及格(或60分)及以上者即为合格。

(六)题型示例(样题)

设计项目

例:设计一个长方体类box.

在box类中,数据成员包括length(长)、width(宽)、height(高)、volume(体积);成员函数包括设置盒子的长、宽、高3个初始数据的构造函数,计算并输出长方体体积的volume()函数。在main()函数中,创建box对象,并求长方体的体积。在程序的最后,利用析构函数清除对象,而程序结束的同时也会调用析构函数,将程序中的类销毁。