C、C編程題目和代碼3_第1頁
C、C編程題目和代碼3_第2頁
C、C編程題目和代碼3_第3頁
C、C編程題目和代碼3_第4頁
C、C編程題目和代碼3_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

C、C++編程題目和代碼3

目錄

1.矩陣左

轉(zhuǎn).........................................................

.........2

2.函數(shù)指針(函數(shù)調(diào)

用)...................................................4

3.數(shù)字判斷(指針為函數(shù)參

數(shù))..............................................6

4.字符串比較(字符指

針)................................................8

5.秘鑰加密法(指針應

用)................................................10

6.誰是老二(結(jié)構(gòu)

體)....................................................12

7.抄襲查找(結(jié)構(gòu)體+指針+函

數(shù))...........................................14

8.結(jié)構(gòu)和鏈表初步(指針+結(jié)構(gòu))(冒泡排

序)..................................18

9.堆棧練習(類和對象實驗

—)....................................................................................................................................20

10.隨機數(shù)練習(類和對象實驗

一)..........................................22

11.買彩游戲(類和對象實驗

一)............................................24

12.堆棧練習擴展(類和對象實驗

一)........................................27

13.堆棧排序練習(類和對象實驗

一)........................................30

14.Date(類與對

象)........................................................32

15.點和圓(類與對

象)......................................................35

16.分數(shù)

類..........................................................

.......39

17.軟件備份(拷貝構(gòu)造函

數(shù))................................................44

18.電話號碼升位(拷貝構(gòu)造函

數(shù))............................................47

19.Equation(類與對

象)....................................................49

20.Complex(類與對

象).....................................................50

身份證設定(復合

類).....................................................51

Point_Array(類與對

象)....................................................55

Array(類與對

象)..........................................................59

軟件備份(拷貝構(gòu)造函

數(shù))...................................................62

分數(shù)

類.............................................................

..........65

=======================================================1.矩陣左

轉(zhuǎn)

輸入一個2*3的矩陣,將這個矩陣向左旋轉(zhuǎn)90度后輸出

比如現(xiàn)在有2*3矩陣:

123

456

向左旋轉(zhuǎn)90度后的矩陣變?yōu)?

36

25

14

要求:除了矩陣創(chuàng)建和數(shù)據(jù)輸入可以使用數(shù)組和數(shù)組下標的方法,其

他過程對矩陣的任何訪

問都必須使用指針

提示:m行n列的二維矩陣,第i行第j列的元素與首元素的距離為

i*n+j,序號從0開始計

輸入

第一行輸入t表示有t個測試實例

連續(xù)兩行輸入一個2*3的矩陣的數(shù)據(jù)

依次輸入t個實例

輸出

依次輸出左轉(zhuǎn)后的矩陣結(jié)果

在輸出的每行中,每個數(shù)據(jù)之間都用空格隔開,最后一個數(shù)據(jù)后面也

帶有空格

樣例輸入

2

123

456

456

789

樣例輸出36

25

14

69

58

47

#include<iostream>

usingnamespacestd;

voidchange(int*p,int*q);intmain()

(

inta[2][3],b[3][2];

int

cin>>t;

while(t-)

(

for(i=0;i<2;i++)

for(j=0;j<3;j++)cin>>a[i][j];

change(a[0],b[0]);

)

}

voidchange(int*p,int*q){

intij;

for(i=0;i<2;i++)

for(j=0;j<3;j++)

*(q+4-2*j+i)=*(p+3*i+j);//b[2-j][i]=a[i][j];

for(i=0;i<3;i++)

{

)

}for(j=0;j<2;j++)cout<<*(q+2*i+j)<<"cout<<endl;

2.函數(shù)指針(函數(shù)調(diào)用)

定義并實現(xiàn)三個函數(shù):

第一個函數(shù)是整數(shù)函數(shù),返回類型為整數(shù),參數(shù)是一個整數(shù)變量,操

作是求該變量的平方值第二個函數(shù)是浮點數(shù)函數(shù),返回類型為浮點數(shù),

