《C语言程序设计习题试题(编程题)》由会员分享,可在线阅读,更多相关《C语言程序设计习题试题(编程题)(12页珍藏版)》请在金锄头文库上搜索。
1、C语言程序设计习题(编程类)1、从键盘输入任意的字符,按下列规则进行分类计数。 第一类 0,1,2,3,4,5,6,7,8,9 第二类 +,-,*,/,%,= 第三类 其它字符当输入字符时先计数,然后停止接收输入,打印计数的结果。参考答案:#include void main( ) int class1, class2, class3;char ch;class1=class2=class3=0; /* 初始化分类计数器 */do ch=getch( );switch(ch) case 0: case 1: case 2: case 3: case 4:case 5: case 6: case
2、 7: case 8: case 9:class1+; break; /* 对分类计数 */case +: case -: case *: case /: case %: case =:class2+; break; /* 对分类计数 */default: class3+; break; /* 对分类计数 */while (ch!= ); /* 字符在C程序中要使用转义符 */printf(class1=%d, class2=%d, class3=%dn, class1, class2, class3);2、从键盘输入十个整数,用插入法对输入的数据按照从小到大的顺序进行排序,将排序后的结果输出
3、。参考答案:void main( ) int i,j,num,a10;for(i=0;i=0&ajnum;j-)aj+1=aj;aj+1=num;for(i=0;i0) printf(%d,n%10);n=n/10; 4、编写程序,读入一个整数;若为非负数,则计算到2之间的整数和;若为一个负数,则求到之间的整数和。分别利用for和while写出两个程序。参考答案:void main() int i,n;long s1=0,s2=0;printf(Please enter N:);scanf(%d,&n);if(n=0)for(i=n;i=2*n;i-)s1=s1+i;i=n;if(i=0)wh
4、ile(i=2*n)s2=s2+i-;printf(Result1=%ld result2=%ldn,s1,s2);5、一个自然数被8除余1,所得的商被8除也余1,再将第二次的商被8除后余7,最后得到一个商为。又知这个自然数被17除余4,所得的商被17除余15,最后得到一个商是的2倍。编写程序求这个自然数。参考答案:void main( ) int i,n,a;for(i=0; ;i+) if(i%8=1) n=i/8;if(n%8=1) n=n/8;if(n%8=7) a=n/8;if(i%17=4) n=i/17;if(n%17=15) n=n/17;if(2*a=n) printf(re
5、sult=%dn,i);break;6、编写程序,输出用一元人民币兑换成1分、2分和5分硬币的不同兑换方法。参考答案:void main( ) int f1,f2,f5,count=0;for(f5=0;f5=20;f5+)for(f2=0;f2 5: %4d 2: %2d 1: %2dn,+count,f5,f2,f1); 7、将一个数的数码倒过来所得到的新数叫原数的反序数。如果一个数等于它的反序数,则称它为对称数。求不超过1993的最大的二进制的对称数。参考答案:void main() int i,j,n,k,a16=0;for(i=1;i0) /* 将十进制数转变为二进制数 */ ak+
6、=n%2;n=n/2;for(j=0;j=k) printf( %d: ,i);for(j=0;jk;j+)printf(%2d,aj);printf(n); 8、十个小孩围成一圈分糖果,老师分给第一个小孩10块,第二个小孩2块,第三个小孩8块,第四个小孩22块,第五个小孩16块,第六个小孩4块,第七个小孩10块,第八个小孩6块,第九个小孩14 块,第十个小孩20块。然后所有的小孩同时将自己手中的糖分一半给右边的小孩;糖块数为奇数的人可向老师要一块。问经过这样几次调整后大家手中的糖的块数都一样?每人各有多少块糖?参考答案:void main() int i,count=0,a11=0,10,2
7、,8,22,16,4,10,6,14,20;while(1) for(i=1;i=10;i+)ai-1=ai-1/2+ai/2;a10=a10/2+a0;for(i=1;i=10;i+)if(ai%2=1) ai+;for(i=1;i10;i+)if(ai!=ai+1) break;if(i=10) break;else a0=0;count+;printf(count=%d number=%dn,count,a1);9、输入55的数组,编写程序实现:(1)求出对角线上各元素的和;(2)求出对角线上行、列下标均为偶数的各元素的积;(3)找出对角线上其值最大的元素和它在数组中的位置。参考答案:v
8、oid main() int i,j,s1=0,s2=1,a55;for(i=0;i5;i+)for(j=0;j5;j+) printf(%d %d: ,i,j);scanf(%d,&aij);for(i=0;i5;i+) for(j=0;j5;j+)printf(%5d,aij);printf(n);j=0;for(i=0;iajj) j=i;printf(SUN=%dnACCOM=%dna%d=%dn,s1,s2,j,ajj); 10、编写程序,以字符形式输入一个十六进制数,将其变换为一个十进制整数后输出。参考答案:#include stdio.hvoid main() int i,n=0
9、,a4=0;printf(Please enter a digit:);for(i=0;i4 & (ai=getchar()!=n;i+) ;for(i=0;i=48&ai=65&ai=97&ai=102) ai=ai-87;else printf(input Error!);for(i=0;i0) /* 将十进制数转变为二进制数 */ a-k=n%2;n=n/2;for(i=0;i16;i+)printf(%2d,ai); 12、对数组A中的N(0N100个整数从小到大进行连续编号,输出各个元素的编号。要求不能改变数组中元素的顺序,且相同的整数要具有相同的编号。例如数组是:A=(5,3,4,
10、7,3,5,6) 则输出为:(3,1,2,5,1,3,4)参考答案:void main() int i,j,k,n,m=1,r=1,a2100=0; printf(Please enter n:);scanf(%d,&n);for(i=0;in;i+) printf(a%d= ,i);scanf(%d,&a0i);while(m=n) /* m记录已经登记过的数的个数 */ for(i=0;in;i+) /* 记录未登记过的数的大小 */ if(a1i!=0) /* 已登记过的数空过 */continue;k=i;for(j=i;jn;j+) /* 在未登记过数中找最小数 */if(a1j=0 & a0ja0k) k=j;a1k=r+; /* 记录名次,r为名次 */m+; /* 登记过的数增1 */for(j=0;jn;j+) /* 记录同名次 */if(a1j=0 & a0j=a0k) a1j=a1k;m+;break;for(i=0;in;i+)printf(a%d=%d, %dn,i,a0i,a1i);13、求这样一个三位数,该三位数等于其每位数字的阶乘之和。即:abc = a! + b! + c!参考答案:void main() int a5,i,t,k;for (i=100;i1000;i+) for(t=0