
C语言经典编程实例
文章平均质量分 50
C语言经典编程实例
又摘桃花换酒钱kk
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
045 自守数
例:自守数是指一个数的平方的尾数等于该数自身的自然数,如25²=625,76²=5776,9376²=87909376。编程求一定范围10000内的所有自守数。分析:对10000以内的自然数,即0~10000进行遍历,求每个数i的平方,并判断其平方数square的尾数tail(尾数可以是1,2,…,n位,但只有当tail的位和i的位数相等时,i和tail才有可能相同,所以只取i的位数个位数的square的尾数,这将大大减少计算量)square的最大值为10000²=100000000<2147483原创 2021-01-30 15:39:53 · 428 阅读 · 0 评论 -
044 亲密数
例:如果整数A的全部因子(不包括A)之和等于B,且整数B的全部因子(不包括B)之和等于A,则将A和B称为亲密数,如220的全部因子(不包括220)之和:1+2+4+5+10+11+20+22+44+55+110等于284,284的全部因子(不包括284)之和:1+2+4+71+142等于220,故220和284为亲密数。求10000以内的所有亲密数。分析:变量:要判断的整数 i,i 的全部因子j之和sum1,sum1的全部因子k之和sum2要进行的操作:①将1~10000循环遍历,判断某个数 i原创 2020-10-06 22:10:53 · 758 阅读 · 0 评论 -
043求等差数列
例:幼儿园老师给学生由前向后发糖果,每个学生得到的糖果数目成等差数列,前4个学生得到的糖果数目之和是26,积是880。编程求前20名学生每人得到的糖果数目。分析:由前向后得到的糖果数目成递增数列还是递减数列?前四个学生得到的糖果数目之和是26,平均每个人6个,即前四项最小者不超过6;如果是递减数列,a4=6,后面还有16名学生要分糖,则后面还有很多人没分到,不符合情境核心算法:解题的关键是要知道等差数列的首项和公差。可以使用for语句进行穷举,用if条件语句判断。确定穷举范围设该等差数列原创 2020-07-24 21:38:25 · 632 阅读 · 0 评论 -
042 一数三平方
例:有这样一个六位数,它本身是一个整数的平方,其高三位和低三位也分别是一个整数的平方,如225625=475²,求满足上述条件的所有六位数。核心算法:判断一个数是否是整数的平方函数 double sqrt(double num)返回参数num的平方根(double型)要判断强制取整是否会导致数据流失(小数点后不为0的小数会失去小数部分)如果(int) sqrt(n)*(int) sqrt(n) == n,说明n是整数的平方或如果(int) sqrt(n) == sqrt(n),说明根号下n是整数原创 2020-06-04 21:31:20 · 688 阅读 · 0 评论 -
041 特殊的完全平方数
例:在3位整数100~999中查找符合如下条件的整数并在屏幕上输出:这个数既是万群平方数,又有两位数字相同,如121(11的平方)、144(12的平方)等。#include<stdio.h>int main(){ int i,j; int hum,ten,data;/*定义变量存储分解出的百位、十位、个位*/ printf("结果是:\n"); for(i=100;i<=999;i++) { j=10; while(j*j<=i) { if(i==原创 2020-05-27 16:02:29 · 792 阅读 · 0 评论 -
040 IP地址形式输出
例:任意输入32位的二进制数,编程实现将该二进制数转换成IP地址形式。分析:将二进制转换成IP地址形式:将二进制数以每8位数为一个单位分开,再通过自定义的函数将这8位二进制数转换成对应的十进制数,以“.”间隔输出#include<stdio.h>int bin_dec(int n)/*自定义函数将二进制数转换成十进制数*/{ if(n==0)/*递归到最低位结束,由最高位与最低位之间的距离决定次方数*/ return 1; return 2*bin_dec(n-1);/*原创 2020-05-26 15:43:34 · 387 阅读 · 0 评论 -
039 老师分糖果
例:幼儿园老师将糖果分成若干等份,让学生按任意次序领取,第1个领取的,得到1份加上剩余糖果的1/10;第2个领取的,得到2份加上剩余糖果的1/10;第3个领取的,得到3份加上剩余糖果的1/10;……依此类推。问共有多少个学生?老师共将糖果分成了多少等份?分析:设一开始等分成了n等份(无末值),结合生活实际可知,这样分要使最终每个学生得到的糖果份数为整份数且相等(公平),可以作为循环的终止条件;要使第一个学生得到的份数为整份数,则n由初值11学生人数=总份数/每个人得到的份数(可以用第1个人得到的份数原创 2020-05-25 14:29:51 · 807 阅读 · 0 评论 -
038 巧分苹果
例:一家农户以果园为生,一天,父亲推出一车苹果,共2520个,准备分给他的6个儿子。父亲按事先写在一张纸上的数字把这堆苹果分完,每个人分到的苹果个数都不相同。他说:“老大,把你分到的苹果的1/8给老二,老二拿到后,连同原来的苹果分1/7给老三,老三拿到后,连同原来的苹果的1/6给老四,依次类推,最后老六拿到后,连同原来的苹果分1/3给老大,这样,你们每个人分到的苹果就一样多了。”问兄弟6人原先各分到多少只苹果?分析:在原先分到苹果之后,老二,老三,老四,老五,老六都是先进苹果后出苹果,最后老大得到老六原创 2020-05-20 21:44:53 · 535 阅读 · 0 评论 -
037 小球下落问题
例:一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下。求它在第十次落地时,共经过多少米?第十次反弹多高?分析:待求量:后一次落地后反弹的高度=前一次落地后反弹的高度/2到某次落地时经过的总长度=100+(前面每次落地后反弹的高度*2)累加已知量:第一次落地后反弹的高度为100/2=50米第一次落地时经过的总长度为100米将第一次落下时的100米单独考虑,每次都有弹起和下落两个过程,其经过的路程相等,依此类推,到第十次落地前共经历了9次这样的过程#include<s原创 2020-05-18 15:26:22 · 406 阅读 · 0 评论 -
036 n进制转换为十进制
例:编程实现任意输入一个数,并输入几进制,则将其转换为十进制数并输出。分析:因为输入的可以是任意进制,可以有0~9的数字,也可以有字母A、B、C、D、E、F,所以统一把它们都当成字符存入char型数组,再对数组中的每一个元素进行处理特别地,可以使用<string.h>中的函数gets(char a[])向标准输入设备键盘上,读取一个字符串(可以包含空格),并将其存储到字符数组中,比使用scanf()向数组输入更简便核心算法:我们平时将二进制数1011转换为十进制数11的计算过程可原创 2020-05-17 23:50:52 · 530 阅读 · 0 评论 -
035 十进制转换为二进制
例:输入一个十进制正整数,将其转换为二进制输出。核心算法:十进制转换为二进制,可参考二、八、十、十六进制转换分析:将一串未知数字按照某种指定顺序输出时,可以考虑先将每个数字分别存入数组中,通过数组下标来确定位置再输出注意:int型占16个二进制位二进制数的最高位是符号位,不参与转换计算#include<stdio.h>#include<stdlib.h>int main(){ int i,j,n,m; int a[16]= { 0/*将数组原创 2020-05-16 14:15:32 · 656 阅读 · 0 评论 -
033 求100~200之间的素数
例1:求100~200之间的全部素数核心算法:第一个for语句对100~200之间的所有数字(无需考虑1,2,3的特殊情况)进行遍历,第二个for语句对遍历到的数字进行判断,看能否被2 ~ i之间的整数整除注:①包含在头文件math.h中的sqrt()函数:double sqrt(double x),返回x的开方值②只要在2~i能找到一个可以整除i的数就判断i不是素数;但只有直到最后一个数都不能整除i才能判断i是素数(还要判断内循环已全部遍历)#include<stdio.h>原创 2020-05-15 16:07:34 · 692 阅读 · 0 评论 -
030 尼科彻斯定理
例:尼科彻斯定理的内容是:任何一个整数的立方都可以写成一串连续奇数的和。编程验证该定理。#include<stdio.h>int main(){ int n,sum,result,index,i,j,flag=1; printf("请输入一个数:\n"); scanf("%d",&n); sum=n*n*n;/*计算立方值*/ index=sum/2;/*sum/2为奇数时,确定这串连续奇数最大值的范围*/ if(index%2==0)/*sum/2为偶数时,确定这串连原创 2020-05-13 23:51:03 · 421 阅读 · 0 评论 -
029 哥德巴赫猜想
例:验证100以内的正偶数都能分解为两个素数之和,即验证哥德巴赫猜想对(2<正偶数<100)的正偶数成立。核心算法:①使用两个for循环嵌套,对4~98之间的正偶数进行拆分②对拆分出来的两个数分别判断是否为素数,若均为素数,则输出;否则重新拆分并判断自定义函数ss(),判断一个数是否为素数int ss(int i){int j;if(i<2)return 0;if(i == 2)return 1;for(j=2;j<i;j++){if(i%j==0)原创 2020-05-11 15:13:53 · 466 阅读 · 0 评论 -
028 斐波那契数列
例:斐波那契数列(Fibonacci)的特点是第1个和第2个数都为1,从第3个数开始,该数是前两个数之。输出斐波那契数列的前30项。将数列元素下标看称数组下标,将数列元素保存到数组中#include<stdio.h>int main(){ int i; long f[31];/*将数列的前30项分别存放到数组f[1]、f[2]、f[3]……f[30],f[0]不用*/ f[1]=1,f[2]=1;/*对数组中的第1项和第2项赋初值*/ for(i=3;i<31;i++)原创 2020-05-11 13:53:52 · 558 阅读 · 0 评论 -
021 冒泡排序
例:从键盘输入10个数,用冒泡法将它们由小到大排序并输出。#include<stdio.h>int main(){ int i,j,t,a[11]; printf("请输入10个数:\n"); for(i=1;i<=10;i++) scanf("%d",&a[i]); for(i=1;i<10;i++) for(j=1;j<11-i;j+...原创 2020-03-04 13:57:47 · 249 阅读 · 0 评论 -
020 希尔排序
例:从键盘中输入10个数据,用希尔排序法将它们由小到大进行排序。#include<stdio.h>void shsort(int s[],int n){ int i,j,d;d=n/2;while(d>=1){for(i=d+1;i<=n;i++){s[0]=s[i];j=i-d;while((j>0)&&(s[0]<s[...原创 2020-03-03 16:19:59 · 137 阅读 · 0 评论 -
019 直接插入排序
插入排序是把一个记录插入到已排序的有序序列中,使整个序列在插入该记录后仍然有序。插入排序中较简单的一种方法使直接插入排序,其插入位置的确定方法是将待插入的记录与有序区中的各记录自右向左依次比较其关键字值的大小。核心算法:直接插入排序设定待插入元素左边的元素都是按从小到大有序排列 ①从s[2]开始往右依次选择待插入的元素s[i]存入s[0]中,则s[i]空闲。②将待插入的元素s[i]与它...原创 2020-03-02 19:30:07 · 230 阅读 · 0 评论 -
018 判断三角形的类型
例:根据输入的三角形的三边判断三角形的类型,并输出它的面积和类型。注意:①这个问题存在越界的可能,输出三角形面积和类型的前提是能构成三角形,首先应判断输入的三条边能否构成三角形即判断任意两边之和是否大于第三边②知道三角形的三边求三角形的面积用海伦公式即s=(a+b+c)/2;area=(float)sqrt(s*(s-a)* (s-b)*(s-c)) 注意强制类型转换这里调用库函数d...原创 2020-03-01 17:47:04 · 190 阅读 · 0 评论 -
017 打渔晒网问题
例:如果一个渔夫从2011年1月1日开始每三天打一次渔,两天晒一次网,编程实现当输入2011年1月1日以后的任意一天,输出该渔夫是在打渔还是在晒网。#include<stdio.h>int main(){int leap(int a){if(a%4==0&&}if(return 0;}...原创 2020-03-01 15:42:01 · 543 阅读 · 0 评论 -
016 百元买百鸡
例:中国古代数学家张丘建在他的《算经》中提出了一个著名的“百钱买百鸡问题”,鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?注意:挖掘隐含条件“鸡雏三,值钱一”,就代表鸡雏是3只、3只地卖,所以有隐含条件,所买的小鸡数必须是3的倍数。核心算法:穷举法,利用for语句对3种鸡的数量在事先确定好的范围内进行穷举并判断。注意对穷举范围的优化:如果100元全...原创 2020-03-01 14:26:29 · 154 阅读 · 0 评论 -
015 婚礼上的谎言
例:3对情侣参加婚礼,3个新郎为A、B、C,3个新娘为X、Y、Z,有人想知道究竟谁与谁结婚,于是就问新人中的三位,得到如下结果:A说他将和X结婚;X说她的未婚夫是C;C说他将和Z结婚。这人事后知道他们在开玩笑,说的全是假话。那么,究竟谁与谁结婚呢?#include<stdio.h>int main(){ int a,b,c; for(a=1;a<=3;a++) fo...原创 2020-02-28 14:33:05 · 357 阅读 · 0 评论 -
014 计算某日是该年的第几天
例:编写一个计算天数的程序,用户从键盘中输入年、月、日,在屏幕中输出此日期是该年的第几天。#include<stdio.h>int leap(int a){ if(a%4==0&&a%100!=0||a%400==0) return 1; else return 0;}int number(int year,int m,int d){ int ...原创 2020-02-26 18:41:46 · 237 阅读 · 0 评论 -
013 任意次方后的最后三位
核心算法:将问题进行拆分求一个数的任意次方:x^y在C语言规定的运算符中,^为按位异或运算符,而没有特定表示幂指的运算符,所以我们要求x ^y,只能通过以下方式:①利用循环结构,将幂指运算转化为乘法运算for(i=1;i<=y;i++) z=z*x; 【unsigned int x,unsigned int y】②调用数学函数,头文件为<math.h>...原创 2020-02-26 17:37:56 · 388 阅读 · 0 评论 -
012 阳阳买苹果
例:阳阳买苹果,每个苹果0.8元,阳阳第一天买两个苹果,第二天开始每天买前一天的两倍,直到购买的苹果个数为不超过100的最大值,编程求阳阳每天平均花多少钱?#include<stdio.h>int main(){int n=2,day=0;float money=0,ave;while(n<100){money+=0.8*n;day++;n*=2;}ave...原创 2020-02-26 00:58:10 · 491 阅读 · 2 评论 -
011 猴子吃桃
例:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将第一天剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,发现只剩一个桃子了。编写程序求猴子第一天共摘了多少个桃子。#include<stdio.h>int main(){ int day,x1,x2; day=9; x2=1; while(d...原创 2020-02-26 00:47:22 · 131 阅读 · 0 评论 -
010 3个数由小到大排序
核心算法:借助于中间变量,使3个变量中存放的数据两两比较,两两交换,先确定一个最值,再比较另外两个的大小,使最终a中存放的数值最小,c中存放的数值最大,则按a,b,c的顺序输出就是按3个数升序排列。注意:因为C程序整体上是顺序结构,而3个数总共有三次两两比较,往往是先确定三者中的一个最值,再比较另外两个的大小比较简单。所以前两次必须实现将最小的数据存放到a中或者将最大的数据存放到c中...原创 2020-02-26 00:26:59 · 343 阅读 · 0 评论 -
009 求阶乘
核心算法:求阶乘:n!=n×(n-1)×(n-2)×...×2×1 (n≥2)→ while循环体:fac=fac*in!=1(n=0或n=1) → if条件判断语句例:编写代码实现求10!。#include <stdio.h>int main(){ int i=2,n=10; float fac=1; if(n==0||n==1) { printf("fa...原创 2020-02-25 22:43:27 · 214 阅读 · 0 评论 -
007 034 打印一个三角形
使用输出语句输出一个三角形。#include<stdio.h>int main(){printf(" *\n");printf(" * *\n");printf("* * * * *\n");return 0;}原创 2020-02-25 21:13:22 · 510 阅读 · 0 评论 -
006 打印一个正方形
使用输出语句输出一个正方形。#include<stdio.h>int main(){printf("*****\n");printf("* *\n");printf("* *\n");printf("* *\n");printf("*****\n");return 0;}原创 2020-02-25 21:04:34 · 336 阅读 · 0 评论 -
005 计算正方形的周长
已知正方形的边长为4,根据已知条件计算出正方形的周长并输出。#include<stdio.h>int main() {int a,b;a=4;b=a*4;printf("%d\n",b);return 0;}原创 2020-02-25 20:55:39 · 334 阅读 · 0 评论