后每个月又生一对兔子,则判断用情况语

2020-01-05 19:23 来源:未知

#include <iostream.h>
#include <string.h>

曾经在软通动力写过的算法题其中有一小部分是参考网上的资料,现在拿出来给大家分享!
第3章 控制语句

Technorati 标签: 趣味,c语言,编程,100例


#define MIN 100000
#define MAX 166667

/* 1、打印出所有的“水仙花数”。所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如,153是一水仙花数,因为153 = 13 + 53 + 33。 */
#include<iostream.h>
void main()
{
int i, a=0, b=0, c=0;
for(i=100;i<1000;i++)
{
a=i%10;
b=i/10%10;
c=i/100%10;
if(a*a*a+b*b*b+c*c*c==i)
cout<<"i="<<i<<endl;
}
}

经典c程序100例==31--40

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月

class Number{
private:
int num;
public:
Number();
void getnum();
void sortNums(int nums[]);
int checknum(int i,int temp);
void output(int i);
};

/* 2、一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1、2、3,而6 = 1 + 2 + 3,因此6是“完数”。编程序找出1000之内的所有完数,并按下面的格式输出其因子:
6 -〉1,2,3 */
#include<iostream.h>
void main()
{
int i,j,sum=0,a[50],k,t;
for(i=1;i<=1000;i++)
{
sum=0;
        for(j=1;j<i;j++)
{
if(i%j==0)
{
sum+=j;
a[k++]=j;
}
}
t=k;
if(sum==i)
{
cout<<i<<"->";
for(k=0;k<t;k++)
{
cout<<a[k];
if(k<t-1)cout<<",";
}
cout<<endl;
}
    k=0;
}
}

【程序31】
题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续
   判断第二个字母。
1.程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。
2.程序源代码:
#include <stdio.h>
void main()
{
char letter;
printf("please input the first letter of somedayn");
while ((letter=getch())!='Y')/*当所按字母为Y时才结束*/
{ switch (letter)
{case 'S':printf("please input second lettern");
     if((letter=getch())=='a')
      printf("saturdayn");
     else if ((letter=getch())=='u')
         printf("sundayn");
       else printf("data errorn");
     break;
case 'F':printf("fridayn");break;
case 'M':printf("mondayn");break;
case 'T':printf("please input second lettern");
     if((letter=getch())=='u')
      printf("tuesdayn");
     else if ((letter=getch())=='h')
         printf("thursdayn");
       else printf("data errorn");
     break;
case 'W':printf("wednesdayn");break;
default: printf("data errorn");
  }
 }

   后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

Number::Number(){
num=0;
}
/*
*函数名:sortNums
*功能:对nums数组进行冒泡法排序,返回结果
*/
void Number::sortNums(int *nums){
int temp,i,j;
for(i=0;i<6;i++){
for(j=i+1;j<6;j++){
if(nums[i]>nums[j]){
temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
}
}
}
}
/*
*函数名:checknum
*功能:检查乘2,3,4,5,6后得到的积是否由原数的6个数字组成的
*      mxi=temp*(2,3,4,5,6)
*返回值:-1 不相同 0 相同
*/
int Number::checknum(int temp,int mxi){
int find,bv,j;
int num1[6],num2[6];
find=0;

/* 3、求Sn=a+aa+aaa+…+aa…a之值,其中a是一个数字。例如:2+22+222+…+22222(此时n=5),n由键盘输入。*/
#include<iostream.h>
void main()
{
double a,sn=0.0,sum=0.0;
int n,i;
cout<<"please input a number";
cin>>a;
    cout<<"please input n number";
cin>>n;
sn=a;
sum=a;
    for(i=2;i<=n;i++)
    {
sum=sum*10+a;
sn+=sum;
    }
cout<<"Sn="<<sn<<endl;
}

}

【程序32】
题目:Press any key to change color, do you want to try it. Please hurry up!
1.程序分析:            
2.程序源代码:
#include <conio.h>
void main(void)
{
int color;
for (color = 0; color < 8; color++)
 {
 textbackground(color);/*设置文本的背景颜色*/
 cprintf("This is color %drn", color);
 cprintf("Press any key to continuern");
 getch();/*输入字符看不见*/
 }

1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....

  j=0;
while(temp>0){
  bv=temp%10;
    num1[j]=bv;
temp=temp/10;
j=j+1;
}

/* 4、一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下。求它在第10次落地时,共经过了多少米?第10次反弹多高?*/
#include<iostream.h>
void main()
{
double h1=100,h2=100,sum=0.0;
int i;
for(i=1;i<=10;i++)
{

}

【程序33】
题目:学习gotoxy()与clrscr()函数   
1.程序分析:
2.程序源代码:
#include <conio.h>
void main(void)
{
clrscr();/*清屏函数*/
textbackground(2);
gotoxy(1, 5);/*定位函数*/
cprintf("Output at row 5 column 1n");
textbackground(3);
gotoxy(20, 10);
cprintf("Output at row 10 column 20n");

2.程序源代码:

  j=0;
while(mxi>0){
  bv=mxi%10;
    num2[j]=bv;
mxi=mxi/10;
j=j+1;
}

sum+=h2;
h1=h1/2.0;
h2=h1*2;
}
cout<<"sum="<<sum<<"   "<<"h1="<<h1<<endl;
}

}

【程序34】
题目:练习函数调用

  1. 程序分析:
    2.程序源代码:
    #include <stdio.h>
    void hello_world(void)
    {
    printf("Hello, world!n");
    }
    void three_hellos(void)
    {
    int counter;
    for (counter = 1; counter <= 3; counter++)
    hello_world();/*调用此函数*/
    }
    void main(void)
    {
    three_hellos();/*调用此函数*/

    }

    【程序35】
    题目:文本颜色设置
    1.程序分析:
    2.程序源代码:
    #include <conio.h>
    void main(void)
    {
    int color;
    for (color = 1; color < 16; color++)
     {
     textcolor(color);/*设置文本颜色*/
     cprintf("This is color %drn", color);
     }
    textcolor(128 + 15);
    cprintf("This is blinkingrn");

    }

    【程序36】
    题目:求100之内的素数   
    1.程序分析:
    2.程序源代码:
    #include <stdio.h>
    #include "math.h"
    #define N 101
    main()
    {
    int i,j,line,a[N];
    for(i=2;i<N;i++) a[i]=i;
    for(i=2;i<sqrt(N);i++)
     for(j=i+1;j<N;j++)
     {
      if(a[i]!=0&&a[j]!=0)
      if(a[j]%a[i]==0)
      a[j]=0;}
    printf("n");
    for(i=2,line=0;i<N;i++)
    {
     if(a[i]!=0)
     {printf("%5d",a[i]);
     line++;}
     if(line==10)
     {printf("n");
    line=0;}
    }

    }

    【程序37】
    题目:对10个数进行排序
    1.程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,
          下次类推,即用第二个元素与后8个进行比较,并进行交换。       
    2.程序源代码:
    #define N 10
    main()
    {int i,j,min,tem,a[N];
    /*input data*/
    printf("please input ten num:n");
    for(i=0;i<N;i++)
    {
    printf("a[%d]=",i);
    scanf("%d",&a[i]);}
    printf("n");
    for(i=0;i<N;i++)
    printf("%5d",a[i]);
    printf("n");
    /*sort ten num*/
    for(i=0;i<N-1;i++)
    {min=i;
    for(j=i+1;j<N;j++)
    if(a[min]>a[j]) min=j;
    tem=a[i];
    a[i]=a[min];
    a[min]=tem;
    }
    /*output data*/
    printf("After sorted n");
    for(i=0;i<N;i++)
    printf("%5d",a[i]);

    }

    【程序38】
    题目:求一个3*3矩阵对角线元素之和
    1.程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。
    2.程序源代码:
    main()
    {
    float a[3][3],sum=0;
    int i,j;
    printf("please input rectangle element:n");
    for(i=0;i<3;i++)
     for(j=0;j<3;j++)
     scanf("%f",&a[i][j]);
    for(i=0;i<3;i++)
     sum=sum+a[i][i];
    printf("duijiaoxian he is %6.2f",sum);

    }

    【程序39】
    题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
    1. 程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后
         此元素之后的数,依次后移一个位置。
    2.程序源代码:
    main()
    {
    int a[11]={1,4,6,9,13,16,19,28,40,100};
    int temp1,temp2,number,end,i,j;
    printf("original array is:n");
    for(i=0;i<10;i++)
     printf("%5d",a[i]);
    printf("n");
    printf("insert a new number:");
    scanf("%d",&number);
    end=a[9];
    if(number>end)
     a[10]=number;
    else
     {for(i=0;i<10;i++)
      { if(a[i]>number)
       {temp1=a[i];
        a[i]=number;
       for(j=i+1;j<11;j++)
       {temp2=a[j];
        a[j]=temp1;
        temp1=temp2;
       }
       break;
       }
      }
    }
    for(i=0;i<11;i++)
     printf("%6d",a[i]);

    }

    【程序40】
    题目:将一个数组逆序输出。
    1.程序分析:用第一个与最后一个交换。
    2.程序源代码:
    #define N 5
    main()
    { int a[N]={9,6,5,4,1},i,temp;
     printf("n original array:n");
     for(i=0;i<N;i++)
     printf("%4d",a[i]);
     for(i=0;i<N/2;i++)
     {temp=a[i];
      a[i]=a[N-i-1];
      a[N-i-1]=temp;
     }
    printf("n sorted array:n");
    for(i=0;i<N;i++)
     printf("%4d",a[i]);
    }

经典c程序100例==41--50

【程序41】
题目:学习static定义静态变量的用法   
1.程序分析:
2.程序源代码:
#include "stdio.h"
varfunc()
{
int var=0;
static int static_var=0;
printf("40:var equal %d n",var);
printf("40:static var equal %d n",static_var);
printf("n");
var++;
static_var++;
}
void main()
{int i;
 for(i=0;i<3;i++)
  varfunc();

#include<stdio.h>

sortNums(num1);
sortNums(num2);
   
  /*
  按位比较数字是否相等
   */
for(j=0;j<6;j++){
if(num1[j]!=num2[j])
{
find=-1;
break;
}
}

/* 5、猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉了一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩一个桃子了。求第一天共摘了多少桃子。*/
#include<iostream.h>
void main()
{
int number,i;
number=1;
for(i=10;i>1;i--)
number=(number+1)*2;
cout<<"number="<<number<<endl;
}

}

【程序42】
题目:学习使用auto定义变量的用法
1.程序分析:      
2.程序源代码:
#include "stdio.h"
main()
{int i,num;
num=2;
 for (i=0;i<3;i++)
 { printf("40: The num equal %d n",num);
  num++;
  {
  auto int num=1;
  printf("40: The internal block num equal %d n",num);
  num++;
  }
 }

void main(){

return find;
}

8.++程序中使用流格式输入、输出,我们可以怎么做?
答:在程序的开头包含头文件iostream.h
     cin输入,cout输出。
例如:

}

【程序43】
题目:学习使用static的另一用法。   
1.程序分析:
2.程序源代码:
#include "stdio.h"
main()
{
int i,num;
num=2;
for(i=0;i<3;i++)
{
printf("40: The num equal %d n",num);
num++;
{
static int num=1;
printf("40:The internal block num equal %dn",num);
num++;
}
}

long f1,f2; //前两个月的兔子数

void Number::output(int i){
cout<<"the number is "<<i<<endl;
}

#include<iostream.h>
void main()
{
   int a;
   cout<<"请输入a的值:";
   cin>>a;
   cout<<"a的值为:"<<a<<endl;
}

}

【程序44】
题目:学习使用external的用法。
1.程序分析:
2.程序源代码:
#include "stdio.h"
int a,b,c;
void add()
{ int a;
a=3;
c=a+b;
}
void main()
{ a=b=4;
add();
printf("The value of c is equal to %dn",c);

f1=f2=1;

void Number::getnum(){
int i,mxi;

第4章 函数

}

【程序45】
题目:学习使用register定义变量的方法。
1.程序分析:
2.程序源代码:
void main()
{
register int i;
int tmp=0;
for(i=1;i<=100;i++)
tmp+=i;
printf("The sum is %dn",tmp);

for(int i=1;i<=20;i++){ //i为月份

cout<<"begin find number,start "<<MIN<<endl;
for(i=MIN;i<MAX;i++){

/* 1、写一函数用“气泡法”对输入的10个字符按由小到大的顺序排列。*/
#include<iostream.h>
void main()
{
int i,j,temp,a[10];
cout<<"please input ten numbers:n";
for(i=0;i<10;i++)
cin>>a[i];
for(i=0;i<10;i++) //每循环一次确定数组中一个数的位置
for(j=i+1;j<10;j++) //每次循环对比一个数的大小
{
if(a[i]>a[j])
{
temp=a[j];
a[j]=a[i];
a[i]=temp;
}
}
cout<<"resort result=";
for(i=0;i<10;i++)
cout<<a[i]<<" ";
}

}

【程序46】
题目:宏#define命令练习(1)   
1.程序分析:
2.程序源代码:
#include "stdio.h"
#define TRUE 1
#define FALSE 0
#define SQ(x) (x)*(x)
void main()
{
int num;
int again=1;
printf("40: Program will stop if input value less than 50.n");
while(again)
{
printf("40:Please input number==>");
scanf("%d",&num);
printf("40:The square for this number is %d n",SQ(num));
if(num>=50)
 again=TRUE;
else
 again=FALSE;
}

printf("%12ld %12ld ",f1,f2);

mxi=i*2;
if(checknum(i,mxi)<0) continue;
mxi=i*3;
if(checknum(i,mxi)<0) continue;
mxi=i*4;
if(checknum(i,mxi)<0) continue;
mxi=i*5;
if(checknum(i,mxi)<0) continue;
mxi=i*6;
if(checknum(i,mxi)<0) continue;

/* 2、用递归方法求n阶勒让得多项式的值,递归公式为
         1 (n = 0)
Pn(x) =  x (n = 1)
         ((2n-1)*x*Pn-1(x)-(n-1)*Pn-2(x))/n (n > 1) */
#include<iostream.h>
double fun (double,double);
void main()
{
double n,x,sum;
cout<<"input n and x"<<endl;
cin>>n>>x;
sum=fun(n,x);
cout<<"P"<<n<<"("<<x<<")"<<"="<<sum<<endl;
}
double fun(double n1,double x1)
{
if (n1==0)
return 1;
else if (n1==1)
return  x1;
else if (n1>1)
return ((2*n1-1)*x1*fun(n1-1,x1)-(n1-1)*fun(n1-2,x1))/n1;
}

}

【程序47】
题目:宏#define命令练习(2)
1.程序分析:            
2.程序源代码:
#include "stdio.h"
#define exchange(a,b) { /*宏定义中允许包含两道衣裳命令的情形,此时必须在最右边加上""*/
            int t;
            t=a;
            a=b;
            b=t;
           }
void main(void)
{
int x=10;
int y=20;
printf("x=%d; y=%dn",x,y);
exchange(x,y);
printf("x=%d; y=%dn",x,y);

if printf; //每行输出4个

output(i);
}
cout<<"end find number,end "<<MAX<<endl;
}

/* 3、编写一函数,由实参传来一字符串,统计此字符串中字母、数字、空格、和其它字符的个数,并在主函数中输入字符串以及输出上述结果。 */
#include<iostream.h>
void judge(char a[]);
void main()
{
const int size=100;
char a[size];
cin.getline(a,size);
judge(a);
}
void judge(char a[100])//判断字符类型
{
int letter=0,number=0,others=0,i=0;
while(a[i]!='')
{
if ((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='z')) letter++;//统计字母个数
else if (a[i]>='0' && a[i]<='9') number++;//统计数字个数
else others++;//统计其他数个数
i++;
}
cout<<"letter="<<letter<<"  number="<<number<<"  others="<<others<<endl;
}

}

【程序48】
题目:宏#define命令练习(3)   
1.程序分析:
2.程序源代码:
#define LAG >
#define SMA <
#define EQ ==
#include "stdio.h"
void main()
{ int i=10;
int j=20;
if(i LAG j)
printf("40: %d larger than %d n",i,j);
else if(i EQ j)
printf("40: %d equal to %d n",i,j);
else if(i SMA j)
printf("40:%d smaller than %d n",i,j);
else
printf("40: No such value.n");

f1=f1+f2; //前两个月加起来赋值给第三个月

int main()
{
int flag=0;
Number number;
number.getnum();
return 0;
}

/* 4、给出年、月、日,计算该日是该年的第几天。 */
#include<iostream.h>
int lead(int);
void main()
{
int ly,year,month,date,i,sum=0;
cout<<"input year、month、date: ";
cin>>year>>month>>date;
int a[12]={31,0,31,30,31,30,31,31,30,31,30,31};
ly=lead(year);
if (ly==1)
a[1]=29;//366天
else a[1]=28;//365天
for(i=0;i<month-1;i++) //当前月之前所有月天数累加和
sum+=a[i];
sum+=date; //加上当前月天数
cout<<"你输入的日期是当年的第"<<sum<<"天";
}
int lead(int y)//判断闰年
{
if((y%4==0&&y%100!=0)||(y%400==0)) return 1;//是闰年
else return 0;//不是闰年
}

}

【程序49】
题目:#if #ifdef和#ifndef的综合应用。

  1. 程序分析:
    2.程序源代码:
    #include "stdio.h"
    #define MAX
    #define MAXIMUM(x,y) (x>y)?x:y
    #define MINIMUM(x,y) (x>y)?y:x
    void main()
    { int a=10,b=20;
    #ifdef MAX
    printf("40: The larger one is %dn",MAXIMUM(a,b));
    #else
    printf("40: The lower one is %dn",MINIMUM(a,b));
    #endif
    #ifndef MIN
    printf("40: The lower one is %dn",MINIMUM(a,b));
    #else
    printf("40: The larger one is %dn",MAXIMUM(a,b));
    #endif
    #undef MAX
    #ifdef MAX
    printf("40: The larger one is %dn",MAXIMUM(a,b));
    #else
    printf("40: The lower one is %dn",MINIMUM(a,b));
    #endif
    #define MIN
    #ifndef MIN
    printf("40: The lower one is %dn",MINIMUM(a,b));
    #else
    printf("40: The larger one is %dn",MAXIMUM(a,b));
    #endif

    }

    【程序50】
    题目:#include 的应用练习   
    1.程序分析:
    2.程序源代码:
    test.h 文件如下:
    #define LAG >
    #define SMA <
    #define EQ ==
    #include "test.h" /*一个新文件50.c,包含test.h*/
    #include "stdio.h"
    void main()
    { int i=10;
    int j=20;
    if(i LAG j)
    printf("40: %d larger than %d n",i,j);
    else if(i EQ j)
    printf("40: %d equal to %d n",i,j);
    else if(i SMA j)
    printf("40:%d smaller than %d n",i,j);
    else
    printf("40: No such value.n");
    }

 

转到:趣味c语言编程100例(一) 

转到:趣味c语言编程100例(三)

转到:趣味c语言编程100例(四)

转自:


f2=f2+f1;

/* 5、写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个整数由键盘输入。 */
#include<iostream.h>
int cdivisor(int,int);
int cmultiple(int,int,int);
void main()
{
int x,y,d,m;
cout<<"input two number: ";
cin>>x>>y;
d=cdivisor(x,y);
m=cmultiple(x,y,d);
cout<<"common divisor is "<<d<<endl<<"common multiple is "<<m<<endl;
}
int cdivisor(int x1,int y1)//最大公约数
{
int r,temp;
if (x1<y1)
{
temp=x1;
x1=y1;
y1=temp;
}
while(x1%y1)//当较大数除以较小数余数等于0时,较小数为最大公约数
{
r=x1%y1;
x1=y1;
y1=r;
}
return y1;
}
int cmultiple(int x2,int y2,int d1)//最小公倍数
{
return x2*y2/d1;//两数相乘结果除以它们的最大公约数为最小公倍数
}

}

