C、C编程题目和代码3.pdf

上传人:奔*** 文档编号:89655351 上传时间:2023-05-08 格式:PDF 页数:41 大小:2.66MB
返回 下载 相关 举报
C、C编程题目和代码3.pdf_第1页
第1页 / 共41页
C、C编程题目和代码3.pdf_第2页
第2页 / 共41页
点击查看更多>>
资源描述

《C、C编程题目和代码3.pdf》由会员分享,可在线阅读,更多相关《C、C编程题目和代码3.pdf(41页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、C、C+编程题目和代码3目 录1.矩阵左转.22.函数指针(函数调用).43.数字判断(指针为函数参数).64.字符串比较(字符指针).85.秘钥加密法(指针应用).106.谁是老二(结构体).127.抄袭查找(结构体+指针+函数).148.结构和链表初步(指针+结构)(冒泡排序).189.堆栈练习(类和对象实验).2010.随机数练习(类和对象实验一).2211.买彩游戏(类和对象实验一).2412.堆栈练习扩展(类和对象实验一).2713.堆栈排序练习(类和对象实验一).3014.Date(类与对象).3215.点和圆(类与对象).3516.分数类.3917.软件备份(拷贝构造函数).44

2、18.电话号码升位(拷贝构造函数).4719.Equation(类与对象).4920.Complex(类与对象).50身份证设定(复合类).51Point_Array(类与对象).55Array(类与对象).59软件备份(拷贝构造函数).62分数类.65=1.矩阵左转输入一个2*3的矩阵,将这个矩阵向左旋转90度后输出比如现在有2*3矩 阵:123456向左旋转90度后的矩阵变为:3 62 514要求:除了矩阵创建和数据输入可以使用数组和数组下标的方法,其他过程对矩阵的任何访问都必须使用指针提示:m行n列的二维矩阵,第i行第j列的元素与首元素的距离为i*n+j,序号从0开始计算输入第一行输入t

3、表示有t个测试实例连续两行输入一个2*3的矩阵的数据依次输入t个实例输出依次输出左转后的矩阵结果在输出的每行中,每个数据之间都用空格隔开,最后一个数据后面也带有空格样例输入2123456456789样例输出3 62 514695 847#include<iostream>using namespace std;void change(int*p,int*q);int main()(int a23,b32;intcin>>t;while(t-)(for(i=0;i<2;i+)for(j=0;j<3;j+)cin>>aij;change(a0,b0)

4、;)void change(int*p,int*q)int ij;for(i=0;i<2;i+)for(j=0;j<3;j+)*(q+4-2*j+i)=*(p+3*i+j);/b2-ji=aij;for(i=0;i<3;i+)for(j=0;j<2;j+)cout<<*(q+2*i+j)<<cout<<endl;2.函数指针(函数调用)定义并实现三个函数:第一个函数是整数函数,返回类型为整数,参数是一个整数变量,操作是求该变量的平方值第二个函数是浮点数函数,返回类型为浮点数,参数是一个浮点数变量,操作是求该变量的平方根值。求平方根可以

5、使用函数sqrt(浮点参数),将返回该参数的平方根,在 VC中需要头文件cmath。第三个函数是字符串函数,无返回值,参数是一个字符串指针,操作是把这个字符串内所有小写字母变成大写。要求:定义三个函数指针分别指向这三个函数,然后根据调用类型使用函数指针来调用这三个函数。不能直接调用这三个函数。如果类型为I,则通过指针调用整数函数;如果类型为F,则通过指针调用浮点数函数;如果类型为S,则通过指针调用字符串函数输入第一行输入一个t 表示有t 个测试实例每行先输入一个大写字母,表示调用类型,然后再输入相应的参数依次输入t 行输出每行输出调用函数后的结果样例输入5S shenzhenI 25F6.25

6、I 31S China样例输出SHENZHEN6252.5961CHINA#include<iostream>#include<cmath>#include<cstring>using namespace std;int fuckl(int a);float fuck2(float a);void fuck3(char*a);int main()int(*INT)(int);float(*FLOAT)(float);void(*CHAR)(char*a);char ch,b30;int a,t;float c;cin>>t;while(t-)(c

