求写一份完整的C语言注释

Python014

求写一份完整的C语言注释,第1张

#include <iostream>

using namespace std

// 动物类

class Animal

{

protected:

int value

public:

Animal(int v) : value(v) {}

// 定义walk方法

virtual void walk()

{

cout <<"AW" <<endl

}

// 定义talk方法

void talk()

{

cout <<"AT" <<endl

}

}

// 熊类,继承自动物类

class Bear : public Animal

{

public:

Bear(int v) : Animal(v + 100) {}

// 覆盖父类walk方法

void walk()

{

cout <<"BW" <<endl

}

// 覆盖父类talk方法

virtual void talk()

{

cout <<"BT" <<endl

}

}

// CudBear类,继承自熊类

class CudBear : public Bear

{

public:

// 定义多个构造函数,能够使用int, char float, double, void *, const char *这些数据进行初始化

CudBear(int v) : Bear(v * 2)

{

cout <<"I: " <<this->value <<endl

}

CudBear(char v) : Bear(41)

{

cout <<"C: " <<this->value <<endl

}

CudBear(float v) : Bear((int)(v * 2))

{

cout <<"F: " <<this->value <<endl

}

CudBear(double v) : Bear((int)(v * 2))

{

cout <<"D: " <<this->value <<endl

}

CudBear(void* v) : Bear(43)

{

cout <<"P: " <<this->value <<endl

}

CudBear(const char* v) : Bear(47)

{

cout <<"S: " <<this->value <<endl

}

}

int main()

{

cout <<"A: "

// 调用的是double的构造函数

Animal* c1 = new CudBear(3.0 / 2)

cout <<"B: "

// 调用的是int的构造函数

Bear* c2 = new CudBear(3 / 2)

cout <<"C: "

// 调用的是const char *的构造函数

Animal* c3 = new CudBear("3.0 / 2")

cout <<"D: "

// 调用的是char的构造函数

Bear* c4 = new CudBear('3')

// 分别调用这些对象的walk方法

cout <<"E: "

c1->walk()

cout <<"F: "

c1->talk()

cout <<"G: "

c2->walk()

cout <<"H: "

c2->talk()

// 销毁所有对象

delete c4

delete c3

delete c2

delete c1

return 0

}