/* 6、写一函数,将两个字符串连接。 */
#include<iostream.h>
#include<string.h>
void main()
{
const int size=100;
char a[size],b[size];
cout<<"input two string:"<<endl;
cin.getline(a,size);
cin.getline(b,size);
strcat(a,b);
cout<<"a="<<a<<endl;
}

}

/* 7、写一函数,将一个字符串的元音字母复制到另一个字符串,然后输出。 */
#include<iostream.h>
#include<string.h>
void scpy(char *,char *);
void main()
{
const int size=100;
char a[size]="Hello world";
char b[size]="Net";
cout<<"a= "<<a<<"b= "<<b<<endl;
scpy(a,b);
cout<<"a= "<<a<<endl;
}
void scpy(char *p,char *q)
{
while(*q!='')
{
if (*q=='a'||*q=='A'||*q=='e'||*q=='E'||*q=='i'||*q=='I'||*q=='o'||*q=='O'||*q=='u'||*q=='U')
*p++=*q;
q++;
}
}

/*

/* 8、写一函数,输入一个四位数字,要求输出这4个数字字符,但每两个数字间空一空格。如输入1990,应输出“1 9 9 0”。 */
#include<iostream.h>
#include<string.h>
void outs(char a[]);
void main()
{
const int size=10;
char a[size];
cin.getline(a,size);
outs(a);
}
void outs(char a[10])
{
int i;
if(strlen(a)<=4)
{
for(i=0;i<4;i++)
cout<<a[i]<<" ";
}
else cout<<"input error."<<endl;
}

1 1 2 3

第5章   数组

5 8 13 21

/* 1、将一个数组中的值按逆序重新存放,例如,原来顺序为:a、b、c、d。要求改为:d、c、b、a。 */
#include<iostream.h>
void back(char *);
void main()
{
char a[50]="abcdefg";
cout<<"a="<<a<<endl;
back(a);
}
#include<iostream.h>
void back(char *p)
{
int i=0;
while(*p!='')
{
p++;//把指针定位到字符串末尾
i++;//统计字符个数
}
cout<<"a=";
for(;i>0;i--)//逆序输出
{
p--;
cout<<*p;
}
cout<<endl;
}

34 55 89 144