7、in>>ch;if(ch='l')(INT=fuckl;cin>>a;cout<<INT(a)<<endl;else if(ch='F')FLOAT=fuck2;cin>>c;cout<<FLOAT(c)<<endl;else if(ch='S')CHAR=fuck3;cin>>b;CHAR(b);cout<<b<<endl;)int fuckl(int a)(return a*a;)float fuck2(float a)(r

8、eturn sqrt(a);)void fuck3(char*a)(int i,l=strlen(a);for(i=0;i<l;i+)if(*(a+i)>='a'&&*(a+i)<='z')*(a+i)=*(a+i)-32;)3.数字判断(指针为函数参数)输入一个字符串,判断这个字符串是否一个完全整数值的字符串,例如输入1234,那么表示整数1 2 3 4,输入12a3就表示只是一个字符串,不是一个整数要求编写函数isNumber,参数是一个字符指针,返回值是整数类型如果字符串表示一个整数,则计算出这个整数并且返回如果字符串不是

9、表示一个整数,则返回-1主函数必须调用isNumber来判断字符串,不能使用任何C+自带或第三方的类似函数输入输入t 表示有t 个测试实例每行输入一个字符串依次输入t 行输出每行输出判断结果样例输入31234567a0890样例输出1234-1890#include<iostream>#include<cstring>using namespace std;int isnumber(char*a);int main()int l,k=O,t;char a20;char*p;P=a;cin>>t;while(t-)(cin>>a;cout<&

10、lt;isnumber(p)<<endl;)int isnumber(char*a)(int i,j,l,m=O;l=strlen(a);for(i=0;i<l;i+)if(isdigit(ai)m=m*10+ai-'0'elsereturn-1;)return m;)=4.字符串比较(字符指针)编写一个函数比较两个字符串,参数是两个字符指针(要求显式定义,例如 char*S,char*T),比较字符串S 和 T 的大小。如果S 大于T,则返回1,如果S 小于T则返回-1,如果S 与T相等则返回0。比较规则:L 把两个字符串的相同位置上的字符进行比较,字符的大

11、小比较以ASCII值为准2.在比较中,如果字符串S 的字符大于字符串T 的字符的数量超过小于的数量,则认为S大于T,如果等于则S 等于T,如果小于则S 小于T例如S 为 aaccdd,T 为 eebbbb,每个位置比较得到S 前两个字母都小于T,但后4 个字母都大于T,最终认为S 大于T3.如果两个字符串长度不同,则更长的字符串为大在主函数中输入两个字符串,并调用该函数进行判断,在判断函数中必须使用函数参数的指针进行字符比较输入输入t 表示有t 个测试实例接着每两行输入两个字符串依次输入t 个实例输出每行输出一个实例的比较结果样例输入3aaccddeebbbbAAbb+aaEE*-zznnkk

12、aaaaaaa样例输出1-1#include<iostream>#include<cstring>using namespace std;int bijiao(char*a,char*b);int main()char a30,b30;int t;cin>>t;while(t-)cin>>a>>b;cout<<bijiao(a,b)<<endl;)int bijiao(char*a,char*b)int i,x=O,y=O,m,n;m=strlen(a);n=strlen(b);if(m>n)return

13、 1;else if(m<n)return-1;elsefor(i=0;*(a+i)!='0'i+)if(*(a+i)>*(b+i)x+;elsey+;)if(x>y)return 1;else if(x=y)return 0;elsereturn-1;=5.秘钥加密 法(指针应用)有一种方式是使用密钥进行加密的方法,就是对明文的每个字符使用密钥上对应的密码进行加密,最终得到密文例如明文是a b cd e,密钥是2 3 4,那么加密方法就是a对应密钥的2,也就是a偏 移2位转化为c;明文b对应密钥的3,就 是b偏 移3位转化为e,同理c偏 移4位转化为g。这时

14、候密钥已经使用完,那么又重头开始使用。因此明文的d对应密钥的2,转化为f,明文的e对应密钥的3转化为h。所以明文abcde,密钥2 3 4,经过加密后得到密文 是cegfho如果字母偏移的位数超过2 6个字母范围,则循环偏移,例如字母z偏 移2位,就是转化为b,同理字母x偏 移5位就是转化为c要求:使用三个指针p、q、s分别指向明文、密钥和密文,然后使用指 针p和q来访问每个位置的字符,进行加密得到密文存储在指针s指向的位置。除了变量定义和输入数据,其他过程都不能使用数组下标法,必须使用三个指针来访问明文、密钥和密文。提示:当指针q 已经移动到密钥的末尾,但明文仍然没有结束,那么q 就跳回密钥