參數(shù)是一個浮點數(shù)變量,操作是求該變量的平方根值。求平方根可以使用

函數(shù)sqrt(浮點參數(shù)),將返回該參數(shù)的平方根,在VC中需要頭文件cmath。

第三個函數(shù)是字符串函數(shù),無返回值,參數(shù)是一個字符串指針,操作

是把這個字符串內(nèi)所有小寫字母變成大寫。

要求:定義三個函數(shù)指針分別指向這三個函數(shù),然后根據(jù)調(diào)用類型使

用函數(shù)指針來調(diào)用這三個函數(shù)。不能直接調(diào)用這三個函數(shù)。

如果類型為I,則通過指針調(diào)用整數(shù)函數(shù);如果類型為F,則通過指針

調(diào)用浮點數(shù)函數(shù);如果類型為S,則通過指針調(diào)用字符串函數(shù)

輸入

第一行輸入一個t表示有t個測試實例

每行先輸入一個大寫字母,表示調(diào)用類型,然后再輸入相應的參數(shù)

依次輸入t行

輸出

每行輸出調(diào)用函數(shù)后的結(jié)果

樣例輸入

5

Sshenzhen

I25

F6.25

I31

SChina

樣例輸出SHENZHEN

625

2.5

961

CHINA

#include<iostream>#include<cmath>

#include<cstring>

usingnamespacestd;intfuckl(inta);

floatfuck2(floata);voidfuck3(char*a);intmain()

int(*INT)(int);

float(*FLOAT)(float);void(*CHAR)(char*a);charch,b[30];

inta,t;

floatc;

cin>>t;

while(t-)

(

cin>>ch;

if(ch=='l')

(

INT=fuckl;cin>>a;

cout<<INT(a)<<endl;}

elseif(ch=='F'){

FLOAT=fuck2;cin>>c;

cout<<FLOAT(c)<<endl;}

elseif(ch=='S'){

CHAR=fuck3;

cin>>b;

CHAR(b);

cout<<b<<endl;

)

)

)

intfuckl(inta)

(

returna*a;

)

floatfuck2(floata)

(

returnsqrt(a);

)

voidfuck3(char*a)

(

inti,l=strlen(a);

for(i=0;i<l;i++)

if(*(a+i)>='a'&&*(a+i)<='z')

*(a+i)=*(a+i)-32;

)

3.數(shù)字判斷(指針為函數(shù)參數(shù))

輸入一個字符串,判斷這個字符串是否一個完全整數(shù)值的字符串,例

如輸入"1234",那么表示整數(shù)1234,輸入"12a3"就表示只是一個字符串,

不是一個整數(shù)

要求編寫函數(shù)isNumber,參數(shù)是一個字符指針,返回值是整數(shù)類型

如果字符串表示一個整數(shù),則計算出這個整數(shù)并且返回

如果字符串不是表示一個整數(shù),則返回-1

主函數(shù)必須調(diào)用isNumber來判斷字符串,不能使用任何C++自帶或第

三方的類似函數(shù)

輸入

輸入t表示有t個測試實例

每行輸入一個字符串

依次輸入t行輸出

每行輸出判斷結(jié)果樣例輸入3

1234

567a

0890樣例輸出

1234

-1

890

#include<iostream>

#include<cstring>

usingnamespacestd;

intisnumber(char*a);

intmain()

intl,k=O,t;

chara[20];

char*p;

P=a;

cin>>t;

while(t-)

(

cin>>a;

cout<<isnumber(p)<<endl;

)

}

intisnumber(char*a)

(

inti,j,l,m=O;

l=strlen(a);

for(i=0;i<l;i++){

if(isdigit(a[i]))

m=m*10+a[i]-'0';

else

return-1;

)

returnm;

)

=======================================================4.字符串

比較(字符指針)

編寫一個函數(shù)比較兩個字符串,參數(shù)是兩個字符指針(要求顯式定義,

例如char*S,char*T),

