07 函数 C++作业答案

第1题

答案:

#include<iostream>
using namespace std;

int isprime(int x){
    int k1=0,i1=2;
    for(i1=2;i1<x;i1++){
        if (x%i1==0) {break;}
    }
    if(x==i1) {k1=1;}
    return k1;//返回值k1==1时为素数
}

int ispalim(int y){
    int k2=0,sum=0,z;
    z=y;//用z存储y的初始值,因为y会变化
    while(y) {
        sum=sum*10;
        sum+=y%10;
        y=y/10;
    }
    if(sum==z) {k2=1;}
    return k2;//返回值k2==1时为回文数
}


int main(){int a,b,i;
    cin>>a;
    cin>>b;
    if (b<0) {a=2;b=-b;}
    //a从1或2开始,不能从0开始,因为后面有i=a;i会作为除数
    //a=1时,因为a不是素数,所以isprime(1)==0
    //示例2是啥意思?b如果是负数就取绝对值?
    //a如果是负数呢?(我没写相关的代码)
    for(i=a;i<=b;i++){
        if (isprime(i)==1 && ispalim(i)==1)
        //其实可以把上面那行的两个==1都去掉
            {cout<<i<<endl;}
    }
    return 0;
}

第2题

答案:

#include<iostream>
#include<cstring>
using namespace std;

// C++不允许返回一个完整的数组作为函数的返回值
// 但是可以通过指定不带索引的数组名来返回一个指向数组的指针 (主打一个另辟蹊径)
//如果想要从函数返回一个一维数组,必须声明一个返回指针的函数
//注意下一行的double和trans之间有个*,表示这是一个指针函数

double* trans(double x,char y){
    double li[2];
    li[0]=0;//默认值,0是随便写的,没有也行
    li[1]=1;//先默认输入的单位是c或C或f或F,过一会再判断
    if (y=='c' || y=='C') {li[0]=(x*9/5+32.0);}
    else if (y=='f' || y=='F') {li[0]=(x-32)/1.8;}
    else {li[1]=0;
        //输入的单位y不符合标准,就修改默认值,令li[1]=0;
    }
    double *z=li;//定义一个指针变量作为返回值
    return z;
}


int main(){
    double x;//温度
    char y;//单位,应该输入C或c或F或f
    cin>>x>>y;
    double k = *(trans(x,y)+1);
    //调用指针函数,相当于k=li[1];
    //注意括号和+1的位置关系,括号错了就玩完了
    if (k==0) {
        cout<<"not valid"<<endl;
    }
    else{cout<<*trans(x,y)<<endl;}
    //*trans(x,y)就是li[0]
    return 0;
}

第3题

答案:

#include<iostream>
#include<cstring>
using namespace std;

int output(char x,int n){
    int i=0;
    for(i=0;i<n;i++)
        {cout<<x;}
    return 0;
}//不如直接在主函数里面写,代码量还少点
//这个output函数没有返回值,只能cout<<x;

int main(){
    char x;
    int n;
    cin>>x>>n;
    output(x,n);
    return 0;
}

第4题

答案:

#include<iostream>
using namespace std;

int sumint(int n){
    if (n<0) {n=-n;}
    int sum=0;
    while(n) {
        sum+=n%10;
        n=n/10;
    }//经典
    return sum;
}

int main(){
    int x;
    cin>>x;
    cout<<sumint(x)<<endl;
    return 0;
}

第5题

答案:

#include<iostream>
using namespace std;

int isPrime(int x){
    int k=0,i=2;
    for(i=2;i<x;i++){
        if (x%i==0) 
            {cout<<"no"<<endl;break;}
    }
    if(x==i)
    {k=1;cout<<"yes"<<endl;}//经典
}

int main(){
    int x;
    cin>>x;
    isPrime(x);
    return 0;
}

第6题

答案:

#include<iostream>
using namespace std;
int myswap(int &a,int &b){//输入两个变量a,b,取a,b的引用
//引用传递是一种参数传递机制,允许函数直接操作原始变量的内存地址
//当你看到int &a这样的声明时,它意味着a是一个对整数的引用,而不是一个整数本身。这个引用提供了对原始整数变量在内存中的直接访问,因此你可以通过这个引用来读取或修改原始变量的值
    int t = a;
    a = b;
    b = t;//把a和b的值交换
    //这个函数没输出
}
int main(){
    int x,y;
    cin>>x>>y;
    myswap(x,y);
    cout<<x<<" "<<y<<endl;
}
/*在C++中,当你想要通过函数修改一个变量的值,并且希望这些修改在函数调用结束后仍然保持,你需要传递该变量的引用(reference)到函数中,而不是传递它的值(value)。

如果你不加 & 符号,如 void myswap(int a, int b),那么函数将会接收这两个整数变量的副本,而不是它们本身。在函数内部对 a 和 b 的任何修改都只会影响这两个副本,而不会影响原始变量。因此,在函数返回后,原始变量的值将保持不变。

使用 & 符号,如 void myswap(int &a, int &b),表示 a 和 b 是对原始变量的引用,而不是它们的副本。这意味着,当你在函数内部修改 a 或 b 的值时,你实际上是在修改原始变量的值。因此,在 myswap 函数执行完毕后,原始变量 x 和 y 的值会被交换。*/

