第三章
//1.根据下面函数表达式编写一个程序,实现输入x的值后,能计算并输出相应的函数值y:#include
void main(void)
{
double x,y;
cout<<"请输入x: ";
cin>>x;
if(x<0)
y=x*x;
else if(x>=0&&x<1)
y=2.5*x-1;
else
y=3*x+1;
cout<<"x="< } //2.设计一个程序,要求:对从键盘输入的一个不多于5位的正整数,能输出它的位数并输出它的各位数字之和。 #include void main(void) { int x,count=0,sum=0; cout<<"请输入x: "; cin>>x; cout< while(x) { sum=sum+x%10; x=x/10; count++; } cout< } //编程计算s=1! +2! +3! +...+ n! ,n的值从键盘输入,要求输出n和s的值。 #include void main(void) { int n; double t=1, s=0; cout<<"请输入n: "; cin>>n; for(int i=1;i<=n;i++) { t=t*i; s=s+t; } cout<<"n="< } //编程求之值,其中是一个数字,n表示的项数和其最后一项的位数。例如:2+22+222+2222+22222(此时n=5)。 #include void main(void) { int n,a; double s=0,t=0; cout<<"请输入a和n: "; cin>>a>>n; for(int i=1;i<=n;i++) { t=t*10+a; s=s+t; } cout<<"s="< } //5.利用公式:编程计算的近似值,要求计算到最后一项的绝对值小于为止。 #include #include void main(void) { int n=1,flag=1; double pi=1,t=1; while(fabs(t)>1e-5) { flag=-flag; t=flag*1.0/(2*n+1); pi=pi+t; n++; } cout<<"pi="<<4*pi< } //6.编程求出所有的"水仙花数"。所谓"水仙花数"是指一个3位数,其各位数字立方和等于该数本身。例如,153是水仙花数,因为。 #include void main(void) { int a,b,c; for(int i=100;i<1000;i++) { a=i/100; b=i/10%10; c=i%10; if(i==a*a*a+b*b*b+c*c*c) cout< } } //7.编程求满足以下条件的三位整数n,它除以11所得到的商等于n的各位数字的平方和,且其中至少有两位数字相同。例如,131除以11的商为11,各位数字的平方和为11,所以它是满足条件的三位数。 #include void main(void) { int a,b,c; for(int i=100;i<1000;i++) { a=i/100; b=i/10%10; c=i%10; if(i/11==a*a+b*b+c*c&&(a==b||b==c||a==c)) cout< } } //8.设计一个求两正整数m和n的最大公约数的程序。m和n的值由键盘输入。 #include void main(void) { int m,n; cout<<"请输入两个整数: "; cin>>m>>n; for(int i=m;i>=1;i--) if(m%i==0&&n%i==0) break; cout< } 第四章 //1. 设计一个程序,要求输入三个整数,能求出其中的最大数并输出。程序中必须用函数实现求两数中大数的功能 #include int max(int a,int b) { return a>b?a:b; } void main(void) { int a,b,c,maxnumber; cout<<"请输入三个整数: "; cin>>a>>b>>c; maxnumber=max(a,b); maxnumber=max(maxnumber,c); cout< } //2. 设计一个程序,求出100~200之间的所有素数,要求每行输出5个素数。判断一个整数是否为素数用一个函数来实现。 #include int prime(int x) { for(int i=2;i<=x/2;i++) if(x%i==0) return 0; return 1; } void main(void) { int k=0; for(int i=100;i<=200;i++) if(prime(i)) { cout< k++; if(k%5==0) cout< } } //3.回文数是指其各位数字左右对称的整数,例如12321是回文数。定义一个判断回文数的函数,并打印1000~2000之间的所有回文数。 #include int fun(int x) { int s=0; int i=x; while(i) { s=s*10+i%10; i=i/10; } if(s==x) return 1; else return 0; } void main(void) { int k=0; for(int i=1000;i<=2000;i++) if(fun(i)) { cout< k++; if(k%5==0) cout< } } //4.用函数实现求两正整数的最大公约数的功能,并在主函数中调用该函数求出两正整数的最小公倍数。 #include int gys(int a, int b) { for(int i=a;i>=1;i--) if(a%i==0&&b%i==0) return i; return i; } void main(void) { int a,b,t; cout<<"请输入两个正整数: "; cin>>a>>b; t=gys(a,b); cout< } //5. 用递归函数实现Hermite多项式求值。当x>1时,Hermite多项式定义为输入实数x和整数n后,求出Hermite多项式前n项的值 #include double hermite(double x,int n) { double y; if(n==0) y=1; else if(n==1) y=2*x; else y=2*x*hermite(x,n-1)-2*(n-1)*hermite(x,n-2); return y; } void main() { double x,y; int n; cout<<"请输入n和x: "; cin>>n>>x; y=hermite(x,n); cout<<"y="< } //6.分别设计两个函数,一个实现整数的正序输出,另一个则实现反序输出。如输人一个整数3456,则输出3456和6543。 //算法提示:重复除以10求余,直到商为0为止。如3456%10的余数为6,商为345;345%10的余数为5,商为34; //34%10的余数为4,商为3;3%10的余数为3,商为0,至此结束。先输出余数,后递归,则为反序输出; //先递归,后输出余数,则为正序输出。 #include void fun1(int n) { if(n==0) return ; else fun1(n/10); cout< } void fun2(int n) { if(n==0) return; else { cout< fun2(n/10); } } void main() { int n; cout<<"请输入n: "; cin>>n; fun1(n); cout< fun2(n); cout< } 第五章 //编写一个宏MAX(a,b,c),求a,b,c中的最大值。a,b,c从键盘输入。#include #define max(a,b,c) (a>b?a:b)>c?(a>b?a:b):c main( ) { int a,b,c; int maxnumber; cout<<"请输入三个数: "; cin>>a>>b>>c; maxnumber=max(a,b,c); cout<<"最大数为: "< } //已知三角形的三条边a, b, c,则三角形的面积为 #include #include #define s(a,b,c) ((a+b+c)/2) #define area(a,b,c) s(a,b,c)*(s(a,b,c)-a)*(s(a,b,c)-b)*(s(a,b,c)-c) void main( ) { double a,b,c; double ss; cout<<"请输入三角形的三边: "; cin>>a>>b>>c; ss=area(a,b,c); ss=sqrt(ss); cout<<"三角形的面积为: "< } 第六章 //求一个4×4矩阵两对角线元素之和。 #include void main() { int a[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}}; int i,j,s=0; for(i=0;i<4;i++) { for(j=0;j<4;j++) cout< cout< } for(i=0;i<4;i++) s=s+a[i][i]+a[i][3-i]; cout<<"s="< } //输出以下的杨辉三角形(要求输出8行) #include void main() { int a[10][10]; int i,j; for(i=0;i<8;i++) { a[i][0]=1; a[i][i]=1; } for(i=2;i<8;i++) for(j=1;j { a[i][j]=a[i-1][j-1]+a[i-1][j]; } for(i=0;i<8;i++) { for(j=0;j<=i;j++) cout< cout< } } //找出二维数组中的鞍点,即该位置上的元素在该行上最大、在该列上最小。也可能没有鞍点。#include void main() { int a[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}}; int i,j,k,mini,maxj,flag=0,max; for(i=0;i<4;i++) { max=a[i][0]; maxj=0; for(j=1;j<4;j++) { if(max { max=a[i][j]; maxj=j; } } mini=i; for(k=0;k<4;k++) { if(max>a[k][maxj]) { max=a[k][maxj]; mini=k; } } if(mini==i) { flag=1; cout<<"鞍点是: "<<"a["< break; } } if(flag==0) cout<<"没有鞍点!"< } //4.从键盘输入一个字符串,删除字符串中的所有空格后输出。 #include #include void main() { char str[80]; int i,j; cout<<"请输入一行带空格的字符串: "; cin.getline (str,80); i=0; while(str[i]) { if(str[i]==' ') { j=i; while(str[j]) { str[j]=str[j+1]; j++; } i--; } i++; } cout<<"删除空格的字符串为: "; cout< } //5.从键盘将一个字符串输入到字符数组中,按反序存放。如,输入"Abcd e",则输出"e dcbA"。 #include #include void main() { char str[80],ch; int i,j; cout<<"请输入一行字符串: "; cin.getline (str,80); int n=strlen(str)-1; for(i=0,j=n;i { ch=str[i]; str[i]=str[j]; str[j]=ch; } cout<<"反序的字符串为: "< } //6.编写一个函数把一个10进制数转换成16进制数。#include #include void change(int n, char str[]) { int i=0,j; int x; char ch; while(n) { x=n%16; if(x<10) str[i]=x+'0'; else str[i]=x-10+'A'; n=n/16; i++; } str[i]='\0'; for(i=0,j=strlen(str)-1;i { ch=str[i]; str[i]=str[j]; str[j]=ch; } } void main() { int n; char str[80]; cout<<"请输入一个十进制整数: "; cin>>n; change(n,str); cout< } //编写一个函数:void strcpy(char a[ ], char b[]);将b中的字符串拷贝到数组a中。(要求不使用C++的库函数strcpy())。 #include //#include void strcpy(char a[],char b[]) { int i=0,j=0; while(a[i++]=b[j++]); } void main() { char a[80],b[80]; cout<<"请输入一个字符串: "; cin.getline (b,80); strcpy(a,b); cout<<"字符串b为: "< cout<<"字符串a为: "< } //编写一个函数:void strcat(char a[ ], char b[]);将b中的字符串拼接到数组a中的字符串的后面,构成一个字符串。(要求不使用C++的库函数strcat())。 #include //#include strcat(char a[],char b[]) { int i=0,j=0; while(a[i]) i++; while(a[i++]=b[j++]); } void main() { char a[80],b[80]; cout<<"请输入两个字符串: "; cin.getline (a,80); cin.getline(b,80); cout<<"字符串a为: "< cout<<"字符串b为: "< strcat(a,b); cout<<"字符串a+b为:"< } //用筛选取法求出2~200之间的所有素数。 #include //#include void main() { int i,j,k; int a[1000]; for(i=2;i<=200;i++) a[i]=i; for(i=2;i<=200;i++) for(j=2;i*j<=200;j++) a[i*j]=0; for(i=2,k=0;i<=200;i++) if(a[i]!=0) { cout< k++; if(k%5==0) cout< } } //编写一个程序:从键盘输入一个整型数,把这个整型数的各位数按降序输出。例输入整型数34125,输出:54321。 #include //#include void sort(int a[],int n) { int i,j,k; int t; for(i=0;i { k=i; for(j=i;j if(a[k] k=j; if(k!=i) { t=a[k]; a[k]=a[i]; a[i]=t; } } } void main() { int x; int i=0,n; int a[100]; cout<<"请输入一个整数: "; cin>>x; while(x) { a[i]=x%10; x=x/10; i++; } n=i; sort(a,n); for(i=0;i cout< cout< } 第七章 //将n个整数按输入顺序的逆序排列,要求应用带指针参数的函数实现。#include void fun(int *p, int n) { int *q=p+n-1; int k; for(;p { k=*p; *p=*q; *q=k; } } void main() { int a[100],n; cout<<"请输入整数的个数: "; cin>>n; cout<<"请输入"< for(int i=0;i cin>>a[i]; fun(a,n); cout<<"逆序排列的数据为: \n"; for(i=0;i cout< cout< } //编程输入一行文字,找出其中的大写字母,小写字母、空格、数字以及其他字符各有多少。#include #include void main() { char str[100]; cout<<"请输入字符串: "; cin.getline (str,100); char *p; p=str; int daxie=0,xiaoxie=0,shuzi=0,kongge=0,qita=0; while(*p) { if(*p>='A'&&*p<='Z') daxie++; else if(*p>='a'&&*p<='z') xiaoxie++; else if(*p>='0'&&*p<='9') shuzi++; else if(*p==' ') kongge++; else qita++; p++; } cout<<"大写字符: "< cout<<"小写字符: "< cout<<"数字字符: "< cout<<"空格字符: "< cout<<"其他字符: "< } //编写一个从n个字符串中寻找最长串的函数char *longstr(char *z[], int n), //其中z是指向多个字符串的指针数组,n是字符串的个数,数组返回值是最长串的首地址。//同时编写main函数验证程序。 #include #include char *longstr(char *z[], int n) { char *pmaxstr; int len,maxlen; pmaxstr=z[0]; maxlen=strlen(z[0]); for(int i=1;i { len=strlen(z[i]); if(maxlen { maxlen=len; pmaxstr=z[i]; } } return pmaxstr; } void main() { char *pstr[]={"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}; char *pmax; int n; n=sizeof(pstr)/sizeof(pstr[0]); pmax=longstr(pstr,n); cout<<"最长的字符串是: "< } //编写一个将一个字符串插入到另一个字符串指定位置的函数。同时编写main函数验证程序。 #include #include void insert(char str[], char substr[], int n)//将substr插入到str的第n个字符后 { char str1[100]; int len; len=strlen(str); if(n>=len-1) { strcat(str,substr); return ; } strcpy(str1,str+n); strcpy(str+n,substr); strcat(str,str1); } void main() { int n; char str[100],substr[100]; cout<<"请输入第一个字符串: "; cin.getline(str,100); cout<<"请输入第二个字符串: "; cin.getline(substr,100); cout<<"将字符串"< cin>>n; insert(str,substr,n); cout<<"插入后的字符串为: "< } 第八章 #include #include struct point{ double x; double y; }; void main() { point p1,p2; double dis; cout<<"请输入平面上第一个点的坐标x和y: "; cin>>p1.x>>p1.y; cout<<"请输入平面上第二个点的坐标x和y: "; cin>>p2.x>>p2.y; dis=sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y)); cout<<"点("< } #include #include struct node { char ch; struct node *next; }; node *create(char *str) { node *head,*p1,*p2; head=NULL; p1=p2=head; while(*str) { p1=new node; p1->ch=*str; if(head==NULL) head=p1; else p2->next=p1; p2=p1; str++; } p2->next=NULL; return head; } int search(node *head, char ch, int a[]) { int i=0,k=0; node *p=head; while(p) { k++; if(p->ch==ch) a[++i]=k; p=p->next; } return i; } void main() { node *head=NULL; char str[100],ch; int a[100]; cout<<"请输入一行字符串: "; cin.getline (str,100); head=create(str); //建立链表 cout<<"请输入一个字符: "; cin>>ch; int n=search(head,ch,a);//查找字符,返回出现次数, a中为出现位置if(n==0) cout<<"字符串"< else if(n==1)