比較字符串S和T的大小。如果S大于T,則返回1,如果S小于T

則返回-1,如果S與T

相等則返回0。

比較規(guī)則:

L把兩個字符串的相同位置上的字符進行比較,字符的大小比較以

ASCII值為準

2.在比較中,如果字符串S的字符大于字符串T的字符的數(shù)量超過小

于的數(shù)量,則認為S

大于T,如果等于則S等于T,如果小于則S小于T

例如S為aaccdd,T為eebbbb,每個位置比較得到S前兩個字母都小

于T,但后4個字母都

大于T,最終認為S大于T

3.如果兩個字符串長度不同,則更長的字符串為大

在主函數(shù)中輸入兩個字符串,并調(diào)用該函數(shù)進行判斷,在判斷函數(shù)中

必須使用函數(shù)參數(shù)的指

針進行字符比較

輸入

輸入t表示有t個測試實例

接著每兩行輸入兩個字符串

依次輸入t個實例

輸出

每行輸出一個實例的比較結(jié)果樣例輸入

3

aaccdd

eebbbb

AAbb++

aaEE*-zznnkk

aaaaaaa

樣例輸出

1

-1

#include<iostream>

#include<cstring>

usingnamespacestd;

intbijiao(char*a,char*b);

intmain()

chara[30],b[30];

intt;

cin>>t;

while(t-)

cin>>a>>b;

cout<<bijiao(a,b)<<endl;)

)

intbijiao(char*a,char*b)

inti,x=O,y=O,m,n;

m=strlen(a);

n=strlen(b);

if(m>n)return1;

elseif(m<n)return-1;else

for(i=0;*(a+i)!='\0';i++)

if(*(a+i)>*(b+i))x++;else

y++;)

)

if(x>y)return1;elseif(x==y)return0;elsereturn-1;

=======================================================5.秘鑰加

密法(指針應用)

有一種方式是使用密鑰進行加密的方法,就是對明文的每個字符使用

密鑰上對應的密碼進行

加密,最終得到密文

例如明文是abcde,密鑰是234,那么加密方法就是a對應密鑰的2,

也就是a偏移2位轉(zhuǎn)化

為c;明文b對應密鑰的3,就是b偏移3位轉(zhuǎn)化為e,同理c偏移4

位轉(zhuǎn)化為g。這時候密

鑰已經(jīng)使用完,那么又重頭開始使用。因此明文的d對應密鑰的2,

轉(zhuǎn)化為f,明文的e對

應密鑰的3轉(zhuǎn)化為h。所以明文abcde,密鑰234,經(jīng)過加密后得到密

文是cegfho

如果字母偏移的位數(shù)超過26個字母范圍,則循環(huán)偏移,例如字母z

偏移2位,就是轉(zhuǎn)化為

b,同理字母x偏移5位就是轉(zhuǎn)化為c

要求:使用三個指針p、q、s分別指向明文、密鑰和密文,然后使用

指針p和q來訪問每個

位置的字符,進行加密得到密文存儲在指針s指向的位置。

除了變量定義和輸入數(shù)據(jù),其他過程都不能使用數(shù)組下標法,必須使

用三個指針來訪問明文、

密鑰和密文。

提示:當指針q已經(jīng)移動到密鑰的末尾,但明文仍然沒有結(jié)束,那么

q就跳回密鑰頭

輸入

第一行輸入t表示有t個測試實例

第二行輸入一個字符串,表示第一個實例的明文

第三行輸入一個數(shù)字串,表示第一個實例的密鑰

依次輸入t個實例

輸出

每行輸出加密后的密文樣例輸入

2abcde

234

XenOS

56

樣例輸出

cegfh

CksUX

#include<iostream>

#include<cstring>

usingnamespacestd;

voidchangel(char*d,int*b);

voidchange2(char*a,int*b,char*c,intI);intmain()

chara[30],d[30],c[30],*p,*s;intiJ,b[30],*q,t;

cin>>t;

while(t-)