15、头输入第一行输入t 表示有t 个测试实例第二行输入一个字符串,表示第一个实例的明文第三行输入一个数字串,表示第一个实例的密钥依次输入t 个实例输出每行输出加密后的密文样例输入2 abcde234XenOS56样例输出cegfhCksUX#include<iostream>#include<cstring>using namespace std;void changel(char*d,int*b);void change2(char*a,int*b,char*c,int I);int main()char a30,d30,c30,*p,*s;int iJ,b30,*q,t

16、;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<<ci;cout<<endl;)void changel(char*d,int*b)(int i,l=strlen(d);for(i=0;i<l;i+)bi=di-'0'void change2(char*a,int*b,char*c,int I)int ij;)for(i=0;*(a+i)!='0&

17、#39;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.谁是老二(结构体)题目描述定义一个结构体,包含年月日,表示一个学生的出生日期。然后在一群学生的出生日期中找出谁的出生日期排行第二要求:出生日期的存储必须使用结构体,不能使用其他类型的数据结构。要求程序全过程对出生日期的输入、访问、输出都必须使用结构。输入第一行输入t表示有t个出生

18、日期每行输入三个整数,分别表示年、月、日依次输入t个实例输出输出排行第二老的出生日期,按照年-月-日的格式输出样例输入61980 5 61981 8 319803191980 5 31983 9 121981 11 2 3样例输出1980-5-3#include<iostream>using namespace std;int sheng(int y,int m,int d);struct student(int year;int month;int day;int sheng;);int main()(student a10;student b;int n,i,j;cin>

19、>n;for(i=0;i<n;i+)cin>>ai.year;cin>>ai.month;cin>>ai.day;)for(i=0;i<n-l;i+)for(j=0;j<n-l-i;j+)if(aj.year>aj+l.year)b=aj,aj=aj+l,aj+l=b;for(i=0;i<3;i+)ai.sheng=sheng(ai.year,ai.month,ai.day);for(i=0;i<2;i+)for(j=0;j<2-i;j+)if(aj.sheng>aj+l.sheng)b=aj,aj=aj

20、+l,aj+l=b;cout<<al.year<<-;cout<<al.month<<-;cout<<al.day<<endl;)int sheng(int y,int m,int d)int dis=O;switch(m)case l:dis+=31;case 2:if(y%400=0 1 1 y%4=0&&y%100!=0)dis+=29;elsedis+=28;case 3:dis+=31;case 4:dis+=30;case 5:dis+=31;case 6:dis+=30;case 7:dis+

21、=31;case 8:dis+=31;case 9:dis+=30;case 10:dis+=31;case ll:dis+=30;case 12:dis+=31;)return dis-d;)7.抄袭查找(结构体+指针+函数)题目描述已知一群学生的考试试卷,要求对试卷内容进行对比,查找是否有抄袭。每张试卷包含:学 号(整数类型)、题 目1答 案(字符串类型)、题目2答 案(字符串类型)、题 目3答 案(字符串类型)要求:使用结构体来存储试卷的信息。定义一个函数,返回值为一个整数,参数是两个结构体指针,函数操作是比较两张试卷的每道题目的答案,如果相同题号的答案相似度超过9 0%,那么就认为有抄

22、袭,函数返回抄袭题号,否则返回0。相似度是指在同一题目中,两个答案的逐个位置上的字符两两比较,相同的数量大于等于任一个答案的长度的90%,就认为抄袭。输入第一行输入t表示有t张试卷第二行输入第1张试卷的学生学号第三行输入第1张试卷的题目1答案第四行输入第1张试卷的题目2答案第五行输入第1张试卷的题目3答案每张试卷对应4行输入依次输入t张试卷的数据输出在一行中,把发现抄袭的两个学号和题目号,数据之间用单个空格隔开如果发现是题目1抄袭,题目号为1,以此类推输出顺序按照输入的学号顺序进行输出样例输入52088150555aabcdefllZZ887766ddCC33447799ZZ208815033

