SDUST C++结课考试几个例题代码

c++结课考试例题代码

删除一个字符串中的指定字母,如:字符串 “aca”,删除其中的 a 字母

#include <iostream>
using namespace std;
int main(){
	char str[100],a,*p,*q;
	cout<<"请输入一个字符串"<<endl;
	cin>>str;
	cout<<"请输入一个字母,将字符串中的该字母全部删除"<<endl;
	cin>>a;
	//使指针p等于字符串str 
	p=str;
	while(*p!='\0'){ 
	if(*p==a){
	//*p等于需要删除的字母,此时q的地址等于p的地址 
		q=p;
	//利用该while循环对需要删除的字母进行覆盖,后面的统一往前移动一个 
		while(*q!='\0'){
			*q=*(q+1);
			q++;	
			
		}
	}	
	//如果*p不等于需要删除的字母,则指针向后指 
	else{
		p++;
	}
	
	}
	//此时需要删除的字母已经全部覆盖,直接输出字符串即可 
	cout<<str;
	
	
	
	return 0; 
}

字符串反转,如将字符串 “www.runoob.com” 反转为 “moc.boonur.www”

    #include <iostream>
    using namespace std;
    int main(){
   
        char str[100],*p;
    	cin>>str;
    	//让指针的首指向字符串首,随后遍历 
    	p=str;
    	while(*p!='\0'){
    		p++; 
    	}
    	//此时的*p已经是\0,所以要p-1 
        p--;
        //创建循环输出反转字符串 
    	while(*p!='\0'){
    		cout<<*p;
    		p--;	
    		
    	}
    	cout<<endl;
    	
    	
    	return 0;
    }

输入一个字符串,求出其中字符数,数字数,空格数以及其他符号的数量

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int main(){
	char str[1000],*p;
	int a=0,b=0,c=0,d=0;
	//gets(str)gets方法输入字符串,空格不代表回车 
	gets(str);
	p=str;
	while(*p!='\0'){
		if((*p>='A'&&*p<='Z')||(*p>='a'&&*p<='z')){
			a++;
		}
		else if(*p==' '){
			b++;
		}
		else if(*p>='0'&&*p<='9'){
			c++;
		}
		else{
			d++;
		}
		p++;
	}
	
	cout<<"字母数="<<a<<" 空格数="<<b<<" 数字数="<<c<<" 其他字符="<<d<<endl; 
	
	
	return 0; 
		
} 

将一个正整数分解质因数。例如:输入90,打印出90=233*5

#include <iostream>
using namespace std;
int main(){
	int a;
	cin>>a;
	
	for(int i=a-1;i>1;i--){
		int t;
		if(a%i==0){
			t=i;
		}
	    cout<<t;	
		
	}
	return 0;
}

判断一个数是否是素数

#include <iostream>
using namespace std;
bool ss(int x){
	for(int i=x-1;i>1;i--){
		if(x%i==0){
			return false;
		}
			}
	return true;
}
int main(){
	int x;
	cin>>x;
	if(ss(x))
	cout<<"是素数"<<endl;
	else
	cout<<"不是素数"<<endl;


return 0;
}

打印出999之内所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方

#include <iostream>
using namespace std;
bool sxhs(int a){
	int temp=a;
	int t,s=0;
	for(int i=0;i<=2;i++){
	t=a%10;
	s=s+t*t*t;
	a=a/10;
	}
	if(s==temp){
	return true;
	}
	else
	{
	return false;
} 
	
} 
int main(){
	int a;
	cin>>a;
	if(sxhs(a))
	cout<<"是水仙花数"<<endl;
	else
	cout<<"不是水仙花数"<<endl;
	

	return 0;
}

给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字

#include <iostream>
using namespace std;
int main(){
	int a;
	cout<<"输入一个数,显示其位数且逆序打印出该数" <<endl;
	cin>>a;
	int temp=a;
	int i=0;
	for(a;a>=1;a=a/10){
		i++;
	}
	cout<<"该数字的位数是:"<<i<<endl;
	
	int sum;
	
	while(temp!=0){
		
		sum=sum*10+temp%10;
		temp=temp/10;
			
	}
	
	cout<<sum<<endl;
	
	return 0; 
}

