第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;}
代码是自己写的,所以不免有错误或不简便的地方,欢迎大佬们批评指正 ~ .゚ヽ(。◕‿◕。)ノ゚
祝大家学业进步 ~