bupt信通院上机第一学期实验二(17-24)各种数组使用

实验17 仓库结算

题目描述

某仓库共有ABCDE五种货物,每天需要补货的数量不同,每种货物的单价不同,如下所示。
由键盘输入五种货物需要补货的数量,请计算出当日仓库需支付多少货款。
由于补货时不一定按照ABCDE的顺序补货,建议使用switch语句与循环语句编写。

货物名称 货物单价
A 10
B 5
C 3
D 20
E 13
输入
B 3 E 2 A 1 D 4 C 10
输出
161

代码

//仓库补货结算
#include<iostream>
using namespace std;
int main() {
    
    
	char L;
	int a,sum=0;
	for (int i = 0; i < 5; i++) {
    
    
		cin >> L >> a;
	}
	switch (L) {
    
    
	case 'A':
		sum += a * 10;
		break;
	case 'B':
		sum += a * 5;
		break;
	case 'C':
		sum += a * 3;
		break;
	case 'D':
		sum += a * 20;
		break;
	case 'E':
		sum += a * 13;
		break;
	}
}

实验18 数组使用

题目描述

编程:将1~100的自然数存到一个有100个元素的整型数组中(数组的下标为0~99),请在屏幕上输出如下数据:1)在屏幕上输出存储的100个自然数,每行输出10个,各数值之间用空格隔开。2)将 序号是素数的数据 输出到屏幕上,格式要求:每行输出10个,各数值之间用一个空格隔开。
输入
输出
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50
51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70
71 72 73 74 75 76 77 78 79 80
81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99 100
3 4 6 8 12 14 18 20 24 30
32 38 42 44 48 54 60 62 68 72
74 80 84 90 98

程序化

1.注意每行最后一个数据要单独输出(因为其后不能有空格);

2、对数组一行一行输出->
双循环结构:外层控制行数,内层控制每行输出;

3、素数的判断->
不能被2~自身(其实自身的开方或1/2就行)的数就是素数(数学问题)(用循环和条件嵌套),注意该数要>=2;

4、不仅要判断序号是否为素数,还要将对应的数输出(每一个数判断时都要用一次 循环和结构嵌套)->
最简单的方法是将这一 循环和结构嵌套 “包起来”定义一个bool型函数;

代码

//数组简单使用
#include<iostream>
using namespace std;
//定义一个函数来判断是否为素数,类型为bool型,形参为要判断的整型数
bool prime(int n) {
    
    
	for (int i; i < n / 2; i++) {
    
    
		if (!(n % i))//if (n % i==0)
			return true;
	}
}
int main() {
    
    
	int num[100];
	for (int i = 0; i < 100; i++)
		num[i] = i + 1;
	for (int i = 0; i < 10; i++)
		for (int j = 0; j < 10; j++) {
    
    
			cout << num[i * 10 + j-1] << " ";
			cout << num[i * 10 + j] << endl;
		}
	int n = 0;
	//双重循环与结构嵌套+双层条件(最内层是考虑到每行最后一个数没有空格)
	for (int i = 0; i < 97; i++) {
    
    
		//条件结构中调用函数
		if (prime(i) && i != 0 && i != 1) {
    
    
			n++;
			if (n == 10)
				cout << num[i] << endl;
			else
				cout << num[i] << " ";
		}
	}
	//97是最后一个素数(也无空格),但此时n!=10,因此单独输出
	cout << num[97];
	return 0;
}

实验19 结构数组使用

题目描述

编写一个记录5个学生的姓名、性别、年龄和学号的程序,要求使用结构数组表示学生信息,用for循环获得键盘输入的学生记录的数据,所有数据输入完毕后,将5个学生的信息在屏幕上输出,
格式要求:按表格行列格式输出,每行输出一个学生的信息,按照姓名、性别、年龄、学号的顺序,各列信息左对齐,各信息占10位。

输入
John male 18 2016211001
Kim male 18 2016211002
David male 18 2016211003
Marry female 18 2016211004
Anna female 18 2016211005
输出
John male 18 2016211001
Kim male 18 2016211002
David male 18 2016211003
Marry female 18 2016211004
Anna female 18 2016211005

程序化

