C/C++教程

c++期末实验题

本文主要是介绍c++期末实验题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、程序控制结构

1、用cin语句输入x,y的值,分别利用if和swich两种分支语句完成;

//if结构
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
	double x;
	cout << "输入具体x的值: ";
	cin >> x;
	if (x < 0) cout << x;
	else if (x >= 0 && x < 10) cout << 2 * x - 1;
	else cout << 3 * x - 1;
	return 0;
}

//switch结构
#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
#include <math.h>
int main()
{
    int x, t;
    int y;
    scanf("%d", &x);
    t = (x < 0) + (x < 10) ;   //括号中的关系表达式有几个为真(1),确定了t的值,实则反映的是x的范围
    switch (t)
    {
    case 2: //(x<0) 、 (x<10) 为真有2,自然x>=0,且x<10
        y =x;
        break;
    case 1: //(x<0),(x<10) 为真有1,自然……
        y = 2 * x -1 ;
        break;
    case 0://只有(x<0) , (x<10) 全0了.也可写作default:
        y = 3*x-1;
    }
    printf("%d\n", y);
    return 0;
}

2、为顾客找零钱时,希望选用的纸币张数最少。例如,73 元,希望零钱的面值为 50 元一张,20 元一张,1 元三张。设零钱面值有 50 元、20 元、10 元.5 元和 1元,请编写程序,用户输入100 以下的数,计算找给顾客的各面值的纸币张数,数 据间以空格隔开。

#include <iostream>
using namespace std;

int main(int argc, char* argv[])
{
    int c, wushi, ershi, shi, wu, yi;
    cin >> c;
    wushi = c > 50 ? c / 50 : 0;
    cout << wushi;
    ershi = c - 50;
    ershi = (ershi > 0) ? ershi / 20 : 0;
    cout << " " << ershi;
    shi = c - wushi * 50 - ershi * 20;
    shi = (shi > 0) ? shi / 10 : 0;
    cout << " " << shi;
    wu = c - 50 - ershi * 20 - shi * 10;
    wu = (wu > 0) ? wu / 5 : 0;
    cout << " " << wu;
    yi = c - 50 - ershi * 20 - shi * 10 - wu * 5;
    yi = (yi > 0) ? yi : 0;
    cout << " " << yi << endl;

    return 0;
}

二、数组

1、用冒泡法对输入的任意十个整数按由小到大的顺序排列输出。 冒泡法原理:将相邻两个数进行比较,把小数调到前边,大数逐渐“下沉”,如此进 行一轮后,就把最大的数互换到最后,再进行一轮,则会把第二大数排在倒数第二 的位置上,进行 N-1轮后,整个数列即可排好。在这种排序过程中,小数如同气泡 一样逐层上浮,而大数逐个下沉,因此,被形象地喻为“冒泡”。

#include<iostream>
using namespace std;
int main()
{
	//对冒泡排序进行升序排序 
	int arr[10] = { 4, 1, 2, 5, 3, 7, 6, 9, 8, 10 };
	int b = sizeof(arr) / sizeof(arr[0]);//定义数组中元素个数;
	cout << "原数组为:" << endl;
	for (int i = 0; i < b; i++)
	{
		cout << arr[i] << " ";
	}
	//冒泡排序
	for (int j = 1; j < b; j++)
	{
		for (int i = 0; i < b - j; i++)
		{
			if (arr[i] > arr[i + 1])//交换数组元素
			{
				int temp = arr[i];
				arr[i] = arr[i + 1];
				arr[i + 1] = temp;
			}
		}
	}
	cout << endl << "排序后的数组为:" << endl;
	for (int i = 0; i < b; i++)
	{
		cout << arr[i] << " ";
	}
	cout << endl;
	system("pause");
	return 0;
}

2、有十个数按从大到小的顺序存放在一个数组中,输入一个数,要求找出该数是数组中 第几个元素的值,如果该数不在数组中,则打印出“无此数”。

#include <iostream>
using namespace std;
int BinarySearch(int myarray[], int n, int key)
{
    int low = 0, high = n - 1;
    int mid = 0;
    while (low <= high)
    {
        mid = (low + high) / 2;
        if (myarray[mid] == key)
            return mid;
        if (myarray[mid] < key)
            low = mid + 1;

        else
            high = mid - 1;

    }
    return -1;
}


int main()
{
    int myarray[] = { 1,3,4,6,8,7 };
    int index = BinarySearch(myarray, 6, 8);
    if (index != -1)
    {
        cout << "Find it!" << endl;
        cout << "index is:" << index << endl;
    }
    else
        cout << "Not Found!" << endl;

    return 0;
}

3、有一个 3×4 的矩阵,编写程序求出其中最大元素的值和最小元素的值,以及它们所在 的行号和列号。

#include<stdio.h>
void main()
{
    int i, j, colum = 0, row = 0, max;
    int a[3][4] = { {1,2,3,4},{9,8,7,6},{-10,10,-5,2} };
    max = a[0][0];
    for (i = 0; i <= 2; i++)
    {
        for (j = 0; j <= 3; j++)
        {
            if (a[i][j] > max)
            {
                max = a[i][j];
                colum = j;
                row = i;
            }
        }
    }
    printf("max=%d,row=%d,colum=%d", max, colum, row);
    printf("\n");
}

三、函数