#include <iostream>using namespace std//记录两点间的路径class lu{public: //A点及B点 int pointA int pointB //路径长度 int lenth}//点的集合class inn{private:public: //用节点数初始化,本程序未用到 inn(int) //直接初始化,以后要用ml(int)分配内存 inn() //析构函数释放内存 ~inn() //根据节点个数分配内存 void ml(int) //数据 int *data //有效元素个数 int len //新增元素 void add(int) //删除元素 void cut(int)}//初始化(len均设为0,表示无数据)//inn::inn(int n) //{ // data = new int[n] // len = 0 //} // //inn::inn() //{ // len = 0 //} // //inn::~inn() //{ // delete[]data //} // //void inn::ml(int n) //{ // data = new int[n] //} ////////////////////////////////void inn::add(int d){ data[len++] = d}void inn::cut(int d){ for (int i = 0i<len - 1++i) { if (data[i] == d) { for (int j = ij<len - 1++j) { data[j] = data[j + 1] } } } --len}class Graph{private: //节点个数 int n //无像图数据 int **G //源点 int s //没计算的点的集合 inn V //已计算的点的集合 inn S //路径 inn p //存储路径 string *papublic: //用节点个数分配内存 Graph(int) //析构函数释放内存 ~Graph() //设置源点 void SetSource(int) //输入无像图邻接矩阵 void input() //贪心算法求最短路径 void ALG() //输出最短路径 void output()}Graph::Graph(int n){ this->n = n G = new int*[n] for (int i = 0i <ni++) { G[i] = new int[n] } V.ml(n) S.ml(n) p.ml(n) pa = new string[n]} Graph::~Graph(){ for (int i = 0i <ni++) { delete[]G[i] } delete[]G delete[]pa}void Graph::SetSource(int s){ this->s = s S.data[0] = s S.len = 1 p.data[s] = 0 p.len = 1 int j(0) for (int i = 0i<n++i) { //源点除外 if (i != s)V.data[j++] = i } V.len = n - 1}void Graph::input(){ for (int i = 0i<n++i) for (int j = 0j<n++j)cin >>G[i][j]}void Graph::ALG(){ while (S.len != n) { //定义临时变量 lu min //初始化临时变量,假设最短距离是已计算的第一个点和未计算的第一个点 min.pointA = S.data[0] min.pointB = V.data[0] min.lenth = G[S.data[0]][V.data[0]] //找到未计算的距离已计算点的集合最近的点 for (int i = 0i<S.len++i) { for (int j = 0j<V.len++j) { //如果找到更短的 if (G[S.data[i]][V.data[j]]<min.lenth) { //记录有哪个点出发 min.pointA = S.data[i] //记录到达哪个点 min.pointB = V.data[j] //记录距离 min.lenth = G[S.data[i]][V.data[j]] } } } //新增的点的最短距离重新定义,或许还有更短的 //p.data[min.pointA] + min.lenth表示目前这条路径的长度 int min_ = p.data[min.pointA] + min.lenth char temp[10] _itoa_s(min.pointB, temp,10, 10) pa[min.pointB] = pa[min.pointA] + "->" + temp //在已计算的点中寻找是否有更短的路径 for (int i = 0i <S.len++i) { //找到,替换当前路径长度 //若是无向图则也可以写成G[min.pointB][S.data[i]] if (G[S.data[i]][min.pointB] + p.data[S.data[i]] <min_) { min_ = G[S.data[i]][min.pointB] + p.data[S.data[i]] pa[min.pointB] = pa[i] + "->" + temp } } //记录路径长度 p.data[min.pointB] = min_ //将新找到的点从未计算移到已计算,重复当前步骤,直到所有点都已计算 S.add(min.pointB) V.cut(min.pointB) }}void Graph::output(){ for (int i = 0i<n++i) cout <<s<<"到"<<i<<":\n"<<s<<pa[i].c_str()<<"\n路径长度:"<<p.data[i] <<endl}int main(){ int n cout <<"节点数:" <<flush cin >>n Graph G(n) cout <<"矩阵:" <<endl G.input() int s cout <<"源点:" <<flush cin >>s G.SetSource(s) G.ALG() G.output() getchar() getchar()}

这是我以前写的一个贪心算法求单源最短路径的源代码,你那程序也可用这个算法,自己慢慢琢磨吧

输入是以二维数组形式保存的邻接表,希望对你有帮助,多读些代码有好处哦,你这个程序懒得写,耗时间,你自己写写试吧,到网上找些类似的看看,学编程一定要自己动手才会有进步哦

请采纳。

实验四 一维数组、二维数组一、实验目的与要求1、熟练掌握一维数组、二维数组的定义、赋值和输入输出的方法。 2、掌握与数组有关的算法。二、实验内容1、(1)输入N个整数,使用冒泡排序,将数据由大到小输出。#include "stdafx.h"#include<stdio.h>void swap2(int*,int*)void bubble(int a[],int n)int main(void){   int n,a[8]       int i   printf("Enter n(n<=8):")   scanf("%d",&n)   printf("Enter a[%d]:", n)   for(i=0i<ni++)            scanf("%d", &a[i])   bubble(a,n)printf("After sorted,a[%d]=", n)for(i=0i<ni++)    printf("%3d",a[i])return 0}void bubble(int a[],int n)   /*n是数组a中待排序元素的数量*/{    int i,j    for(i=1i<ni++)        /*外部循环---请问这个嵌套循环怎么理解??*/       for(j=0j<n-ij++)   /*内部循环---请问这个嵌套循环怎么理解??*/          if(a[j]>a[j+1])                      swap2(&a[j],&a[j+1])   /*交换*/}void swap2(int *px,int *py) {  int tt=*px*px=*py*py=t}单向冒泡排序法:

//输入10个整数,按从大到小输出//

#include<stdio.h>

void main()

{

int i,j,t,a[10]

printf("请输入10个整数\n")

for(i=0i<10i++)

scanf("%d",&a[i])

for(j=1j<10j++)     //10个数要来回做(10-1)趟次//

for(i=1i<11-ji++)   //第j趟要做(10-j)次比较//

if(a[i]>a[i-1])           //每做完一趟,就会将数组中较小的一个数沉淀下来,较大的数不断往上冒//

{t=a[i]a[i]=a[i-1]a[i-1]=t}printf("按从大到小排序输出结果是:\n")

for(i=0i<10i++)

printf("%-3d",a[i])

printf("\n")

}

