第十一次作业

目录

1. 控制结构题

2. 数组与指针题

3. 字符串与指针题

4. 一般函数与指针题

5. 递归函数与指针题

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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值