{

cin>>a>>d;

changel(d,b);

l=strlen(d);

change2(a,b,c,l);

for(i=0;*(c+i)!='\0';i++)

cout<<c[i];

cout<<endl;

)

)

voidchangel(char*d,int*b)

(

inti,l=strlen(d);

for(i=0;i<l;i++)

b[i]=d[i]-'0';

}

voidchange2(char*a,int*b,char*c,intI){

intij;

)

for(i=0;*(a+i)!='\0';i++){if(*(a+i)>='a'

&&*(a+i)<='z')

*(c+i)=((*(a+i)+*(b+i%l)-97)%26+97);else

*(c+i)=((*(a+i)+*(b+i%l)-65)%26+65);}*(c+i)='\0';

=======================================================6.誰是老

二(結(jié)構(gòu)體)

題目描述定義一個結(jié)構(gòu)體,包含年月日,表示一個學生的出生日期。

然后在一群學生的出生日期中找出誰的出生日期排行第二

要求:出生日期的存儲必須使用結(jié)構(gòu)體,不能使用其他類型的數(shù)據(jù)結(jié)

構(gòu)。

要求程序全過程對出生日期的輸入、訪問、輸出都必須使用結(jié)構(gòu)。

輸入

第一行輸入t表示有t個出生日期

每行輸入三個整數(shù),分別表示年、月、日

依次輸入t個實例

輸出

輸出排行第二老的出生日期,按照年-月-日的格式輸出樣例輸入

6

198056

198183

1980319

198053

1983912

19811123樣例輸出

1980-5-3

#include<iostream>

usingnamespacestd;

intsheng(inty,intm,intd);

structstudent

(

intyear;

intmonth;

intday;

intsheng;

);

intmain()

(

studenta[10];

studentb;

intn,i,j;

cin>>n;

for(i=0;i<n;i++)

cin>>a[i].year;

cin>>a[i].month;

cin>>a[i].day;

)

for(i=0;i<n-l;i++)

for(j=0;j<n-l-i;j++)

if(a[j].year>a[j+l].year)

{b=a[j],a[j]=a[j+l],a[j+l]=b;}

for(i=0;i<3;i++)

a[i].sheng=sheng(a[i].year,a[i].month,a[i].day);

for(i=0;i<2;i++)

for(j=0;j<2-i;j++)

if(a[j].sheng>a[j+l].sheng)

{b=a[j],a[j]=a[j+l],a[j+l]=b;}

cout<<a[l].year<<"-";

cout<<a[l].month<<"-";

cout<<a[l].day<<endl;

)

intsheng(inty,intm,intd)

intdis=O;

switch(m)

casel:dis+=31;

case2:

if(y%400==011y%4==0&&y%100!=0)

dis+=29;

else

dis+=28;

case3:dis+=31;

case4:dis+=30;

case5:dis+=31;

case6:dis+=30;

case7:dis+=31;

case8:dis+=31;

case9:dis+=30;

case10:dis+=31;

casell:dis+=30;

case12:dis+=31;

)

returndis-d;

)

7.抄襲查找(結(jié)構(gòu)體+指針+函數(shù))

題目描述已知一群學生的考試試卷,要求對試卷內(nèi)容進行對比,查

找是否有抄襲。

每張試卷包含:學號(整數(shù)類型)、題目1答案(字符串類型)、題目

2答案(字符串類型)、

題目3答案(字符串類型)

要求:使用結(jié)構(gòu)體來存儲試卷的信息。定義一個函數(shù),返回值為一個

整數(shù),參數(shù)是兩個結(jié)構(gòu)體指針,函數(shù)操作是比較兩張試卷的每道題目的答

案,如果相同題號的答案相似度超過90%,那么就認為有抄襲,函數(shù)返回

抄襲題號,否則返回0。相似度是指在同一題目中,兩個答案的逐個位置

上的字符兩兩比較,相同的數(shù)量大于等于任一個答案的長度的90%,就認

為抄襲。

輸入第一行輸入t表示有t張試卷

第二行輸入第1張試卷的學生學號

