CC++编程题目和代码文档格式.docx
《CC++编程题目和代码文档格式.docx》由会员分享,可在线阅读,更多相关《CC++编程题目和代码文档格式.docx(82页珍藏版)》请在冰豆网上搜索。
inti,j,t;
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)
inti,j;
*(q+4-2*j+i)=*(p+3*i+j);
//b[2-j][i]=a[i][j];
cout<
<
*(q+2*i+j)<
"
"
;
cout<
endl;
2.函数指针(函数调用)
定义并实现三个函数:
第一个函数是整数函数,返回类型为整数,参数是一个整数变量,操作是求该变量的平方值
第二个函数是浮点数函数,返回类型为浮点数,参数是一个浮点数变量,操作是求该变量的平方根值。
求平方根可以使用函数sqrt(浮点参数),将返回该参数的平方根,在VC中需要头文件cmath。
第三个函数是字符串函数,无返回值,参数是一个字符串指针,操作是把这个字符串所有小写字母变成大写。
定义三个函数指针分别指向这三个函数,然后根据调用类型使用函数指针来调用这三个函数。
不能直接调用这三个函数。
如果类型为I,则通过指针调用整数函数;
如果类型为F,则通过指针调用浮点数函数;
如果类型为S,则通过指针调用字符串函数
第一行输入一个t表示有t个测试实例
每行先输入一个大写字母,表示调用类型,然后再输入相应的参数
依次输入t行
每行输出调用函数后的结果
5
Sshenzhen
I25
F6.25
I31
SChina
SHENZHEN
625
2.5
961
CHINA
cmath>
cstring>
intfuck1(inta);
floatfuck2(floata);
voidfuck3(char*a);
int(*INT)(int);
float(*FLOAT)(float);
void(*CHAR)(char*a);
charch,b[30];
inta,t;
floatc;
ch;
if(ch=='
I'
)
INT=fuck1;
a;
cout<
INT(a)<
elseif(ch=='
F'
FLOAT=fuck2;
c;
FLOAT(c)<
S'
CHAR=fuck3;
b;
CHAR(b);
b<
intfuck1(inta)
returna*a;
floatfuck2(floata)
returnsqrt(a);
voidfuck3(char*a)
inti,l=strlen(a);
l;
if(*(a+i)>
='
a'
&
&
*(a+i)<
z'
*(a+i)=*(a+i)-32;
3.数字判断(指针为函数参数)
输入一个字符串,判断这个字符串是否一个完全整数值的字符串,例如输入"
1234"
,那么表示整数1234,输入"
12a3"
就表示只是一个字符串,不是一个整数
要求编写函数isNumber,参数是一个字符指针,返回值是整数类型
如果字符串表示一个整数,则计算出这个整数并且返回
如果字符串不是表示一个整数,则返回-1
主函数必须调用isNumber来判断字符串,不能使用任何C++自带或第三方的类似函数
输入t表示有t个测试实例
每行输入一个字符串
每行输出判断结果
3
1234
567a
0890
-1
890
intisnumber(char*a);
intl,k=0,t;
chara[20];
char*p;
p=a;
cin>
while(t--)
cout<
isnumber(p)<
intisnumber(char*a)
inti,j,l,m=0;
l=strlen(a);
for(i=0;
if(isdigit(a[i]))
m=m*10+a[i]-'
0'
else
return-1;
returnm;
4.字符串比较(字符指针)
编写一个函数比较两个字符串,参数是两个字符指针(要求显式定义,例如char*S,char*T),比较字符串S和T的大小。
如果S大于T,则返回1,如果S小于T则返回-1,如果S与T相等则返回0。
比较规则:
1.把两个字符串的相同位置上的字符进行比较,字符的大小比较以ASCII值为准
2.在比较中,如果字符串S的字符大于字符串T的字符的数量超过小于的数量,则认为S大于T,如果等于则S等于T,如果小于则S小于T
例如S为aaccdd,T为eebbbb,每个位置比较得到S前两个字母都小于T,但后4个字母都大于T,最终认为S大于T
3.如果两个字符串长度不同,则更长的字符串为大
在主函数中输入两个字符串,并调用该函数进行判断,在判断函数中必须使用函数参数的指针进行字符比较
接着每两行输入两个字符串
每行输出一个实例的比较结果
aaccdd
eebbbb
AAbb++
aaEE*-
zznnkk
aaaaaaa
1
intbijiao(char*a,char*b);
chara[30],b[30];
intt;
a>
bijiao(a,b)<
intbijiao(char*a,char*b)
inti,x=0,y=0,m,n;
m=strlen(a);
n=strlen(b);
if(m>
n)return1;
elseif(m<
n)return-1;
*(a+i)!
\0'
if(*(a+i)>
*(b+i))
x++;
y++;
if(x>
y)
return1;
elseif(x==y)
return0;
5.秘钥加密法(指针应用)
有一种方式是使用密钥进行加密的方法,就是对明文的每个字符使用密钥上对应的密码进行加密,最终得到密文
例如明文是abcde,密钥是234,那么加密方法就是a对应密钥的2,也就是a偏移2位转化为c;
明文b对应密钥的3,就是b偏移3位转化为e,同理c偏移4位转化为g。
这时候密钥已经使用完,那么又重头开始使用。
因此明文的d对应密钥的2,转化为f,明文的e对应密钥的3转化为h。
所以明文abcde,密钥234,经过加密后得到密文是cegfh。
如果字母偏移的位数超过26个字母围,则循环偏移,例如字母z偏移2位,就是转化为b,同理字母x偏移5位就是转化为c
使用三个指针p、q、s分别指向明文、密钥和密文,然后使用指针p和q来访问每个位置的字符,进行加密得到密文存储在指针s指向的位置。
除了变量定义和输入数据,其他过程都不能使用数组下标法,必须使用三个指针来访问明文、密钥和密文。
当指针q已经移动到密钥的末尾,但明文仍然没有结束,那么q就跳回密钥头
第二行输入一个字符串,表示第一个实例的明文
第三行输入一个数字串,表示第一个实例的密钥
每行输出加密后的密文
abcde
234
XenOS
56
cegfh
CksUX
voidchange1(char*d,int*b);
voidchange2(char*a,int*b,char*c,intl);
chara[30],d[30],c[30],*p,*s;
inti,l,b[30],*q,t;
d;
change1(d,b);
l=strlen(d);
change2(a,b,c,l);
*(c+i)!
c[i];
voidchange1(char*d,int*b)
inti,l=strlen(d);
b[i]=d[i]-'
voidchange2(char*a,int*b,char*c,intl)
inti,j;
*(c+i)=((*(a+i)+*(b+i%l)-97)%26+97);
*(c+i)=((*(a+i)+*(b+i%l)-65)%26+65);
*(c+i)='
6.谁是老二(结构体)
题目描述
定义一个结构体,包含年月日,表示一个学生的出生日期。
然后在一群学生的出生日期中找出谁的出生日期排行第二
出生日期的存储必须使用结构体,不能使用其他类型的数据结构。
要求程序全过程对出生日期的输入、访问、输出都必须使用结构。
第一行输入t表示有t个出生日期
每行输入三个整数,分别表示年、月、日
输出排行第二老的出生日期,按照年-月-日的格式输出
6
198056
198183
1980319
198053
1983912
19811123
1980-5-3
intsheng(inty,intm,intd);
structstudent
intyear;
intmonth;
intday;
intsheng;
};
studenta[10];
studentb;
intn,i,j;
n;
a[i].year;
a[i].month;
a[i].day;
n-1;
for(j=0;
n-1-i;
if(a[j].year>
a[j+1].year)
{b=a[j],a[j]=a[j+1],a[j+1]=b;
a[i].sheng=sheng(a[i].year,a[i].month,a[i].day);
2-i;
if(a[j].sheng>
a[j+1].sheng)
a[1].year<
-"
a[1].month<
a[1].day<
intsheng(inty,intm,intd)
intdis=0;
switch(m)
case1:
dis+=31;
case2:
if(y%400==0||y%4==0&
y%100!
=0)
dis+=29;
dis+=28;
case3:
case4:
dis+=30;
case5:
case6:
case7:
case8:
case9:
case10:
case11:
case12:
returndis-d;
7.抄袭查找(结构体+指针+函数)
已知一群学生的考试试卷,要求对试卷容进行对比,查找是否有抄袭。
每试卷包含:
学号(整数类型)、题目1答案(字符串类型)、题目2答案(字符串类型)、题目3答案(字符串类型)
使用结构体来存储试卷的信息。
定义一个函数,返回值为一个整数,参数是两个结构体指针,函数操作是比较两试卷的每道题目的答案,如果相同题号的答案相似度超过90%,那么就认为有抄袭,函数返回抄袭题号,否则返回0。
相似度是指在同一题目中,两个答案的逐个位置上的字符两两比较,相同的数量大于等于任一个答案的长度的90%,就认为抄袭。
第一行输入t表示有t试卷
第二行输入第1试卷的学生学号
第三行输入第1试卷的题目1答案
第四行输入第1试卷的题目2答案
第五行输入第1试卷的题目3答案
每试卷对应4行输入
依次输入t试卷的数据
在一行中,把发现抄袭的两个学号和题目号,数据之间用单个空格隔开
如果发现是题目1抄袭,题目号为1,以此类推
输出顺序按照输入的学号顺序进行输出
2088150555
aabcdef11
ZZ887766dd
cc33447799ZZ
2088150333
abcdef00
AABBCCDDEE
ZZ668899cc
2088150111
2088150222
AABBCFDDeE
ZZ889966dd
abcdef000
2088150444
aabcdef00
AABBCDDDEE
cc668899ZZ
208815033320881504442
208815011120881502223
intxiao(inta,intb);
structpaper
intno;
chara[100];
charb[100];
charc[100];
intcompare(paper*p,paper*q);
paper*a;
intn,i,j,k;
//
freopen("
c:
\\123.txt"
"
r"
stdin);
a=newpaper[n];
a[i].no;
a[i].a;
a[i].b;
a[i].c;
for(j=i+1;
k=compare(&
a[i],&
a[j]);
if(k!
a[i].no<
a[j].no<
k<
intcompare(paper*p,paper*q)
inti,l,m,x=0;
l=strlen(p->
a);
m=strlen(q->
l=xiao(l,m);
if(p->
a[i]==q->
a[i])
=l*9/10)
x=0;
b);
b[i]==q->
b[i])
return2;
c);
c[i]==q->
c[i])
return3;
intxiao(inta,intb)
if(a<
b)
retu