《《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(i==aaa+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(s==0)
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(i*i+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%2==0)

{

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(m0&&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(m0&&n0)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(m0&&n0)break;

s=sqrt(mm-4n);

x1=(m+s)/2;

x2=(m-s)/2;

if(mm-4n<0)cout<<“No”<<endl;

else

{

if(2int(x1)==m+s&&2int(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+jn+1||in||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、付费专栏及课程。

余额充值