23、3abcdefOOAABBCCDDEEZZ668899cc2088150111AABBCCDDEEZZ668899ccabcdefOO2088150222AABBCFDDeEZZ889966ddabcdefOOO2088150444 aabcdefOOAABBCDDDEECC668899ZZ样例输出2088150333 2088150444 2208815011120881502223#include<iostream>#include<cstring>using namespace std;int xiao(int a,int b);struct paper(int

24、no;char a100;char b100;char c100;);int compare(paper*p,paper*q);int main()(paper*a;int n,i,j,k;/freopen(c:123.txt,r,stdin);cin>>n;a=new papern;for(i=0;i<n;i+)(cin>>ai.no;cin>>ai.a;cin>>ai.b;cin>>ai.c;for(i=0;i<n-l;i+)for(j=i+l;j<n;j+)(k=compare(&ai,&aj)

25、;if(k!=O)cout<<ai.no<<<<aj.no<<<<k<<endl;)int compare(paper*p,paper*q)int i,l,m,x=O;l=strlen(p->a);m=strlen(q->a);l=xiao(l,m);for(i=0;i<l;i+)if(p->ai=q->ai)x+;if(x>=l*9/10)return 1;x=0;l=strlen(p->b);m=strlen(q->b);l=xiao(l,m);for(i=0;i<

26、l;i+)if(p->bi=q->bi)x+;if(x>=l*9/10)return 2;x=0;l=strlen(p->c);m=strlen(q->c);l=xiao(l,m);for(i=0;i<l;i+)if(p->;ci=q->ci)x+;if(x>;=l*9/10)return 3;return 0;)int xiao(int a,int b)if(a<b)return a;elsereturn b;)8.结构和链表初步(指针+结构)(冒泡排序)#include<iostream>using namespace s