双向冒泡排序法:

//输入10个整数,按从大到小输出//

#include<stdio.h>

void main()

{

int i,j,t,k,a[10]

printf("请输入10个整数\n")

for(i=0i<10i++)

scanf("%d",&a[i])

for(j=1j<10j++)                    //10个数要来回做(10-1)趟次//

{for(i=1i<11-ji++)              //第j趟要做(10-j)次比较,双向冒泡法,是先从上至下两两比较一次//

if(a[i]>a[i-1])        //每做完一趟,就会将数组中较小的一个数沉淀下来,较大的数不断往上冒//

 {t=a[i]a[i]=a[i-1]a[i-1]=t}

for(k=i-1k>0k--)      //与单向冒泡不同的是,这是双向冒泡的关键,每一次从顶至下比较完一次后,同时再从下// if(a[k]>a[k-1])           //至上比较一次,也就是说每一趟数组中的元素两两比较了两次,这就是双向冒泡排序了//

 {t=a[k]a[k]=a[k-1]a[k-1]=t}

}printf("按从大到小排序输出结果是:\n")

for(i=0i<10i++)

printf("%-3d",a[i])

printf("\n")

}

$(2)输入N个整数,使用改进的冒泡排序,将数据由大到小输出。#include "stdafx.h"#include<stdio.h>void swap2(int*,int*)void bubble(int a[],int n)int main(void){   int n,a[8]       int i   printf("Enter n(n<=8):")   scanf("%d",&n)   printf("Enter a[%d]:", n)   for(i=0i<ni++)            scanf("%d", &a[i])   bubble(a,n)printf("After sorted,a[%d]=", n)for(i=0i<ni++)    printf("%3d",a[i])return 0}void bubble(int a[],int n)   /*n是数组a中待排序元素的数量*/{    int i,j    for(i=1i<ni++)        /*外部循环---请问这个嵌套循环怎么理解??*/       for(j=0j<n-ij++)   /*内部循环---请问这个嵌套循环怎么理解??*/          if(a[j]>a[j+1])                      swap2(&a[j],&a[j+1])   /*交换*/}void swap2(int *px,int *py) {  int tt=*px*px=*py*py=t}2、*******输入N-1个整数组成一数列,再输入某数x,先将数列排序,根据x的值插入到有序数列中。#include<stdio.h> main () { void Rank(int N,int n[]) int i,j,k int n[11] printf("请输入10个整数:") for(i=0i<10i++) scanf("%d",&n[i]) Rank(10,n) //调用函数对输入的数组排序printf("\n请输入需要插入的整数:") scanf("%d",&k) if(k>n[9]) n[10]=k else { for(i=0n[i]<=ki++) for(j=9j>=ij--) n[j+1]=n[j]   //腾出位置,用以插入所输入的数n[i]=k } printf("\n排序后此数列按升序排列为:") for(i=0i<=10i++) printf("%-4d",n[i]) } void Rank(int N,int n[]) { int i,k,iTemp for(k=1k<=N-1k++) for(i=N-1i>=ki--) if(n[i-1]>n[i]) { iTemp=n[i] n[i]=n[i-1] n[i-1]=iTemp } printf("排序后此数列按升序排列为:") for(i=0i<=N-1i++) printf("%-4d",n[i]) printf("\n") }3、输入行数n,打印出杨辉三角。#include <stdio.h>

int main()

{

  int yh[101][101]={{},{0,1}},i,n,m

  scanf("%d",&m)   /*输入要打印的行数,,,不能太大。。我水平不高。。*/

  for(i=2i<=mi++)

  {

      yh[i][1]=yh[i][i]=1

      for(n=2n<in++)

      {

          yh[i][n]=yh[i-1][n-1]+yh[i-1][n]

      }

  }

  for(i=1i<=mi++)

  {

      for(n=1n<=in++)

      {

          printf("%d ",yh[i][n])

      }

      printf("\n")

  }

return 0

}

