1. 程式人生 > >SDUST C++結課考試幾個例題程式碼

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