真的太懒了,好久没写代码了,别说算法题了,最基础的都生疏到不行了
今天开始复习C++程序设计,从最基础最简单开始。
今日复习大一第一学期内容,
第一章:基本数据与表达式
第二章:程序控制结构(if,switch,while,do-while,for)
第三章:函数
第四章:数组
用几个简单题来复习吧
1.下面程序代码实现:对输入的一个小写字母,将其转换成大写字母输出,对输入的一个大写字母,将其转换成小写字母输出。请在程序的空中填入正确内容。
#include<iostream>
using namespace std;
int main()
{
char c,a;
cin>>c;
if(c>='a'&&c<='z')
{
a=c-32;
cout<<a;
}
else if(c>='A'&&c<='Z')
{
a=c+32;
cout<<a;
}
else cout<<"input again";
return 0;
}
2、下面程序的功能是输出1到100之间的每位数的乘积大于每位数的和的数。例如数字26,数位上数字的乘积12大于数字之和8。
#include<iostream>
using namespace std;
int main()
{
int n,k=1,s=0,m;
for(n=1;n<=100;n++)
{
k=1;s=0;m=n;
while(m!=0)
{
k*=m%10;
s+=m%10;
m=m/10;
}
if(k>s)
cout<<n<<endl;
}
return 0;
}
3、下面程序的功能是调用函数fun计算:m=1*2*3...*6,请完成程序。
#include<iostream>
using namespace std;
int fun(int n)
{
int i,s;
s=1;
for(i=1;i<=n;i++)
s=s*i;
return s;
}
int main()
{
cout<<fun(6);
return 0;
}
4、有如下数组: int a[10]={1,2,5,8,10,17}; int b[10]={3,4,7,13,15,18}; int c[20]; 下面的程序是将两个有序数组中的数按照由小到大的顺序合并到另一个数组中。
#include<iostream>
using namespace std;
int main()
{
int a[10]={1,2,5,8,10,17};
int b[10]={3,4,7,13,15,18};
int c[20];
int i=0,m,j=0,k=0;
a[6]=-1;
for(m=0;m<12;m++)
{
if((a[i]<b[j])&&a[i]!=-1)
{
c[k]=a[i];
cout<<c[k]<<endl;
k++;
i++;
}
else
{
c[k]=b[j];
cout<<c[k]<<endl;
k++;
j++;
}
}
return 0;
}
5.编写函数avernum,计算含有n(n<=100)个整数的一维数组的数组元素的平均值,并统计此数组中大于平均值的数据的个数。要求,n及n个数据均在主函数输入,计算结果也在主函数中输出。(不允许使用全局变量)
#include<iostream>
using namespace std;
int avernum(int b[],int n)
{
int count=0,i,sum=0;
double ave;
for(i=0;i<n;i++)
{
sum+=b[i];
}
ave=1.0*sum/n;
for(i=0;i<n;i++)
{
if(b[i]>ave)
count++;
}
return count;
}
int main()
{
int a[101],i,n;
cin>>n;
for(i=0;i<n;i++)
cin>>a[i];
cout<<avernum(a,n)<<endl;
}
6.编程实现:输入整数a和b,若a+b大于100,则输出a+b百位上的数字(如果a+b等于201,输出2),否则输出两数之和。
#include<iostream>
using namespace std;
int main()
{
int a,b,sum,k;
cin>>a>>b;
sum=a+b;
if(sum>100)
{
k=sum/100%10;
}
else k=sum;
cout<<k<<endl;
}
7.编写程序,实现以下功能:从键盘输入一个学生的分数,如果分数大于100,输出"Input error!";如果分数介于100到90之间, 输出"Very Good!";如果分数介于80到90只,输出"Good!";如果分数介于70到80之间,输出"Middle"如果分数介于60到70之间, 输出"Pass"如果分数小于60,输出"No Pass!"。
这题还是用if语句比较顺手吧,不过好久没用switch了,试一下
#include<iostream>
using namespace std;
int main()
{
double score;
int s;
cin>>score;
s=score/10;
switch(s)
{
case 10:cout<<"Input error!\n"; break;
case 9:cout<<"Very Good!\n"; break;
case 8:cout<<"Good!\n"; break;
case 7:cout<<"Middle!\n"; break;
case 6:cout<<"Pass!\n"; break;
default:cout<<"No Pass!\n";
}
}
8.编写程序,计算1-3+5-7+……-99+101的值
#include<iostream>
using namespace std;
int main()
{
int a=1,sum=0,b=1;
while(a<=101)
{
sum+=a*b;
b=-b;
a=a+2;
}
cout<<sum<<endl;
return 0;
}
9.编写程序,输出如图所示下三角乘法九九表(倒置的)。
#include <iostream>
using namespace std;
int main()
{int i, j;
cout<<"1\t2\t3\t4\t5\t6\t7\t8\t9"<<endl;
for(i=9;i>=1;i--)
{ for(j=1;j<i;j++)
cout<<"\t";
for(j=i;j<=9;j++)
cout<<i*j<<"\t";
cout<<endl;
}
return 0;
}
我一直都没有特别理解这个思路,(我之前的理解i=9就是第9行),但这题的做法让我觉得即使i=9也是在第一行(从谁开始谁就是第一行)(不知道对不对)
10.如果一个正整数等于其各个数字的立方和,则称该数为阿姆斯特朗数(亦称为自恋性数)。如407=43+03+73就是一个阿姆斯特朗数。编写函数,判断一个数是否是阿姆斯特朗数。并在主函数中调用该函数,输出1000以内的所有阿姆斯特朗数。
#include <iostream>
using namespace std;
bool ff(int x)
{
int sum=0,a,source;
source=x;
while(x!=0)
{
a=x%10;
x=x/10;
sum+=a*a*a;
}
if(sum==source)
return true;
else return false;
}
int main()
{
int i;
for(i=1;i<=1000;i++)
if(ff(i))
cout<<i<<" ";
return 0;
}
11.对于一个5×5的数组,编写程序实现:(1)求出对角线上各元素的和;(2)找出对角线上其值最大的元素和它在数组中的位置。说明:对于数组元素a[i][j],如果i==j,或者,i+j==4,则这个元素出现在对角线上。要求:在主函数中定义二维数组并输入数组元素的值。针对上面的子问题,分别编写一个函数。在主函数中调用子函数完成相应的计算,在主函数中输出计算的结果。
#include <iostream>
using namespace std;
int sum(int b[5][5])
{
int i,j,s=0;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
if(i==j||i+j==4)
s+=b[i][j];
s=s-b[2][2];
return s;
}
int max(int a[5][5],int&row,int&col)
{
int i,j;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
if((i==j||i+j==4)&&a[row][col]<a[i][j])
{
row=i;
col=j;
}
return a[row][col];//返回两个数值,用数组
}
int main()
{
int a[5][5],i,j,s=0,m=0;
int row=0,col=0;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
cin>>a[i][j];
s=sum(a);
m=max(a,row,col);
cout<<s<<" "<<row<<" "<<col<<" "<<m<<endl;
return 0;
}