1、编写求阶乘的函数,在主函数中调用该函数,求 1!+2!+3!+…+n!并输出结果,n 从键盘上输入(n<10)。

#include<iostream>
using namespace std;
double FA(int n)
{
	double m = 1;
	for (int i = 1; i <= n; i++)
		m *= i;
	return m;
}

int main()
{
	double ans = 0, n;
	cin >> n;
	for (int i = 1; i <= n; i++)
		ans += FA(i);
	cout << ans;
	return 0;
}

2、编写一组求数组中最大最小元素的函数。 int imax(int array[], int count);//求整型数组的最大元素 int imin(int array[], int count);//求整型数组的最小元素 其中,参数count为数组中的元素个数,函数的返回值即为求得的最大或最小 元素之值,要求同时编写出主函数进行验证。

#include<iostream>
using namespace std;
int imax(int array[], int count) {
	int max = array[0];
	for (int i = 1;i < count ; i++)
	{
		if (array[i] > max) {
			max = array[i];
		}
	}
	return max;
}
int imin(int array[], int count) {
	int min = array[0];
	for (int i = 1; i < count; i++)
	{
		if (array[i] < min) {
			min = array[i];
		}
	}
	return min;
}   
int main() {
	int count;
	int a[100];
	cin >> count;
	for (int i = 0; i < count; i++) 
	{
		cin >> a[i];
	}
	int max = imax(a, count);
	int min = imin(a, count);
	cout << max << endl;
	cout << min << endl;
	return 0;
}

3、编写函数 int isprime(int a),用来判断整数 a 是否为素数,若是素数, 函数返回 1,否则返回0。调用该函数找出任意给定的n个整数中的素数。 注意,1 不是素数。

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
	int i, j ;
	int k = 0;
	for (i = 100; i <= 200; i++) {
		for (j = 2; j < i; j++)
			if (i % j == 0)break;
		if (j == i)
		{
			cout << '\t' << i;
			k++;
			if (k % 5 == 0)cout << endl;
		}
	}
	system("pause");
	return 0;
}

四、指针与结构体

1、上机验证程序;

#include<iostream>
using namespace std;
int main()
{
	char str1[] = "I love CHINA!", str2[20], * p1, * p2;
	p1 = str1; p2 = str2;
	for (; *p1!= '\0'; p1++, p2++)
		*p2 = *p1;
	*p2 = '\0';
	p1 = str1;
	p2 = str2;
	cout << "str1 is:" << p1 << endl;
	cout << "str2 is:" << p2 << endl;
	return 0;
}

2、阅读程序,写出运行结果;

#include<iostream>
using namespace std;
void main()
{
	char a[10] = "fdadegda";
int i, j;
for (i = j = 0; a[i] != '\0'; i++)
if (a[i] != 'a')
a[j++] = a[i];
a[j ]= '\0';
cout << a << endl;
}




3、定义一个学生结构体,包括学号、性别,数学,英语四条信息,输入五名学生信息,分别输出数 学和英语最高分的学生。 要求:性别使用枚举类型定义,但输出要用男或女。

#include <iostream>
using namespace std;
struct Student
{
    char num[13]; 
    char name[10]; 
    int cpp;
    int math;
    int english;
    int grade;
    double average;
};
const int N = 5;
int main()
{
    int i, j, k;
    Student stu[N];
    for (i = 0; i < N; i++)
    {
        cin >> stu[i].num >> stu[i].name >> stu[i].cpp >> stu[i].math >> stu[i].english;
        stu[i].grade = stu[i].cpp + stu[i].math + stu[i].english;
        stu[i].average = stu[i].grade / 3.0;
    }
    cout << "学号\t姓名\t总分\t均分" << endl;
    for (i = 0; i < N; i++)
        cout << stu[i].num << '\t' << stu[i].name << '\t' << stu[i].grade << '\t' << stu[i].average << endl;
    return 0;
}

4、编写函数重置两个变量的值,该函数的原型为“void reset(int *a, int *b);”。 函数内部将两个值重置为两个变量原值的平均数(出现小数则四舍五入);

#include<iostream>
using namespace std;
void reset(int* a, int* b)
{
	if ((*a + *b) % 2 != 0)
		*a = *b = (*a + *b) / 2 + 1;
	else
		*a = *b = (*a + *b) / 2;
}
int main()
{
	int x, y;
	cin >> x >> y;
	reset(&x, &y);
	cout << x << " " << y << endl;
	return 0;
}

5、定义一个结构体变量(包括年、月、日),要求输入年、月、日,程序能计算本日在本年中 是第几天,注意闰年问题。

#include <iostream>
using namespace std;
struct Student
{
    char num[13]; 
    char name[10]; 
    int cpp;
    int math;
    int english;
    int grade;
    double average;
};
const int N = 5;
int main()
{
    int i, j, k;
    Student stu[N];
    for (i = 0; i < N; i++)
    {
        cin >> stu[i].num >> stu[i].name >> stu[i].cpp >> stu[i].math >> stu[i].english;
        stu[i].grade = stu[i].cpp + stu[i].math + stu[i].english;
        stu[i].average = stu[i].grade / 3.0;
    }
    cout << "学号\t姓名\t总分\t均分" << endl;
    for (i = 0; i < N; i++)
        cout << stu[i].num << '\t' << stu[i].name << '\t' << stu[i].grade << '\t' << stu[i].average << endl;
    return 0;
}

这篇关于c++期末实验题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!