/* 2、打印出杨辉三角形(要求打印出前15行)。(杨辉三角最本质的特征是,它的两条斜边都是由数字1组成的,而其余的数则是等于它肩上的两个数之和。) */
#include<iostream.h>
void tri(int a[][15]);
void main()
{
int i,j,a[15][15];
tri (a);
cout<<"a= ";
for(i=0;i<15;i++)//遍历整个数组
{
for(j=0;j<=i;j++)
{
cout<<a[i][j];
if(a[i][j]>=1&&a[i][j]<=9)//当输出个位数之后输出4个空格保持整齐
cout<<"    ";
else if (a[i][j]>=10&&a[i][j]<=99)//当输出十位数之后输出3个空格保持整齐
cout<<"   ";
else if(a[i][j]>=100&&a[i][j]<=999)//当输出百位数之后输出2个空格保持整齐
  cout<<"  ";
  else cout<<" ";//当输出百位数之后输出1个空格保持整齐
}
cout<<endl<<"   ";//每行输出结束后换行
}
}
void tri(int a[15][15])
{
int i,j;
for(i=0;i<15;i++)
for(j=0;j<=i;j++)
{
if(j==0||j==i)//三角形第一列和对角线被赋值为1
a[i][j]=1;
else a[i][j]=a[i-1][j-1]+a[i-1][j];//算出其余的数组元素
}
}

233 377 610 987

/* 3、编一程序,将两个字符串连接起来,不要用strcat函数。 */
#include<iostream.h>
#include<string.h>
void scat(char *,char *);
void main()
{
const int size=100;
char a[size]="Hello";
char b[size]="Bye";
cout<<"a="<<a<<"   b="<<b<<endl;
scat(a,b);
cout<<"a="<<a<<" after link a and b"<<endl;
}
void scat(char *p,char *q)
{
while(*p!='')//确定数组a的插入位置
{
p++;
}
while(*q!='')
{
*p=*q;
p++;
q++;
}
}

1597 2584 4181 6765

/* 4、打印“魔方阵”。所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。例如:三阶魔方阵:
      8 1 6
      3 5 7
      4 9 2
要求打印由1到n2的自然数构成的所有魔方阵。 */
//方法一:输出N介魔方阵,但每介只输出一种。
#include<iostream.h>
void square(int a[][10],int k,int n);
void main()
{
int n,i,j,k,a[10][10]={0};
cout<<"input an odd number:"<<endl;
cin>>n;
k=n/2;//确定第一个数列数
square(a,k,n);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
cout<<"t"<<a[i][j];
cout<<endl;
}
}
void square(int a[][10],int k,int n)
{
int i,j;
for(i=1,j=0;i<=n*n;i++,j--,k++)//n为阶数,从1开始给数组赋值
{
if(j<0&&k>=n)//当数组行列都越出范围时候,确定数组正确位置
{
j+=2;k-=1;
}
else if(j<0)//当数组行越出范围时候,确定数组正确位置
j+=n;
else if(k>=n)//当数组列越出范围时候,确定数组正确位置
          k-=n;
  else if(a[j][k]!=0)//当数组原位置有数时候,确定数组位置
  {
j+=2;k-=1;
  }
a[j][k]=i;
}
}
//方法二:输出N介魔方阵所有魔方阵。
#include <string>
#include <iomanip>
#include <iostream>

10946 17711 28657 46368

using namespace std;

75025 121393 196418 317811