#include<stdio.h>#include<math.h>main(){  int  a[8][8],i,j   for(i=0i<8i++){for(j=0j<8j++)    if(j==0)  a[i][j]=1else if(i==j)        a[i][j]=1else if(i>j&&j>=1)a[i][j]=a[i-1][j]+a[i-1][j-1]else    a[i][j]=0}  for(i=0i<8i++)  {for(j=0j<=ij++)     printf("%3d",a[i][j])  printf("\n")  }}4、青年歌手参加歌曲大奖赛计分系统(1)有N个评委进行打分,求这位选手的平均得分(去掉一个最高分和一个最低分)。#include <stdio.h>#include <stdlib.h>#include <time.h>void bubble_sort(int a[],int n){  int i,j, itmp  for (i =0 i<ni++)  {    for(j=i+1 j<nj++)    {      if( a[i] >= a[j])      {        itmp = a[j]        a[j] = a[i]        a[i] = itmp      }    }  } }int main( int argc, char **argv){ int iguide[10] = {0} srand((unsigned )time(NULL)) for (int i = 0  i< 8i++) {  int isum = 0  for (int j = 0  j< 10 j++)  {   iguide[j] = rand()%10 +1  }  bubble_sort(iguide,10)  for (int l = 1l<=8 l++)  {   isum += iguide[l]  }  printf("The  avg score the %d  singer get is %d \n" ,i+1,isum/8)  } return 0}$(2)有N个评委进行打分,求M个选手每个人的平均得分(去掉一个最高分和一个最低分),并按平均得分由高到低排序输出。#5、输入N个整数,使用选择排序,将数据由大到小输出。#include <stdio.h>//冒泡法(指针)main(){ int a[10] int i,j,temp int *p=a printf("input:") for(i=0i<10i++)  scanf("%d",p+i) for(i=1i<10i++)  for(j=0j<10-ij++)   if(*(p+j)>*(p+j+1))   {temp=*(p+j)*(p+j)=*(p+j+1)*(p+j+1)=temp} for(i=0i<10i++)  printf("%4d",*(p+i)) printf("\n")}补充作业实验题:1.输入10个数,按小到大排序。#include<stdio.h>main(){ int i,j,temp,a[10],n for(i=0i<10i++)  scanf("%d",&a[i]) for(i=0i<=8i++){   for(j=i+1j<10j++)    if(a[i]>a[j]){   temp=a[i]   a[i]=a[j]   a[j]=temp} } for(i=0i<10i++)  printf("%5d",a[i])printf("\n")scanf("%d",&n) if(n>a[9])  a[10]=n else {   for(i=0i<9i++)    if(a[i]>n)    {for(j=9j>=ij--)      a[j+1]=a[j]    a[i]=n    break    } }printf("11shu\n") for(i=0i<=10i++)  printf("%4d",a[i])}2.求10个数中大于平均值的数的个数#include <stdio.h>void main(){float a[10],sum,averageint isum=0.0printf("请输入十位数:\n")for(i=0i<10i++)scanf("%f",&a[i])for(i=0i<10i++)sum=sum+a[i]average=sum/10sum=0.0for(i=0i<10i++)if(a[i]>=average)sum=sum+a[i]printf("%.5f",sum)}3.求出大于m并且紧随m的n个素数,并存入数组中,输出,m和n从键盘输入。4.将一个数组中的值按逆序重新存放。#include<stdio.h>main(){    int a[5], i, temp          /*定义数组及变量为基本整型*/    printf("please input array a:\n")    for (i = 0 i < 5 i++)        /*逐个输入数组元素*/        scanf("%d", &a[i])    printf("array a:\n")    for (i = 0 i < 5 i++)        /*将数组中的元素逐个输出*/        printf("%d ", a[i])    printf("\n")    for (i = 0 i < 2 i++)        /*将数组中元素的前后位置互换*/    {        temp = a[i]          /*元素位置互换的过程借助中间变量temp*/        a[i] = a[4-i]        a[4-i] = temp    }    printf("Now array a:\n")    for (i = 0 i < 5 i++)        /*将转换后的数组再次输出*/        printf("%d ", a[i])}三、源程序四、程序结果五、总结

                                                                                                中国物联网校企联盟技术部