27、td;struct student(int a;student*next;);student*create();void fuck(student*head);int main()(fuck(create();)student*create()(student*head,*psz*pend;head=NULL;ps=new student;cin>>ps->a;pend=ps;while(ps->a)if(head=NULL)head=ps;elsepend->next=ps;pend=ps;ps=new student;cin>>ps->a;p

28、end->next=NULL;delete ps;return(head);void fuck(student*head)(student*endpt;控制循环比较student*p;临时指针变量student*pl,*p2;pl=new student;pl->next=head;注意理解:我们增加一个节点,放在第一个节点的前面,主要是为了便于比较。因为第一个节点没有前驱,我们不能交换地址head=pl;让head指 向p l节点,排序完成后,我们再把p l节点释放掉for(endpt=NULL;endpt!=head;endpt=p)结合第 6 点理解(for(p=pl=hea

29、d;pl->next->next!=endpt;pl=pl->next)(if(pl->next->a>pl->next->next->a)如果前面的节点键值比后面节点的键值大,则交换p2=pl->next->next;结合第 1 点理解pl->next->next=p2->next;结合第 2 点理解p2->next=pl->next;结合第 3 点理解pl->next=p2;结合第4 点理解p=pl->next->next;结合第 6 点理解)pl=head;把p l的信息去掉

30、head=head->next;让head指向排序后的第一个节点delete pl;释放 plpl=NULL;p l置为NULL,保证不产生“野指针”,即地址不确定的指针变量while(head->next)cout<<head->a<<head=head->next;cout<<head->a<<endl;9.堆栈练习(类和对象实验一)题目描述 堆栈是程序设计里面一个很重要的数据结构,也是指针应用的一个重点,请同学们设计一个可以放N 个学生姓名的堆栈,如果满栈则提示不能再放,如果出栈时为空,则提示没有信息可取,用

31、C 语言实现该要求。输入第一行输入堆栈的大小;第二行输入元素数目;第三行起依次输入堆栈各元素的值,如果栈满,则提示:满栈!。输出按出栈顺序每行输出各元素的值,如果栈空则提示:栈空!样例输入 34TomTimJohn Marry样例输出满栈!JohnTimTom#include<iostream>using namespace std;class fuckprivate:int m,n,i,k;char*a;public:void set(int mu,int nu,char*b)k=0;int i;m=mu;n=nu;a=new char*m;for(i=0;i<m;i+)a

32、i=new char;for(i=0;i<n;i+)(ai=bi;k+;if(i>=m-l)cout<<满栈!<<endl;break;if(k=O)cout<<栈空!<<endl;elsefor(i=m-l;i>=0;i-)cout<<ai<<endl;);int main()(fuck sb;char*a;int m,n,i,j,k;cin>>m>>n;a=new char*n;for(i=0;i<n;i+)ai=new char;for(i=0;i<n;i+)ci

33、n>>ai;sb.set(m,n,a);10.随机数练习(类和对象实验一)题目描述 我们知道福利彩票销售中也有通过机选随机生成你需要的号码,现假设福利彩票共有七个号码,每个号码的区间为0-3 0,现在请你利用C语言设计一个生成七个福利彩票号码的随机数模拟器,当用户确定下注后,输出七个不同的号码。(需要利用随机函数rand()、srand(),具体用法参见参考书)。输入第一行输入要生成福利彩票的组数;第二行输入买入彩票的客户名称;输出第一行输出客户名称;第二行为第一组彩票号码,第三行为第二组彩票号码,以此类推。样例输入2Tom样例输出提示#include<iostream>

34、;#include<ctime>#include<stdlib.h>using namespace std;class caipiaoprivate:int zu;char name20;int*haoma;public:void set(int a,char n20)(zu=a;int i=0;while(ni!='0')(namei=ni;i+;)namei='0'haoma=new int*zu;for(i=0;i<zu;i+)haomai=new int7;)void fuzhi()(int i,j;srand(unsign

35、ed(time(NULL);for(i=0;i<zu;i+)for(j=0;j<7;j+)haomaij=rand()%31;void printf()int i=O,j;while(namei!='0')(cout<<namei;i+;)cout<<endl;for(i=0;i<zu;i+)(for(j=0;j<6;j+)cout<<haomaij<<cout<<haomaij<<endl;);int main()caipiao a;int n;char name20;cin>

36、;>n;cin>>name;a.set(n,name);a.fuzhi();a.printf();)11.买彩游戏(类和对象实验一)题目描述 参见随机数练习要求:我们知道福利彩票销售中也有通过机选随机生成你需要的号码,现假设福利彩票共有七个号码,每个号码的区间为0-30,现在请你利用C语言设计一个生成七个福利彩票号码的随机机器,当用户确定下注后,输出七个不同的号码。(需要利用随机函数 rand。、srand(),具体用法参见参考书)。在此基础上,你已有了一个n组的福利彩票号码(无需随机生成),现假定给出摇奖后的一组号码为:6,13,1,24,28,8,10,把你所买的每组号码

37、依次匹配,当从左至右各位置上的号码一一相同,则表示你中了一等奖,如果有5、6 个相同则为二等奖,余下大于两个以上相同的号码均为三等奖,编程实现该游戏规则!输入第一行输入所买彩票的组数;第二行输入买入彩票的客户名称;第三行开始每行输入每组福利彩票的号码;最后行输入摇奖中奖号码。输出第一行输出客户名称;第二行根据摇奖号码输出客户所中的奖金等级,比如:恭喜你中了(多少注)N 等奖!或者:力 口 油!继续!样例输入2 Tom2,5,3,24,10,8,920,23,30,1,5,9,26,13,1,24,28,8,10样例输出恭喜Tom中了 1 注三等奖!提示#include<iostream&

38、gt;#include<ctime>using namespace std;class caipiao(private:int zu;char name20;int*haoma;public:void set(int p,char n20,int*a)int ij;zu=p;haoma=new int*zu;for(i=0;i<zu+l;i+)haomai=new int7;for(i=0;i<zu+l;i+)for(j=0;j<7;j+)haomaij=aij;i=0;while(ni!='0')namei=ni;i+;namei='0')void compare()(int i,yi=O,er=O,san=O;for(i=0;i<zu;i+)(if(tong(haomai)=7)yi+;else if(tong(haomai)=6 1 1tong(haomai)=5)er+;else if(tong(haomai)>=2&&tong(haomai)<=5)san+;if(yi)cout<< 恭喜<<name<< 中 了<<yi<<

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