《《C++程序设计》》课程实验报告

《《C++程序设计》》课程实验报告

1、题意: 输入一个百分制的成绩,用字母代替分数;
解题思路:分段讨论利用if语句
细节处理:注意端点值; Score is error!的空格和感叹号。
原码: #include
#include
#include
using namespace std;
int main()
{
int x;
while(cin>>x)
{
if((x>=90)&&(x<=100)) cout<<“A”<<endl;
else if((x>=80)&&(x<90)) cout<<“B”<<endl;
else if((x>=70)&&(x<80)) cout<<“C”<<endl;
else if((x>=60)&&(x<70)) cout<<“D”<<endl;
else if((x>=0)&&(x<60)) cout<<“E”<<endl;
else cout<<“Score is error!”<<endl;}

return 0;
}
2、题意: 水仙花数”是指一个三位数,它的各位数字的立方和等于其本身。
解题思路:for循环判断输入数段是否有“水仙花数”如果有将其输出,没有则输出no;
细节处理: 注意最后一位数后无空格
原码:
#include
#include
#include
using namespace std;
int main()
{
int m,n,a,b,c,e=1,s=0;
while(cin>>m>>n)
{
for(int i=m;i<=n;i++)
{
a=i%10;
b=(i/10)%10;
c=(i/100)%10;
if(iaaa+bbb+ccc)
{
if(e
1) cout<<i;
else cout<<" “<<i;
s=s+1;
e=e+1;
}};
e=1;
if(s!=0) cout<<endl;
else if(s0) cout<<“no”<<endl;
s=0;
}
return 0;
}
3、 题意:对于表达式n^2+n+41,当n在(x,y)范围内取整数值时(包括x,y)判定该表达式的值是否都为素数。
解题思路:使用for循环将n的值算出利用函数判断该表达式的值是否为素数
细节处理: 输出0 0结束,函数调用,最后输出结果OK全是大写Sorry仅首字母为大写。
原代码:#include
#include
#include
using namespace std;
int prime(int x)
{
int i,n;
n=sqrt(x);
for(i=2;i<=n;i++)
{
if(x%i
0)
return 0;
}
return 1;
}
int main()
{
int m,n,s=0;
while(cin>>m>>n)
{
for(int i=m;i<=n;i++)
{ if(prime(ii+i+41))
s=s+1;
}
if(m0&&n0)break;
if(s!=(n-m+1)) cout<<“Sorry”<<endl;
if(s==(n-m+1)) cout<<“OK”<<endl;
s=0;
}
return 0;
}
4、 题意: 1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + …求出该多项式的前n项的和。
解题思路:利用for循环求和,奇数为负,偶数为正。
细节处理: 保留2位小数,注意定义变量,初值定义,1.00/j,而不是1/j,使用符号变量定义e=-1;执行一次后e=-1
e;
原代码:
#include
#include
#include
using namespace std;
int main()
{
double m,n,s=0.00,e=1.00;
while(cin>>m)
{
for(int i=1;i<=m;i++)
{cin>>n;
for(int j=1;j<=n;j++)
{
s=s+(1.00/j)e;
e=e
-1.00;
}
printf(”%.2lf\n",s);
s=0.00;e=1.00;}
}
return 0;
}
5、题意: 数列定义为从2开始的递增有序偶数,按照顺序每m个数求出一个平均值,如果最后不足m个,则以实际数量求平均值。
解题思路:判断m奇偶性,每m个数求平均值,若m为偶,则其平均数为该m个数中中间数值加1,若m为奇,则其平均数为该m个数中中间数数值,不足m求剩余数的平均值。
细节处理:注意空格的输出和for循环是怎样循环的。
原代码:#include
#include
#include
#include
using namespace std;
int main()
{
int m,n,i;
int a[110];
while(cin>>n)
{
int s=0;
cin>>m;
memset(a,0,n);
a[1]=2;
for(i=1;i<=n;i++)
a[i+1]=a[i]+2;
if(m%20)
{
cout<<a[m/2]+1;
for(i=m/2+m;i<=n-m/2;i=i+m)
cout<<" "<<a[i]+1;
if(n%m
0) cout<<endl;
if(n%m!=0)
{for(i=n;i>n-n%m;i–)
s=s+a[i];
cout<<" "<<s/(n%m)<<endl;}
}

        if(m%2!=0)
    {
        cout<<a[m/2+1];
        for(i=m/2+1+m;i<=n-m/2;i=i+m)
        cout<<" "<<a[i];
        if(n%m==0) cout<<endl;
         if(n%m!=0)
        {for(i=n;i>n-n%m;i--)
        s=s+a[i];
        cout<<" "<<s/(n%m)<<endl;}
    }
}return 0;

}

6、题意: 一头母牛,每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛求第n年是母牛的个数
解题思路: 斐波那契数列,f[i]=f[i-1]+f[i-3];
细节处理:n=0时跳出循环,f[i]=f[i-1]+f[i-3];
原代码:
#include
#include
#include
#include
int a[3010];
using namespace std;
int main()
{
a[1]=1;a[2]=2;a[3]=3;a[4]=4;
int n;
while(cin>>n)
{for(int i=5;i<=n;i++)
a[i]=a[i-1]+a[i-3];
if(n==0) break;
cout<<a[n]<<endl;}
return 0;
}
7、题意: 按照绝对值从大到小排序后输出.
解题思路:两组数组一组进行绝对值判断,一组进行变换。
细节处理:利用swap交换位置。
原代码:#include
#include
#include
#include
#include
using namespace std;
int main()
{
int n,i,j;
int a[1100],b[1100];
while (cin>>n&&n!=0)
{
memset(a,0,n);
memset(b,0,n);
for(i=1;i<=n;i++)
{
cin>>a[i];
b[i]=abs(a[i]);
}
for( i=1;i<=n;i++)
{
for(j=1;j<=i;j++)
{
if(b[i]>b[j])
{
swap(b[j],b[i]);
swap(a[j],a[i]);
}
}
}

    for(i=1;i<n;i++)
    cout<<a[i]<<" ";
    cout<<a[n]<<endl;
}
     return 0;

}
8、题意: “回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。请写一个程序判断读入的字符串是否是“回文”。
解题思路:双重循环,重前往后,重后往前,判断是否相等
细节处理:利用strlen求出字符串长度,如果前边循环变量i大于等于后面的j,则是回文串,如果j大于i则不是回文串。
原代码:
#include
#include
#include
#include
using namespace std;
char s[100];
int main()
{
int m,n;
cin>>m;
while(m–)
{
scanf("%s",s);
int i=strlen(s)-1;
int j=0;
while((j<i)&&(s[j]s[i]))
{
i–;
j++;
}
if(j>=i) cout<<“yes”<<endl;
else cout<<“no”<<endl;
}
return 0;
}
9、题意:求A-B两个集合的差,做集合的减法运算
解题思路:判断A,B中是否有相同的元素,有计数变量s加一,将其赋值为极小数,排序输出A中后s个元素。
细节处理:输入0 0结束程序,利用sort排序,双重循环进行判断是否存在相同元素。
原代码:
#include
#include
#include
#include
#include
int a[150];int b[150];
using namespace std;
int main(void)
{
int m,n;
while(cin>>m>>n)
{ int s=0;
if(m
0&&n0)break;
for(int i=0;i<m;i++)
cin>>a[i];
for(int i=0;i<n;i++)
cin>>b[i];
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
if(a[i]b[j])
{a[i]=-32769;
s++;}
if(s
m)
cout<<“NULL”<<endl;
else {
sort(a,a+m);
for(int i=s;i<m;i++)
cout<<a[i]<<" ";
cout<<endl;
}}
return 0;
}
10、题意: 求A^B的最后三位数表示的整数。
解题思路:利用for循环做数的乘法
细节处理:取余A^B的后三位数,做乘法,保证数值正常运算。
原代码:
#include
#include
#include
#include
using namespace std;
int main()
{
long long x,m,n;
while(cin>>m>>n)
{
if(m
0&&n==0)break;
x=1;
for(int i=1;i<=n;i++)
x=(m*x)%1000;
cout<<x%1000<<endl;
}
return 0;
}
11、题意: 一楼梯共M级,开始在第一级,每次只能跨上一级或二级,要走上第M级,有多少种走法。
解题思路:利用斐波那契数列求有几种方法。
细节处理: a[i]=a[i-1]+a[i-2];从第三个位置开始循环。

原代码:#include
#include
#include
#include
int a[3010];
using namespace std;
int main()
{
a[1]=1;a[2]=2;
int n,m;
cin>>m;
for(int i=1;i<=m;i++)
{cin>>n;
for(int i=3;i<=n;i++)
a[i]=a[i-1]+a[i-2];
cout<<a[n-1]<<endl;}
return 0;
}
12、题意:有方程:Ai = (Ai-1 + Ai+1)/2 - Ci
A0, An+1, 和 C1, C2, …Cn 求A1
解题思路:利用递推出公式求解。
细节处理:C[i](n-i+1)利用倒叙相乘。注意两位小数,定义初值S=0.00;
原代码:
#include
#include
#include
#include
double a[3010];
double c[3010];
using namespace std;
int main()
{
int n;
double b,s=0.00;
while(cin>>n)
{
int j=n;
cin>>a[0]>>a[n+1];
for(int i=1;i<=n;i++)
cin>>c[i];
for(int i=1;i<=n;i++)
{
s=s+j
c[i];j–;
}
b=(na[0]+a[n+1]-2s)/(n+1);
printf("%.2lf\n",b);
s=0.00;
}
return 0;
}
13、题意: 第一天猴子吃掉桃子总数一半多一个,第二天又将剩下的桃子吃掉一半多一个,以后每天吃掉前一天剩下的一半多一个,到第n天准备吃的时候只剩下一个桃子。求第一天开始吃的时候桃子。
解题思路:逆向求数从第n天开始a[i+1]=2*(a[i]+1);
细节处理:注意n的转换。n与第一天的关系。
原代码:#include
#include
#include
#include
int a[3010];
using namespace std;
int main()
{
int n,m;
while(cin>>m)
{ a[1]=1;
for(int i=1;i<=m;i++)
a[i+1]=2*(a[i]+1);
cout<<a[m]<<endl;}
return 0;
}
14、题意: 有二个整数,它们加起来等于某个整数,乘起来又等于另一个整数,这种整数到底存不存在。
解题思路:利用求根公式+循环判断。
细节处理:定义变量为双精度实数。判断bb-4a*c大于等于0,且是平方数,且两根是整数。利用类型强制转换。
原代码#include
#include
#include
#include
using namespace std;
int main()
{
double m,n,s,x1,x2;
while(cin>>m>>n)
{

   if(m==0&&n==0)break;
   s=sqrt(m*m-4*n);
   x1=(m+s)/2;
   x2=(m-s)/2;
   if(m*m-4*n<0)cout<<"No"<<endl;
  else
  {
   if(2*int(x1)==m+s&&2*int(x2)==m-s)
   cout<<"Yes"<<endl;
   else cout<<"No"<<endl;
   }
}

return 0;

}
15、题意: 字符三角形
解题思路:利用空格和循环输出图形。
细节处理:注意行末最后没有空格,输出完图形后在下一个图形之前有一个换行。
原代码:
#include
#include
using namespace std;
int main()
{
int n,s;
char a;
s=0;
while(cin>>a)
{

if(a=='@')
    break;
    else
    {
        cin>>n;
        if(s>0)
        cout<<endl;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=2*n-1;j++)
  {
    if(i+j==n+1||i==n||j-i==n-1)
    cout<<a;
    if(i+j!=n+1&&i<n&&j-i<n-1)
    cout<<" ";
  }
cout<<endl;
    }
} s++;

}
return 0;
}
总结:经过三天忙碌的"码字",刚开始几乎崩溃,怎么样子怎么不对。后来心态平静下来才慢慢步入正轨,大量的题目,严格的输出,让自己很慌,经过几乎每晚上12点睡,早上6点起,中午不睡觉。省下吃饭的时间编程,发现不逼自己一把,永远不知道自己的潜力有多大。零基础真的很难,但坚持下去真是受益匪浅,疯狂的编程让自己很累,但学到的知识更多。感觉自己的努力很值得,自己以前没有接触过编程,从这一学期的摸索,到现在感觉自己入门,真的很累,但也很充实,我最大的感触就是发散思维真的很重要,不要盲目做题,一点要思考。最后呢,感觉这一学期收获真的很大,老师真的很严厉,真的很负责 很好。但有时也叫自己很痛苦。总得来说,有点小遗憾,自己没有很认真的学习,时间过得很快,有点惆怅,但也无悔。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值