C程序设计试题及题解.docx
《C程序设计试题及题解.docx》由会员分享,可在线阅读,更多相关《C程序设计试题及题解.docx(67页珍藏版)》请在冰豆网上搜索。
C程序设计试题及题解
二、改错题
1.统计输入字符串中大小写字母的个数
程序Cmody041.c,其功能是统计输入字符串中大小写字母的个数,
如输入:
abcdEFGHIJK123
输出:
4
答案:
#include
#include
main()
{
charstr1[128];
/**/inti;len,sum=0;/**//*inti,len,sum=0;*/
gets(str1);
len=strlen(str1);
for(i=0;i{
/**/if(str1[i]>='a'||str1[i]<='z')/**//*if(str1[i]>='a'&&str1[i]<='z')*/
sum++;
}
printf("%d\n",sum);
getch();
}
2.逆序输出
程序Cmody042.c,其功能是将从键盘依次输入的M个整数逆序输出.
如,输入:
1246568325357629
输出:
2976352583656412
答案:
#include
#include
#defineM8
main()
{inta[M],i;
printf("Pleaseinput8numbers:
\n");
for(i=0;iscanf("%d",/**/a[i]/**/);/*&a[i]*/
printf("Inverseorderis:
\n");
/**/for(i=M-1;i<=0;i--)/**//*for(i=M-1;i>=0;i--)*/
printf("%d",a[i]);
printf("\n");
getch();
}
3.计算大于10的最小n个能被3整除的正整数之和.
程序Cmody012.c中函数fun(intn)的功能是:
根据参数n,计算大于10的最小n个能被3整除的正整数之和.例如:
fun(8)=
答案:
#include
#include
#include
#include
#defineM50
doublefun(intn)
{doubley=0.0;
inti,j;
j=0;
for(i=1;;i++)
{
/**/if((i<10)&&(i%3==0))/**//*if((i>10)&&(i%3==0))*/
{
/**/y+=1/i;/**//*y+=1.0/i;*/
j++;
}
if(j==n)break;
}
returny;
}
voidmain()
{clrscr();
printf("fun(8)=%8.3lf\n",fun(8));
}
4.从键盘上输入两个整数,及一个运算符进行运算
程序cmody031.C的功能是:
从键盘上输入两个整数,及一个运算符(+、-、*、/或%),进行程序相应的运算后输出运算的结果。
如输入:
1+2
将输出:
1+2=3
答案:
#include
#include
voidmain()
{intm,n,result,flag=0;
/**/charch,/**//*charch;*/
clrscr();
printf("Inputanexpression:
");
scanf("%d%c%d",&m,&ch,&n);
/**/switchch/**//*switch(ch)*/
{case'+':
result=m+n;break;
case'-':
result=m-n;break;
case'*':
result=m*n;break;
case'%':
result=m%n;break;
case'/':
result=m/n;break;
default:
{printf("Error!
\n");flag=1;}
}
if(!
flag)printf("%d%c%d=%d\n",m,ch,n,result);
getch();
}
5.输出201~300之间的所有素数,统计总个数
程序cmody032.C的功能是:
输出201~300之间的所有素数,统计总个数。
答案:
#include
#include
voidmain()
{intnum;
printf("\n");
num=fun();
printf("\nThetotalofprimeis%d",num);
getch();
}
intfun()
{intm,i,k,n=0;
for(m=201;m<=300;m+=2)
{k=sqrt(m+1);
for(i=2;i<=k;i++)
/**/if(m/i==0)/**//*if(m%i==0)*/
break;
/**/if(i==k)/**//*if(i>k)*/
{printf("%-4d",m);
n++;;
if(n%10==0)printf("\n");
}
}
returnn;
}
6.统计输入字符串中大写类英文字母的个数
程序cmody051.c,其功能是统计输入字符串中大写类英文字母的个数。
如输入:
abcDEFGH123,输出:
5
答案:
#include
#include
main()
{
/**/charstr1/**/;/*charstr1[255]*/
inti,len,sum=0;
printf("Pleaseinputastring:
\n");
scanf("%s",str1);
len=strlen(str1);
for(i=0;i{
if(str1[i]>='A'&&str1[i]<='Z')
/**/sum--;/**//*sum++;*/
}
printf("%d\n",sum);
getch();
}
7.从键盘依次输入M个整数,输出其中所有的偶数
程序cmody052.c,其功能是实现从键盘依次输入M个整数,输出其中所有的偶数。
如输入:
2362384526输出:
623826
答案:
#include
#include
/**/#includeM5/**//*#defineM5*/
main()
{
inta[M],i;
printf("Pleaseinput5numbers:
\n");
for(i=0;iscanf("%d",&a[i]);
printf("Evennumbers:
\n");
for(i=0;i/**/if(a[i]/2==0)/**//*if(a[i]%2==0)*/
printf("%d",a[i]);
printf("\n");
getch();
}
8.输出三角形
程序cmody021.c输出如下所示图形
答案:
#include
voidmain()
{
/**/inti;j;/**//*inti,j;*/
for(i=1;i<=5;i++)
{
for(j=1;j<=10-2*i;j++)
printf("");
/**/for(j=1;j<=5;j++)/**//*for(j=1;j<=2*i-1;j++)*/
printf("*");
printf("\n");
}
}
9.百元买百鸡
程序cmody022.c的功能是求解百元买百鸡问题:
设一只公鸡2元,一只母鸡1元,一只小鸡0.5元。
问一百元买一百只鸡、公鸡、母鸡、小鸡数可分别为多少?
有多少种分配方案?
答案:
#include
#include
/**/intfun();/**//*intfun()*/
{inthen,cock,chicken,n=0;
for(cock=0;cock<=50;cock+=1)
for(hen=0;hen<=100;hen=hen+1)
{chicken=2*(100-hen-2*cock);
/**/if(cock+hen+chicken=100)/**//*if(cock+hen+chicken==100)*/
{n++;
printf("%d-->hen:
%d,cock:
%d,chicken:
%d\n",n,hen,cock,chicken);
if(n==20)getch();
}
}
returnn;
}
voidmain()
{intnum;
num=fun();
printf("\nThereare%dsolutions.\n",num);
getch();
}
10、输入字符串‘0~8’的数字字符变成比它大1的数字字符将‘9’变为‘0’
程序cmody061.c功能输入字符串‘0~8’的数字字符变成比它大1的数字字符将‘9’变为‘0’。
如输入:
ab12cd56EF89GH4
ab23cd67EF90GH5
答案:
#include
#include
main()
{
charstr1[128],str2[128];
inti,len;
gets(str1);
len=strlen(str1);
/**/for(i=0;i>len;i++)/**//*for(i=0;i{
if(str1[i]>='0'&&str1[i]<='8')
str2[i]=str1[i]+1;
elseif(str1[i]=='9')
str2[i]='0';
else
str2[i]=str1[i];
}
/**/str2[i]='\n';/**//*str2[i]='\0';*/
puts(str2);
getch();
}
11、连接字符串
程序cmody062.c功能将程序中两个字符串“ABC”、“xyz”连接在一起并输出ABCxyz
答案:
#include
#include
voidmain()
{
chars1[12]="ABC",s2[]="xyz";
char*ps1=s1,*ps2;
/**/ps2=NULL;/**//*ps2=s2;*/
/**/while(*ps1==NULL)/**//*while(*ps1!
='\0')*/
ps1++;
while(*ps2)*(ps1++)=*(ps2++);
printf("%s\n",s1);
getch();
}
12、取出ASCII码值为偶数且下标为偶数的字符
程序cmody011.c的功能是:
从字符串数组str1中取出ASCII码值为偶数且下标为偶数的字符依次存放到字符串中。
eg:
若str1所指的字符串为:
4AZ18C?
Ge9a0z!
则t所指的字符串为:
4ZBZ
答案:
#include
#include
#include
#include
voidmain()
{charstr1[100],t[200];
inti,j;
/**/i=0;/**//*j=0;*/
clrscr();
strcpy(str1,"4AZ18c?
Ge9a0z!
");
for(i=0;i{
/**/if((str1[i]%2==0)&&(i%2!
=0))/**//*if((str1[i]%2==0)&&(i%2==0))*/
{
t[j]=str1[i];
j++;
}
}
t[j]='\0';
printf("\nOriginalstring:
%s\n",str1);
printf("\nResultstring:
%s\n",t);
}
13.求三角形面积
程序Cmody071.c,其功能是从键盘输入三角形的三边长,求其面积,若三个边长不能构成三角形,则提示错误
如输入:
6911
输出:
26.98
答案:
#include
#include
voidmain()
{
floata[3],s,area;
inti;
printf("Pleaseinput3numbers:
\n");
for(i=0;i<3;i++)
scanf("%f",/**/a[i]/**/);/*&a[i]*/
/**/if(a[0]+a[1]>a[2]||a[1]+a[2]>a[0]||a[0]+a[2]>a[1])/**/
/*if((a[0]+a[1])>a[2]||(a[1]+a[2])>a[0]||(a[0]+a[2])>a[1])*/
{
s=(a[0]+a[1]+a[2])/2;
area=sqrt(s*(s-a[0])*(s-a[1])*(s-a[2]));
printf("areais%.2f\n",area);
}
else
printf("error.\n");
getch();
}
14.百马百担问题
程序Cmody072.c,其功能是求解百马百担问题.
有100匹马,驮100担货,大马驮3担,中马驮2担,小马驮1担,问大,中,小马数可分别为多少?
有多少种解决方案?
答案:
#include
#include
/**/voidfun()/**//*intfun()*/
{
intlarge,middle,small,n=0;
clrscr();
for(large=0;large<=33;large++)
for(middle=0;middle<=50;middle++)
{
small=2*(100-3*large-2*middle);
/**/if(large+middle+small=100)/**//*if(large+middle+small==100)*/
{
n++;
printf("%d-->large:
%d,middle:
%d,small:
%d\n",n,large,middle,small);
}
}
returnn;
}
voidmain()
{
intnum;
num=fun();
printf("\nThereare%dsolutions.\n",num);
getch();
}
15.求一堆零件的总数(100至200之间)
程序cmody081.c,其功能是求一堆零件的总数(100至200之间)
如果分成4个零件一组的若干组,则多2个零件;若分成7个零件一组,则多3个零件;若分成9个零件,则多5个零件。
答案:
#include
voidmain()
{
inti;
/**/for(i=100;i<200;i++);/**//*for(i=100;i<200;i++)*/
if((i-2)%4==0)
if(!
((i-3)%7))
if(i%9==5)
printf("%d\n",/**/&i/**/);/*i*/
getch();
}
16.交换两个变量的值
程序cmody082.c,其功能是交换两个变量的值。
如输入:
23
输出:
original:
resuct:
答案:
#include
/**/voidswap(intp1,intp2)/**//*voidswap(int*p1,int*p2)*/
{
inttemp;
temp=*p1;
/**/p1=p2;/**//**p1=*p2;*/
*p2=temp;
}
voidmain()
{
inta,b;
printf("pleaseinput2numbers:
\n");
scanf("%d%d",&a,&b);
printf("\nOriginal:
a=%db=%d\n",a,b);
swap(&a,&b);
printf("\nResult:
a=%db=%d\n",a,b);
getch();
}
17.计算1至100之间的奇数之和,偶数之和
程序cmody091.c,其功能是计算1至100之间的奇数之和,偶数之和
答案:
#include
voidmain()
{
intb,i;
/**/inta=c=0;/**//*inta=0,c=0;*/
/**/for(i=0,i<=100,i+=2)/**//*for(i=0;i<=100;i+=2)*/
{
a+=i;
b=i+1;
c+=b;
}
printf("totalofevennumbers:
%d\n",a);
printf("totalofoddnumbers:
%d\n",c-101);
getch();
}
18.求满足等式xyz+yzz=520的x、y、z值(其中xyz和yzz分别表示一个三位数)。
程序cmody092.c的功能是求满足等式xyz+yzz=520的x、y、z值(其中xyz和yzz分别表示一个三位数)。
答案:
#include
voidmain()
{
intx,y,z,i,result=520;
for(x=1;x<10;x++)
for(y=1;y<10;y++)
/**/for(z=1;z<10;z++)/**//*for(z=0;z<10;z++)*/
{
i=100*x+10*y+z+100*y+10*z+z;
/**/if(i=result)/**//*if(i==result)*/
printf("x=%d,y=%d,z=%d\n",x,y,z);
}
getch();
}
三、填空题
1.计算f(x)=
补充程序Ccon011.c使其计算f(x)=
答案:
#include
#include
voidmain()
{
intx;
/**/floatf;/**/
printf("Inputaninteger:
");
scanf("%d",&x);
f=/**/(fabs(x)-2)/(x*x+1)/**/;
printf("F(x)=%f\n",f);
}
2.计算圆周率
补充程序Ccon012.c,该程序用公式
计算圆周率的近似值。
答案:
#include
voidmain()
{doublepi=0;
longi,sign=1;
for(i=1;i<=10001;i+=2)
{
pi+=1.0*sign/i;
sign=/**/-sign/**/;
}
pi*=/**/4/**/;
printf("%f\n",pi);
}
3.从10个数中找出最大值和最小值
补充程序Ccon013.c程序实现从10个数中找出最大值和最小值.
答案:
#include
#include
intmax,min;
voidfind_max_min(int*p,intn)
{
int*q;
max=min=*p;
for(q=p;q**/p+n/**/;q++)
if(/**/max<*q/**/)max=*q;
elseif(min>*q)min=*q;
}
voidmain()
{
inti,num[10];
printf("Input10numbers:
");
for(i=0;i<10;i++)scanf("%d",&num[i]);
find_max_min(/**/num/**/,10);
printf("max=%d,num=%d\n",max,min);
}
4.计算满足一定条件的一位整数A和B的值
补充程序Ccon021.c,使其计算满足下式的一位整数A和B的值.
答案:
#include
voidmain()
{
inta,b,k;
intplu=/**/403/**/;
for(a=1;a<10;a++)
for(b=1;b<10;b++)
{
k=(a*10+b)*/**/(b*10+a)/**/;
if(k==plu)
printf("A=%d,B=%d\n",a,b);
}
}
5.输入若干个整数,统计其中大于0和小于0的个数,以0结束输入
补充程序Ccon022.c,使其实现输入若干个整数,统计其中大于0和小于0的个数,以0
结束输入
答案:
#include
voidmain()
{
intn,a,b;
/**/
a=0;
b=0;
/**/
scanf("%d",&n);
while(/**/n!
=0/**/)
{
if(n>0)a++;
else/**/if(n<0)b++;/**/
s