目录
6. 设计一个学生信息管理系统,可以对学生信息进行增删改查以及统计等
1. 控制结构题
根据整数n和实数x的值进行级数求和:
说明:计算到第n项。
运行结果:
Please input n and x:
8 2
1.30063
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
double x;
double n;
cout<<"please input n and x:";
cin>>n;
cin>>x;
int i =1;
double s=0;
double s=0,an=1.0/3.0;
cout<<1<<endl;
while (i<=n)
{
s+=an*pow(x/2,i);
//cout<<s<<'\t'<<an<<endl;
i++;
an=an*((3*i-2)/(3*i));
}
cout<<s;
return 0;
}
Q:为什么我不能调试,为什么一个程序明明代码是对的,在一个cpp文件里面不能运行,在另外一个cpp 文件就可以运行 ,现在每次运行都要把上次运行成果的exe文件删除,why
2. 数组与指针题
对于任意给定的n个元素的整数数组,求其全部的含有m个元素的子数组之和的最大值。
所谓子数组是指连续元素构成的序列。
运行结果:
Please input n and m:
9 3
Please input n elements:
1 2 3 4 5 6 7 8 9
24
#include<iostream>
using namespace std;
int main()
{//定义和输入
int n,m;
cout<<"Please input n and m:"<<endl;
cin>>n>>m;
int a[n];
cout<<"Please input n elements:"<<endl;
for(int i =0;i<n;i++)
{
cin>>a[i];
}
//遍历循环,循环所有直到停止
int max=0;
for(int i=0;i<m;i++)
{
max+=a[i];
}
for(int i=1;i<n-m+1;i++)
{
int max_cmp=0;
for(int j=i;j<i+m;j++)
{
max_cmp+=a[j];
}
if (max_cmp>max)
{
max=max_cmp;
}
}
cout<<max;
//
}
3. 字符串与指针题
有一个仅包含小写字母的字符串,请编程得到另一个字符串,规则如下:
对每一个字符,统计这个字符串中出现该字符的总的个数,然后将字符和个数保存到第二个字符串中,其中个数占4个字符的位置。比如:“cabbccdddd”的合并结果为“a0001b0002c0003d0004”。
注:结果字符串中字符的顺序按字母表顺序。字符串的长度均不超过200。
运行结果:
Please input one string:
cccccddhdaasaqwqeyudagadg
a0005c0005d0005e0001g0002h0001q0002s0001u0001w0001y0001
输入string 用getline(cin,x)
#include<iostream>
#include<string>
#include<sstream>
//统计个数
//按照字典顺序排序
//输出
using namespace std;
int main()
{
string all;//总
getline(cin,all);
string paixu="";
for(int i=0;i<24;i++)//字母
{ int num=0;
stringstream is;
string strnum;//补零用while
char vocal='a'+i;
for(int j=0;j<all.size();j++){
if(all[j]==vocal)
{
num++;
}
}
//cout<<i<<endl<<num<<endl;
if(num!=0)//如果存在加入字符
{
paixu.insert(paixu.end(),vocal);//可以插入char
//数字转字符串操作
is<<num;
//cout<<"is"<<is<<endl;
is>>strnum;
while(strnum.size()<4)//补零
{
strnum='0'+strnum;
}
//cout<<"num"<<num<<'\t'<<strnum<<endl;
paixu.append(strnum);//.append()插入string操作
}
}
cout<<paixu;
}
Q:这里在没有把is的定义放在for里面的时候,输出的字母数值总是和第一个字母数值相同
为什么
4. 一般函数与指针题
编写对字符串进行加密的函数,然后在主函数中调用并显示加密结果。
其中,
(1)字符串仅包含小写字母
(2)加密算法:对每个字母,用其后的第k个字母的小写形式替换,并
将字母看作是首尾循环相接的,即后面不够k个时,接着从开头数起。
运行结果:
Please input one string:
adghjagduyqeu
Please input k:
3
dgjkmdjgxbthx
#include<iostream>
#include<string>
using namespace std;
//凯撒加密了解一下
//仍然用string
int main()
{
string str;
cout<<"please input a sentence:";
getline(cin,str);
int k;
cout<<"please input k:";
cin>>k;
for(int i=0;i<str.size();i++)
{
str[i]='a'+(str[i]-'a'+k)%26;
}
cout<<str;
return 0;
}
5. 递归函数与指针题
编写判断一个字符串是否为回文的递归函数,然后在主函数中调用并显示结果。
运行结果:
Please input one string:
abcddcba
1
Please input one string:
uvwxyz
0
#include<iostream>
#include<string>
//自己写一个反转字符的函数。。。
//网上遍地都是:不要使用string作为参数传递
//我困惑了
using namespace std;
int main()
{
string str;
cout<<"please input one string:";
getline(cin,str);
int n=str.size();
string rstr(str);
for(int i=0;i<=n/2;i++)//谁叫你反转的时候用n的???
{
char temp=rstr[n-1-i];
rstr[n-1-i]=rstr[i];
rstr[i]=temp;
}
cout<<endl<<rstr<<endl;
if (rstr==str)
{
cout<<"是回文数";
}
else
{
cout<<"不是回文数";
}
return 0;
}
6. 设计一个学生信息管理系统,可以对学生信息进行增删改查以及统计等
其中,学生信息包括:学号、姓名、班级、总分
可以分别按照学号、姓名和班级查询
还可以按照班级分类统计,按总分进行分数段统计等。
#include<iostream>
#include<cstring>
using namespace std;
//老结构体了
struct student
{
char num[20];
char name[10];
char banji[10];
int score;
};
//如果输入学号是0,那么就退出输入
//输入
int main()
{
const int COUNT=100;
struct student xjtu[COUNT];
int N=0;
cout<<"学号:";
cin>>xjtu[N].num;
cout<<"姓名:";
cin>>xjtu[N].name;
cout<<"班级:";
cin>>xjtu[N].banji;
cout<<"总分:";
cin>>xjtu[N].score;
while(1)
{
N++;
cout<<"学号:";
cin>>xjtu[N].num;
if(strcmp(xjtu[N].num,"0")==0)
{
break;
}
cout<<"姓名:";
cin>>xjtu[N].name;
cout<<"班级:";
cin>>xjtu[N].banji;
cout<<"总分:";
cin>>xjtu[N].score;
}
//查询系统
int k_1;
cout<<"如果按照学号查询请输入0;按照姓名查询请输入1;按照班级查询请输入2;按照总分查询请输入3"<<endl;
cin>>k_1;
switch (k_1)
{
case 0://按照学号查询
{
cout<<"请输入学号:";
char num[20];
cin>>num;
for (int i=0;i<=N;i++)
{
if(strcmp(num,xjtu[i].num)==0)
{
cout<<"已经查找到,学生信息如下:"<<endl;
cout<<xjtu[i].name<<endl;
cout<<xjtu[i].num<<endl;
cout<<xjtu[i].banji<<endl;
cout<<xjtu[i].score<<endl;
}
}
break;
}
case 1://姓名查询
{
cout<<"请输入姓名:";
char name[10];
cin>>name;
for (int i=0;i<=N;i++)
{
if(strcmp(name,xjtu[i].name)==0)
{
cout<<"已经查找到,学生信息如下:"<<endl;
cout<<xjtu[i].name<<endl;
cout<<xjtu[i].num<<endl;
cout<<xjtu[i].banji<<endl;
cout<<xjtu[i].score<<endl;
}
break;
}
}
case 2://班级查询
{
cout<<"请输入班级:";
char banji[10];
cin>>banji;
for (int i=0;i<=N;i++)
{
if(strcmp(banji,xjtu[i].banji)==0)
{
cout<<"已经查找到,学生信息如下:"<<endl;
cout<<xjtu[i].name<<endl;
cout<<xjtu[i].num<<endl;
cout<<xjtu[i].banji<<endl;
cout<<xjtu[i].score<<endl;
}
}
break;
}
case 3://总分查询
{
cout<<"请输入总分:";
int score;
cin>>score;
for (int i=0;i<=N;i++)
{
if(score==xjtu[i].score)
{
cout<<"已经查找到,学生信息如下:"<<endl;
cout<<xjtu[i].name<<endl;
cout<<xjtu[i].num<<endl;
cout<<xjtu[i].banji<<endl;
cout<<xjtu[i].score<<endl;
}
}
break;}
}
//统计系统
int k_2;
cout<<"如果按照班级统计请输入0;按照分数段统计请输入1:"<<endl;
cin>>k_2;
switch(k_2)
{
case 0:
{
cout<<"请输入要统计的班级:";
char banji[10];
cin>>banji;
int l1=0,l2=0,l3=0,l4=0;
for(int i=0;i<=N;i++)
{
if(strcmp(xjtu[i].banji,banji)==0){
if(xjtu[i].score<=100 &&xjtu[i].score>=90)
l1++;
else if(xjtu[i].score<90 &&xjtu[i].score>=80)
l2++;
else if(xjtu[i].score<80 &&xjtu[i].score>=60)
l3++;
else if(xjtu[i].score<60 &&xjtu[i].score>=0)
l4++;
}
}
cout<<"优秀人数有"<<l1<<endl;
cout<<"良好人数有"<<l2<<endl;
cout<<"合格人数有"<<l3<<endl;
cout<<"不及格人数有"<<l4<<endl;
break;
}
case 1:
{
int l1=0,l2=0,l3=0,l4=0;
for(int i=0;i<=N;i++)
{
if(xjtu[i].score<=100 &&xjtu[i].score>=90)
l1++;
else if(xjtu[i].score<90 &&xjtu[i].score>=80)
l2++;
else if(xjtu[i].score<80 &&xjtu[i].score>=60)
l3++;
else if(xjtu[i].score<60 &&xjtu[i].score>=0)
l4++;
}
cout<<"优秀人数有"<<l1<<endl;
cout<<"良好人数有"<<l2<<endl;
cout<<"合格人数有"<<l3<<endl;
cout<<"不及格人数有"<<l4<<endl;
break;
}
}
return 0;
}