c语言程序设计kr pdf 下载,C语言程序设计习题试题(编程题).pdf

本文精选了多个C语言编程练习题目,涵盖字符分类计数、数组操作、字符串处理等核心知识点,通过实际编程加深对C语言的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C语言程序设计习题试题(编程题).pdf

。 C C 语言程序设计习题(编程类)语言程序设计习题(编程类) 1、从键盘输入任意的字符,按下列规则进行分类计数。 第一类 0,1,2,3,4,5,6,7,8,9 第二类 ,-,*,/,, 第三类 其它字符 当输入字符时先计数,然后停止接收输入,打印计数的结果。 参考答案 include void main int class1, class2, class3; char ch; class1class2class30; /* 初始化分类计数器 */ do chgetch ; switchch case 0 case 1 case 2 case 3 case 4 case 5 case 6 case 7 case 8 case 9 class1; break; /* 对分类计数 */ case case - case * case / case case class2; break; /* 对分类计数 */ default class3; break; /* 对分类计数 */ while ch ; /* 字符在 C 程序中要使用转义符 */ printfclass1d, class2d, class3dn, class1, class2, class3; 2、从键盘输入十个整数,用插入法对输入的数据按照从小到大的顺序进行排序,将排序后的结 果输出。 参考答案 void main int i,j,num,a10; fori0;i0ajnum;j aj1aj; aj1num; fori0;i0 printfd,n10; nn/10; 4、编写程序,读入一个整数;若为非负数,则计算到2之间的整数和;若为一个 负数,则求到之间的整数和。分别利用for 和 while 写出两个程序。 参考答案 void main int i,n; long s10,s20; printfPlease enter N; scanfd,n; ifn0 forin;i2*n;i s1s1i; in; ifi0 whilei2*n s2s2i; printfResult1ld result2ldn,s1,s2; 5、一个自然数被8 除余 1,所得的商被8 除也余 1,再将第二次的商被8 除后余 7,最后得到一 个商为。又知这个自然数被 17 除余 4, 所得的商被 17 除余 15,最后得到一个商是的2 倍。 编写程序求这个自然数。 参考答案 void main int i,n,a; fori0; ;i ifi81 ni/8; 。2 。 ifn81 nn/8; ifn87 an/8; ifi174 ni/17; ifn1715 nn/17; if2*an printfresultdn,i; break; 6、编写程序,输出用一元人民币兑换成1 分、2 分和 5 分硬币的不同兑换方法。 参考答案 void main int f1,f2,f5,count0; forf50;f520;f5 forf20;f2 5 4d 2 2d 1 2dn,count,f5,f2,f1; 7、将一个数的数码倒过来所得到的新数叫原数的反序数。如果一个数等于它的反序数,则称它 为对称数。求不超过 1993 的最大的二进制的对称数。 参考答案 void main int i,j,n,k,a160; fori1;i0 /* 将十进制数转变为二进制数 */ akn2; nn/2; forj0;jk 。3 。 printf d ,i; forj0;jk;j printf2d,aj; printfn; 8、十个小孩围成一圈分糖果,老师分给第一个小孩10 块,第二个小孩 2 块,第三个小 孩 8 块,第四个小孩22 块,第五个小孩16 块,第六个小孩4 块,第七个小孩10 块,第 八个小孩 6 块,第九个小孩14 块,第十个小孩20 块。然后所有的小孩同时将自己手中 的糖分一半给右边的小孩;糖块数为奇数的人可向老师要一块。问经过这样几次调整后 大家手中的糖的块数都一样每人各有多少块糖 参考答案 void main int i,count0,a110,10,2,8,22,16,4,10,6,14,20; while1 fori1;i10;i ai-1ai-1/2ai/2; a10a10/2a0; fori1;i10;i ifai21 ai; fori1;i10;i ifaiai1 break; ifi10 break; else a00; count; printfcountd numberdn,count,a1; 9、输入 55 的数组,编写程序实现 1求出对角线上各元素的和; 2求出对角线上行、列下标均为偶数的各元素的积; 3找出对角线上其值最大的元素和它在数组中的位置。 参考答案 void main int i,j,s10,s21,a55; fori0;i5;i forj0;j5;j printfd d ,i,j; scanfd,aij; 。4 。 fori0;i5;i forj0;j5;j printf5d,aij; printfn; j0; fori0;iajj ji; printfSUNdnACCOMdnaddn,s1,s2,j,ajj; 10、编写程序,以字符形式输入一个十六进制数,将其变换为一个十进制整数后输出。 参考答案 include stdio.h void main int i,n0,a40; printfPlease enter a digit; fori0;i4 aigetcharn;i ; fori0;i48ai65ai97ai102 aiai-87; else printf Error; fori0;i0 /* 将十进制数转变为二进制数 */ akn2; nn/2; 。5 。 fori0;i16;i printf2d,ai; 12、 对数组 A 中的 N (0N100个整数从小到大进行连续编号, 输出各个元素的编号。 要求不能改变数组中元素的顺序,且相同的整数要具有相同的编号。例如数组是 A5,3,4,7,3,5,6 则输出为3,1,2,5,1,3,4 参考答案 void main int i,j,k,n,m1,r1,a21000; printfPlease enter n; scanfd,n; fori0;in;i printfad ,i; scanfd,a0i; whilemn /* m 记录已经登记过的数的个数 */ fori0;in;i /* 记录未登记过的数的大小 */ ifa1i0 /* 已登记过的数空过 */ continue; ki; forji;jn;j /* 在未登记过数中找最小数 */ ifa1j0 a0ja0k kj; a1kr; /* 记录名次,r 为名次 */ m; /* 登记过的数增 1 */ forj0;jn;j /* 记录同名次 */ ifa1j0 a0ja0k a1ja1k; m; break; fori0;in;i printfadd, dn,i,a0i,a1i; 13、求这样一个三位数,该三位数等于其每位数字的阶乘之和。 即abc a b c 参考答案 void main int a5,i,t,k; for i100;i10;t atik/k/10; 。6 。 k/10; iffa0fa1fa2i printfd ,i; fm int m; int i0,t1; whileim t*i; returnt; 14、编写一个函数实现将字符串str1 和字符串 str2 合并,合并后的字符串按其ASCII 码值从小到大进行排序,相同的字符在新字符串中只出现一次。 参考答案 include string.h strcmbna,b,c /* 数组合并函数将数组 a、b 合并到 */ char a,b,c; char tmp; int i,j,k,m,n; mstrlena; nstrlenb; fori0;im-1;i /* 对数组 a 排序 */ forji1,ki;jm;j ifajak kj; tmpai; aiak; aktmp; fori0;in-1;i /* 对数组 b 排序 */ forji1,ki;jn;j ifbjbk kj; tmpbi; bibk; bktmp; i0;j0;k0; whileimjbj ckbj; /* 将 ai、bj中的小者存入 ck */ else ckai; 。7 。 ifai-1bj j; /* 如果 a、b 当前元素相等,删掉一个 */ whileim ckai; /* 将 a 或 b 中剩余的数存入 c */ whilej0 akn2; turnn/2,a,k-1; else return; void main int i,n,a160; printfnPlease enter n; scanfd,n; turnn,a,15; fori0;i16;i printfd,ai; 17、将一个数的数码倒过来所得到的新数,叫作原数的反序数,如果一个数等于它的反 序数,则称它为对称数。 编写程序,采用递归算法求不超过1993 的最大的二进制的对称 数。 参考答案 smmt char s /* 指针 s 指向字符串的第一个字符 */ char *p; ps; 。8 。 while*p0 p; p; /* 指针 p 指向字符串的最后一个字符 */ ifps return1; /* 两个指针指向同一个字符表示字符串对称 */ else if*s*p return0; /* 两个指针指向字符不等表示字符串不对称 */ else *p0; smmts1; /* 取掉首尾比较过的字符继续比较 */ 18、编写程序,读入一个以符号.结束的长度小于 20 字节的英文句子,检查其是否为 回文(即正读和反读都是一样的,不考虑空格和标点符号)。例如 读入句子MADAM IM ADAM. 它是回文,所以输出YES 读入句子ABCDBA. 它不是回文,所以输出NO 参考答案 include stdio.h void main char s21,*p,*q; getss; ps; qs; while*q0 q; q-2; whilepq printfYESn; 19、编写程序,其中包括一个函数,此函数的功能是对一个长度为N 的字符串从其第 K 个字符起,删去M 个字符,组成长度为N-M 的新字符串其中 N、M80,Kp *q1*q; *q*s2; p; 21、编写程序将输入的两行字符串连接后,将串中全部空格移到串首后输出。 参考答案 strcnbs1,s2 char s1,s2; char *p; int i1; ps1; while*p0 p; while*p*s20 ; /* 将 s2 接于 s1 后面 */ ps1; while*p0 /* 扫描整个字符串 */ if*p /* 当前字符是空格进行移位 */ while*pi i; /* 寻找当前字符后面的第一个非空格 */ if*pi0 *p*pi; /* 将非空格移于当前字符处 */ *pi ; /* 被移字符处换为空格 */ 。10 。 else break; /* 寻找非空格时到字符串尾,移位过程结束 */ p; 22、编写程序,输入字符串,分别统计字符串中所包含的各个不同的字符及其各自字符 的数量。如输入字符串 abcedabcdcd 则输出a2 b2 c3 d3 e1。 参考答案 include stdio.h struct strnum int i; char ch; void main char c; int i0,k0; struct strnum s1000,NULL; whilecgetcharn fori0;si.i0;i ifcsi.ch si.i; break; ifsi.i0 sk.chc; sk.i1; i0; whilesi.i0 printfcd ,si.ch,si.i; i; 23、编写程序,读入磁盘上语言源程序文件test8.c,删去程序中的注释后显示。 参考答案 include stdio.h FILE *fp; void main int c, d; iffp dtctest8.c,r NULL exit0; 。11 。 whilecfgetcfp EOF if c/ /* 如果是字符注释的起始字符/ */ ifdfgetcfp * /* 则判断下一个字符是否为* */ in_comment; /* 调用函数处理删除注释 */ else /* 否则原样输出读入的两个字符 */ putcharc; putchard; else if c c /*判断是否是字符或 */ echo_quotec; /* 调用函数处理字符 或包含的字符 */ else putcharc; in_comment int c, d; cfgetcfp; dfgetcfp; while c* d/ /* 连续的两个字符不是 * 和 / 则继续处理注释 */ c d; d fgetcfp; echo_quote c int c; /* c 中存放的是定界符或 */ int d; putcharc; while dfgetcfpc /* 读入下一个字符判断是否是定界符c */ putcharc; /* 当不是定界符 c 时继续循环 */ ifd /* 若出现转义字符 */ putchar fgetcfp; /* 则下一个字符不论是何均原样输出 */ putchard; 。12 。 欢迎您的下载,欢迎您的下载, 资料仅供参考资料仅供参考 致力为企业和个人提供合同协议,策划案计划书,学习课件等等 打造全网一站式需求 。13

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值