C语言习题题库 作答完整.docx
《C语言习题题库 作答完整.docx》由会员分享,可在线阅读,更多相关《C语言习题题库 作答完整.docx(36页珍藏版)》请在冰点文库上搜索。
C语言习题题库作答完整
程序填空共2题
第1题
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
功能:
编程求某年第n天的日期。
用数组表示月天数。
-------------------------------------------------------*/
#include<>
#include<>
main()
{
inty,m,f,n;
inta[12]={31,28,31,30,31,30,31,31,30,31,30,31};
printf("y,n=");
scanf("%d,%d",&y,&n);
/***********SPACE***********/
f=y%4==0&&y%100!
=0【||】y%400==0;
/***********SPACE***********/
a[1]【+=】f;
if(n<1||n>365+f)
{
printf("error!
\n");exit(0);
}
/***********SPACE***********/
for(m=1;m【>】a[m-1];n-=a[m-1],m++);
printf("y=%d,m=%d,d=%d\n",y,m,n);
}
第2题
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
题目:
下列程序从键盘输入所需数据,求出z的值并输出,要求输出结果保留2位小数。
-------------------------------------------------------*/
#include<>
/***********SPACE***********/
【#include<>】
main()
{intx;
doubley,z;
/***********SPACE***********/
scanf("【%d%lf】",&x,&y);
z=2*x*sqrt(y);
/***********SPACE***********/
printf("z=【%lf】",z);
}
程序改错共1题
第1题
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
将s所指字符串中的字母转换为按字母序列的后续字母(但
Z转换为A,z转换为a),其它字符不变。
------------------------------------------------------*/
#include<>
#include<>
#include<>
voidfun(char*s):
\n\n");
gets(s);
printf("\nThestring:
\n\n");
puts(s);
fun(s);f\n",pi);
}
第2题
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
功能:
输入一奇数n,打印由1->n*n构成的魔方矩阵。
魔方矩阵的
行列及对角线的和都相等。
魔方矩阵:
816
357
492
-------------------------------------------------------*/
#include<>
#include<>
#defineMAXSiZE20
voidmain(void)
{
intmatrix[MAXSiZE][MAXSiZE];
intcount;
introw;
intcolumn;
intn;
charline[100];
printf("\nOddnMagicSquareGenerator");
printf("\n================================");
printf("\n\nnPlease-->");
gets(line);
n=atoi(line);
if(n>MAXSiZE)
printf("\n***ERROR***nshouldbe<=%d",MAXSiZE);
elseif(n%2==0)
printf("\n***ERROR***nmustbeanoddinteger");
else
{
row=0;
column=n/2;
for(count=1;count<=n*n;count++)
{
matrix[row][column]=count;
/***********SPACE***********/
if(【count/n】==0)
row++;
else
{
/***********SPACE***********/
row=(row==【0】)n-1:
row-1;
/***********SPACE***********/
column=(column==【n-1】)0:
column+1;
}
}
printf("\n\nMagicSquareofn%d:
\n\n",n);
for(row=0;row{
for(column=0;columnprintf("%4d",matrix[row][column]);
printf("\n");
}
}
}
程序改错共1题
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
求1到10的阶乘的和。
------------------------------------------------------*/
#include<>
floatfac(intn);.*/
if(row*row+column*column==given)
{
/***********SPACE***********/
【count++】;
printf("\n%5d%7d%7d",count,row,column);
row++;
column--;
}
elseif(row*row+column*column>given)
/***********SPACE***********/
【column--】;
else
/***********SPACE***********/
【row++】;
if(count==0)
printf("\n\nSorry,NOANSWERfound.");
else
printf("\n\nThereare%dpossibleanswers.",count);
}
程序改错共1题
第1题
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
计算并输出k以内最大的10个能被13或17整除的自然数之和。
k的值由主函数传入。
例如:
若k的值为500,则函数值为4622。
------------------------------------------------------*/
#include<>
intfun(intk)
{
intm=0,mc=0;
/**********FOUND**********/
while((k>=2)&&(mc<10))
{
/**********FOUND**********/
if((k%13==0)||(k%17==0))
{
m=m+k;
mc++;
}
/**********FOUND**********/
k--;
}
/**********FOUND**********/
returnm;
}
voidmain()
{
printf("%d\n",fun(500));
}
程序填空共2题
第1题
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
功能:
当输入“2,5”的时候输出为“255”
-------------------------------------------------------*/
#include<>
#definemax100
main()
{
intf[max],i,j,k,m;
scanf("%d,%d",&k,&m);
/***********SPACE***********/
for(i=0;i<=【2】;i++)
f[i]=0;
/***********SPACE***********/
f[【k-1】]=1;
for(i=k;i<=m;i++)
/***********SPACE***********/
for(j=i-k;j<=i-1;j++)
f[i]【=1+】f[j];
printf("%d%10d%10d\n",k,m,f[m]);
}
第2题
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
功能:
识别输入的字符串,每个单词输出一行
-------------------------------------------------------*/
#include<>
#include<>
voidmain()
{
intc;
intinspace;
/***********SPACE***********/
【inspace=0】;
while((c=getchar())!
='\n')
{
if(c==''||c=='\t'||c=='\n')
{
/***********SPACE***********/
if(【inspace=0】)
{
inspace=1;
putchar('\n');
}
}
else
{
inspace=0;
/***********SPACE***********/
【putchar(c)】;
}
}
}
程序改错共1题
第1题
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
用选择法对数组中的n个元素按从小到大的顺序进行排序。
------------------------------------------------------*/
#include<>
#defineN20
voidfun(inta[],intn)
{
inti,j,t,p;
for(j=0;j{
/**********FOUND**********/
p=j;
for(i=j;i/**********FOUND**********/
if(a[i]>a[p])
/**********FOUND**********/
p=i;
t=a[p];
a[p]=a[j];
a[j]=t;
}
}
main()
{
inta[N]={9,6,8,3,-1},i,m=5;
printf("排序前的数据:
");
for(i=0;iprintf("%d",a[i]);
printf("\n");
fun(a,m);
printf("排序后的数据:
");
for(i=0;iprintf("%d",a[i]);
printf("\n");
}
程序填空共2题
第1题
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
功能:
产生10个[30,90]区间上的随机整数,然后对其用选择法
进行由小到大的排序。
-------------------------------------------------------*/
#include<>
#include<>
main()
{
/***********SPACE***********/
intt;
inti,j,k;
inta[10];
for(i=0;i<10;i++)
a[i]=rand()%61+30;
for(i=0;i<9;i++)
{
/***********SPACE***********/
k=i;
for(j=i+1;j<10;j++)
/***********SPACE***********/
if(a[k]>a[j])k=j;
if(k!
=i)
{
t=a[k];
a[k]=a[i];
a[i]=t;
}
}
/***********SPACE***********/
for(i=0;i<10;i++)
printf("%5d",a[i]);
printf("\n");
}
第2题
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
功能:
输入一正整数n、打印1-n能够组成的所有自然数集合
(包含空集)。
-------------------------------------------------------*/
#include<>
#include<>
#defineMAXSiZE20
#defineLOOP1
voidmain(void)
{
intset[MAXSiZE];
intn,i;
intposition;
charline[100];
printf("\nAllPossibleSubsetsGenerationbyLexicalOrder");
printf("\n================================================");
printf("\n\nNumberofElementsintheSet-->");
gets(line);
n=atoi(line);
printf("\n{}");
position=0;
set[position]=1;
while(LOOP)
{
/***********SPACE***********/
printf("\n{%d",【】);
for(i=1;i<=position;i++)
printf(",%d",set[i]);
printf("}");
if(set[position]{
/***********SPACE***********/
set[【】]=set[position]+1;
position++;
}
elseif(position!
=0)
set[--position]++;
else
/***********SPACE***********/
【】;
}
}
程序改错
第1题
/*------------------------------------------------------
【程序改错】
--------------------------------------------------------
功能:
求出以下分数序列的前n项之和。
和值通过函数值返回main
函数。
2/1+3/2+5/3+8/5+13/8+21/13……
例如:
若n=5,则应输出:
。
------------------------------------------------------*/
#include<>
#include<>
/**********FOUND**********/
fun(intn)
{
inta,b,c,k;doubles;
s=;a=2;b=1;
for(k=1;k<=n;k++)
{
/**********FOUND**********/
s=(double)a/b;
c=a;
a=a+b;
b=c;
}
/**********FOUND**********/
returnc;
}
main()
{
intn=5;
printf("\nThevalueoffunctionis:
%lf\n",fun(n));
}
程序填空共2题
第1题
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
功能:
输出结果为:
*****
*****
*****
*****
-------------------------------------------------------*/
#include<>
main()
{
/***********SPACE***********/
staticchar【】={'*','*','*','*','*'};
inti,j,k;
charspace='';
for(i=0;i<5;i++)
{
printf("\n");
for(j=1;j<=3*i;j++)
/***********SPACE***********/
printf("%1c",【】);
/***********SPACE***********/
for(k=0;k<【】;k++)
printf("%3c",a[k]);
}
printf("\n");;
}
第2题
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
功能:
给出一个正整数,找到一组连续的数,使之累加和等于给
定的正整数。
输出存在多少组这样连续的数,及每组的左
右边界。
例如:
15=1+2+3+4+5
15=4+5+6
15=7+8
所以结果有3组值分别是1->5,4->6,7->8
-------------------------------------------------------*/
#include<>
#include<>
voidmain(void)
{
longleft,right;
longsum;
longGiVEN;
intcount=0;
charline[100];
printf("\nConsecutivesumtoafixedgivennumber");
printf("\n=======================================\n");
printf("\nYournumber(>0)please--->");
gets(line);
GiVEN=atol(line);
for(sum=0,right=1;sum;
for(left=1,right--;left<=GiVEN/2;)
if(sum>GiVEN)
{
sum-=left;
/***********SPACE***********/
【】;
}
else
{
if(sum==GiVEN)
{
printf("\n%ld=sumfrom%ldto%ld",
GiVEN,left,right);
/***********SPACE***********/
【】;
}
/***********SPACE***********/
【】;
sum+=right;
}
if(count