




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言程序经典习题 马阳(ma ) 最后更新 2014 年 12 月 22 日 使用说明 为了能让在校学生更好的学习C 语言,作者以西北大学 2001 年 3 月 19 日匿名作者的C语言复 习题为基础进行了大幅度的修订,优化了大量代码,提供更优的算法,调整了习题的顺序,参 考代码确保扣题。 收录大量经典C 语言习题,所有代码经过精心编写,编码规范良好,适合读者反复揣摩、模 仿。 全书的代码,使用C99 的编写,并在GCC 4.8.1上测试通过。本书中,为了缩短代码,与课本 中的工程规范略有不同,大量使用逗号表达式,不需要检查内部函数入口参数的有效性。所有 主函数返回类型为int,正常返回值为0。 由于作者编写时间仓促,能力有限,不当和疏忽之处在所难免,望广大读者批评指正。若需要 向题库添加更好的习题,请与作者联系。 本书非商业使用。如需商用,请联系作者。 目录1 目录 1从键盘输入两个整数,输出其和、差、积和商1 2用scanf()函数输入三个整数,输出其中不大不小的数1 3输入三个字符,对这三个字符各加整数1后输出1 4利用海伦公式计算三角形面积2 5输入若干学生一门功课的成绩,统计各分段的人数2 6输入一个整数,判断它能否被3、5、7整除,并输出按要求输出信息2 7输出英文星期名3 8将整数的每位数字转换为英文3 9输出5分制成绩4 10 给出年、月、日,计算出该日是该年的第几天4 11 求分数序列:1 2, 2 3, 3 5, 5 8, 8 13,. 前20项的和 5 12 用近似公式求自然对数的底e的值5 13 计算1! + 2! + 3! + . + 10!的值并输出6 14 计算1! + 3! + 5! + 7! + 9! + 11!的值并输出6 15 统计输入数字个数6 16 输入正整数,判断是否既是5又是7 的整数倍数7 17 求S(a) = a + aa + aaa + aaaa + aaaaa的值7 18 abc + cba = 13337 19 输出1 100之间能被9整除余2的数8 20 输出0 999之间的所有“水仙花数”8 21 输出1000以内完数8 22 寻找199之间的同构数9 23 求350之间所有素数之和,用子函数判断是否为素数9 24 从键盘输入两个正整数,输出其最大公约数和最小公倍数10 25 编写函数,求一个不超过五位数的十进制整数各位数值的和10 2目录 26 换零钱问题11 27 编程输出如下图形(不能使用printf语句)11 28 输出杨辉三角形的前十行12 29 输出乘法口诀表12 30 输入任意5个数在数组中,请按格式打印如下方阵13 31 输入5对整数,请输出每对数中较大者13 32 将一个3 3矩阵转置(行列互换)后输出13 33 求一个3 3矩阵的最大和最小元素及下标14 34 求一个3 3矩阵的对角线元素之和14 35 求一个一维数组的最大值、最小值和平均值(主函数调用并输出)15 36 将n个整数按升序排序重新放到原数组中,操作时不得另开辟数组15 37 编写函数,在一维数组中查找元素16 38 在有序数组中寻找元素16 39 在有序数组中插入元素17 40 编写函数,给定一个数,删除数组中与之相等的元素,返回值为删除后数组元素个数17 41 数列元素奇数降序排列,偶数升序排列18 42 A数组有8个元素,从第6个元素开始将数组后三个元素移到数组开头18 43 字符串逆序输出19 44 编写函数,实现字符串逆序19 45 不用strcpy()函数,实现两个字符串的复制19 46 编写函数,从指定位置复制字符串20 47 不使用库函数实现字符串特定条件的连接20 48 编写函数将一个字符串中每一个单词的每一个字母转换为大写20 49 从键盘输入10个数,用指针实现将最小的数与第一个数对换,最大的数与最后一个数对换21 50 在主函数中输入三个数,在子函数中用指针将三个数排序21 51 输入三个字符串,按由小到大的顺序输出(用字符指针实现)22 目录3 52 输入6名学生的5 们成绩,分别统计每个学生的平均成绩22 53 有10名学生,每位学生有四门功课。输出平均成绩、总分最高和最低的两位学生所有课程的 成绩23 54 从指定位置开始的n个数按逆序重新排列并输出新的完整序列24 C语言程序经典习题Page 1 of 24 1从键盘输入两个整数,输出其和、差、积和商 1#include 2intmain() 3inta ,b ; 4scanf (”%d%d” , 5printf (”%d + %d = %dn” ,a ,b ,a+b ); 6printf (”%d %d = %dn” ,a ,b ,ab ); 7printf (”%d %d = %ldn” ,a ,b ,(long)ab );/确保不同环境数据尽可能不会溢出 8i f (b!=0)printf (”%d / %d = %.2 f n” ,a ,b ,( float )a/b );/实型数除法 9elseprintf (”%f/ %f = i n f i n i t y n” ,a ,b ); 10return0; 11 2用scanf()函数输入三个整数,输出其中不大不小的数 要求输出宽度为五位。 1#include 2intfindMid ( inti ,intj ,intk)/mid = sum - max - min 3returni+j+k ( ij ?( ik? i : k ) : ( jk? j : k) ( i 2#define N 3 3intmain() 4char a N ; 5inti=N; 6while( i ) /读取N个字符 7scanf (”%c” , 8i =0; 9while( i 2#include 3intmain() 4floata ,b ,c ,s ,area ; 5scanf (”%f%f%f ” , 6i f (a+bc 8area=sqrt ( s (sa)( s=b)( sc ) ) ; 9printf (”area=%f n” ,area ); 10 11elseprintf (”No!n” ); 12return0; 13 5输入若干学生一门功课的成绩,统计各分段的人数 凡不及格(低于60分)都一个计数器来统计,其它以10 分作为一个分数段,100分作为一个分数 段。 1#include 2intmain() 3inti ,n ,fail ,a 11=0; 4while( scanf (”%d” , 12for ( i =6;i %dn” ,i 10 ,i 10+9,a i ) ; 14printf (”100 %dn” ,a 1 0 ) ; 15return0; 16 6输入一个整数,判断它能否被3、5、7整除,并输出按要求输出信 息 1. 能同时被3、5、7整除 2. 能被其中两个数(说明哪两个数)整除 3. 只能被其中一个整除(说明哪个数) 4. 不能被3、5、7 任何一个整除 C语言程序经典习题Page 3 of 24 1#include 2intmain() 3intn ,a ,b ,c ; 4a=b=c=0; 5scanf (”%d” , 6i f (n%3 = 0)a+; 7i f (n%5 = 0)b+; 8i f (n%7 = 0)c+; 9switch(a+b+c) 10case3:printf (”(1)n” ); break ; 11case2:printf (” (2) ” ); 12i f (a)printf (”3 ” ); 13i f (b)printf (”5 ” ); 14i f ( c )printf (”7 ” ); 15printf (”n” ); break ; 16case1:printf (” (1) ” ); 17i f (a)printf (”3 ” ); 18i f (b)printf (”5 ” ); 19i f ( c )printf (”7 ” ); 20printf (”n” ); break ; 21case0:printf (”(4)n” ); break ; 22 23return0; 24 7输出英文星期名 编写程序实现如下功能:输入1、2、3、4、5、6、7 (分别对应星期一至星期日)中的任何一个 数,便能输出与之对应的英文名称。如输入1,则输出Monday。 1#include 2intmain() 3charday ;/节约空间 4day=getchar ( ) ; 5switch(day) 6case1 : printf (”Mondayn” ); break ; 7case2 : printf (”Tuesdayn” ); break ; 8case3 : printf (”Wedenesdayn” ); break ; 9case4 : printf (”Thursdayn” ); break ; 10case5 : printf (”Fridayn” ); break ; 11case6 : printf (”Saturdayn” ); break ; 12case7 : printf (”Sundayn” ); break ; 13default: printf (”Error !n” ); 14 15return0; 16 8将整数的每位数字转换为英文 例如:输入1024,输出One Zero Two Four。 Page 4 of 24西北大学科技与创业协会 1#include 2#include 3intmain() 4chars 1 1 ;/录入数字 5inti ,l ; 6gets ( s ); 7l=strlen ( s ); 8for ( i =0;i 2intmain() 3intscore ; 4scanf (”%d” , 5i f ( score 100) 6printf (”Error !n” ); 7return0;/程序结束 8 9switch( score /10) 10case10:case9:printf (”An” ); break ; 11case8:printf (”Bn” ); break ; 12case7:printf (”Cn” ); break ; 13case6:printf (”Dn” ); break ; 14default : printf (”Dn” );/ 表示0,1,2,3,4,5 15 16return0; 17 10给出年、月、日,计算出该日是该年的第几天 1#include 2intday( intyyyy ,int mm,intdd) C语言程序经典习题Page 5 of 24 3intisleap ,sum=0; 4isleap=(yyyy%4=0 /判断闰年 5switch(mm)/注意降序运算,无语句,自标号向下执行break 6case12:sum+=30; 7case11:sum+=31; 8case10:sum+=30; 9case9:sum+=31; 10case8:sum+=31; 11case7:sum+=30; 12case6:sum+=31; 13case5:sum+=30; 14case4:sum+=31; 15case3:sum+=28+isleap ;/闰月+1 16case2:sum+=31; 17case1:sum+=0; 18 19return sum+dd ; 20 21intmain() 22intyyyy , mm,dd ; 23scanf (”%d%d%d” , 24printf (”%d%d%d %d day( s )n” ,yyyy , mm,dd ,day(yyyy , mm,dd ) ) ; 25return0; 26 11求分数序列:1 2, 2 3, 3 5, 5 8, 8 13,. 前20项的和 1#include 2intmain() 3floatt ,sum=0; 4inti =1,j =2,count=1; 5do 6sum+=(float ) i / j ;/实型数除法! 7j=i+j ,i=ji ;/更新分子和分母值 8while( count+ 2intmain() 3inti =1; 4floate=1.0 ,t =1.0; 5 while(t=1e7) /fl oat类型7位有效数字 6t /=i+; /t=1/i! Page 6 of 24西北大学科技与创业协会 7e += t ; 8 9printf (”e = %f n” ,e ); 10return0; 11 13计算1! + 2! + 3! + . + 10!的值并输出 1#include 2intmain() 3inti ,t ; 4long sum=0;/确保任何环境数据不会溢出 5for ( i=t=1;i 2#define N 11 3#define M 2 4intmain() 5inti ,j ,t=1,sum=1; 6for ( i =3;i 2intmain() 3inta5=0 ,i ,n ;/注意数组长度 4while( scanf (”%d” , 6i f (n=0 11return0; 12 16输入正整数,判断是否既是5又是7 的整数倍数 若是则输出yes,否则输出no。 1#include 2voidmod 5and7( intn) 3i f (n%5| |n%7)printf (”Non” ); 4elseprintf (”Yesn” ); 5 6intmain() 7intn ; 8scanf (”%d” , 9mod 5and7(n ); 10return0; 11 17求S(a) = a + aa + aaa + aaaa + aaaaa的值 其中a是一个数字,例如:2 + 22 + 222 + 2222 + 22222 1#include 2intmain() 3inti ,a ,t ; 4long sum=0;/确保在不同环境数据不溢出 5scanf (”%d” , 6for ( i =1,t=a ; i 2intmain() 3inti ,j ,k ; 4for ( i =1;i =i ; k) /去重 7i f (101 i +20j +101k=1333) 8printf (”%d + %d = 1333n” ,100 i +10j+k ,100k+10j+k ); 9return0; 10 19输出1 100之间能被9整除余2的数 1#include 2intmain() 3inti ; 4for ( i =1;i 2intmain() 3inti ,j ,k ; 4for ( i =1;i 2intmain () 3 4inti , j , k ,sum, count ; 5for ( i =1;i 2intfind ( intn) 3intbase=1, m =n ; 4while(n) 5n/=10,base=10;/计算被除数 6i f (mm %base= m)return1; 7return0; 8 9intmain() 10inti ; 11for ( i =1;i %dn” ,i ,i i ); 14return0; 15 23求350之间所有素数之和,用子函数判断是否为素数 1#include 2intisPrime ( intn) 3inti ; 4for ( i =2; i i 3intmain() 4inta ,b ,t ,r ,p ; 5scanf (”%d%d” , 6i f (a 3intmain() 4inta ,b ,t ,i ,gcd ; 5scanf (”%d%d” , 6i f (a 2intf ( intn) 3intresult =0; 4while(n) 5result += n%10; 6n /=10; 7 8returnresult ; 9 10intmain() C语言程序经典习题Page 11 of 24 11intn ; 12scanf (”%d” , 13printf (”%d %d” ,n ,f (n ) ) ; 14return0; 15 26换零钱问题 有人想将一张面值100院的人民币换成5元、1元和0.5院面值的零钱100张,以上三种面值的零钱 至少有一张,问共有几种换法。 1/ 本题为三元方程,共有两个方程 2 因此确定一个变量后,此题即为解二元方程组 3 10*j+5*k=1000-50*i 放大10倍避免浮点数运算误差 4 j+k=100-i 5 约束条件:i, j, k为1,98之间的整数 6/ 7#include 8intmain() 9inti ,j ,k ; 10for ( i =1;i 1 5for ( i =1;i0;j) /注意寻找行列关系 7printf (” ” ); 8for ( j =1;j 2#define N 10 3intmain() 4inti ,j ,a N N ; 5for ( i =0;i 2intmain() 3inti ,j ; 4for ( i =1;i 2#define N 5 3intmain() 4inti ,j ,a N ; 5for ( i =0;i 2#define N 5 3intmain() 4inti ,a N 2 ; 5for ( i =0;ia i 1 ? a i 0 : a i 1 ) ; 8 9return0; 10 32将一个3 3矩阵转置(行列互换)后输出 1#include 2#define N 3 3intmain() 4inti ,j ,t ,a N N ; 5for ( i =0;i 2#include /包含int变量类型的最值 3#define N 3 4intmain() 5inti ,j ,a N N ,max=INT MIN,min=INT MAX; 6for ( i =0;ia i j ?max: a i j ; 10min=min 2#define N 3 3intmain() 4inti ,j ,sum1 ,sum2 ,a N N ; 5for ( i =0;i 2#define N 50 3intfindMax( inta ,intn) 4inti ,max=a 0 ; 5for ( i =1;ia i ?max: a i ; 7return max; 8 9intfindMin ( inta ,intn) 10inti ,min=a 0 ; 11for ( i =1;i=0;i ) 4for ( j =0;ja j +1)/升序排列 6t=a j , a j =a j +1 ,a j+1=t ; 7 8 9voidselectSort ( inta ,intn) 10inti ,j ,t ,min ; 11for ( i =0;ia j )min=j ; 15i f (min!= i ) 16t=a min ,a min=a i ,a i =t ; 17 18 Page 16 of 24西北大学科技与创业协会 37编写函数,在一维数组中查找元素 若找到返回该数值下标,否则返回-1。要求用指针变量传递数组首地址。 1#include 2intfindValue ( inta ,intn ,intvalue ) 3inti ; 4for ( i =0;i %dn” ,b ,findValue (a ,10 ,b ) ) ; 13return0; 14 38在有序数组中寻找元素 有10个数已按由小到大的顺序存放在一个整型数组中,从键盘输入一个数,找出该数是数组的 第几个元素,如果该数不在数组中,输出错误信息。 1#include 2#define N 10 3intfindValue ( inta ,intn ,intvalue )/有序序列用二分查找 4intmid ,l e f t =0,right=n1; 5while( left value ) 10right = mid1; 11else 12l e f t= mid+1; 13 14return1; /表示未找到 15 16intmain() 17inta N=2 ,3 ,5 ,6 ,7 ,8 ,10 ,13 ,15 ,18 ,b ,i ; 18scanf (”%d” , 19i=findValue (a ,N,b ); 20i f ( i = 1) 21printf (”Non” ); 22else 23printf (”%d %dn” ,b ,i +1); 24return0; 25 C语言程序经典习题Page 17 of 24 39在有序数组中插入元素 一个已按从小到大的顺序排序的数组,有9个元素,从终端输入第10个数,要求按原来排序规律 将它插入数组中。 1#include 2#define N 10 3voidinsert ( inta ,intvalue ) 4inti ; 5for ( i=N2;i=0 i ) / 注意表达式2的书写顺序 6a i+1=a i ;/后移 7a i+1=value ;/插入新值 8 9intmain() 10inti ,b ,a N=1 ,5 ,7 ,11 ,15 ,19 ,23 ,28 ,31; 11scanf (”%d” , 12printf (”Beforeinsert :n” ); 13for ( i =0;i 2intdeleteValue ( inta ,intn ,intvalue ) 3inti ,j ,t ; 4for ( i=n1;i =0;i ) 5i f (a i=value ) 6for ( j=i ; j 2#define N 50 3voidbubbleSort ( inta ,intn) 4inti ,j ,t ; 5for ( i=n1;i =0;i ) 6for ( j =0;ja j +1)/升序排列 8t=a j , a j =a j +1 ,a j+1=t ; 9 10intmain() 11inti =0, a N ; 12while( scanf (”%d” , /-1为输入结束标志符 13bubbleSort (a ,i ); 14for(i ; i =0;i ) / 注意表达式1,最后元素下标是(总数-1) 15i f (a i %2) 16printf (”%dt” ,a i ) ; 17printf (”n” ); 18for ( i =0;a i != 1; i+) 19i f (a i %2=0) 20printf (”%dt” ,a i ) ; 21return0; 22 42A数组有8个元素,从第6个元素开始将数组后三个元素移到数组 开头 例如:A数组元素为:2 6 9 8 3 7 4,移动后变为:3 7 4 2 6 9 8 5 1#include 2#define N 8 3#define M 6 4intmain() 5inti ,j ,t ,a N=2 ,6 ,9 ,8 ,5 ,3 ,7 ,4; 6printf (”Beforemove:n” ); 7for ( i =0;i0;i ) / 注意表达式1 10t=a i 1; 11for ( j =0;j 2#include 3intmain() 4inti ,l ; 5chars 5 0 ; 6gets ( s );/输入不能超过49个字符 7for ( i=strlen ( s)1; i =0;i ) /(长度-1)才是最后一个字符 8putchar ( s i ) ; 9return0; 10 44编写函数,实现字符串逆序 1#include 2#include 3voidreverse (char s ) 4inti ,l=strlen ( s ); 5chart ; 6for ( i =0;i 2#include 3voidstrCopy (char s1 ,char s2 ) 4inti ,l=strlen ( s1 ); 5for ( i =0;i 2#include 3voidcopyStr n (char s1 ,char s2 ,int m) 4inti=m1,j =0,l=strlen ( s1 ); 5while( i 2#include 3voidstrcopy 5 (char s1 ,char s2 ) 4inti ,j ,l1=strlen ( s1 ) ,l2=strlen ( s2 ); 5i f ( l2 =5) 6for ( i=l1 , j =0;i 2#include 3voidtoUpper (char s ) 4inti =0,l=strlen ( s ); 5i f ( s i =97 /单词首字母小写字母大写 11 12intmain() 13chars 50=” hello ,world ! ” ; 14toUpper ( s ); 15puts ( s ); 16return0; 17 49从键盘输入10个数,用指针实现将最小的数与第一个数对换,最 大的数与最后一个数对换 1#include 2#include 3#define N 10 4intmain() 5intmin=INT MAX,max=INT MIN,a N ,p ,t ; 6for (p=a ;pp?max:p ; 9min=min 2voidsort ( inta ,intb ,intc) 3intt ; 4i f (a 2intcompare(char s1 ,char s2 ) 3char p1=s1 ,p2=s2 ;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 调薪不签协议书
- 百分比协议书
- 第九课 科学思维与创新能力教学设计-2025-2026学年中职思想政治哲学与人生(第3版)人教版
- 国家保密协议书
- 传输控制协议书网际协议书
- dr真爱协议书框
- 房屋漏水维修申请书
- 孕期离婚协议书
- http协议书 上传文件
- 2024年四年级英语下册 Unit 1 Our school subjects第2课时说课稿 译林牛津版
- 动物安乐死协议书(2篇)
- 2019年医疗器械体外诊断与病理诊断行业分析报告
- DL-T2078.2-2021调相机检修导则第2部分:保护及励磁系统
- 国开(河北)2024年《中外政治思想史》形成性考核1-4答案
- 新起点大学英语综合教程1
- 小学数学添括号去括号简便计算练习100道及答案
- 师德师风考核表
- 三年级上册语文必考点1-8单元按课文内容填空专项练习
- 《一、圆锥曲线的光学性质及其应用》教学设计(部级优课)-数学教案
- 装配钳工高级试题与答案
- GB/T 27809-2011热固性粉末涂料用双酚A型环氧树脂
评论
0/150
提交评论