C语言编程文库所有题答案.docx
《C语言编程文库所有题答案.docx》由会员分享,可在线阅读,更多相关《C语言编程文库所有题答案.docx(127页珍藏版)》请在冰点文库上搜索。
C语言编程文库所有题答案
/* 编写一程序实现以下功能
①从键盘上先后读入两个字符串,假定存储在字符数组s1和s2中。
注意,这两个字符串最长均可达到127个字符、最短均可为0个字符。
②将字符串s2插入字符串s1中,插入方法为:
s2的第i个字符插入到原s1的第i个字符后,如果s2比s1(假定s1的长度为L1)长,则s2的第L1个字符开始到s2结尾的所有字符按在s2中的顺序放在新生成的s1后。
提示,合并时可使用中间数组。
例如:
s1输入为"9",S2输入为"abcdefghijk",则输出的s1为:
1a2b3c4d5e6f7g8h9ijk
③在屏幕上输出新生成的s1。
程序的运行效果应类似地如图1所示,其中的9和abcdefghijk是从键盘输入的内容。
*/
#include<>
#include<>
intmain(void)
{
charstr1[127],str2[127];
inti,tem;
intlen1=0,len2=0;
printf("pleaseinputstring1:
");
gets(str1);
printf("Pleaseinputstring2:
");
gets(str2);
len1=strlen(str1);
len2=strlen(str2);
if(len1>len2)
{
tem=len1;
printf("\nstring1:
");
for(i=0;i{
printf("%c",str1[i]);
if(i{
printf("%c",str2[i]);
}
}
}
else
{
tem=len2;
printf("\nstring1:
");
for(i=0;i{
if(i{
printf("%c",str1[i]);
}
printf("%c",str2[i]);
}
}
printf("\n");
return0;
}
/*编写一程序实现以下功能
①程序运行时先显示Pleaseinputnumbers:
,再从键盘上读入一组整数(只考虑int型),数与数之间只使用空格或回车作分隔。
数可正可负,最多10000个,但若读入的数为-222时,则表示输入结束且-222不算在该组数内。
②对这一组数按从小到大的顺序进行排序。
③将排序后的这一组数输出到屏幕上,输出格式为每行6个数,数与数之间使用逗号(,)分隔,两个逗号之间的宽度(不算逗号)为6且使用左对齐格式。
注意,行尾没有逗号。
程序的运行效果应类似地如图1所示,其中的1001208972-19200500210235624123478234-234-2342346235247823-341123423-222是从键盘输入的内容。
*/
#include<>
intmain(void)
{
intdat[10000],len;
inti,j,tmp;
printf("Pleaseinputnumbers:
");
len=0;
do
{
scanf("%d",&i);
if(i==-222)
{
break;
}
dat[len]=i;
len++;
}while
(1);
for(i=0;i{
for(j=i+1;j{
if(dat[i]>dat[j])
{
tmp=dat[i];
dat[i]=dat[j];
dat[j]=tmp;
}
}
}
printf("\nOutput:
\n");
for(i=0;i{
printf("%-6d",dat[i]);
if(i%6!
=5&&i!
=len-1)
{
printf(",");
}
else
{
printf("\n");
}
}
return0;
}
/*编写一程序实现以下功能
从键盘上输入5个字符串(约定:
每个字符串中字符数≤80字节),对其进行升序排序并输出。
编程可用素材:
printf("Input5strings:
\n")...、printf("---------------------------\n")...。
程序的运行效果应类似地如图1所示,图1中的
hello
my
dear
friend
Areyouready?
是从键盘输入的内容。
*/
#include<>
#include<>
intmain(void)
{
charaa[5][90],kk[5][90];
inti,j;
printf("input5string\n");
for(i=0;i<5;i++)
{
gets(aa[i]);
}
for(i=0;i<4;i++)
{
for(j=0;j<4-i;j++)
{
if(strcmp(aa[j],aa[j+1])>0)
{
strcpy(kk[j],aa[j]);
strcpy(aa[j],aa[j+1]);
strcpy(aa[j+1],kk[j]);
}
}
}
printf("-------------------------------------------------------\n");
for(i=0;i<5;i++)
{
puts(aa[i]);
}
return(0);
}
/*根据要求编写程序的指定部分:
程序已编写部分代码(单击此处下载),请根据程序中的要求编写函数Move的代码——注意,除指定位置外,不能对程序中已有部分作任何修改或重新编写一个程序,否则作0分处理。
函数voidmove(intarray[],intn,intm)的功能为:
在数组array中有n个整数,使其前面各数顺序向后移m(0<=m<=n)个位置,最后m个数变成最前面的m个数,编写该函数。
程序的运行效果应类似地如图1所示,图1中的10、3和12345678910是从键盘输入的内容。
*/
/*P7-761*.C/
#include<>
#include<>
/*UserCodeBegin(考生可在本行后添加代码,例如全局变量的定义、函数原型声明等,行数不限)*/
voidmove(intarray[],intn,intm);
/*UserCodeEnd(考生添加代码结束)*/
intmain(void)
{
int*number,n,m,i;
printf("thetotalnumbersis:
");
scanf("%d",&n);
printf("backm:
");
scanf("%d",&m);
number=(int*)malloc(n*sizeof(int));
printf("input%dintegers:
",n);
for(i=0;i{
scanf("%d",&number[i]);
}
move(number,n,m);
printf("aftermove%d:
\n",m);
for(i=0;i{
printf("%d",number[i]);
}
printf("\n");
return0;
}
/*UserCodeBegin(考生在此后根据设计需要完成程序的其它部分,如函数move,行数不限)*/
voidmove(intarray[],intn,intm)
{
inti=0,flag=m;
int*shuzu;
shuzu=(int*)malloc(n*sizeof(int));
for(i=0;i{
shuzu[i]=array[i];
}
for(i=0;i{
if(i{
array[i]=shuzu[n-m];
m--;
}
else
{
array[i]=shuzu[i-flag];
}
}
}
/* 根据要求编写程序的指定部分:
程序已编写部分代码(单击此处下载),请根据程序中的要求完善程序——注意,除指定位置外,不能对程序中已有部分作任何修改或重新编写一个程序,否则作0分处理。
程序的功能是:
有五个学生,每个学生的数据包括学号、姓名(最长19字节)、三门课的成绩,从键盘输入五个学生的数据,计算每个学生的平均成绩并按平均成绩由高到低排序,并将排序结果显示。
要求用结构体编程,变量数据类型的选择应适当,在保证满足设计要求精度的情况下,养成不浪费内存空间和计算时间的好习惯。
编程可用素材:
printf("Pleaseinputinfoofstudents:
NoNameMathEnglishComputer\n")...。
程序的运行效果应类似地如图1所示,图1中的:
2001wanghai788390
2003zhangzhong828098
2005liumei958190
2006sunqian707790
2009jiansansa638790
是从键盘输入的内容。
*/
#include<>
#include<>
/*UserCodeBegin(考生可在本行后添加代码,行数不限)*/
structSTUDENT
{
intnum;
charname[20];
intmath;
intenglish;
intcomputer;
floataverage;
};
typedefstructSTUDENTSTUDENT;
/*UserCodeEnd(考生添加代码结束)*/
intmain(void)
{
STUDENTmyclass[5],*pStu=myclass;
inti;
constintN=5;
/*UserCodeBegin(考生可在本行后添加代码,行数不限)*/
intj,n=0;
STUDENTmyclass1[1];
printf("Pleaseinputinfoofstudents:
NoNameMathEnglishComputer\n");
for(i=0;i<5;i++)
{
printf("%d:
",i+1);
scanf("%d",&myclass[i].num);
scanf("%s",myclass[i].name);
scanf("%d",&myclass[i].math);
scanf("%d",&myclass[i].english);
scanf("%d",&myclass[i]puter);
}
for(i=0;i<5;i++)
{
myclass[i].average=(float)((myclass[i].math+myclass[i].english+myclass[i]puter)/;
}
for(i=0;i<4;i++)
{
for(j=0;j<4-i;j++)
{
if(myclass[j+1].average>myclass[j].average)
{
myclass1[n]=myclass[j+1];
myclass[j+1]=myclass[j];
myclass[j]=myclass1[n];
}
}
}
/*UserCodeEnd(考生添加代码结束)*/
printf("\nResultofsort:
\n");
printf("NumNameMathEnglishComputerAverage\n");
for(i=0;i{
printf("%-5d%-20s%-8d%-8d%-8d%\n",(pStu+i)->num,(pStu+i)->name,
(pStu+i)->math,(pStu+i)->english,(pStu+i)->computer,(pStu+i)->average);
}
return0;
}
/*根据要求编写程序的指定部分:
程序已编写部分代码(单击此处下载),请根据程序中的要求完善程序——注意,除指定位置外,不能对程序中已有部分作任何修改或重新编写一个程序,否则作0分处理。
程序的功能是:
将从键盘读入的一个十六进制字符串转换成一个十进制数后输出。
注意:
(1)可以只考虑转换成的十进制大小不会超过longint型所能表示的最大数。
(2)只需处理正数,不处理负数。
(3)输入的字母可以是大写也可以小写。
(4)程序中不能使用库函数isxdigit、sscanf或使用同名的变量、函数、单词。
程序的运行效果应类似地如图1、图2和图3所示,图1中的7fAa23Bf、图2中的12F和图3中的39fg是从键盘输入的内容。
*/
/**/
#include<>
/*UserCodeBegin(考生可在本行后添加代码,例如全局变量的定义、函数原型声明等,行数不限)*/
#include<>
inti,sw,wei,len;
/*UserCodeEnd(考生添加代码结束)*/
intmain(void)
{
intflag;/*标志输入数据是否合法,0表示不合法*/
longintresult10;/*转换结果*/
charstr[20];
printf("inputadata:
");
gets(str);
/*UserCodeBegin(考生可在本行后添加代码,行数不限)*/
result10=0;
flag=1;
wei=1;
len=strlen(str)-1;
for(i=0;i<=len;i++)
{
if(i!
=0)
{
wei=wei*16;
}
if(str[len-i]>='0'&&str[len-i]<='9')
{
sw=((str[len-i]-'0')*wei);
result10=result10+sw;
}
elseif(str[len-i]>='A'&&str[len-i]<='F')
{
sw=((str[len-i]-'A'+10)*wei);
result10=result10+sw;
}
elseif(str[len-i]>='a'&&str[len-i]<='f')
{
sw=((str[len-i]-'a'+10)*wei);
result10=result10+sw;
}
else
{
flag=0;
break;
}
}
/*UserCodeEnd(考生添加代码结束)*/
if(0==flag)
{
printf("\ndataiserror.\n");
}
else
{
printf("\nTheresultis:
%ld\n",result10);
}
return0;
}
/* 编写一程序实现以下功能
输出m和n之间的回文素数,m和n从键盘读入(假定满足5<=m<=n<=100000),回文是指正向与反向的字符都一样,例如1、11、101、131等。
编程可用素材:
printf("pleaseinputm,n(5<=m<=n<=100000):
")...、printf("Result(%d-%d):
\n"...、printf("%d"...。
程序的运行效果应类似地如图1所示,图1中的5,1000是从键盘输入的内容。
*/
#include<>
intmain(void)
{
intm,n;
inti,j,k,x,num,wei[6];
printf("pleaseinputm,n(5<=m<=n<=100000):
");
scanf("%d,%d",&m,&n);
printf("Result(%d-%d):
\n",m,n);
for(i=m;i<=n;i++)
{
for(x=2;x
{
if(i%x==0)
{
break;
}
}
if(x>=i/2)
{
num=i;
j=0;
while(num)
{
wei[j]=num%10;
j++;
num=num/10;
}
for(k=0;k{
if(wei[k]!
=wei[j-1-k])
{
break;
}
}
if(k>=j/2)
{
printf("%d",i);
}
}
}
printf("\n");
return0;
}
/* 编写一程序实现以下功能
对从键盘输入的一行字符(约定:
字符数≤127字节)进行排序(按每个字符的ASCII码由小到大)并输出。
注意:
程序中不能使用库函数gets、fgets或使用同名的变量、函数、单词,编程可用素材:
printf("inputthestring:
\n")...、printf("\nResult:
")...。
程序的运行效果应类似地如图1所示,图1中的32679dsgj7u6kdsvs346r23v5h@#sfsaf是从键盘输入的内容。
*/
#include<>
#include<>
intmain(void)
{
inti,j,tt;
chartem,sr[128];
printf("inputthestring:
\n");
for(i=0;i<127;i++)
{
scanf("%c",&sr[i]);
if(sr[i]=='\n')
{
tt=i;
break;
}
}
.、printf("tothedate(****/**/**):
\n")、printf("\nsum=%d\n"...。
程序的运行效果应类似地如图1和图2所示,图1中的2008/02/13、2010/04/24和图2中的2010/04/24、2008/02/13是从键盘输入的内容。
*/
#include<>
intpanduan(unsignedinty);
if(y==y2)
{
M2=m2;
}
else
{
M2=12;
}.、printf("PleaseinputajuZhen(...hang,