求一个数的最大公约数和最小公倍数

#include <iostream>
using namespace std;
int gy(int a,int b){
	//定义公约函数 
	int min;     //寻找两数中最小值 
	if(a>b)    
		min=b;
	else
	    min=a;
	for(min;min>=1;min--){    //找到最小值后,最小值逐渐-1寻找最小公约数,但最终一定要大于等于1 
		if(a%min==0&&b%min==0)
		break;    //退出循环 
	}
	return min;    //返回值为min 
} 

int gb(int c,int d){
	//定义公倍函数 
	int max;    //寻找两数中最大值 
	if(c>d)
	max=c;
	else
	max=d;
	for(max;max<=c*d;max++){    //找到两数中最大值后,最大值逐渐+1,但要小于等于两数之积 
		if(max%c==0&&max%d==0){			
			break;
		}
		
	}
	
	return max;
}

int main(){    
	//定义主函数 
	int x,y;
	cout<<"输入两个数,求最大公约数和最小公倍数"<<endl; 
	cin>>x>>y;
	//引用前两个函数 
	cout<<"最大公约数为:"<<gy(x,y)<<endl;
	cout<<"最小公倍数为:"<<gb(x,y)<<endl;
	
	
	return 0;
}

输入年月日,求这天是今年的第几天

#include <iostream>
using namespace std;
int main(){
	int mon[12]={31,28,31,30,31,30,31,31,30,31,30,31};
	int y,m,d,s=0;
	cin>>y>>m>>d;
	if(y%400==0||(y%100!=0&&y%4==0)){
		mon[1]=29;
		}
	for(int i=0;i<m-1;i++){
	s=s+mon[i];	
	
		
	}
	s=s+d;
	cout<<"第"<<s<<"天"<<endl; 

	return 0;
}

编写一个函数,找出一个英文字符串中出现次数最多的字母

#include <iostream>
using namespace std;
int main() {
	//编写一个函数,找出一个英文字符串中出现次数最多的字母 
	char s[1000],*p;    //定义字符串s以及指针p 
	int a[26]={0};    //因为有26个英文字母,定义int类型数组a26,分别对应每个小写字母 
	cout<<"输入这段字符,将会得到出现次数最多的字母"<<endl; 
	cin>>s; 
	p=s;    //令指针指向字符串s 
	int k;    //定义k为int类型数组a26的下标,分别对应每个字母 
	while(*p!='\0'){
		k=*p-'a';    //转换类型,将字符形式转换成下标数字形式 
		a[k]++;    //计数,记录每个下标对应字母出现的次数 
		p++;    //指针指向的地址+1 
	}
	int max=0;    //定义中间量max,max表示出现次数最多的字母对应的下标 
	for(int i=1;i<=26;i++){    //循环26次原因是共26个英文字母 
		if(a[i]>a[0]){
			a[0]=a[i];
			max=i;
			
		}
		
	}
	char z;    //定义最终输出z,使用字符类型 
	z=max+'a';    //max表示下标,'a'强行转换为ascⅡ码中对应的数字 
	cout<<"出现次数最多的字母是"<<endl;
	cout<<z<<endl;
		
	
	
	return 0;
}

单链表以及struct结构的学生学号问题

#include <iostream>
using namespace std;
struct student{
	//定义这个学生类里含有姓名,年龄,颜值评分。 
		char name[10];
		int age;
		float yanzhi;
		//定义指针 
		student *next;
			
	};
	
int main(){	
	student *head,*tail,*p;
	for(int i=0;i<5;i++){
	p=new student();
	cout<<"请输入姓名"<<endl; 
	cin>>p->name;
	p->age=i+10;
	p->yanzhi=i+100;
	p->next=NULL;
	if(i==0){
		head=p;
		tail=p;
	}
	else{
		tail->next=p;
		tail=p;
		
	}
	
	}
	p=head;
	while(p!=NULL){
		cout<<"姓名"<<p->name<<"  年龄"<<p->age<<"  "<<p->yanzhi<<" "<<endl;
		p=p->next;
	}
	
	
	
	
	return 0;
	
} 

猜你喜欢

转载自blog.csdn.net/weixin_43740331/article/details/84839644