第三行輸入第1張試卷的題目1答案

第四行輸入第1張試卷的題目2答案

第五行輸入第1張試卷的題目3答案

每張試卷對應4行輸入

依次輸入t張試卷的數(shù)據(jù)

輸出

在一行中,把發(fā)現(xiàn)抄襲的兩個學號和題目號,數(shù)據(jù)之間用單個空格隔

如果發(fā)現(xiàn)是題目1抄襲,題目號為1,以此類推

輸出順序按照輸入的學號順序進行輸出

樣例輸入

5

2088150555

aabcdefll

ZZ887766dd

CC33447799ZZ

2088150333

abcdefOO

AABBCCDDEE

ZZ668899cc

2088150111

AABBCCDDEE

ZZ668899cc

abcdefOO

2088150222

AABBCFDDeE

ZZ889966dd

abcdefOOO

2088150444aabcdefOO

AABBCDDDEE

CC668899ZZ

樣例輸出

208815033320881504442

208815011120881502223

#include<iostream>

#include<cstring>

usingnamespacestd;

intxiao(inta,intb);

structpaper

(

intno;

chara[100];

charb[100];

charc[100];

);

intcompare(paper*p,paper*q);

intmain()

(

paper*a;

intn,i,j,k;

//freopen("c:\\123.txt","r",stdin);cin>>n;

a=newpaper[n];

for(i=0;i<n;i++)

(

cin>>a[i].no;

cin>>a[i].a;

cin>>a[i].b;

cin>>a[i].c;

}

for(i=0;i<n-l;i++)

for(j=i+l;j<n;j++)

(

k=compare(&a[i],&a[j]);if(k!=O)

cout<<a[i].no<<""<<a[j].no<<""<<k<<endl;

)

)

intcompare(paper*p,paper*q)

{

inti,l,m,x=O;

l=strlen(p->a);

m=strlen(q->a);

l=xiao(l,m);

for(i=0;i<l;i++)

if(p->a[i]==q->a[i])

x++;

if(x>=l*9/10)

return1;

x=0;

l=strlen(p->b);

m=strlen(q->b);

l=xiao(l,m);

for(i=0;i<l;i++)

if(p->b[i]==q->b[i])

x++;

if(x>=l*9/10)

return2;

x=0;

l=strlen(p->c);

m=strlen(q->c);

l=xiao(l,m);

for(i=0;i<l;i++)

if(p->;c[i]==q->c[i])

x++;

if(x>;=l*9/10)

return3;

return0;

)

intxiao(inta,intb)

{

if(a<b)

returna;

else

returnb;

)

8.結(jié)構(gòu)和鏈表初步(指針+結(jié)構(gòu))(冒泡排序)

#include<iostream>

usingnamespacestd;

structstudent

(

inta;

student*next;

);

student*create();

voidfuck(student*head);

intmain()

(

fuck(create());

)

student*create()

(

student*head,*psz*pend;

head=NULL;

ps=newstudent;

cin>>ps->a;

pend=ps;

while(ps->a)

{

if(head==NULL)

head=ps;

else

pend->next=ps;

pend=ps;

ps=newstudent;

cin>>ps->a;

}

pend->next=NULL;

deleteps;

return(head);

}

voidfuck(student*head)

(

student*endpt;〃控制循環(huán)比較

student*p;〃臨時指針變量

student*pl,*p2;

pl=newstudent;

pl->next=head;〃注意理解:我們增加一個節(jié)點,放在第

一個節(jié)點的前面,主要是為了便于比較。因為第一個節(jié)點沒有前驅(qū),我們

不能交換地址

head=pl;〃讓head指向pl節(jié)點,排序完成后,

我們再把pl節(jié)點釋放掉

for(endpt=NULL;endpt!=head;endpt=p)〃結(jié)合第6點理解

(

for(p=pl=head;pl->next->next!=endpt;pl=pl->next)

(

if(pl->next->a>pl->next->next->a)〃如果前面的節(jié)

點鍵值比后面節(jié)點的鍵值大,則交換

p2=pl->next->next;〃結(jié)合第1點理解

pl->next->next=p2->next;〃結(jié)合第2點理解

p2->next=pl->next;〃結(jié)合第3點理解

pl->next=p2;〃結(jié)合第4點理解

p=pl->next->next;〃結(jié)合第6點理解

)

)

)