void printA(int **p,int n)//输出这个n阶魔方阵
{
cout<<endl<<"下面是一个"<<n<<"阶魔方阵:"<<endl;

514229 832040 1346269 2178309

int i,j;

3524578 5702887 9227465 14930352

for(i = 0;i < n;i++)
{
for(j = 0;j < n;j++)
{
cout<<setw(4)<<p[i][j];
}

24157817 39088169 63245986 102334155

cout<<endl;
}

Press any key to continue

cout<<endl<<endl;
}
bool Judge(int **p,int n)//判断是否为n阶魔方阵
{
int i,j,sum = 0,NowSum = 0;
bool YesOrNo = true;

*/

for(j = 0;j < n;j++)//第一行总和
{
sum += p[0][j];
}

==============================================================

for(i = 1;i < n;i++)//判断每行总和是否相等
{
NowSum = 0;
for(j = 0;j < n;j++)
{
NowSum += p[i][j];
}

题目:判断101-200之间有多少个素数,并输出所有素数。

if(NowSum != sum)
{
YesOrNo = false;

1.程序分析:判断素数的方法:用一个数分别去除2到sqrt,如果能被整除,

goto END;
}
}

      则表明此数不是素数,反之是素数。       

for(i = 0;i < n;i++)//每列是否相等
{
NowSum = 0;
for(j = 0;j < n;j++)
{
NowSum += p[j][i];
}

2.程序源代码:

if(NowSum != sum)
{
YesOrNo = false;

#include<stdio.h>

goto END;
}
}

#include<math.h>

NowSum = 0;
for(i = 0,j = 0;i < n,j < n;i++,j++)//主对角线是否相等
{
NowSum += p[i][j];
}
if(NowSum != sum)
{
YesOrNo = false;

void main(){

goto END;
}

int k=0,leap=1;

NowSum = 0;
for(i = n-1,j = 0;i >= 0,j < n;i--,j++)//次对角线是否相等
{
NowSum += p[i][j];
}
if(NowSum != sum)
{
YesOrNo = false;

for(int n=101;n<=200;n++){ //101--200

goto END;
}

for(int i=2;i<=sqrt{ //2--sqrt

END:
return YesOrNo;
}
void combination(int **p,int n,int *a)//求m = n*n个数(1,2,3.....m)的全排列
{
int m = n*n;
static int Num = 0;
int *b_val = new int[m];
int c = 0,k,i,j;

if{

b_val[c] = -1;//一维数组首地址的值赋-1 c[0]-1
while(b_val[0] < m) //-1
{
if(++b_val[c] < m) //分别从0开始累加每个元素值,并限制不超出最大阶数
                 //b[0]0 [1]0 [1]1 [2]0 [2]1 [2]2...[6]6...[7]0...[7]7 [8]0...[8]8 判断魔方 [8]9 012345678
                      //                                               [7]8 [8]0...[8]7 判断魔方 [8]8 [8]9 012345687
     //                                 [6]7...[7]0...[7]6        [8]8 012345768
                                           //         012345786
     //                                                                012345867 ...
           //      876543210
{  
for(k = 0;k < c;k++) //是否与前面数字重复,如有重复元素跳出,否则使K下标等于C下标                                 
if(b_val[k] == b_val[c])                                                    
break;
   
if(k == c)//如果没有重复元素,就可以确定当前元素值,并继续排列下一个下标的数组元素
{
if(c+1 < m) //1 2 3...7 8   如果不满足条件,则生成了一组排列方式,否则继续排列下一个元素
           //          8
{   
++c; //1 2 3...7 8
//          8
b_val[c] = -1;
//   continue;
}
else  //生成了一组排列方式
{
k = -1;
for(i = 0;i < n;i++)
{
for(j = 0;j < n;j++)
{
p[i][j] = a[b_val[++k]];//a[0]-a[8]
}
}

leap=0;

//判断是否为n阶魔方阵
if(Judge(p,n))
{
printA(p,n);
}
}
}
}
else
{
c--;
}
}

break;

delete []b_val;
}
void evaluate(int **p,int n)//给n阶方阵的元素赋值
{
int i;

}

int *AllNum = new int[3*3];
for(i = 1;i <= n*n;i++)
{
AllNum[i - 1] = i;
}

}

combination(p,n,AllNum);

if{

delete []AllNum;
}
void main()
{
int i,n,**a;
string s;

printf;

do
{
//输入n阶方阵的阶数n
cout<<"请输入n阶方阵的阶数n(退出程序按e或E键):";
cin>>s;

k++;

if(!strcmp(s.c_str(),"e") || !strcmp(s.c_str(),"E"))
{
break;
}
else if(s.find_first_not_of("0123456789") != string::npos)
{
cout<<"请输入有效的数字,不能含有非数字的字符。"<<endl;

if printf;

continue;
}
else
{
n = atoi(s.c_str());

}

if(n < 1)
{
cout<<"请输入有效的数字,必须 >= 1。"<<endl;

leap=1;

continue;
}

}

//分配内存
a = new int*[n];
for(i = 0; i < n; i++)
{
a[i] = new int[n];
}

printf("nThe total is %dn",k);

cout<<"正在运算,请等待。。。。。。"<<endl;

}

//给n阶方阵的元素赋值
evaluate(a,n);

/*

cout<<"运算结束!"<<endl;

101 103 107 109 113 127 131 137 139 149

for(i = 0; i < n; i++)
{
delete []a[i];
}
delete []a;
}
}while(1);

151 157 163 167 173 179 181 191 193 197

return;
}

199

/* 5、求一个3x3矩阵对角线元素之和。*/
#include<iostream.h>
int dia(int a[][3]);
void main()
{
int i,j,sum,a[3][3]={2,3,5,6,2,3,1,9,0};
cout<<"a= ";
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
cout<<a[i][j];
cout<<endl<<"   ";
}
sum=dia(a);
cout<<"nsum="<<sum<<endl;
}
int dia(int a[3][3])
{
int i,j,sum=0;
for(i=0;i<3;i++)//主对角线之和
for(j=i;j<=i;j++)
sum+=a[i][j];
for(j=0;j<3;j++)//另一个对角线之和
for(i=2-j;i<=2-j;i++)
if(i!=j)//避免重复累加两个对焦向重合的元素
sum+=a[i][j];
return sum;//返回对角线员素之和
}

The total is 21

/* 6、编写一个程序,将字符数组s2中的全部字符拷贝到字符数组s1中。不用strcpy函数。拷贝时,‘’也要拷贝过去。 ‘’后面的字符不拷贝。*/
#include<iostream.h>
void scopy(char a[],char b[]);
void main()
{
int i;
char a[10];
char b[10]="Hello";
scopy(a,b);
for(i=0;a[i]!='';i++)
cout<<a[i];
cout<<endl;
}
void scopy(char a[],char b[])
{
int i;
for(i=0;b[i]!='';i++)
{
a[i]=b[i];
}
a[i]='';
}

Press any key to continue

/* 7、用筛选法求100之内的素数。(所谓素数就是除了1和它本身以外,不能再被别的整数整除,这种数称作素数(也称质数)。)*/
#include<iostream.h>
void main()
{
int i,j;
for(i=1;i<=100;i++)
{
for(j=2;j<i;j++)//判断素数
if(i%j!=0);
else break;//不是素数
if(i==j)//相等为素数
cout<<" "<<i;
}
cout<<endl;
}

*/

/* 8、用选择法对10个整数排序。*/
#include<iostream.h>
void csort(int a[10]);
void main()
{
int i;
int a[10]={6,4,2,7,9,0,1,6,3,0};
for(i=0;i<10;i++)//输出原数组数据顺序
cout<<a[i];
cout<<endl;
csort(a);
for(i=0;i<10;i++)//输出排序后的顺序
cout<<a[i];
cout<<endl;
}
void csort(int a[10])//排序
{
int i,j,k,temp=0;
for(i=1;i<10;i++)
{
k=i;
for(j=k+1;j<10;j++)//找出最小数的数组下标
if(a[k]>a[j])k=j;
if(k!=i)
{
temp=a[i];//把数放到正确位置
a[i]=a[k];
a[k]=temp;
}
}
}

==============================================================

第6章   指针

题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数

/* 1、在主函数中输入10个字符串。用另一函数对它们排序。然后在主函数输出这10个已排好序的字符串。(用指针实现)*/
#include<iostream.h>
void psort(int *p);
void main()
{
int i,a[10];
cout<<"please input ten numbers:n";
for(i=0;i<10;i++)
cin>>a[i];
psort(a);
cout<<"resort result=";
for(i=0;i<10;i++)
cout<<a[i]<<" ";
}
void psort(int *p)
{
int i,j,temp;
for(i=0;i<10;i++) //每循环一次确定数组中一个数的位置
for(j=i+1;j<10;j++) //每次循环对比一个数的大小
{
if(p[i]>p[j])
{
temp=p[j];
p[j]=p[i];
p[i]=temp;
}
}

   本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。

}

1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。

/* 2、输入一个字符串,内有数字和非数字字符,如A123x456 1233?8997jhlkll
将其中连续的数字作为一个整数,依次存放到一数组a中,统计共有多少个整数,并输出这些数。*/
#include<iostream.h>
#include<string.h>
#include <windows.h>
int charge(int *,char *);
void main()
{
int a[50],i,numb;
char b[50];
cout<<"please input a character string:"<<endl;
cin.getline(b,50);
system("cls");
cout<<"your character string is ";
cout.write(b,strlen(b))<<endl;
numb=charge(a,b);
for(i=0;i<numb;i++)
cout<<" a["<<i<<"]="<<a[i];
cout<<endl<<"total numbers="<<numb<<endl;
}
int charge(int *q,char *p)//*q指向新数组,*p指向初始数组
{
int numb=0;
for(;*p!='';p++)//判断每个字符
{
if(*p>='0'&&*p<='9')
{
*q=(*p)-'0';//将字符型整数转换成整型整数赋值给新数组
p++;
while(*p>='0'&&*p<='9')//判断是否有连续字符型整数
{
*q=(*q)*10+((*p)-'0');//将连续字符型整数转换成一个整型整数赋值给新数组
p++;
}
q++;
numb++;//统计整数的个数
}
}
return numb;
}

2.程序源代码:

/* 3、用指向指针的指针的方法对5个字符串排序并输出。*/
#include <iostream.h>
#include <string.h>
void sort(char **str);
void main()
{
int i;
char *string[5];
cout<<"输入5个字符串:"<<endl;
for(i=0;i<5;i++)
{
string[i] = new char[10];
cin.getline(*(string+i),50);
}
sort(string);
for(i=0;i<5;i++)
delete [] string[i];
}
void sort(char **str)
{
int i=0,j;
char *p=0;
for(i=0;i<4;i++)
{
for(j=i+1;j<5;j++)
{
if(strcmp(*(str+i),*(str+j))<0)
{
p=*(str+i);
*(str+i)=*(str+j);
*(str+j)=p;
}
}
}
cout<<"after sort the chars :"<<endl;
for(i=0;i<5;i++)
{
cout<<*(str+i)<<endl;
}
}

#include<stdio.h>

/* 4、统计一字符串在另一个字符串中出现的次数。*/
#include<iostream.h>
#include<string.h>
int change(char *,char *);
void main()
{
int sum;
char a[10]="dog";
char b[20]="sdlkdogsddydodog";
cout.write(a,10)<<endl;
cout.write(b,20)<<endl;
sum=change(a,b);
cout<<"sum="<<sum<<endl;
}
int change(char *p,char *q)
{
    int sum=0,i=0;
while(*q!='')
{
while(*p==*q&&*p!='')//对比是否含有相等字符串
{
*p++;
*q++;
i++;
}
if(*p=='')
{
sum+=1;//含有字符串个数
}
p=p-i;//第一个字符串重新定位
q=q-i;//第二个字符串重新定位
i=0;//重新累加移动次数
q++;
}
return sum;
}

void main(){

/* 5、有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数.n和m从键盘输入。*/
#include<iostream.h>
#include<string.h>
void charge(int a[],int,int);
void main()
{
int i,n,m,a[50];
cout<<"请输入n的值:";
cin>>n;
cout<<"请输入移动位数:";
cin>>m;
cout<<"请输入整数:";
for(i=0;i<n;i++)
{
cin>>a[i];
}
cout<<"您输入的整数为:";
for(i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
charge(a,n,m);
cout<<"移动后的整数为:";
for(i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
}
void charge(int a[],int n, int m)//n为整数个数,向右移动m个位置
{
int i,j;
for(j=0;j<m;j++)//移动m个位置
{
for(i=n-1;i>=0;i--)//移动一个位置就要移动每一个数组元素
{
a[i+1]=a[i];
}
a[0]=a[n];
}
}

int a,b,c;

/* 6、有n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。*/
#include<iostream.h>
void change(int a[],int n);
void main()
{
int i,a[50],n;
cout<<"输入人数:";
cin>>n;
for(i=0;i<n;i++)
a[i]=i+1;
change(a,n);
}
void change(int a[],int n)
{
int qnumber=0,i=0,k=0;
while(n-qnumber>1)//直到只剩下1人时
{
if(a[i]!=0)k++; //报数
if(k==3)
{
a[i]=0; //退出圈子的人
qnumber++; //退出的总人数
k=0; //重新开始报数
}
i++;
if(i==n)i=0; //当所有人都报过数之后重新每人再次报数
}
for(i=0;i<n;i++)
if(a[i]!=0)cout<<a[i]<<" ";
}

int n;

/* 7、写一函数,实现两个字符串的比较。即自己写一个strcmp函数。*/
#include<iostream.h>
#include<string.h>
int change(char *,char *);
void main()
{
int result;
char a[10]="dog";
char b[20]="sdlkdogsddydodog";
cout.write(a,10)<<endl;
cout.write(b,20)<<endl;
result=change(a,b);
cout<<"result="<<result<<endl;
}
int change(char *p,char *q)
{
    int sum=0,i=0,flag=0;
while(*p!=''&&*q!='')
{
if(*p>*q)
{
flag=1;//第一个字符串大于第二个字符串返回1
break;
}
if(*p<*q)
{
flag=-1;//第二一个字符串大于第一个字符串返回-1
break;
}
if((*p==*q)&&*(p+1)==''&&*(q+1)!='')
{
flag=-1;//第二一个字符串大于第一个字符串返回-1
break;
}
*p++;
*q++;
}
return flag;
}

printf("water flower'munber is: ");

/* 8、将一个5 x 5的矩阵中最大的元素放在中心,四个角分别放四个最小的元素(顺序为从左到右,从上到下顺序依次从小到大存放),写一函数实现之。用main函数调用。*/
#include<iostream.h>
void psort(int a[]);
void main()
{
int i;
int a[25]={5,3,52,6,2,1,8,0,23,56,7,21,23,4,57,62,15,31,45,6,43,78,12,53,41};
for(i=0;i<25;i++)
{
cout<<" "<<a[i];
}
cout<<endl;
psort(a);
}
void psort(int a[])
{
int i,j,k=0,temp,b[5][5];
for(i=0;i<25;i++) //每循环一次确定数组中一个数的位置
for(j=i+1;j<25;j++) //每次循环对比一个数的大小
{
if(a[i]>a[j])
{
temp=a[j];
a[j]=a[i];
a[i]=temp;
}
}
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{
b[i][j]=a[k++];
}
temp=b[4][4]; //确定5个位置的数值
b[4][4]=b[2][2];
b[2][2]=temp;
temp=b[0][1];
b[0][1]=b[0][4];
b[0][4]=temp;
temp=b[0][2];
b[0][2]=b[4][0];
b[4][0]=temp;
temp=b[0][3];
b[0][3]=b[4][4];
b[4][4]=temp;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
cout<<"t"<<b[i][j];
}
cout<<endl;
}
}

for(n=100;n<=999;n++){

第7章 结构体与共用体

a=n/100; //百位

/* 1、用指针和结构体实现一双向链表,并实现其相应的增、删、遍历功能,并在实例中应用它。*/
#include <iostream.h>

b=n%100/10; //十位

typedef struct node
{
int number;

c=n%10; //个位

struct node *next;
struct node *parent;
}Node,*LinkNode;

if(n=a*a*a+b*b*b+c*c*c){

class LinkClass
{
public:
LinkNode first,current;//头指针,当前指针
void init();//初始化函数
LinkNode Insert(int data,LinkNode cur);//插入函数
void Remove(LinkNode p);//删除函数
void Prior(LinkNode head);//遍历函数
};

printf;

void LinkClass::init()
{
struct node *head=new struct node;
struct node *tail=new struct node;

}

head->parent=NULL;
head->next=tail;
tail->parent=head;
tail->next=NULL;
first=current=head;
}

}

LinkNode LinkClass::Insert(int data,LinkNode cur)
{
struct node *newNode=new struct node;
newNode->number = data;
newNode->next = cur->next;
cur->next = newNode;
newNode->parent = cur;
newNode->next->parent = newNode;
cur=newNode;
return cur;
}

printf;

void LinkClass::Prior(LinkNode head)
{
LinkNode cur=head->next;
while(cur->next!=NULL)
{
cout<<cur->number<<" ";
cur=cur->next;
}
cout<<""<<endl;
}

}

void LinkClass::Remove(LinkNode cur)
{
LinkNode temp=cur;
temp->parent->next=temp->next;
temp->next->parent=temp->parent;
delete(temp);
}

/*

void main()
{
LinkClass lc;
lc.init();
LinkNode cur=lc.current;
for(int i=0;i<=10;i++)//用循环来初始化结构体内的number
{
cur=lc.Insert(i,cur);//调用插入函数
}
LinkNode head=lc.first;
cout<<"没调用删除函数的遍历:"<<endl;
lc.Prior(head);//遍历函数
for(int j=0;j<=3;j++)//删除元素6
{
cur=cur->parent;
}
lc.Remove(cur);//执行删除函数
cout<<"调用删除函数后的遍历:"<<endl;
lc.Prior(head);
}

water flower'munber is: 1 8 729 370 371 378 1099

/* 2、用指针和结构体实现栈及其方法,并在实例中应用它。*/
#include <stdlib.h>
#include <iostream.h>

Press any key to continue

#define STACK_INIT_SIZE 100
#define STACKIN 10

*/

struct stack
{
int *top;
int *base;
int stacksize;
    int initstack(stack &s)
{
s.base=(int *)malloc(STACK_INIT_SIZE * sizeof(int));
if(!s.base) return 0;
s.top=s.base;
s.stacksize =STACK_INIT_SIZE;
return 1;

==============================================================

}
int gettop(stack s,int &e)
{
if(s.top ==s.base) return 0;
e=*(s.top-1);
return 1;
}
int push(stack &s,int e)
{
if(s.top -s.base>=s.stacksize)
{
s.base=(int *)realloc(s.base,(s.stacksize + STACKIN)*sizeof(int));
if(!s.base) return 0;
s.top =s.base+s.stacksize;
s.stacksize +=STACKIN;
}
*s.top++=e;
return 1;
}
int pop(stack &s,int &e)
{
if (s.top ==s.base)return 0;
e=*--s.top;
return 1;
}
};

题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

void main()
{
stack s;
int result,e=0;
result=s.initstack(s);
if(result==1)
cout<<"建栈成功!"<<endl;
else
cout<<"建栈失败!"<<endl;
for(int i=0;i<5;i++)
result=s.push(s,i);
if(result==1)
cout<<"初始化栈成功!"<<endl;
else
cout<<"初始化栈失败!"<<endl;
s.gettop(s,e);
cout<<"栈顶元素为:"<<e<<endl;
result=s.pop(s,e);
if(result==1)
cout<<"删除栈顶元素成功!"<<endl;
else
cout<<"删除栈顶元素失败!"<<endl;
s.pop(s,e);
cout<<"删除的栈顶元素为:"<<e<<endl;
}

程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:

/* 3、编写一函数print,打印一个学生的成绩数组,该数组中有5个学生的数据记录,每个记录包括num、name、score[3],用主函数输入这些记录,用print函数输出这些记录。
   4、在上题的基础上,编写一个函数input,用来输入5个学生的数据记录。*/
#include <string.h>
#include <iostream.h>

如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。

struct student
{
public:
int num;
char name[20];
int score[3];
};

如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,

class contral
{
public:
void print(struct student *p,int count);
int input(struct student *p,int count);
};

 重复执行第一步。

void contral::print(struct student *p,int count)
{
for(int i=0;i<=count;i++)
{
cout<<"Num:"<<p->num<<endl;
cout<<"Name:"<<p->name<<endl;
cout<<"JAVA:"<<p->score[0]<<endl;
cout<<"C++:"<<p->score[1]<<endl;
cout<<"English:"<<p->score[2]<<endl;
p++;
}
}

如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

int contral::input(struct student *p,int count)
{
while(true)
{
cout<<"请输入学号:"<<endl;
cin>>p->num;
cout<<"请输入姓名:"<<endl;
cin>>p->name;
cout<<"请输入JAVA分数:"<<endl;
cin>>p->score[0];
cout<<"请输入C++分数:"<<endl;
cin>>p->score[1];
cout<<"请输入English分数:"<<endl;
cin>>p->score[2];
p++;
count++;
cout<<"输入Q退出,输入其它继续"<<endl;
char str[8];
cin>>str;
if(strcmp(str, "q")==0)
{
break;
}
}
return count;
}

2.程序源代码:

void main()
{
int count=0;
contral con;
student NewS[100];
student *p=NewS;
count=con.input(p,count);
cout<<count<<endl;
con.print(p,count-1);
}

#include<stdio.h>

/* 5、将一个链表按逆序排列,即将链头当链尾,链尾当链头。*/
#include<iostream.h>

void main(){

struct num
{
int data;
struct num *next;
};

int n;

void fan(struct num  node1[])
{

printf("Please input a number: ");

for(int i=9;i>=0;i--)
{
node1[i].next=&node1[i-1];
}
}

scanf("%d",&n);

void main()
{
     struct num  node[10];
     for(int i=0;i<10;i++)
{
       node[i].data=i;
}
     for(int j=0;j<10;j++)
cout<<node[j].data;
     fan(node);
cout<<endl;
cout<<node[9].data;
     for(int k=9;k>0;k--)
cout<<(node[k].next)->data;
}
第8章   类和对象

printf;

/*1、自定义一个字符串处理类CString,且能实现取子串、删除子串的功能。*/
#include<iostream.h>

for(int i=2;i<=n;i++){

#define MAX_LENGTH 100

while{

class CString
{
public:
void cpystring(char *str);
void getSubstring(int beginStr,int endStr);
void delSubstring(int beginStr,int endStr);
void print();
private:
char cstr[MAX_LENGTH];
int length;
};

if{

#include"CString.h"
#include"string.h"

printf("%d * ",i);

void CString::cpystring(char *str)
{
int i=0;
while(*str!='')
{
cstr[i++]=*str;
str++;
}
cstr[i]='';
}

n=n/i;

void CString::getSubstring(int beginStr,int endStr)
{
int i,j=0;
char pstr[MAX_LENGTH];
if(beginStr<0||endStr>MAX_LENGTH||beginStr>endStr)
{
cout<<"error!"<<endl;
}
for(i=beginStr;i<endStr;i++,j++)
{
pstr[j]=cstr[i];
}
pstr[j]='';
cpystring(pstr);
}

}else

void CString::delSubstring(int beginStr,int endStr)
{
int i,j=0;
char pstr[MAX_LENGTH];
if(beginStr<0||endStr>MAX_LENGTH||beginStr>endStr)
{
cout<<"error!"<<endl;
}
for(i=0;i<beginStr;i++,j++)
{
pstr[j]=cstr[i];
}
for(i=endStr+1;i<strlen(cstr);i++,j++)
{
pstr[j]=cstr[i];
}
pstr[j]='';
cpystring(pstr);
}

break;

void CString::print()
{
cout<<cstr<<endl;
}

}

#include<iostream.h>
#include"CString.h"

}

main ()
{
CString str1,str2,str3;
str1.cpystring("Just like before, it's yesterday once more!");//初始化str1
str2=str1;
str3=str1;
str2.getSubstring(5,9);//截取字符串
str3.delSubstring(10,16);//删除字符串
str1.print();
str2.print();
str3.print();
}

printf;

/*2、定义一个循环队列类,且实现其相关的成员操作函数,并实例化调用之。*/
CircularQueue.h文件:
*********************************************************************
#define MAX_SIZE 101

printf;

class CircularQueue
{
private:
int queue[MAX_SIZE];
int front;
int rear;

}

public:
CircularQueue();
virtual ~CircularQueue();
bool isEmpty();
bool isFull();
bool push(int);
int pop();
};
*********************************************************************

/*

CircularQueue.cpp文件:
*********************************************************************
#include "CircularQueue.h"

Please input a number: 90

CircularQueue::CircularQueue()
{
front = 0;
rear = 0;
}

90= 2 * 3 * 3 * 5

CircularQueue::~CircularQueue()
{

Press any key to continue

}

*/

bool CircularQueue::isFull()
{
if ((rear+1)%MAX_SIZE == front)
{
return true;
}
else
{
return false;
}
}

==============================================================

bool CircularQueue::isEmpty()
{
if (rear == front)
{
return true;
}
else
{
return false;
}
}

题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,

bool CircularQueue::push(int e)
{
if (isFull())
{
return false;
}

   60分以下的用C表示。

queue[rear] = e;
rear = ++rear % MAX_SIZE;
return true;
}

1.程序分析:?a:b这是条件运算符的基本例子。

CircularQueue::pop()
{
if (isEmpty())
{
return 0;
}

2.程序源代码:

int e = queue[front];
front = ++front % MAX_SIZE;
return e;
}
*********************************************************************

#include<stdio.h>

main.cpp文件
*********************************************************************
#include "CircularQueue.h"
#include <iostream>

void main(){

using namespace std;

int score;

void main()
{
CircularQueue cQueue;
for (int i=0 ; i<75; i++)
{
cQueue.push(i);
}

char grade;

for (i=0; i<50; i++)
{
cout << cQueue.pop() << " ";
}
cout << endl;

printf("Please input a score: ");

for (i=0; i<60; i++)
{
cQueue.push(i);
}

scanf("%d",&score);

for (i=0; i<85; i++)
{
cout << cQueue.pop() << " ";
}
cout << endl;
}
*********************************************************************
第9章   运算符重载

grade=score>=90?'A':(score>=60?'B':'C');

/*1、定义一个二维向量类Vector,并在该类中用成员函数方式重载一元运算符++(前、后缀)和二元运算符+。*/
class Vector
{
public:
Vector();
Vector(int x,int y);
operator ++();
Vector operator ++(int);
Vector operator +(const Vector &a);
void display();
private:
int x,y;
};

printf("%d belongs to %c n",score,grade);

#include<iostream.h>
#include"Vector.h"

}

Vector::Vector(){}
Vector::Vector(int x,int y)
{
this->x=x;
this->y=y;
}
Vector::operator ++() {++x;++y;}
Vector Vector::operator ++(int)
{
Vector s;
s.x=x++;
s.y=y++;
return s;
}
Vector Vector::operator +(const Vector &v)
{
Vector sum;
sum.x=x+v.x;
sum.y=y+v.y;
return sum;
}
void Vector::display()
{
cout<<"("<<x<<","<<y<<")"<<endl;
}

/*

#include<iostream.h>
#include"Vector.h"

Please input a score: 91

void main()
{
Vector v1(3,4),v2(1,2),v3;
cout<<"v1=";v1.display();
cout<<"v2=";v2.display();
++v1;
cout<<"++v1=";v1.display();
cout<<"v2++=";(v2++).display();
cout<<"v2=";v2.display();
v3=v1+v2;
cout<<"v1+v2=";v3.display();
}

91 belongs to A

/*2、将第一题中的相关重载项改为用友元函数的方式重载。*/
class Vector
{
public:
Vector();
Vector(int x,int y);
friend void operator ++(Vector &v);
friend void operator ++(Vector &v,int);
friend Vector operator +(const Vector &v1,const Vector &v2);
void display();
private:
int x,y;
};

Press any key to continue

#include<iostream.h>
#include"Vector.h"

Please input a score: 87

Vector::Vector(){}
Vector::Vector(int x,int y)
{
this->x=x;
this->y=y;
}
void operator ++(Vector &v) {++v.x;++v.y;}
Vector operator ++(Vector &v,int)
{
Vector before(v.x,v.y);
v.x++;
v.y++;
return before;
}
Vector operator +(const Vector &v1,const Vector &v2)
{
Vector sum;
sum.x=v1.x+v2.x;
sum.y=v1.y+v2.y;
return sum;
}
void Vector::display()
{
cout<<"("<<x<<","<<y<<")"<<endl;
}

87 belongs to B

#include<iostream.h>
#include"Vector.h"

Press any key to continue

void main()
{
Vector v1(3,4),v2(1,2),v3;
cout<<"v1=";v1.display();
cout<<"v2=";v2.display();
++v1;
cout<<"++v1=";v1.display();
cout<<"v2++=";(v2++).display();
cout<<"v2=";v2.display();
v3=v1+v2;
cout<<"v1+v2=";v3.display();
}

Please input a score: 50

/*3、重载字符串处理类CString的“=”号和“+”号运算符。*/
class Cstring
{
public:
Cstring(char *pn);
~Cstring();
Cstring& operator=(Cstring &c);
Cstring& operator+(Cstring &c);
void display();
private:
char *p;
};

50 belongs to C

#include<iostream.h>
#include<string.h>
#include"Cstring.h"

Press any key to continue

Cstring::Cstring(char *pn)
{
p=new char[strlen(pn)+1];
strcpy(p,pn);
}

*/

Cstring::~Cstring()
{
delete []p;
}

==============================================================

Cstring& Cstring::operator=(Cstring &s)
{
delete []p;
p=new char[strlen(s.p)+1];
strcpy(p,s.p);
return *this;
}

题目:输入两个正整数m和n,求其最大公约数和最小公倍数。

Cstring& Cstring::operator+(Cstring &s)
{
char *pp = new char[strlen(p)+strlen(s.p)+1];
strcpy(pp,p);
strcat(pp,s.p);
delete []p;
p = pp;
return *this;
}

1.程序分析:利用辗除法。

void Cstring::display()
{
cout<<p<<endl;
}

2.程序源代码:

#include<iostream.h>
#include <string.h>
#include"Cstring.h"

#include<stdio.h>

void main()
{
Cstring s1("first hello");
Cstring s2("second hello");
cout<<"赋值之前:"<<endl;
cout<<"s1=";
s1.display();
cout<<"s2=";
s2.display();
cout<<"赋值之后:"<<endl;
s1=s2;
cout<<"s1=";
s1.display();
cout<<"s2=";
s2.display();
cout<<"相加之后:"<<endl;
cout<<"s1+s2"<<endl;
(s1+s2).display();
}
第11章 继承和派生类

void main(){

/*1、利用虚基类,消除“两性人”中的冗余数据:姓名、年龄,并编程实现之。*/
class Person 
{
public:
Person(char *name,int age);
Person();
virtual ~Person();

int m,n,temp,a,b;

protected:
int age;
char name[20];
};

printf("Please input two numbers: ");

#include "Person.h"
#include <string.h>

scanf("%d %d",&m,&n);

Person::Person(char *name, int age)
{
strcpy(this->name,name);
this->age = age;
}

if{

class Man: virtual public Person
{
public:
Man(char *name,int age,char *sex);
Man();
virtual ~Man();

temp=m;

protected:
char sex[8];
};

m=n;

#include "Man.h"
#include "Person.h"
#include <string.h>

n=temp;

Man::Man(char *name,int age,char *sex):Person(name,age)
{
strcpy(this->sex,sex);
}

}

#include"Person.h"

a=m;

class Woman: virtual public Person 
{
public:
Woman(char *name,int age,char *sex);
Woman();
virtual ~Woman();

b=n;

protected:
char sex[8];
};

while{

#include "Woman.h"
#include "Person.h"
#include <string.h>

temp=a%b;

Woman::Woman(char *name,int age,char *sex):Person(name,age)
{
strcpy(this->sex,sex);
}

a=b;

class Transexual:public Man,public Woman
{
public:
print();
Transexual(char *name, int age, char *sex1,char *sex2);
Transexual();
virtual ~Transexual();

b=temp;

};

}

#include "Transexual.h"
#include "Man.h"
#include "Woman.h"
#include "Person.h"
#include <iostream.h>

printf("最大公约数为:%dn",a);

Transexual::Transexual(char *name, int age, char *sex1,char *sex2):Person(name,age),Man(name,age,sex1),Woman(name,age,sex2)
{

printf("最小公倍数为:%dn",n*m/a);

}

}

Transexual::print()
{
cout<<"姓名:"<<name<<endl;
cout<<"年龄:"<<age<<endl;
cout<<"性别:"<<Man::sex<<" "<<Woman::sex<<endl;
}

/*

/*2、通过Point类派生出Circle和Rectangle类,再通过Circle和Rectangle派生出“足球场图形”类Football,并实例化调用Football这个类,且用cout打印跟踪所有类的构造函数和析构函数的调用过程。(注:下面是这几个类的图形描述,且要求每个类都重载构造函数,且都不用默认构造函数)*/
#include<iostream.h>

Please input two numbers: 12 3

class Point{
public:
Point(double x){
this->x=x;
cout<<"Point Constructor called"<<endl;
}
~Point(){
cout<<"Point Destructor called"<<endl;
}
protected:
double x;
};

最大公约数为:3

#include<iostream.h>
#define PI 3.14159265

最小公倍数为:12

class Circle:virtual public Point{
public:
Circle(double x):Point(x){
cout<<"Circle Constructor called"<<endl;
}
~Circle(){
cout<<"Circle Destructor called"<<endl;
}
void setCarea(){
carea=PI*x/2*x/2;
}
double getCarea(){
return carea;
}
protected:
double carea;

Press any key to continue

};

*/

#include<iostream.h>

==============================================================

class Rectangle:virtual public Point{
public:
Rectangle(double x,double y):Point(x){
this->y=y;
cout<<"Rectangle Constructor called"<<endl;
}
~Rectangle(){
cout<<"Rectangle Destructor called"<<endl;
}
void setRarea(){
rarea=x*y;
}
double getRarea(){
return rarea;
}
protected:
double y,rarea;
};

题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

#include<iostream.h>
#define PI 3.14159265

1.程序分析:利用while语句,条件为输入的字符不为'n'.

class Football:public Circle,public Rectangle{
public:
Football(double x,double y):Point(x),Circle(x),Rectangle(x,y){
cout<<"Football Constructor called"<<endl;
}
~Football(){
cout<<"Football Destructor called"<<endl;
}
void setFarea(){
farea=x*y+PI*x/2*x/2;
}
double getFarea(){
return farea;
}
protected:
double farea;
};

2.程序源代码:

#include<iostream.h>
#include"Point.h"
#include"Circle.h"
#include"Rectangle.h"
#include"Football.h"

#include<stdio.h>

void main(){
Circle c(10);
Rectangle r(10,20);
Football f(10,20);
c.setCarea();
r.setRarea();
f.setFarea();
cout<<"Circle area:"<<c.getCarea()<<endl;
cout<<"Rectangle area:"<<r.getRarea()<<endl;
cout<<"Football area:"<<f.getFarea()<<endl;
}
第12章   模板

void main(){

/*1、利用C++的模板机制定义单向队列类模板、链表类模板,并实例化应用之。*/
/*单向队列类模板*/
#define MAX_SIZE 50

char c;

template<class T>
class Temqueue
{
private:
T queue[MAX_SIZE];
T front;
T rear;

int letters=0,space=0,digit=0,others=0; //字母、空格、数字、其他字符

public:
Temqueue();
virtual ~Temqueue();
bool isEmpty();
bool isFull();
bool push(T);
T pop();
};

printf("Please input some charactersn");

template<class T>
Temqueue<T>::Temqueue()
{
front = 0;
rear = 0;
}

while((c=getchar{

template<class T>
Temqueue<T>::~Temqueue()
{

if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))

}

letters++;

template<class T>
bool Temqueue<T>::isFull()
{
if ((rear-MAX_SIZE) == front)
{
return true;
}
else
{
return false;
}
}

else if

template<class T>
bool Temqueue<T>::isEmpty()
{
if (rear == front)
{
return true;
}
else
{
return false;
}
}

space++;

template<class T>
bool Temqueue<T>::push(T e)
{
if (isFull())
{
return true;
}
queue[rear] = e;
rear = ++rear;
return true;
}

else if(c>='0'&&c<='9')

template<class T>
T Temqueue<T>::pop()
{
if (isEmpty())
{
return true;
}
T e = queue[front];
front = ++front;
return e;
}

digit++;

#include "Temqueue.h"
#include <iostream>

else

using namespace std;

others++;

void main()
{
int k;
cout<<"请输入要给数列初始化的长度,队列长度为50。"<<endl;
cin>>k;
Temqueue<int> cQueue;
for (int i=0 ; i<k; i++)
{
cQueue.push(i);
}
if(k>0)
{
for (i=0; i<k; i++)
{
if (i>=MAX_SIZE)
{
cout<<"队列已满!"<<endl;
break;
}
else
cout<<cQueue.pop()<< " ";
}
cout<<endl;
}
else
cout<<"队列为空!"<<endl;
}

}

永利平台娱乐,/*链表类模板*/
template<typename T> class List;     //对List类的申明
template<typename T> class Node{     //定义一个描述节点的类
public:
Node();
friend class List<T>;
private:
T data;
Node<T> * next;
};

printf("all in all: English letters=%d space=%d digit=%d others=%dn",letters,space,digit,others);

template<typename T>Node<T>::Node(){
data=0;
next=NULL;
}

}

template<typename T>class List{                     //定义一个描述链表的类
public:
List();                                         //空链表的构造(链表中只含表头结点)
~List();                                        //析构函数
void MakeEmpty();                               //清空链表(删除链表中除表头结点以外的所有结点)
Node<T> * Find(T d);                            //查找数据域与d相同的结点(返回所找到结点的指针)
void PrintList();                               //输出链表中各结点的数据域
void CreateList(); //初始化链表
private:
Node<T> * head,* rear;
};

/*

template<typename T>List<T>::List(){
head=rear=new Node<T>;
}

Please input some characters

template<typename T>void List<T>::MakeEmpty(){
Node<T> *temp;
while(head->next!=NULL){
temp = head->next ;
    head->next = temp->next ;
   delete temp ;
}
rear = head;
}

QJ3409V3O TEU40T93EJT934 34erj%j*a4

template<typename T>List<T>::~List(){
MakeEmpty();
delete head;
}

all in all: English letters=16 space=2 digit=15 others=2

template<typename T>void List<T>::PrintList(){
rear = head->next;
while(rear!=NULL){
cout<<rear->data<<endl ;
rear = rear->next ;
}
}

Press any key to continue

template<typename T>void List<T>::CreateList(){
T d;
cout<<"现在开始创建链表,请依次输入数据(以Ctrl+Z结束):"<<endl;
while(cout<<"请输入:" && cin>>d){
rear->next=new Node<T>;
   rear->next->data=d;
   rear=rear->next;
   rear->next=NULL;
}
}

*/

#include <iostream>
#include "Node.h"
#include "List.h"
using namespace std;

==============================================================

void main(){
List <int>l;
    l.CreateList();
l.PrintList();
cout<<"over!"<<endl;
}

题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时

/*2、定义一个类模板,然后生成其模板类并定义该类模板的派生类模板和派生类。*/
using namespace std;

   共有5个数相加),几个数相加有键盘控制。

template <class T>
class Te{
public:
T te;
};

1.程序分析:关键是计算出每一项的值。

template <class T>
class Tte:public Te<T>{
public:
T tte;
};

2.程序源代码:

class Fte:public Te<int>{
public:
int fte;
};

#include<stdio.h>

#include<iostream>
#include"Te.h"
#include"Tte.h"
#include"Fte.h"

void main(){

void main(){
Te<int> te;
te.te=10;
cout<<"te="<<te.te<<endl;
Tte<int> itte;
itte.tte=20;
cout<<"itte="<<itte.tte<<endl;
Tte<double> dtte;
dtte.tte=3.14;
cout<<"dtte="<<dtte.tte<<endl;
Fte fte;
fte.fte=10;
cout<<"fte="<<fte.fte<<endl;
}
第13章 多态性与虚函数

int a,n,count=1; //数字a,n个数相加

/*1、利用虚函数,实现triangle(三角形),square(矩形),circle(圆)的面积计算函数show_area。*/
using namespace std;

long sn=0,tn=0;

class Shape{
public:
virtual double show_area()=0;
virtual char* shapeName()=0;
};

printf("Please input a and n: ");

class Circle:public Shape{
public:
Circle(double radius){
this->radius=radius;
}
virtual double show_area(){
return 3.14*radius*radius;
}
virtual char* shapeName(){
return "Circle: ";
}
protected:
double radius;
};

scanf("%d %d",&a,&n);

class Square:public Shape{
public:
Square(double length,double width){
this->length=length;
this->width=width;
}
virtual double show_area(){
return length*width;
}
virtual char* shapeName(){
return "Square: ";
}
protected:
double length,width;
};

printf("a=%d,n=%dn",a,n);

class Triangle:public Shape{
public:
Triangle(double length,double height){
this->length=length;
this->height=height;
}
virtual double show_area(){
return length*height/2;
}
virtual char* shapeName(){
return "Triangle: ";
}
protected:
double length,height;
};

while(count<=n){

#include<iostream>
#include"Shape.h"
#include"Circle.h"
#include"Square.h"
#include"Triangle.h"

tn=tn+a;

void main(){
Shape *ptr;
Circle circle(10);
Square square(10,15);
Triangle triangle(10,15);
ptr=&circle;
cout<<ptr->shapeName()<<ptr->show_area()<<endl;
ptr=□
cout<<ptr->shapeName()<<ptr->show_area()<<endl;
ptr=▵
cout<<ptr->shapeName()<<ptr->show_area()<<endl;
}

sn=sn+tn;

/*2、将圆类circle的计算面积和计算周长的功能分别抽象成class area和class perimeter,并在这两个新类中利用纯虚函数功能实现面积和周长的统一调用接口显示函数Show。*/
using namespace std;

a=a*10;

class Circle{
public:
Circle(double radius){
this->radius=radius;
}
virtual double show()=0;
virtual char* shapeName()=0;
protected:
double radius;
};

++count;

class Area:public Circle{
public:
Area(double radius):Circle(radius){
}
virtual double show(){
return 3.14*radius*radius;
}
virtual char* shapeName(){
return "Circle Area: ";
}
};

}

class Perimeter:public Circle{
public:
Perimeter(double radius):Circle(radius){
}
virtual double show(){
return 2*3.14*radius;
}
virtual char* shapeName(){
return "Circle Perimeter: ";
}
};

printf("a+aa+...=%dn",sn);

#include<iostream>
#include"Circle.h"
#include"Area.h"
#include"Perimeter.h"

}

void main(){
Circle *ptr;
Area area(10);
Perimeter perimeter(10);
ptr=&area;
cout<<ptr->shapeName()<<ptr->show()<<endl;
ptr=&perimeter;
cout<<ptr->shapeName()<<ptr->show()<<endl;
}
第14章  I/O流

/*

1、建立一个二进制文件,并对其进行各种操作。
struct i_Data //每个学生记录含准考证号、姓名、英语成绩共3个字段
{
char ID[30];
char name[30];
int score;
};

Please input a and n: 3 4

#include "i_Data.h"
#define NUM 2

a=3,n=4

class Io{
public:
void input(){
fstream infile;
int i;
infile.open("score.dat",ios::out|ios::binary);
if(!infile){
cout<<"score.dat can't writed.n";
abort();
}
for(i=0;i<NUM;i++){
cout<<"请输入第"<<i+1<<"位考生信息:n";
cout<<"input 准考证号:";
cin>>data[i].ID;
cout<<"input 姓名:";
cin>>data[i].name;
cout<<"input 英语成绩:";
cin>>data[i].score;
cout<<endl;
infile.write((char *) &data[i], sizeof(data[i]));
}
infile.close();
system("cls");
}

a+aa+...=3702

void output(){
fstream outfile;
int i;
outfile.open("score.dat",ios::in|ios::binary);
if(!outfile){
cout<<"score.dat can't opened.n";
abort();
}
for(i=0;i<NUM;i++){
outfile.read((char *) &data[i], sizeof(data[i]));
cout<<"第"<<i+1<<"位考生信息为:n";
cout<<"准考证号:"<<data[i].ID<<endl;
cout<<"姓名:"<<data[i].name<<endl;
cout<<"英语成绩:"<<data[i].score<<endl;
cout<<endl;
}
outfile.close();
}
private:
struct i_Data data[NUM];
};

Press any key to continue

#include <iostream>
#include <fstream.h>
#include <stdlib.h>
#include "Io.h"
#define NUM 2

*/

void main() {
Io io;
io.input(); //写入文件
io.output(); //读取文件
}
第15章   异常处理

==============================================================

1、自己写一个程序,在某种条件下抛出各种类型异常(如:整数、字符串、类对象、引用等),再捕捉这些异常,并进行相关处理,保证自己的程序不被中断,让它继续执行。
#include<iostream>
#include<string>
using namespace std;

题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程

class String{
public:
String(char*, int);
class Range{ //异常类1
public:Range(int j):index(j){}
int index;
};
class Size{}; //异常类2
char& operator[](int k){
if(0<=k && k<len)
return p[k];
        throw Range(k);
}
private:char* p;
int len;
static int max;
};

   找出1000以内的所有完数。

int String::max = 20;
String::String(char* str, int si){
if(si<0 || max<si)
   throw Size();
p=new char[si];
strncpy(p, str, si);
len=si;
}

  1. 程序分析:请参照程序<--上页程序14.

void g(String& str){
int num=10;
for(int n=0; n<num; n++)
   cout <<str[n];
cout <<endl;
}

2.程序源代码:

void f()
{
//代码区1
try{
//代码区2
String s("abcdefghijklmnop", 10);
g(s);
}
catch(String::Range r)
{
cerr <<"->out of range: " <<r.index <<endl;
//代码区3
}
catch(String::Size)
{
cerr <<"size illegal!n";
}
cout <<"The program will be continued here.nn";
//代码区4
}

#include<stdio.h>

void main()
{
//代码区5
f();
cout <<"These code is not effected by probably exception in f().n";
}
/*小张同学看到你的一本Java书上写着“Object无处不在”,真的是这样吗?他一眼扫到写字台上一盏可调亮度的台灯。可以用Java表现台灯吗?他请你试试看。基本要求:
1、编写台灯类,台灯具有开关状态和“标准”、“增强”两档可调亮度;台灯具有打开、关闭功能,并可以设置亮度档位;
2、编写主类,显示台灯控制菜单,用户可以根据菜单选项控制不断调整一盏台灯的状态;
3、选择控制菜单的“退出”选项可以结束程序运行。*/
using namespace std;

void main(){

class Light{
public:
Light();
void setStatus(bool status);
bool getStatus();
void setBright(int bright);
int getBright();
void setStyle(int style);
int getStyle();
int input();
void output();
private:
bool status;//表状态:开启或者关闭
int bright;//表亮度
int style;//表亮度类型:普通或者增强
};

int k[10];

#include<iostream>
#include"Light.h"

int n,s,i,m;

void Light::setStatus(bool status){
this->status=status;
}

for(n=2;n<1000;n++){

Light::Light(){
status=false;
bright=3;
style=0;
}

i=-1;

bool Light::getStatus(){
return status;
}

s=n;

void Light::setBright(int bright){
this->bright=bright;
}

for(m=1;m<n;m++){

int Light::getBright(){
return bright;
}

if{

void Light::setStyle(int style){
this->style=style;
}

i++;

int Light::getStyle(){
return style;
}

s=s-m;

int Light::input(){
cout<<"请输入你要输入的值:";
int res=-1;//返回输入的值,
cin>>res;
if(cin.fail()){
cout<<"输入的数据超出范围!";
exit(0);//程序退出
}
return res;
}

k[i]=m;

void Light::output(){
cout<<"当前电灯系统状态为--"<<(this->getStatus()?"开启":"关闭")<<",亮度类型为--"
<<(this->getStyle()==1?"增强":"标准")<<",亮度档位为--"<<this->bright<<endl;
}

}

#include<iostream>
#include"Light.h"

}

void main(){
Light light;
do{
cout<<"---------------<Control Menu>-----------------"<<endl;
cout<<"1-开灯,2-调节状态,3-调节亮度,4-关灯"<<endl;
cout<<"----------------------------------------------"<<endl;
int answer=light.input();
if(answer==1){
light.setStatus(true);
cout<<"系统启用中。。。"<<endl;
light.output();
}
else if(answer==2){
if(!light.getStatus()){
cout<<"警告!系统尚未启动!操作失败!"<<endl;
continue;
}
do{
cout<<"请输入你要调度的状态(0-标准,1-增强):"<<endl;
int style=light.input();
if(style==0 || style==1){
cout<<"操作成功!"<<endl;
light.setStyle(style);
light.output();
break;
}
else{
cout<<"您输入的值超出了选择范围!请重新输入!"<<endl;
continue;
}
}while(true);
}
else if(answer==3){
if(!light.getStatus()){
cout<<"警告!系统尚未启动!操作失败!"<<endl;
continue;
}
do{
cout<<"请输入你要调度的亮度(1--5):"<<endl;
int bright=light.input();;
if( bright>=0 &&  bright<=5){
cout<<"操作成功!"<<endl;
light.setBright(bright);
light.output();
break;
}
else{
cout<<"您输入的值超出了选择范围!请重新输入!"<<endl;
continue;
}
}while(true);
}
else if(answer==4){
if(!light.getStatus()){
cout<<"警告!系统尚未启动!操作失败!"<<endl;
continue;
}
cout<<"系统即将关闭!"<<endl;
light.setStatus(false);
break;
}
else {
cout<<"您输入的值超出了选择范围!请重新输入!"<<endl;
}
}while(true);
}

if{

/*万年历*/
#include<iostream.h>
#include<stdlib.h>
#include<iomanip.h>
void main()
{
int year,month,startyear,today,day0,day1,k,j;
char a,b,c;
int M[12]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int M0[12]={ 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

printf("%d is a wanshun",n);

    do{
do{
cout<<"请输入年份(1990-2020):";
cin>>year;
if(year<1990||year>2020){
cout<<"您输入的年份越界,是否重新输入(Y/N||y/n)?";
cin>>a;
if(a=='Y'||a=='y'){
continue;}
else exit(0);
}
else{break;}
}while(true);
do{
cout<<"请输入月份(1-12):";
cin>>month;
if(month<1||month>12){
cout<<"您输入的月份越界,是否重新输入(Y/N||y/n)?";
cin>>b;
if(b=='Y'||b=='y'){
continue;}
else{exit(0);}
}
else{break;}
}while(true);
//计算有效天数
day0=0;
day1=0;
j=0;
startyear=1990;
    while (startyear != year)
{
     if ((startyear%4==0&&startyear%100!=0)||(startyear%400==0))
         day0 = day0 + 366;
     else
         day0 = day0 + 365;
     startyear++;
}
if((year%4==0&&year%100!=0)||(year%400==0)){
for (int i = 0; i < (month - 1); i++)
            day1 = day1 + M0[i];
            today = day0 + day1;
}
else{
for (int i = 0; i < (month - 1); i++)
            day1 = day1 + M[i];
            today = day0 + day1;
}
//输出部分

}

//闰年输出 
if((year%4==0&&year%100!=0)||(year%400==0)){
cout<<year<<"年"<<month<<"月份的日历如下"<<endl;
cout<<setw(30)<<endl;
cout << setw(8) << "Sun";
        cout << setw(8) << "Mon";
        cout << setw(8) << "Tue";
        cout << setw(8) << "Wed";
        cout << setw(8) << "Thu";
        cout << setw(8) << "Fri";
        cout << setw(8) << "Sat";
        cout << endl;
k=(today%7+1)%7;
for(int i=1; i<=k; i++)
cout<<setw(8)<<"";
for(int g=1; g<=(7-k); g++){
cout<<setw(8)<<g;
}
cout<<endl;
for(int h=8-k; h<=M0[month-1]; h++) {
cout<<setw(8)<<h;
j++;
if(j==7){
j=0;
cout<<endl;
}
}
}
//平年输出
else {
cout<<year<<"年"<<month<<"月份的日历如下"<<endl;
cout<<setw(30)<<""<<endl;
cout << setw(8) << "Sun";
        cout << setw(8) << "Mon";
        cout << setw(8) << "Tue";
        cout << setw(8) << "Wed";
        cout << setw(8) << "Thu";
        cout << setw(8) << "Fri";
        cout << setw(8) << "Sat";
        cout << endl;
k=(today%7+1)%7;
for(int i=1; i<=k; i++)
cout<<setw(8)<<"";
for(int g=1; g<=(7-k); g++){
cout<<setw(8)<<g;
}
cout<<endl;
for(int h=8-k; h<=M[month-1]; h++) {
cout<<setw(8)<<h;
j++;
if(j==7){
j=0;
cout<<endl;
}
}
}
cout<<endl;
cout<<"是否继续输入(Y/N||y/n)?";
cin>>c;
if(c=='Y'||c=='y') continue;
else exit(0);
}while(true);
}

}

}

/*

6 is a wanshu

28 is a wanshu

496 is a wanshu

Press any key to continue

*/

main()

{

static int k[10];

int i,j,n,s;

for(j=2;j<1000;j++)

 {

 n=-1;

 s=j;

  for(i=1;i   {

   if

   { n++;

    s=s-i;

    k[n]=i;

   }

  }

 if

 {

 printf("%d is a wanshu",j);

 for(i=0;i  printf("%d,",k[i]);

 printf("%dn",k[n]);

 }

}

}

==============================================================

题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在

   第10次落地时,共经过多少米?第10次反弹多高?

1.程序分析:见下面注释

2.程序源代码:

#include<stdio.h>

void main(){

float sn=100.0,hn=sn/2;

int n;

for(n=2;n<=10;n++){

sn=sn+2*hn; //第n次落地时共经过的米数

hn=sn/2; //第n次反弹高度

}

printf("the total of road is %f n",sn);

printf("the tenth is %f metersn",hn);

}

/*

the total of road is 51200.000000

the tenth is 25600.000000 meters

Press any key to continue

*/

=============================================================

题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。

2.程序源代码:

#include<stdio.h>

void main(){

int i,j,k;

int n=0;

for(i=1;i<=4;i++){ //以下为三重循环

for(j=1;j<=4;j++){

for(k=1;k<=4;k++){

if(i!=j&&j!=k&&i!=k){ //排除i、j、k相同的情况

printf("%d,%d,%d ",i,j,k);

printf("the number is %d%d%dn",i,j,k);

n++;

}

}

}

}

printf("nA total of number is %dn",n);

}

/*

1,2,3 the number is 123

1,2,4 the number is 124

1,3,2 the number is 132

1,3,4 the number is 134

1,4,2 the number is 142

1,4,3 the number is 143

2,1,3 the number is 213

2,1,4 the number is 214

2,3,1 the number is 231

2,3,4 the number is 234

2,4,1 the number is 241

2,4,3 the number is 243

3,1,2 the number is 312

3,1,4 the number is 314

3,2,1 the number is 321

3,2,4 the number is 324

3,4,1 the number is 341

3,4,2 the number is 342

4,1,2 the number is 412

4,1,3 the number is 413

4,2,1 the number is 421

4,2,3 the number is 423

4,3,1 the number is 431

4,3,2 the number is 432

A total of number is 24

Press any key to continue

*/

==============================================================

题目:企业发放的奖金根据利润提成。利润低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?

1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。      

2.程序源代码:

#include<stdio.h>

void main(){

long int i;

int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;

printf("Please input the profit I:");

scanf("%ld",&i);

bonus1=100000*0.1;

bonus2=bonus1+100000*0.075;

bonus4=bonus2+200000*0.05;

bonus6=bonus4+200000*0.03;

bonus10=bonus6+400000*0.015;

if(i<=100000)

bonus=i*0.1;

else if(i<=200000)

bonus=bonus1+*0.075;

else if(i<=400000)

bonus=bonus2+*0.05;

else if(i<=600000)

bonus=bonus4+*0.03;

else if(i<=1000000)

bonus=bonus6+*0.015;

else

bonus=bonus10+(i-1000000)*0.01;

printf("bonus=%dn",bonus);

}

/*

Please input the profit I:340000

bonus=24500

Press any key to continue

*/

==============================================================

题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。请看具体分析:

2.程序源代码:

#include<stdio.h>

#include<math.h>

void main(){

long int i,x,y;

for(i=1;i<100000;i++){

x=sqrt;//x为加上100后开方后的结果

y=sqrt;//y为再加上168后开方后的结果

if(x*x==i+100&&y*y==i+268)//如果一个数的平方根的平方等于该数,这说明此数是完全平方数

printf("the number is %ldn",i);

}

}

/*

the number is 21

the number is 261

the number is 1581

Press any key to continue

*/

==============================================================

题目:输入某年某月某日,判断这一天是这一年的第几天?

1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。

2.程序源代码:

#include<stdio.h>

void main(){

int day,month,year,sum,leap;

printf("Please input year,month,day: ");

scanf("%d %d %d",&year,&month,&day);

switch{ //先计算某月以前月份的总天数

case 1:sum=0;break;

case 2:sum=31;break;

case 3:sum=59;break;

case 4:sum=90;break;

case 5:sum=120;break;

case 6:sum=151;break;

case 7:sum=181;break;

case 8:sum=212;break;

case 9:sum=243;break;

case 10:sum=273;break;

case 11:sum=304;break;

case 12:sum=334;break;

default:printf("data error");break;

}

sum=sum+day; //再加上某天的天数

if((year%4==0&&year%100!=0)||(year%400==0)) //判断是否是闰年

leap=1;

else

leap=0;

if(leap==1&&month>2) //如果是闰年且月份大于2,总天数应该加一天

sum++;

printf("It is the %dth day.n",sum);

}

/*

Please input year,month,day: 2019 3 1

It is the 60th day.

Press any key to continue

*/

==============================================================

题目:输入三个整数x,y,z,请把这三个数由小到大输出。

1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。

2.程序源代码:

#include<stdio.h>

void main(){

int x,y,z,temp;

printf("Please input three numbers:");

scanf("%d %d %d",&x,&y,&z);

if { //交换x,y的值

temp=x;

x=y;

y=temp;

}

if{ //交换x,z的值

temp=x;

x=z;

z=temp;

}

if{ //交换z,y的值

temp=y;

y=z;

z=temp;

}

printf("small to big: %d %d %dn",x,y,z);

}

/*

Please input three numbers:34 13 23

small to big: 13 23 34

Press any key to continue

*/

==============================================================

题目:用*号输出字母C的图案。

1.程序分析:可先用'*'号在纸上写出字母C,再分行输出。

2.程序源代码:

#include <stdio.h>

void main(){

printf("Hello C-world!n");

printf(" ****n");

printf;

printf;

printf(" ****n");

}

/*

Hello C-world!

****

*

*

****

Press any key to continue

*/

==============================================================

题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful!

1.程序分析:字符共有256个。不同字符,图形不一样。      

2.程序源代码:

#include <stdio.h>

void main(){

char a=32,b=64;

printf("%c%c%c%c%cn",b,a,a,a,b);

printf("%c%c%c%c%cn",a,b,a,b,a);

printf("%c%c%c%c%cn",a,a,b,a,a);

printf("%c%c%c%c%cn",a,b,a,b,a);

printf("%c%c%c%c%cn",b,a,a,a,b);

}

/*

@ @

@ @

@

@ @

@ @

Press any key to continue

*/

==============================================================

题目:输出9*9口诀。

1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。

2.程序源代码:

#include <stdio.h>

void main(){

int i,j,result;

for (i=1;i<=9;i++){

for(j=1;j<=9;j++){

result=i*j;

printf("%d*%d=%-3d",i,j,result);//-3d表示左对齐,占3位

}

printf; //每一行后换行

}

}

/*

1*1=1 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 1*7=7 1*8=8 1*9=9

2*1=2 2*2=4 2*3=6 2*4=8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18

3*1=3 3*2=6 3*3=9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27

4*1=4 4*2=8 4*3=12 4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36

5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 5*6=30 5*7=35 5*8=40 5*9=45

6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 6*7=42 6*8=48 6*9=54

7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 7*8=56 7*9=63

8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 8*9=72

9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81

Press any key to continue

*/

==============================================================

题目:要求输出国际象棋棋盘。

1.程序分析:用i控制行,j来控制列,根据i+j的和的变化来控制输出黑方格,还是白方格。

2.程序源代码:

#include<stdio.h>

void main(){

int i,j;

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

for(j=0;j<8;j++){

if%2==0)

printf("%c%c",219,219);

else

printf;

}

printf;

}

}

/*圹 圹 圹 圹

圹 圹 圹 圹

圹 圹 圹 圹

圹 圹 圹 圹

圹 圹 圹 圹

圹 圹 圹 圹

圹 圹 圹 圹

圹 圹 圹 圹

Press any key to continue

*/

==============================================================

题目:打印楼梯,同时在楼梯上方打印两个笑脸。

1.程序分析:用i控制行,j来控制列,j根据i的变化来控制输出黑方格的个数。

2.程序源代码:

#include<stdio.h>

void main(){

int i,j;

printf; //输出两个笑脸

for(i=1;i<11;i++){

for(j=1;j<=i;j++){

printf("%c%c",219,219);

}

printf;

}

}

/*

..

圹圹

圹圹圹

圹圹圹圹

圹圹圹圹圹

圹圹圹圹圹圹

圹圹圹圹圹圹圹

圹圹圹圹圹圹圹圹

圹圹圹圹圹圹圹圹圹

圹圹圹圹圹圹圹圹圹圹

Press any key to continue

*/

============================================================

题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个

   第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下

   的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

1.程序分析:采取逆向思维的方法,从后往前推断。

2.程序源代码:

#include<stdio.h>

void main(){

int day,x1,x2=1;

for(day=9;day>0;day--){

x1=*2; //第一天的桃子数是第2天桃子数加1后的2倍

x2=x1;

}

printf("the total is %dn",x1);

}

/*

the total is 1534

Press any key to continue

*/

==============================================================

题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定

   比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出

   三队赛手的名单。

1.程序分析:判断素数的方法:用一个数分别去除2到sqrt,如果能被整除,

      则表明此数不是素数,反之是素数。       

2.程序源代码:

#include<stdio.h>

void main(){

char i,j,k; //i是a的对手,j是b的对手,k是c的对手

for(i='x';i<='z';i++){

for(j='x';j<='z';j++){

if{

for(k='x';k<='z';k++){

if(i!=k&&j!=k){

if(i!='x'&&k!='x'&&k!='z')

printf("order is a--%ctb--%ctc--%cn",i,j,k);

}

}

}

}

}

}

/*

order is a--z b--x c--y

Press any key to continue

*/

==============================================================

题目:打印出如下图案

*

***

******

********

******

***

*

1.程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重

      for循环,第一层控制行,第二层控制列。

2.程序源代码:

#include<stdio.h>

void main(){

int i,j,k;

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

for(j=0;j<=2-i;j++){

printf;

}

for(k=0;k<=2*i;k++){

printf;

}

printf;

}

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

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

printf;

}

for(k=0;k<=4-2*i;k++){

printf;

}

printf;

}

}

