文章目录:
一:C++编程用函数实现输出1000以内自然数中的素数(除其本身以外不能被其它任意整数整除)
二:C++编程用函数实现输出10~10000内自然数中的回文数(例如2332、3443、1221等)
三:C++编程用函数实现小学生四则运算测试题并根据答题情况给出成绩
四:C++用函数采用对分法求非线性方程f(x)= x3+2x2+10x-20=0在区间【0,2】上的根,算法思想是利用连续函数的零点定理,即:f(a)*f(b)<0,则【a,b】区间上一定有根存在
五:c++用函数编写实现M*K阶矩阵A与K*N阶矩阵B的乘积矩阵C(M*N阶)的求解和输出
六:c++用函数编写函数RevMatrix(),用高斯-约当消元法求n阶方阵的逆矩阵
一:C++编程用函数实现输出1000以内自然数中的素数(除其本身以外不能被其它任意整数整除)
代码实现
#include <iostream>
#include <cmath>
using namespace std;
//c++编程实现输出1000以内自然数中的素数(除其本身以外不能被其它任意整数整除)
// (1) 函数IsPrime()实现判定某自然数是否为素数,函数结构如下(算法)
//bool IsPrime(unsigned n)
//{ //如果n<=1,则n不是素数
// //如果n==2,则n是素数
// //如果n>2,则从2开始到 取除数,一旦能整除n则n不是素数
//}
//(2) 主函数main()调用IsPrime()函数,输出1000以内自然数中的所有素数
bool IsPrime(int n)
{
for(int j = 2;j<=sqrt(n);j++)
{
if (n%j==0)
{
return false;
}
}
return true;
}
int main(){
for (int i = 2;i<=1000;i++)
{
if (IsPrime(i))
{
cout<<i<<endl;
}
}
system("pause");
return 0;
}
运行结果
二:C++编程用函数实现输出10~10000内自然数中的回文数(例如2332、3443、1221等)
代码实现
#include <iostream>
#include <cmath>
using namespace std;
//C++编程实现输出10~10000内自然数中的回文数(例如2332、3443、1221等)
// (1) 函数IsPalindrome()实现判定某自然数是否为回文数,函数结构如下
//bool IsPalindrome(unsigned n)
//{
// …………
//}
//(2) 主函数main()调用IsPalindrome()函数,输出10~10000内自然数n、n*n和n*n*n,满足n、n*n和n*n*n都是回文数。
bool IsPalindrome(int n)
{
int sum = 0;
int m = n;
while(m)
{
sum = sum*10 + m %10;
m = m /10;
}
return sum==n;
}
int main(){
int i;
cout <<"1000以内满足条件的素数为:"<<endl;
for (i = 10; i <= 1000; i++)
{
if (IsPalindrome(i) && IsPalindrome(i*i) && IsPalindrome(i*i*i))
{
cout<<i<< "\t"<<i*i<<"\t"<<i*i*i<< "\t"<<endl;
}
}
system("pause");
return 0;
}
运行结果
三:C++编程用函数实现小学生四则运算测试题并根据答题情况给出成绩
代码实现
#include <iostream>
#include <cmath>
#include <stdlib.h>
#include <ctime>
using namespace std;
//c++编程实现小学生四则运算测试题并根据答题情况给出成绩
// (1) 函数Examine( )--对两个整数按指定的运算符运算并返回正确与否;
// bool Examine(int opd1 , char opt , int opd2)
// { int Answer , Result ;
// //根据运算符opt决定对opd1和opd2做什么运算,结果赋值给Result
// //输出运算式,输入答题Answer,根据结果正确与否返回1或0
// }
// (2) 函数Test( )--随机生成10道整数的加减乘除运算题,调用Examine( )并计成绩
// int Test()
// {
// //随机生成10道四则运算题,并调用Examine(),统计并返回成绩值
// }
// (3) 主函数main( )简单模拟考试——输入学号,调用Test()函数,输出本学号学生的考试成绩
bool Examine(int opd1 , int opt , int opd2)
{
int Answer , Result;
switch (opt)
{
case 1:
cout<<opd1<<"+"<<opd2<<"="<<endl;
cin>> Answer;
Result=opd1+opd2;
break;
case 2:
cout<<opd1<<"-"<<opd2<<"="<<endl;
cin>> Answer;
Result=opd1-opd2;
break;
case 3:
cout<<opd1<<"*"<<opd2<<"="<<endl;
cin>> Answer;
Result=opd1*opd2;
break;
case 4:
cout<<opd1<<"/"<<opd2<<"="<<endl;
cin>> Answer;
Result=opd1/opd2;
break;
default:
cout<<"非合法字符"<<endl;
break;
}
return Answer==Result;
}
int Test()
{
int i,opd1,opd2,ti=1;
int count=0;
int opt;
int num,name;
cout <<"同学,请输入你的学号:"<<endl;
cin >>num;
cout <<"同学,请输入你的姓名:"<<endl;
cin >>name;
cout <<"温馨提示:现在开始考试,满分100分,每题10分!"<<endl;
srand((unsigned)time(NULL));
for (i = 0; i < 10; i++)
{
opd1 = rand() % 100 + 50;
opd2 = rand() % 50 + 1;
opt = rand() % 4 + 1;//生成1~5随机数
cout<<"请输入第"<<ti<<"题的答案:"<<endl;
ti++;
if (Examine(opd1 , opt , opd2)==1)
{count+=10;}
}
cout <<"系统开始阅卷---------------------------------"<<endl;
cout <<"学号"<<num<<" "<<"姓名"<<name<<endl;
cout <<"您的成绩为:"<< count<<"分"<<endl;
return count ;
}
int main(){
Test();
system("pause");
return 0;
}
运行结果
四:C++用函数采用对分法求非线性方程f(x)= x3+2x2+10x-20=0在区间【0,2】上的根,算法思想是利用连续函数的零点定理,即:f(a)*f(b)<0,则【a,b】区间上一定有根存在
代码实现
#include <iostream>
#include <cmath>
using namespace std;
//c++用对分法求非线性方程f(x)= x3+2x2+10x-20=0在区间【0,2】上的根,
//算法思想是利用连续函数的零点定理,即:f(a)*f(b)<0,则【a,b】区间上一定有根存在
//
//符号表示:设区间端点分别为a=0和b=2,区间中点为c,精度要求EPS=10-5
//(1) 取中点c=(a+b)/2.0,并计算f(c),if(fabs(f(c))<EPS),则c为近似根,结束
//(2) While(fabs(f(c))>EPS)
//{ 如果f(a)*f(c)>0,则a更新为c(说明根在区间的右半边)
// 否则,b更新为c(说明根在区间的左半边)
// 再取中点:c=(a+b)/2.0
// }
//(3) 输出或返回近似根c
//编程要求:
//(1) 设计函数double f(double x)
//(2) 设计函数double Duifenfa(double a , double b),求根并返回近似根值
//(3) 主函数main()调用以上函数并输出结果
//定义最终近似实根值变量
double rusult;
//定义方程函数
double f(double x)
{
return x*x*x+2*x*x+10*x-20;//方程不一定,自定义
}
//定义
void Duifenfa(double a,double b)
{
//求出中间值
double mid = (a+b)/2.0;
//存放值键函数值
double temp = f(mid);
//确定进度范围
//如果不在范围
if(fabs(temp) <= 1e-5) {
//直接输出结果
rusult = mid;
return ;
}
//切换起始值
if(temp > 0)
Duifenfa(a,mid);
else
Duifenfa(mid,b);
}
int main()
{
Duifenfa(0,2);//自定义范围
cout <<"在区间[0,2]上的近似实根为:"<<rusult <<endl;
system("pause");
return 0;
}
运行结果
五:c++用函数编写实现M*K阶矩阵A与K*N阶矩阵B的乘积矩阵C(M*N阶)的求解和输出
方法一:控制台输入
代码实现
#include <iostream>
#include <cmath>
using namespace std;
#define N 100
//c++编制函数实现M*K阶矩阵A与K*N阶矩阵B的乘积矩阵C(M*N阶)的求解和输出
//设A为m*k阶,B为k*n阶,则C为m*n阶,Cij=Ai0*B0j+……+ Ai,k-1*Bk-1,j
//(1) #define N 10
//void mulmatrix01(double a[N][N],double b[N][N],double c[N][N],int m,int k,int n)
//{ …… }//有什么缺点
//或者
//#define M 4
//#define K 3
//#define N 4
//void mulmatrix02(double a[M][K],double b[K][N],double c[M][N])
//{ …… }
//(2) void mulmatrix03(double a[],double b[],double c[],int m,int k,int n)
// { …… }
//定义两个矩阵;再定义一个矩阵去接收
//m:矩阵A的行数
//n:矩阵A的列数\B的行数
//k:矩阵B的列数
void mulmatrix(double a[],double b[],double c[],int m,int n,int k)
{
int i,j,z,temp;
for(i=0;i<=m;i++) //m-第一个矩阵的行大小
{
for(j=0;j<k;j++) //k-第二个矩阵的列大小
{
//用一维数组存储时,假设为二维的
//a[i][j]在这个一维数组中的位置为array[k*i+j]
temp=i*k+j;
c[temp]=0.0;
for(z=0;z<n;z++) //n-第一个矩阵的列大小——第二个矩阵的行大小
{
c[temp]+=a[i*n+z]*b[z*k+j];//A数组中第i行第j列的值 *B 数组第y行第j列的值 = C数组第i行第j列的值
//arry[i][z]——n 第1个矩阵 ------------------ n*i+z
//arry[z][j]——k 第2个矩阵 ------------------ k*z+j
}
}
}
}
void main()
{
int i,j,m,n,k;
double A[N],B[N],C[N];
for(i=0;i<N;i++)
{
C[i]=1.0;
}
cout <<"请输入矩阵A的行数m:"<<endl;
cin >>m;
cout <<"请输入矩阵A的列数和B的行数n:"<<endl;
cin >>n;
cout <<"请输入矩阵B的列数k:"<<endl;
cin >>k;
cout <<"请输入矩阵A的元素:"<<endl;
cout <<"----------------------"<<endl;
for(i=0;i<n*m;i++)
{
cout << "请输入矩阵A的第"<<i+1<<"个元素"<<endl;
cin >>A[i];
}
cout <<"----------------------"<<endl;
cout <<"请输入矩阵B的元素:"<<endl;
cout <<"----------------------"<<endl;
for(i=0;i<n*k;i++)
{
cout << "请输入矩阵B的第"<<i+1<<"个元素"<<endl;
cin >>B[i];
}
cout <<"----------------------"<<endl;
mulmatrix(A,B,C,m,n,k);
cout <<"乘积矩阵C为:"<<endl;
cout<<"这里自己去分行列"<<endl;
cout <<"----------------------"<<endl;
for(i=0;i<m;i++)
{
for(j=0;j<k;j++)
{
int count=0;
//如果不好看可以控制输出几个,然后换行
cout <<C[i*k+j] << "\t";
}
}
cout <<"\n----------------------"<<endl;
system("pause");
}
运行结果
方法二: 在代码直接输入
代码实现
#include<iostream>
#include<string>
#include<stdlib.h>
using namespace std;
void mulmatrix(double A[],double B[],double C[],int m,int n,int k)
{
int i,j,z,temp;
for(i=0;i<m;i++)
{
for(j=0;j<k;j++)
{
temp=i*k+j;
C[temp]=0.0;
for(z=0;z<n;z++)
{
C[temp] +=A[i*n+z]*B[z*k+j];
}
}
}
}
int main()
{
double A[2][2]={{2.0,2.0},
{2.0,2.0}
};
double B[2][2]={{2.0,2.0},
{2.0,2.0}
};
double C[2][2];
int m,n,k,i,j;
m=2;
n=2;
k=2;
cout<<"乘积矩阵C的结果为:"<<endl;
cout <<"----------------------"<<endl;
mulmatrix(*A,*B,*C,m,n,k);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
cout<<C[i][j]<<"\t";
}
}
cout <<endl;
cout <<"----------------------"<<endl;
system("pause");
return 0;
}
运行结果
六:c++用函数编写函数RevMatrix(),用高斯-约当消元法求n阶方阵的逆矩阵
代码实现
#include <cmath>
#include <malloc.h>
#include <iostream>
#include <iomanip>
using namespace std;
#define N 10 //定义方阵的最大阶数为10
//c++编写函数RevMatrix(),用高斯-约当消元法求n阶方阵的逆矩阵
// 函数RevMatrix()结构如下:
// void RevMatrix(double A[N][N] , double A_1[N][N])
// { double A_Copy[N][N]; //不要改变原矩阵A,将A复制到A_Copy
// //1.经N-1步消元,将A变成上三角形矩阵(同时作用于A_1)
// //2.再经N-1步消元,将A变成对角线矩阵(同时作用于A_1)
// //3.最后将A变成单位矩阵(同时作用于A_1)
bool RevMatrix(double A[][N], double B[][N], int n); //采用部分主元的高斯消去法求方阵A的逆矩阵B
bool RevMatrix(double A[][N], double B[][N], int n)
{
cout <<"通过高斯消去法求逆矩阵" <<endl;
int i, j, k;
float max, temp;
float t[N][N]; //临时矩阵
//将A矩阵存放在临时矩阵t[n][n]中
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
t[i][j] = A[i][j];
}
}
//初始化B矩阵为单位阵
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
B[i][j] = (i == j) ? (double)1 : 0;
}
}
for (i = 0; i < n; i++)
{
//寻找主元
max = t[i][i];
k = i;
for (j = i+1; j < n; j++)
{
if (fabs(t[j][i]) > fabs(max))
{
max = t[j][i];
k = j;
}
}
//如果主元所在行不是第i行,进行行交换
if (k != i)
{
for (j = 0; j < n; j++)
{
temp = t[i][j];
t[i][j] = t[k][j];
t[k][j] = temp;
//B伴随交换
temp = B[i][j];
B[i][j] = B[k][j];
B[k][j] = temp;
}
}
//判断主元是否为0, 若是, 则矩阵A不是满秩矩阵,不存在逆矩阵
if (t[i][i] == 0)
{
cout << "这里没有逆矩阵!";
return false;
}
//消去A的第i列除去i行以外的各行元素
temp = t[i][i];
for (j = 0; j < n; j++)
{
t[i][j] = t[i][j] / temp; //主对角线上的元素变为1
B[i][j] = B[i][j] / temp; //伴随计算
}
for (j = 0; j < n; j++) //第0行->第n行
{
if (j != i) //不是第i行
{
temp = t[j][i];
for (k = 0; k < n; k++) //第j行元素 - i行元素*j列i行元素
{
t[j][k] = t[j][k] - t[i][k]*temp;
B[j][k] = B[j][k] - B[i][k]*temp;
}
}
}
}
return true;
}
int main()
{
int i, j;
double a[N][N], b[N][N];
int n;
cout << "采用部分主元的高斯消去法求方阵的逆矩阵!\n";
cout << "请输入方阵的阶数: ";
cin >> n;
cout << "请输入" << n << "阶方阵: \n";
//输入一个n阶方阵
for (i = 0; i < n; i++)
{
cout << "请输入验证矩阵的第" << i+1 << " 行: "<<endl;
for (j = 0; j < n; j++)
{
cin >> a[i][j];
}
}
cout<<"----------------------------------"<<endl;
cout << "你输入的矩阵为 : \n";
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
cout << a[i][j]<<" ";
}
cout <<endl;
}
cout<<"----------------------------------"<<endl;
//运用高斯消去法求该矩阵的逆矩阵并输出
if (RevMatrix(a, b, n))
{
cout << "该方阵的逆矩阵为: \n";
cout<<"----------------------------------"<<endl;
for (i = 0; i < n; i++)
{
cout << setw(4);
for (j = 0; j < n; j++)
{
cout << b[i][j] << setw(10);//字段宽度
}
cout << endl;
}
cout<<"----------------------------------"<<endl;
}
//getchar();
system("pause");
return 0;
}