第7题

答案:

#include <iostream>
using namespace std;

//此处编写fun函数定义
int* fun(int a,int b){
    int he = a*a+b*b;
    int cha = a*a-b*b;
    int li[2];
    li[0]=he;
    li[1]=cha;
    int *p = li;
    return p;
}//和第2题的自定义函数一样,都是指针函数


int main()
{
	int x,y,s1,s2;
	cin>>x>>y;

	//此处给出函数调用语句
    s1=*fun(x,y);
    s2=*(fun(x,y)+1);
    //和第2题一模一样,详见第2题

	cout<<s1<<endl<<s2<<endl;
    return 0;
}

第8题

答案:

#include <iostream>
using namespace std;

int sum(int start, int stop,int step) {
    int ak=start,s=0;
    for(ak=start;ak!=stop+step;ak+=step)
    //判断条件:ak!=第n+1项,也就是说循环到ak=an截止
    {s+=ak;}
    // s = (start+stop)*((stop-start)/step+1)/2;//也可以
    return s; // 返回最大值
}


int main() {
    int start,stop,step;
    cout<<"Start:";cin>>start;
    cout<<"Stop:";cin>>stop;
    cout<<"Step:";cin>>step;

    double c = 1.0*(stop-start)/step;
    int d = (stop-start)/step;
    //d为项数-1;其实int d=c;也行
    if(d==c && c>=0){
        cout<<"Sum="<<sum(start,stop,step)<<endl;
    }
    else{cout<<"invalid sequence"<<endl;}
    return 0;
}
//本程序仅适用于全部为整数项的等差数列

第9题

答案:

#include <iostream>
using namespace std;

//添加函数原型声明
int max(int a,int b,int c);
int max(int a,int b);

int main(){
    int x, y, z;
    cin >> x>> y>>z;
    cout <<max(x, y) << endl; //计算x,y中的最大值
    cout <<max(x, y, z) << endl;//计算x,y,z中的最大值
    return 0;}

//添加函数的定义
int max(int a,int b,int c){
    if(b>a)
        a=b;
    if(c>a)
        a=c;
    return a;
}

int max(int a,int b)
{
    if(a>b)
        return a;
    else
        return b;
}

第10题

答案:

#include <iostream>
using namespace std;

//编写函数的定义
int sort(int a[],int n,int reverse){//注意,是a[],表示一个数组,改成a没有[]就错了
    int i,j;
    int *p=a;int *t=a;int r;
    for(j=0;j<4;j++){
        for (i=0;i<4-j;i++){p=a+i;t=a+i+1;
            if (*t>*p)//if (a[i+1]>a[i])
            {r=*p;*p=*t;*t=r;}
            //相当于{r=a[i];a[i]=a[i+1];a[i+1]=r;},把a[i]和a[i+1]的值互换
        }
    }//此时数组为从大到小(降序)排列
	if (reverse==0) {
	    for(i=0;i<(5-1)/2;i++){
	        p=a+i;
	        t=a+4-i;
	        r=*p;*p=*t;*t=r;//将*p与*t的值交换
            //reverse=0时,数组应该改为从小到大(升序)排列,所以直接把刚才的倒序一下就行了
	    }
	}//reverse=1时,本来就是降序排列,不用管
	return 0;//这个函数的作用就是对数组元素进行排列,没有返回值
}


int main()
{
    const int N=5;
    int a[N];
    cout <<"please enter "<<N<<" integers:";
    for(int i=0;i<N;i++)
        cin>>a[i];

    int reverse;
    cout<<"0 for ascending,1 for descending:";
    cin >> reverse;
    //调用函数
    sort(a,N,reverse);
    //输出排完序后的数组元素
    for(int i=0;i<N;i++)
        cout<<a[i]<<" ";
    cout<<endl;
    return 
0;}

代码是自己写的,所以不免有错误或不简便的地方,欢迎大佬们批评指正 ~   .゚ヽ(。◕‿◕。)ノ゚

祝大家学业进步 ~

  • 20
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值