/*

*

***

*****

*******

*****

***

*

Press any key to continue

*/

==============================================================

题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。

1.程序分析:请抓住分子与分母的变化规律。

2.程序源代码:

#include<stdio.h>

void main(){

int n,t;

float a=2,b=1,s=0;

for(n=1;n<=20;n++){

s=s+a/b;

t=a;

a=a+b;

b=t;

}

printf("sum is %9.6fn",s);

}

/*

sum is 32.660259

Press any key to continue

*/

==============================================================

题目:求1+2!+3!+...+20!的和

1.程序分析:此程序只是把累加变成了累乘。

2.程序源代码:

#include<stdio.h>

void main(){

float n,s=0,t=1;

for(n=1;n<=20;n++){

t*=n;

s+=t;

}

printf("1+2!+3!...+20!=%en",s);

}

/*

1+2!+3!...+20!=2.561327e+018

Press any key to continue

*/

==============================================================

题目:利用递归方法求5!。

1.程序分析:递归公式:fn=fn_1*4!

2.程序源代码:

#include<stdio.h>

int fact{

int sum;

if

sum=1;

else

sum=j*fact;

return sum;

}

void main(){

int i;

int fact;

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

printf(" %d!=%dn",i,fact;

}

/*

0!=1

1!=1

2!=2

3!=6

4!=24

5!=120

Press any key to continue

*/

==============================================================

题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。

1.程序分析:

2.程序源代码:

#include<stdio.h>

void main(){

int i=5;

void palin;

printf("Please input five characters: ");

palin;

printf;

}

void palin{

char next;

if{

next=getchar();

printf("the opposite characters is: ");

putchar;

}

else{

next=getchar();

palin;

TAG标签:
版权声明:本文由永利平台娱乐发布于每日更新,转载请注明出处:   后每个月又生一对兔子,则判断用情况语