版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言程序设计习题(编程类)1、从键盘输入任意的字符,按下列规则进行分类计数。第一类T,2,4,,8,71,8,9第二类•+*,•**,7\%',―第三类其它字符当输入字符Y时先计数,然后停止接收输入,打印计数的结果。参考答案:#include<stdio.h>voidmain(){mtclass1,class2,class3:charch:class1=class2=class3=O:/*初始化分类计数器*/do{ch=getch();switch(ch){case'O',caseT:case2:casecase*4r:casef5\case‘6’:case7:case8:case9:ckissl++:break;/*对分类1计数*/caser+':casecase'*1case71:case*%':caseclass2++:break:/*对分类2计数*/default:class3++;break;/*对分类3计数*/}}wlule(ch!=住);/*字符T在C程序中要使用转义符毗*/printf(Mclassl=%d.class2=%d、class3=%d\n”,class1,class2,class3):}2、从键盘输入十个整数,用插入法对输入的数据按照从小到人的顺序进行排序,将排序后的结果输出。参考答案:voidmain(){iiiti,j,num,a[10];fdr(i=O;i<10:i++){priiitf(nEnterNo.%d";i+1);scanf(H%d,\&num):for(j=i-l;j>=0&&a[j]>iium;j~)a[j+l]=a[j];a[j+l]=num;}fdr(i=O;i<10:i++)printf(HNo.%d=%d\n,\i+1,a[i]):}3、输入一个正整数,要求以相反的顺序输出该数。例如输入12345,输出位54321o参考答案:voidmain(){iiitn;printf(MPleaseentern:H):scanf(H%d,\&n);wlule(n>0){printfC%d”,n%]0);n=iV10;}}4、编写程序,读入一个整数N;若N为非负数,则计算N到2XN之间的整数和;若N为一个负数,则求2XN到N之间的整数和。分别利用for和while写出两个程序。参考答案:voidmain(){mti.n;longsl=0.s2=0;printf(MPleaseenterN:n);scanf(H%d,\&n);if(n>=0)for(i=n;i<=2*n:i++)sl=sl+i;elsefor(i=n;i>=2*n:i—)sl=sl+i;i=n;if(i>=0)wliile(i<=2*n)s2=s2+i++;elsewliile(i>=2*n)s2=s2+i~;printf(MResult1=%ldiesult2=%ld\nM,s1,s2):}5、一个自然数被8除余1,所得的商被8除也余1,再将第二次的商被8除后余7,最后得到一个商为a。又知这个自然数被17除余4,所得的商被17除余15,最后得到一个商是a的2倍。编写程序求这个自然数。参考答案:voidmain(){mti,n,a:fbr(i=O;:i++){{n=v8: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)ii=n/l7;}if(2*a==n){priiitf(nresult=%d,n,\i):break:}}}6、编写程序,输出用一元人民币兑换成1分、2分和5分硬币的不同兑换方法。参考答案:voidmain(){mtfhf2,f5,count=0:fbr(f5=O:f5<=20:f5++)fdr(f2=O:f2<=(100-f5*5)/2;£2++){fl=100-f5*5-f2*2;if(f5*5+f2*2+fl==100)printf(,rNo.%2d»5:%4d2:%2d1:%2d\『,++coimt,f5、f2,fl);}}7、将一个数的数码倒过来所得到的新数叫原数的反序数。如果一个数等于它的反序数,则称它为对称数。求不超过1993的最大的二进制的对称数。参考答案:voidmain(){inti,j»k、a[16]={0};fbr(i=l:i<=1993:i++){n=i;k=0:wlule(n>0)/*将十进制数转变为二进制数*/{a[k++]=n%2;n=iv2;}fbr(j=O;j<k;j++)if(a[j]!=a[k-j-l])break:if(j>=k){printfC'%d:”,i):fbr(j=O;j<k;j++)pnntfC,%2d",a|j]);printf("\n");}}}8、十个小孩围成一圈分糖果,老师分给第一个小孩10块,第二个小孩2块,第三个小孩8块,第四个小孩22块,第五个小孩16块,第六个小孩4块,第七个小孩10块,第八个小孩6块,第九个小孩14块,第十个小孩20块。然后所有的小孩同时将自己手中的糖分一半给右边的小孩;糖块数为奇数的人可向老师要一块。问经过这样几次调整后大家手中的糖的块数都一样?每人各有多少块糖?参考答案:voidmain(){mti,count=0,a[ll]={0J0,2,8,22,16,4,10,6,14,20};wlule(l){for(i=1: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++;}}printf(Mcount=%dnumber=%d\n,,,count5a[1]);}9、输入5X5的数组,编写程序实现:求出对角线上各元素的和;求出对角线上行、列卜•标均为偶数的各元素的枳;找出对角线上其值最大的元素和它在数组中的位置。参考答案:voidmain(){mti,j,sl=0,s2=l,a[5][5];for(i=0;i<5;i++)fbr(j=O;j<5;j++){printf(”%d%d:}fbr(i=O;i<5;i++){for(j=0:j<5;j++)pnntff,%5d',,a[i]|j]);pmitU:}j=0;fbr(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;}pmitfCSUN=%d\nACCOM=%cTma[%d]=%d\ir,sl,s2j,aIJ]|j]);}10、编写程序,以字符形式输入一个十六进制数,将其变换为一个十进制整数后输出。参考答案:#includeHstdio.hHvoidmain(){mtLn=0,a[4]={0}:printf^'Pleaseenteradigit:M):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;elseif(a[i]>=65&&a[i]<=69)a[i]=a[i]-55:elseif(a[i]>=97&&a[i]<=102)a[i]=a[i]-87;elseprmtf(nmputEnor!M):fdr(i=O;i<4;i++)n=n*16+a[i];printf(,,%d,\n);}11、编写程序,输入一个十进制整数,将其变换为二进制后储存在一个字符数组中。参考答案:voidmain(){mti,n,k=l6,a[l6]={0}:printf^'Pleaseenteradigit:M):scanf(H%d,\&n);wlule(n>0)/*将十进制数转变为二进制数*/{a[—k]=n%2;n=iv2;}fdr(i=O;i<16:i++)pmitf(”%2dH[i]);}12、对数组A中的N(0<NV100=个整数从小到人进行连续编号,输出各个元素的编号。要求不能改变数组A中元素的顺序,且相同的整数要具有相同的编号。例如数组是:A二(5,3,4,7,3,5,6)则输出为:(3,1,2,5,1,3,4)参考答案:voidmain(){mtij,k,n,m=1,r=1,a[2][100]={0}:prmtf(HPleaseentern:H);scanf(H%d,\&n);fdr(i=O;i<n:i++){printf(,,a[%d]='\i);scanfC%d”,&a[O][i]);}wliile(m<=n)/*m记录已经登记过的数的个数*/{for(i=0:i<n;i++)/*记录未登记过的数的大小*/{if(a[l][i]!=O)/*已登记过的数空过*/continue:k=i;fbr(j=i:j<n;j++)/*在未登记过数中找最小数*/if(a[l]|j]==O&&a[O][j]<a[O][k])k=j;a[l][k]=r-H-;/*记录名次,t为名次*/m++:/*登记过的数增1*/fbr(j=O;j<n;j++)/*记录同名次*/if(a[l]|j]==O&&a[O][j]=a[O][k]){a[l]|j]=a[l][k];m++:}break:}}for(i=O;i<n;i++)pmitf(”a[%d]=%d,%d\ir,i,a[O][i],a[l][i]);}13、求这样一个三位数,该三位数等于其每位数字的阶乘之和。即:abc=a!+b!+c!参考答案:voidmain(){iiita[5],i,t,k;for(1=100;i<1000:i++){for(t=0,k=1000:k>=10:t++){a[t]=(i%k)/(k/10);k/'=10:}if(f(a[O])+f(a[l])+f(a⑵)T)printf(M%d”,i);}}f(m)iiitm;{iiiti=0,t=l;whiiq++i<=m)t*=i:return(t):}14、编写一个函数实现将字符串strl和字符串str2合并,合并后的字符串按其ASCII码值从小到大进行排序,相同的字符在新字符串中只出现一次。参考答案:#includeHstring.hHsucmbn(a,b,c)/*数组合并函数:将数组a、b合并到*/chara[],b[],c[]:{chartinp;iiitm=stiien(a);n=stilen(b):foi(i=O;i<m-l:i++)/*对数组a排序*/{fbr(j=i+l,k=i:j<m:j++)if(a|j]<a[k])k=j;tmp=a[i];a[i]=a[k];a[k]=tmp:}fbr(i=O;i<n-l;i++)/*对数组b排序*/{fbr(j=i+l,k=i:j<n;j++)if(b[j]<b[k])k=j:tmp=b[i];b[i]=b[k];b[k]=tmp;}i=0;j=0;k=0;wliile(i<m&&j<n)/*合并*/if(a[i]>b[j])c[k++]=b[j++];/*将a[i]、b[j]中的小者存入c[k]*/else{c[k++]=a[i++];if(a[i-l]=b[j])j++;/*如果a、b当前元素相等,删掉一个*/}wliile(i<m)c[k++]=a[i-H-];/*将a或b中剩余的数存入c*/wliile(j<n)c[k4-+]=b[j-H-];c[k]=g}15、编写函数,采用递归方法实现将输入的字符串按反序输出。参考答案:#include"stdio.h"stiout(s)char*s;{if(*s!^01){strout(s+l);/*递归调用strout函数,字符串首地址前移一个字符*/putch(*s);/*输出字符串首地址所指向的字符*/}elseretuni;/*遇到字符串结束标志结束递归调用*/}16、编写函数,采用递归方法将任一整数转换为二进制形式。参考答案:tum(n.a,k)iiitn5a[],k:{if(n>0){a[k]=n%2:tuin(ii/2,a,k-l):}elsereturn;}voidmain(){mti,n,a[16]={0};printf(M\iiPleaseentern:'*):scanf(H%d,\&n);tuin(n.a,15);fbr(i=O;i<16:i++)pnntf(M%d,\a[i]):}17、将一个数的数码倒过来所得到的新数,叫作原数的反序数,如果一个数等于它的反序数,则称它为对称数。编写程序,采用递归算法求不超过1993的最人的二进制的对称数。参考答案:snunt(chars[])/*指针s指向字符串的第一个字符*/{char*p;p=s;while(*p!=r\0')p-H-:p-:严指针p指向字符串的最后一个字符*/if(p=s)retuin(l);/*两个指针指向同一个字符表示字符串对称*/else{if(*s!=*p)leturn(O);/*两个指针指向字符不等表示字符串不对称*/else{*p=”\0';snmit(s+l);/*取掉首尾比较过的字符继续比较*/}}}18、编写程序,读入一个以符号".〃结束的长度小于20字节的英文句子,检查其是否为回文(即正读和反读都是一样的,不考虑空格和标点符号)。例如:读入句子:MADAMI'MADAM.它是回文,所以输出:YES读入句子:ABCDBA).它不是回文,所以输出:NO参考答案:#include"stdio.h"voidmain(){chars[21],*p,*q;gets(s);p=s;q=s;while(*q!="\0')q++;q-=2;wlule(p<q)/*指针p指向字符串首,指针q指向串未*/if(*p++!=*q-)/*指针p、q同时向中间移动,比较对称的两个字符♦/{pnntffNOg”):break:}if(p>=q)pnntf(”YES\n”):}19、编写程序,其中包扌舌一个函数,此函数的功能是:对一个长度为N的字符串从其第K个字符起,删去M个字符,组成长度为N-M的新字符串(其中N.M<=80,K<=N)o例如输入字符串-Wearepoorstudents.\利用此函数进行删除"poor"的处理,输出处理后的字符串是"Wearestudents.参考答案:strcut(s,m,k)chars[]:mtm,k;{char*p;inti:p=s+m:/*指针p指向要被删除的字符*/while((*p=*(p+k))!="Q)/*p+k指向要前移的字符*/p++:}20、编写一个函数insert(si,s2,ch),实现在字符串si中的指定字符ch位置处插入字符串s2o参考答案:insert(sl,s2、ch)charsl[],s2[].ch:{char*p,*q;p=sl;whib(*p++!=ch):wliile(*s2!-\0,){q=p;wliile(*q!-\0,)q++;wliile(q>=p)*(q+l)=*q--;*++q=*s2++;p++:}}21、编写程序将输入的两行字符串连接后,将串中全部空格移到串首后输出。参考答案:sticnb(sl,s2)charsl[],s2[]:{char*p;iiiti=l;p=sl;wliile(*p!-\0,)p++;wliile((*p++=*s2++)!=、(T);/*将s2接于si后面*/p=sl;while(*p!=W)/*扫描整个字符串*/{lf(*p==J/*当前字符是空格进行移位♦/{while(*(p+i)=='f)i++;/*寻找当前字符后面的第一个非空格*/if(*(p+i)!='\O'){*p=*(ph);/*将非空格移于当前字符处*/*(p+i)=「;/*被移字符处换为空格*/}elsebreak;/*寻找非空格时到字符串尾,移位过程结束*/}p++:}}22、编写程序,输入字符串,分别统计字符串中所包含的各个不同的字符及其各自字符的数量。如:输入字符串:abcedabcdcd则输出:a=2b二2c=3d=3e二1。参考答案:#include”stdio.h"stmctstnium{iiiti;charch:}voidmain(){charc;iiiti=0,k=0;stmctstniums[100]={0.NULL}:while((c=getcharO)!=<\n,){for(i=0:s[i].i!=0:i++){if(c=s[i].ch){s[i].i++;break:}}if(s[i]・i==0)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《机构老年人社工实务》课程期末考试(A)卷
- 吉林艺术学院《影视鉴赏》2021-2022学年第一学期期末试卷
- 吉林艺术学院《视唱Ⅲ》2021-2022学年第一学期期末试卷
- 资产公司垫资协议书范本模板
- 吉林艺术学院《材料研究》2021-2022学年第一学期期末试卷
- 吉林师范大学《知识产权法》2021-2022学年第一学期期末试卷
- 2022年江苏省公务员录用考试《行测》真题(C类)及答案解析
- 2024年大米原材料供应合同范本
- 《供应链管理》教案 张静芳 第7章 供应链运输管理;第8章 供应链数字协同
- 黄金提纯厂合作协议书范文范本
- 湘美版 六年级(上)第5课 纸魔方 (作品展示PPT)
- T管护理-PPT课件 (2)
- 长安汽车集团介绍PPT课件
- NRS评分表参考
- 胡壮麟《语言学教程》测试习题及答案
- 推拿手法在治疗颈椎病中的作用课题论文开题结题中期报告(经验交流)
- 绝对成交的销售技巧_图文ppt课件
- 【整理】加热炉浇注施工方案
- 江苏省装配式监理细则
- 人工挖孔桩单桩竖向承载力特征值计算Excel
- 南昌大学道路交通安全管理暂行办法
评论
0/150
提交评论