pl=head;〃把pl的信息去掉

head=head->next;〃讓head指向排序后的第一個節(jié)點

deletepl;〃釋放pl

pl=NULL;〃pl置為NULL,保證不產(chǎn)生“野指針”,即地址

不確定的指針變量

while(head->next)

)

{cout<<head->a<<"head=head->next;}

cout<<head->a<<endl;

9.堆棧練習(類和對象實驗一)

題目描述堆棧是程序設計里面一個很重要的數(shù)據(jù)結(jié)構(gòu),也是指針

應用的一個重點,請同學們設計一

個可以放N個學生姓名的堆棧,如果滿棧則提示不能再放,如果出棧

時為空,則提示沒有信

息可取,用C語言實現(xiàn)該要求。

輸入

第一行輸入堆棧的大??;

第二行輸入元素數(shù)目;

第三行起依次輸入堆棧各元素的值,如果棧滿,則提示:滿棧!。

輸出

按出棧順序每行輸出各元素的值,如果??談t提示:棧空!樣例輸

入3

4

Tom

Tim

JohnMarry

樣例輸出

滿棧!

John

Tim

Tom

#include<iostream>

usingnamespacestd;

classfuck

private:

intm,n,i,k;

char**a;

public:

voidset(intmu,intnu,char**b){

k=0;

inti;

m=mu;

n=nu;

a=newchar*[m];

for(i=0;i<m;i++)

a[i]=newchar;

for(i=0;i<n;i++)

(

a[i]=b[i];

k++;

if(i>=m-l)

{cout<<"滿棧!"<<endl;break;}}

if(k==O)

cout<<"棧空!"<<endl;else

for(i=m-l;i>=0;i-)

cout<<a[i]<<endl;

)

);

intmain()

(

fucksb;

char**a;

intm,n,i,j,k;

cin>>m>>n;

a=newchar*[n];

for(i=0;i<n;i++)

a[i]=newchar;

for(i=0;i<n;i++)

)

cin>>a[i];sb.set(m,n,a);

10.隨機數(shù)練習(類和對象實驗一)

題目描述我們知道福利彩票銷售中也有通過機選隨機生成你需要

的號碼,現(xiàn)假設福利彩票共有七個號碼,每個號碼的區(qū)間為0-30,現(xiàn)在請

你利用C語言設計一個生成七個福利彩票號碼的隨機數(shù)模擬器,當用戶確

定下注后,輸出七個不同的號碼。(需要利用隨機函數(shù)rand()、srand(),具

體用法參見參考書)。

輸入

第一行輸入要生成福利彩票的組數(shù);

第二行輸入買入彩票的客戶名稱;

輸出

第一行輸出客戶名稱;

第二行為第一組彩票號碼,

第三行為第二組彩票號碼,

以此類推。。。。。。

樣例輸入

2

Tom

樣例輸出

提示

#include<iostream>

#include<ctime>

#include<stdlib.h>

usingnamespacestd;

classcaipiao

private:

intzu;

charname[20];

int**haoma;

public:

voidset(inta,charn[20])

(

zu=a;

inti=0;

while(n[i]!='\0')

(

name[i]=n[i];

i++;

)

name[i]='\0';

haoma=newint*[zu];

for(i=0;i<zu;i++)

haoma[i]=newint[7];

)

voidfuzhi()

(

inti,j;

srand(unsigned(time(NULL)));

for(i=0;i<zu;i++)

for(j=0;j<7;j++)

haoma[i][j]=rand()%31;}

voidprintf()

{

inti=O,j;

while(name[i]!='\0')

(

cout<<name[i];

i++;

)

cout<<endl;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論