c++青岛理工大学实习

 

 

 

 

程序设计训练

 

 

 

 

姓    名                 

学    号          

专    业         通信工程      

班    级            164        

指导教师       

编写日期          2018.6.28     

 

 

 

 

 

 

 

 

 

程序设计训练任务书

 

一、实习的任务、性质与目的

程序设计训练是集中实践性环节之一,是学习完程序设计基础(C)、数据结构、面向对象(C++)、数据库等程序类课程后进行的一次综合训练。主要训练基本数据结构和算法的程序实现,学习编写中、大型程序(500行以上)的过程和步骤,学习程序的调试技巧和方法,从而能用C/C++语言程序来解决一般实际问题,如各种简单的信息管理系统和趣味小游戏等。

通过该实习,使学生理解和掌握程序设计的过程和步骤,学会基本程序调试技巧和方法,加强学生自主学习、收集资料和动手编程 的能力。

二、实习时间

第四学期的第16周和第17周

三、实习地点

计算中心210室

 

一.基础部分

总结1数字的交换三种方式:数值传递,地址传递,引用传递,三者做了一个比较,数值传递本身没有对原交换数字进交换,2.线段问题对于我而言是一个比较费时的,上网百度了一下,因为它包含的头文件也比较多,要熟悉这些头文件的作用,然后调用其头文件里的函数,主要用到了cmp比较函数和排序函数,算法的核心是利用排序函数先将每行的所有数进行排序,然后用比较函数,和for与if进行组合给个计数器作为输出值。3.猴子称大王,这个数组比较简单难点也就是这个

while(remain>=num)

    {

        for(i=0; i<num; i++)

        {

k = j;

j=(j+1)%amo;

while( per[j]>0 )j=(j+1)%amo;                

        }

链表中用到了链表的基本操作,建立个循环链表

4.冒泡排序:就是用到了两层for循环,像个泡泡一样的去遍历

5字符串问题:定义2个变量p,tmp,tmp一个放目前正在统计次数的字符,p放刚刚读入的字符,还要定义一个count统计当前字符出现的次数如果tmp == p, 那么说明又读进来一个同样的字符,那么这个字符出现的次数count++如果tmp!=p, 那么说明读进来一个新的字符,需要把原来tmp和count输出,然后把tmp置为p,count=1,开始统计p里面的字符出现的次数

 

6.哈希表是一个比较难的;

哈希表是根据关键码而直接进行访问的数据结构,也就是说,通过关键码值映射到表中一个位置来访问记录,以加快查找的速度,本实验哈希函数用除留余数法构造,用伪随机探测散列处理冲突数据结构设计

7.继承就是简单的几个继承的区分,本实验注意的是构造函数的继承

如何区分构造函数,最主要的区别看看函数构造名是否与类的名称是否一致,一致的话就是构造函数

总结一下个人基础部分的整体思路:模块化。分三块,输入。输出及算法部分,算法部分灵活的运用几大结构,最后做完整个基础部分,我感觉到了面向对象的重要性,框架的搭建还是横重要的

 

(每道题的解决思路,程序实现代码,并说明遇到的问题及解决方法、过程。)

1、a、b交换与比较

如何将a、b的值进行交换,使用中间变量?基本要求如下:(1)编写一个交换函数,在主函数中调用。(2)分别使用三种函数参数传递:指针传递(地址传递)、引用传递。

源代码

#include<iostream>

using namespace std;

void Exchg1(int x, int y)// 值传递

{

int tmp;

tmp=x;

x=y;

y=tmp;

cout<<"x="<<x<<"y ="<<y<<endl;

}

void Exchg2(int *px, int *py)//地址传递

{

int tmp=*px;

*px=*py;

*py=tmp;

cout<<"*px="<<*px<<"*py="<<*py<<endl;

}

void Exchg3(int &x, int &y)//引用传递

{

int tmp=x;

x=y;

y=tmp;

cout<<"&x="<<x<<"&y="<<y<<endl;

}

main()

{

int a=4;int b=6;

Exchg1(a,b);//传递的a,b的内容

cout<<"a="<<a<<"b="<<b<<endl;

a=4;b=6;

Exchg2(&a,&b);//a,b的地址值传递给了px,py

cout<<"a="<<a<<"b="<<b<<endl;

a=4; b=6;

Exchg3(a,b);//函数里是用a,b分别代替了x,y。函数里操作的是a,b

cout<<"a="<<a<<"b="<<b<<endl;

}

 

2、线段问题

问题描述:

现在有n个围棋比赛,每个比赛的开始、结束的时间点是知道的。小明认为,参加越多的比赛,水平就能提高的越快。所以,他想知道他最多能参加几个比赛。 如果要参加一个比赛必须善始善终,而且不能同时参加2个及以上的比赛。

输入输出格式

输入格式:

第一行是一个整数n ,接下来n行每行是2个正整数ai,bi(ai<bi),表示比赛开始、结束的时间。

输出格式:

一个整数最多参加的比赛数目。

样例:输入样例:

3

0 2

2 4

1 3

源代码:

#include <cstring>

#include <iostream>

#include <cmath>

#include <stdio.h>

#include <stdlib.h>

#include <string>

#include <iomanip>

#include <vector>

#include <algorithm>//sort 排序函数头文件 

 

typedef struct {//结构体定义

    int start;

    int end;

} Match;

 

const int maxn = 1000010;//常数指针类型

Match matches[maxn];

 

int cmp(Match m1, Match m2) {

    return m1.end < m2.end;

}//cmp是一个函数,可以向其传入两个任意类型变量的地址或指针,但不管传入什么类型,函数内部将该指针转换为int类型

//,也就是说将s所指向的地址上4个字节的数据转换为int型数,t同理,然后将这两个数相减,作为结果返回。

 

using namespace std;

 

int main() {

    int n;int i;

    scanf("%d", &n);//输入n行

    for( i = 0; i < n; i++) {

        scanf("%d%d", &matches[i].start, &matches[i].end);

    //mp是你自己定义的 sort是按从小到大的顺序排序的,如果你要从大到小,就要重载 int cmp(int x,int y){ return x>y; }

}

    sort(matches, matches + n, cmp);

    int end = -1;

    int cnt = 0;

    for( i = 0; i < n; i++) {

        if(matches[i].start >= end) {

            end = matches[i].end;

            cnt++;

        }

    }

    printf("%d", cnt);//cnt相当于计数器

    return 0;

}

 

2、猴子选大王问题(约瑟夫问题)

问题描述:

一堆猴子都有编号,编号是1,2,3 ...m,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。

基本要求:

(1) 输入数据:输入m,n m,n 为整数,n<m

(2)中文提示按照m个猴子,数n 个数的方法,输出为大王的猴子是几号 ,建立一个函数来实现此功能

(3)分别用数组和链表来实现

源代码

数组:

#include<stdio.h>

int main()

{

    int per[100]= {0};

    int num=0,amo=0;

    int i=0,remain=0,j=0;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值