1、学号->
用string类型,不用int,因为若是以0开头的学号前面的0不会输出(记得包含头文件cstring

2、有格式要求(各列信息左对齐,各信息占10位)->
(1)包含头文件iomanip
(2)左对齐用操作符setiosflags(ios::left)(有一个放前面就可,对后面的输出格式都起作用);
(3)占位用 setw(n) (每个输出前都要有一个,因为只对后面第一个的输出格式起作用)

代码

//结构数组的使用
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
struct student
{
    
    
    string name;
    string sex;
    int age;
    string num; //定义为长整形会错误50%
};
int main()
{
    
    
    student a[5];
    for(int i = 0; i < 5; i++)
        cin >> a[i].name >> a[i].sex >> a[i].age >> a[i].num;
    for(int i = 0; i < 5; i++)
        cout << setiosflags(ios::left) 
            << setw(10) << a[i].name
            << setw(10) << a[i].sex
            << setw(10) << a[i].age
            << setw(10) << a[i].num << endl; 

    return 0;
}

实验20 评分统计

题目描述

编写一个评分统计程序
。从键盘获取8个评委打分的百分制成绩(double类型),统计平均分时,去掉一个最高分和一个最低分,其余6个分数的平均值即为最后得分。
请将这个分数输出到屏幕上,格式为:平均成绩是XXX。
输入
98.5 88 90 93 94 90.4 89 92
输出
平均成绩是91.4

代码

#include <iostream>
using namespace std;
int main()
{
    
    
    double a[8];
    //给数组赋值
    for(int i = 0; i < 8; i++)
    {
    
    
        cin >> a[i];
    }
    //排序
    for(int i = 0; i < 8; i++)
    {
    
    
        for(int j = i + 1; j < 8; j++)
        {
    
    
            if(a[i] > a[j])
            {
    
    
                double temp;
                temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
        }
    }
    //算平均
    double sum = 0;
    for(int i = 1; i < 7; i++)
    {
    
    
        sum += a[i];
    }
    cout << "平均成绩是" << sum / 6.0 <<endl;
  return 0;
}

实验21 选择排序

题目描述

从键盘输入10个整型数据,将它们存在数组中,采用选择排序算法,按从小到大排序,并将排序后的数据输出到屏幕上,数据间用一个空格隔开。
输入
1 100 4 6 60 9 10 90 12 45
输出
1 4 6 9 10 12 45 60 90 100

代码

#include <iostream>
using namespace std;
int main()
{
    
    
    int a[10];
    //给数组赋值
    for(int i = 0; i < 10; i++)
    {
    
    
        cin >> a[i];
    }
    //排序并输出
    for(int i = 0; i < 10; i++)
    {
    
    
        for(int j = i + 1; j < 10; j++)
        {
    
    
            if(a[i] > a[j])
            {
    
    
                double temp;
                temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
        }
        cout << a[i] << " ";
    }

    return 0;
}

实验22 计算第几天

题目描述

定义一个结构型变量(包括年、月、日),并从键盘上获取该变量的值,计算该日在本年中是第几天,
输出到屏幕上,格式为:“X年X月X日是本年中的第X天。”(提示:注意闰年问题)。
输入
2017 4 1
输出
2017年4月1日是本年中的第91天。

程序化

1、闰年特点->
第二月为29天;

2、判断是否为闰年->
(D.year % 100) && (D.year % 4 == 0) || (D.year % 400 == 0)条件是否为真;

3、理解操作符bool型表达式1?表达式2:表达式3->
若表达式1为真,则执行表达式2,否则执行表达式3;

4、如何实现计算是本年的第几天?->
用switch语句(不用break):此时从它选择开始的地方一直顺序执行到末尾,因此顺序不能乱

代码

//结构数组的使用
#include <iostream>
using namespace std;
struct date
{
    
    
	int year;
	int month;
	int day;
};
int main() {
    
    
	int m,num=0;
	date D;
	cin >> D.year >> D.month >> D.day;
	((D.year % 100) && (D.year % 4 == 0) || (D.year % 400 == 0)) ? m = 29 : m = 28;
	//如何计算是本年第几天?
	//因为D.month是有键盘输入的,因此用switch语句
	//switch语句(不用break的情况下则会从它选择开始的地方一直顺序执行到末尾,因此顺序不能乱)
	switch (D.year) {
    
    
	case 12:
		num += 30;
	case 11:
		num += 31;
	case 10:
		num += 30;
	case 9:
		num += 31;
	case 8:
		num += 31;
	case 7:
		num += 30;
	case 6:
		num += 31;
	case 5:
		num += 30;
	case 4:
		num += 31;
	case 3:
		num += m;
	case 2:
		num += 31;
	case 1:
		num += D.day;
	}
	cout << D.year << "年" << D.month << "月" << D.day << "日" << "是本年中的第" << D.day << "天";
}

实验23 字母统计

题目描述

从键盘输入一行或几行字符串,行数由键盘输入,一行字符串用字符数组存储。
请统计所输入的字符串中26个字母(不区分大小写)出现的次数,并将出现次数非零的字母统计结果输出到屏幕上,格式参见样例。
如果没有字母,请输出字符串中无字母。
输入
1
I come quickly !
输出
c:2
e:1
i:2
k:1
l:1
m:1
o:1
q:1
u:1
y:1

程序化

(未完待续)

码字不易,按知识点拆分更不易,
如果你觉得对你有点用的话,请点一个免费的赞。
你的点赞和支持是对我最大的鼓励!

猜你喜欢

转载自blog.csdn.net/m0_51288996/article/details/110308528