C语言程序设计习题(编程类)
1、从键盘输入任意的字符,按下列规则进行分类计数。
第一类 O, 1, 2,    4, 5, 6, 7, 8, 9
第二类,**, 7\ %,, •=, 第三类其它字符
当输入字符丫时光计数,然后停止接收输入,打印计数的结果。
参考答案:
#include <stdio.h>
void main()
{ mt class 1, class2, class3 ;
char ch:
class 1 =class2=class3=O : /* 初始化分类计数器 */ do
{ ch=getch();
switch(ch)
{ case 'O': case 1: case '2': case '3': case '4':
case 5: case '6': case 7: case 8: case '9’:
classl++; break; /* 对分类 1 计数 */
case case case case case case
class2++: break: /* 对分类 2 计数 */
default: class3++; break; /* 对分类 3 计数 */
}
}while (ch!= 3); /*字符TC程序中要使用转义符N */
printf(Mclassl=%d. class2=%d, class3=%d\n",class 1, class2, class3): }
2、从键盘输入十个整数,用插入法对输入的数据按照从小到大的顺序进行排序,将排序后的结 果输出。
参考答案:
void main()
{ mt i,j,num,a[10];
fdr(i=O; i<10: i++)
{ printf(HEnter No. %d:", i+1);
scanf(H%d,\&num):
fbr(j=i-l; j >=0& &a [j ] >num ; j")
a[j4-l]=a[j]:
a[j+l]=num;
}
fdr(i=O; i<10: i++)
printf ("No.%d=%d\iT, i+1, a[i]):
)
3、输入一个正整数,要求以相反的顺序输出该数。例如输入12345,输出位5432JL
参考答案:
void main()
{ mt n;
printf(MPlease enter n:H):
scanf(H%d,\&n);
wlule(n>0)
{pnntfC%d\n%10);
n=iV10;
}
}
4、编写程序,读入一个整数N;N为非负数,则计算N2XN之间的整数和;若N为一个 负数,则求2 X NN之间的整数和。分别利用forwlule写出两个程序。
参考答案:
void main()
{ mt Ln;
long sl=0,s2=0;
printf(MPlease enter N:,r);
scanf(H%d,\&n);
if(n>=0)
fbr(i=n; i<=2*n: i++)
sl=sl+i;
else
fbr(i=n; i>=2*n: i")
sl=sl+i;
i=n;
if(i>=0)
while(i<=2*n)
s2=s2+i++;
else
while(i>=2*n)
s2=s2+i--;
printf(MResult 1 =%ld result2=%ld\n'\s 1 ,s2);
}
5、一个自然数被8除余1,所得的商被8除也余1,再将第二次的商被8除后余7,最后得到一 个商为a。又知这个自然数被17除余4, 所得的商被17除余15,最后得到一个商是a2倍。 编写程序求这个自然数。
参考答案:
void main()
{ mt i,n,a:
fbr(i=O; i++)
{ n=i/8 :
if(n%8==l)
{ n=n/8;
if(n%8==7) a=n/8;
}
}
if(i%17==4)
{ n=i/17;
if(n% 17= 15) n=n/l 7;
}
if(2*a==n)
{printf(',result=%d\n,\i);
break:
}
}
}
6、编写程序,输出用一元人民币兑换成1分、2分和5分硬币的不同兑换方法。 参考答案: void main()
{ mt fl,f2,f5,count=0: fbr(f5=O: f5V=20: f5++) fdr(f2=0: f2<=( 100-f5*5)/2; f2++) { fl
=100-f5*5-f2*2; if(f5*5+f2*2+fl==100)
pnntf(,rNo.%2d » 5: %4d 2: %2d 1: %2d\n”,++count,f5,f2,fl); } }
7、将一个数的数码倒过来所得到的新数叫原数的反序数。如果一个数等于它的反序数,则称它 为对称数。求不超过1993的最大的二进制的对称数。
参考答案: void main() { mt iJ,n,k,a[16]={0}; fbr(i=l : i<=1993 ; i++) { n=i; k=0:
wlule(n>0) /*将十进制数转变为二进制数*/
{ a[k++]=n%2; n=iv2: }
for(j=O; j<k; j++) if(a[j]!=a[k-j-l]) break: if(j>=k)
{pnntfC %d: ",i):
for(j=O; j<k; j++)
pnntf(”%2d\a|JD;
}
}
}
8、十个小孩围成一圈分糖果,老师分给第一个小孩10块,第二个小孩2块,第三个小 孩8块,第四个小孩22块,第五个小孩16块,第六个小孩c语言编写递归函数4块,第七个小孩10块,第 八个小孩6块,第九个小孩14块,第十个小孩20块。然后所有的小孩同时将自己手中 的糖分一半给右边的小孩;糖块数为奇数的人可向老师要一块。问经过这样几次调整后 大家手中的糖的块数都一样?每人各有多少块糖?
参考答案:
void main()
{int i,count=0,a[ll]={0,10,2,8,22,16,4,10,6,14,20};
wlule(l)
{ for(i=l ; i<=l0; i++)
a[i-l]=a[i-l]/2+a[i]/2;
a[10]=a[10]/2+a[0];
fbr(i= 1: i<= 10; i++)
if(a[i]%2==l) a[i]++;
fbr(i=l : i<10: i++)
if(a[i]?=a[i+l]) break:
if(i=10) break;
else
{ a[0]=0:
count-H-;
}
}
printf(",count=%d number=%d\nH,count,a[ 1 ]);
}
9、输入5X5的数组,编写程序实现:
(1)求出对角线上各元素的和;
(2)求出对角线上行、列下标均为偶数的各元素的积;
(3)出劝角线上其值最大的元素和它在数组中的位置。
参考答案:
void main()
{int i,j,sl=0,s2=l,a[5][5];
for(i=0; i<5; i++)
fbr(j=O; j<5; j++)
{printf(M%d %d:
scanf("%cT,&a[i]UD;
)
fbi(i=O; i<5; i++)
{ foi(j=0; j<5: j++)
pnntf("%5d",a[i][j]);
}
J=O;
fbi(i=O; i<5; i++)
{ sl=sl+a[i][i];
if(i%2==0) s2=s2*a[i][i];
if(a[i][i]>a[j]|j])j=i;
}
pnntfC'SUN=%d\nACCOM=%dhia[%d]=%d\ir,sl,s2,j,aIJ]|j]); )
10、编写程序,以字符形式输入一个十六进制数,将其变换为一个十进制整数后输出。
参考答案:
#include Mstdio.h"
void main()
{ mt Ln=0,a[4]={0};
printf(MPlease enter a digit:");
fbi(i=O; i<4 && (a[i]=getcliai())!=,,\n,; i++);
fdr(i=O; i<4; i++)
if(a[i]>=48&&a[i]<=57) a[i]=a[i]-48;
else if(a[i]>=65&&a[i]<=69) a[i]=a[i]-55:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。