C语言求1到1000所有的完数
C语言经典算法题目及答案

C语言经典算法题目及答案题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。
组成所有的排列后再去掉不满足条件的排列。
2.程序源代码:main(){int i,j,k;printf("\n");for(i=1;i<5;i++) /*以下为三重循环*/for(j=1;j<5;j++)for (k=1;k<5;k++){if (i!=k&&i!=j&&j!=k)printf("%d,%d,%d\n",i,j,k);}}====================================== ========================【程序2】题目:企业发放的奖金根据利润提成。
利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?1.程序分析:请利用数轴来分界,定位。
注意定义时需把奖金定义成长整型。
2.程序源代码:main(){long int i;int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;scanf("%ld",&i);bonus1=100000*0.1;bonus2=bonus1+100000*0.75;bonus4=bonus2+200000*0.5;bonus6=bonus4+200000*0.3;bonus10=bonus6+400000*0.15;if(i<=100000)bonus=i*0.1;else if(i<=200000)bonus=bonus1+(i-100000)*0.075;else if(i<=400000)bonus=bonus2+(i-200000)*0.05;else if(i<=600000)bonus=bonus4+(i-400000)*0.03;else if(i<=1000000)bonus=bonus6+(i-600000)*0.015;elsebonus=bonus10+(i-1000000)*0.01;printf("bonus=%d",bonus);}====================================== ========================【程序3】题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。
C语言数组编程题及解答

C语言数组编程题及解答【程序1】用筛选法求100之内的素数筛选法又称筛法,是求不超过自然数N(N>1)的所有质数的一种方法。
据说是古希腊的埃拉托斯特尼(Eratosthenes,约公元前274~194年)发明的,又称埃拉托斯特尼筛子。
具体做法是:先把N个自然数按次序排列起来。
1不是质数,也不是合数,要划去。
第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。
2后面第一个没划去的数是3,把3留下,再把3后面所有能被3整除的数都划去。
3后面第一个没划去的数是5,把5留下,再把5后面所有能被5整除的数都划去。
这样一直做下去,就会把不超过N的全部合数都筛掉,留下的就是不超过N的全部质数。
因为希腊人是把数写在涂腊的板上,每要划去一个数,就在上面记以小点,寻求质数的工作完毕后,这许多小点就像一个筛子,所以就把埃拉托斯特尼的方法叫做“埃拉托斯特尼筛”,简称“筛法”。
#include <stdio.h>#include <math.h>void main(){int i,j;int a[100];for(i=0;i<100;i++)a[i]=i+1;for(i=1;i<100;i++){if(a[i]==0)continue;for(j=i+1;j<100;j++)if(a[j]%a[i]==0)a[j]=0;}for(j=1;j<100;j++) //j从1开始,去除a[0](其值为1),因为1既不是质数,也不是合数if(a[j]!=0)printf("%d,",a[j]);printf("\n");}【程序2】题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。
例如6=1+2+3.编程找出1000以内的所有完数。
程序源代码:#include <stdio.h>int main(){int k[10];int i,j,n,s;for(j=2;j<1000;j++){n=-1;s=j;for(i=1;i<j;i++){if ((j%i)==0){n++;s=s-i;k[n]=i;}}if(s==0) //说明是完数{printf("%d is a wanshu:",j);for(i=0;i<=n;i++)printf("%d ",k[i]);printf("\n");}}return 1;}【程序3】题目:用选择法对10个数进行从大到小排序1.程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,下次类推,即用第二个元素与后8个进行比较,并进行交换。
C语言求完数(完全数)

C语言求完数(完全数)问题描述求某一范围内完数的个数。
如果一个数等于它的因子之和,则称该数为“完数”(或“完全数”)。
例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数”。
问题分析根据完数的定义,解决本题的关键是计算出所选取的整数i(i的取值范围不固定)的因子(因子就是所有可以整除这个数的数),将各因子累加到变量s (记录所有因子之和),若s等于i,则可确认i为完数,反之则不是完数。
算法设计对于这类求某一范围(由于本题范围不固定,在编程过程中采用键盘输入的方式)内满足条件的数时,一般釆用遍历的方式,对给定范围内的数值一个一个地去判断是否满足条件,这一过程可利用循环来实现。
本题的关键是求出选取数值i的因子,即从1到i-1范围内能整除i的数,看某一个数j是否为i的因子,可利用语句if(i%j==0)进行判断,求某一个数的所有因子,需要在1到i-1范围内进行遍历,同样釆用循环实现。
因此,本题从整体上看可利用两层循环来实现。
外层循环控制该数的范围2〜n;内层循环j控制除数的范围为1〜i,通过i对j取余,是否等于0,找到该数的各个因子。
另外应注意每次判断下一个选定数之前,必须将变量s的值重新置为0,编程过程中一定要注意变量s重新置0的位置。
程序流程图:下面是完整的代码:1.#include<stdio.h>2.int main()3.{4.int i, j, s, n;/*变量i控制选定数范围,j控制除数范围,s记录累加因子之和*/5.printf("请输入所选范围上限:");6.scanf("%d",&n);/* n的值由键盘输入*/7.for( i=2; i<=n; i++)8.{9. s=0;/*保证每次循环时s的初值为0*/10.for( j=1; j<i; j++)11.{12.if(i%j ==0)/*判断j是否为i的因子*/13. s += j;14.}15.if(s == i)/*判断因子这和是否和原数相等*/16.printf("It's a perfect number:%d\n", i);17.}18.return0;19.}运行结果:请输入所选范围上限:10000↙︎It's a perfect number:6It's a perfect number:28It's a perfect number:496It's a perfect number:8128知识点补充上述程序中求某数的因子时,釆用从1到i-1范围内进行遍历的方法,一个数一个数地去试。
c语言 编程及答案

1、输入一个字符,判断它是否是大写字母,如果是,将它转换成小写字母;如果不是,不转换。
然后输出最后得到的字符。
#include<stdio.h>int main(){char c1;printf("input a latter:\n");scanf("%c",&c1);if(c1>='A'&&c1<='Z')c1=c1+32;printf("%c",c1);return 0;}2、输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
#include<stdio.h>int main(){char c;int letters=0,space=0,digit=0,other=0;printf("Please input letters:\n");while((c=getchar())!='\n'){if(c>='a'&&c<='z'||c>='A'&&c<='Z')letters++;else if(c>='0'&&c<='9')digit++;else if(c==' ')space++;elseother++;}printf("字母数:%d\n数字数:%d\n空格数:%d\n其他字母数:%d\n",letters,digit,space,other);return 0;}3、编写一个函数,求数列1+1/2+1/3+1/4+1/5+...1/n,利用主函数调用这个函数并输出结果。
#include<stdio.h>int main(){int n;float c;float sum(int n);scanf("%d",&n);c=sum(n);printf("%f\n",c);float sum(int n){int i;float sum=0.0;for(i=1;i<=n;i++)sum=sum+1.0/i;return sum;}4、输入一个字符,判断它是否是小写字母,如果是,将它转换成大写字母;如果不是,不转换。
2011年计算机二级C语言编写程序题及答案解析精选1

2011年计算机二级C语言编写程序题及答案解析精选【4.1】已知银行整存整取存款不同期限的月息利率分别为:0.315%期限一年0.330%期限二年月息利率=0.345%期限三年0.375%期限五年0.420%期限八年要求输入存钱的本金和期限,求到期时能从银行得到的利息与本金的合计。
【4.2】输入年份year和月month,求该月有多少天。
判断是否为闰年,可用如下C语言表达式:year%4==0&&year0!=0||year@0==0。
若表达式成立(即表达式值为1),则year 为闰年;否则,表达式不成立(即值为0),year为平年。
【4.3】编写一个简单计算器程序,输入格式为:data1op data2。
其中data1和data2是参加运算的两个数,op为运算符,它的取值只能是+、-、*、/。
【4.4】输入n值,输出如图所示矩形。
【4.5】输入n值,输出如图所示平行四边形。
【4.6】输入n值,输出如图所示高为n的等腰三角形。
【4.7】输入n值,输出如图所示高为n的等腰三角形。
【4.8】输入n值,输出如图所示高和上底均为n的等腰梯形。
【4.9】输入n值,输出如图所示高和上底均为n的等腰空心梯形。
【4.10】输入n值,输出如图所示边长为n的空心正六边型。
【4.11】输入n值,输出如图所示图形。
【4.12】输入n值,输出如图所示图形。
【4.13】输入n值,输出如图所示图形。
【4.14】输入n值,输出如图所示图形。
【4.15】输入n值,输出如图所示图形。
【4.16】输入n值,输出如图所示图形。
(例为n=6时)【4.17】编写程序,输出如图所示sin(x)函数0到2π的图形。
【4.18】编写程序,在屏幕上输出一个由*号围成的空心圆。
【4.19】编写程序,在屏幕上绘制如图余弦曲线和直线。
若屏幕的横向为x轴,纵向为y 轴,在屏幕上显示0~360度的cos(x)曲线与直线x=f(y)=45*(y-1)+31的迭加图形。
《C语言程序设计教程》习题参考答案

《C语言程序设计教程》习题参考答案默认分类2007-09-10 12:38:44 阅读6618 评论13 字号:大中小订阅【习题1】一、简答题(在课本中寻找答案,略)1.1 C程序的基本结构包括哪些内容?1.2 如何定义标识符?1.3 输入格式、输出格式的组成包括哪些内容?1.4 C语言函数分为哪两类?1.5 计算表达式的值应该考虑哪些方面?1.6 上机调试程序的步骤如何?二、判断并改错1.7 C程序执行的入口是main()函数,所以main函数必须放在程序的开头。
错误:main函数可以放在程序的任何位置。
并不限定在程序的开头。
1.8 定义一个函数包括数据说明部分和执行语句部分,两者可以交叉出现。
错误:不可以交叉出现,数据说明部分在执行语句部分的前面。
1.9 编辑与编译不是一回事。
错误:不是一回事。
编辑完成源程序的输入和修改;编译是对源程序进行语法检查,如果无语法错误,则生成目标程序。
1.10 scanf("%d,%d",&x,&y);的正确输入格式:3,4<回车>。
正确1.11 注释内容太多会影响程序的执行效率。
错误:不会影响程序的执行效率。
因为在编译时,编译系统将注释内容删除或用空格代替,所以注释内容不会编译到目标程序中。
1.12 所有的数学公式可以直接出现在源程序中。
错误:数学公式需要转换成C语言能够接受的公式才能出现在源程序中。
三、编程题1.13 在屏幕上输出自己名字的拼音。
提示:中文名字叫“张三”,对应的拼音为“Zhang San”,输出用printf()函数。
1.14 输入圆的半径,求圆的周长,并将结果保留两位小数输出到屏幕上。
提示:定义圆的半径r,圆的周长:2*3.14*r,输出结果保留2位小数可以用%.2f1.15 输入两个整数,输出其中最大者。
提示:模仿例1.31.16 输入三个整数,输出其中最小者。
提示: min(min(a,b),c);【习题2】一、简答题(在课本中寻找答案,略)2.1 常量与变量的区别?2.2 C语言中的标识符的定义规则?2.3 变量为什么要“先定义,后使用”?2.4 字符常量'a'与字符串常量"a"有何区别?2.5 大小写字母转换的规则是什么?2.6 变量的具有哪三种属性?二、单项选择题2.7C语言中,int型数据在内存中的存储形式是(D)。
C语言编程题

四、编写程序题及参考答案导读:虽然题目基本按照教材章节顺序排列的,但是把同类题目尽量排在一起,便于读者学习掌握编程方法和思路,提高自己的编程能力。
【】已知银行整存整取存款不同期限的月息利率分别为:% 期限一年% 期限二年月息利率= % 期限三年% 期限五年% 期限八年要求输入存钱的本金和期限,求到期时能从银行得到的利息与本金的合计。
【】输入年份year和月month,求该月有多少天。
判断是否为闰年,可用如下C语言表达式:year%4==0 && year%100!=0 || year%400==0。
若表达式成立(即表达式值为1),则year为闰年;否则,表达式不成立(即值为0),year为平年。
【】编写一个简单计算器程序,输入格式为:data1 op data2。
其中data1和data2是参加运算的两个数,op为运算符,它的取值只能是+、-、*、/。
【】输入n值,输出如图所示矩形。
【】输入n值,输出如图所示平行四边形。
【】输入n值,输出如图所示高为n的等腰三角形。
【】输入n值,输出如图所示高为n的等腰三角形。
【】输入n值,输出如图所示高和上底均为n的等腰梯形。
【】输入n值,输出如图所示高和上底均为n的等腰空心梯形。
【】输入n值,输出如图所示边长为n的空心正六边型。
【】输入n值,输出如图所示图形。
【】输入n值,输出如图所示图形。
【】输入n值,输出如图所示图形。
【】输入n值,输出如图所示图形。
【】输入n值,输出如图所示图形。
上一页下一页【】输入n值,输出如图所示图形。
(例为n=6时)【】编写程序,输出如图所示sin(x) 函数0到2π的图形。
【】编写程序,在屏幕上输出一个由*号围成的空心圆。
【】编写程序,在屏幕上绘制如图余弦曲线和直线。
若屏幕的横向为x轴,纵向为y轴,在屏幕上显示0~360度的cos(x)曲线与直线x=f(y)=45*(y-1)+31的迭加图形。
其中cos图形用"*"表示,f(y)用"+"表示,在两个图形的交点处则用f(y)图形的符号。
C语言程序开发经典实例

main(){int i,j,k;for(i=0;i<=3;i++){for(j=0;j<=2-i;j++)printf(" ");for(k=0;k<=2*i;k++)printf("*");printf("\n");}for(i=0;i<=2;i++){for(j=0;j<=i;j++)printf(" ");for(k=0;k<=4-2*i;k++)printf("*");printf("\n");}}==============================================================【程序24】题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
1.程序分析:请抓住分子与分母的变化规律。
2.程序源代码:main(){int n,t,number=20;float a=2,b=1,s=0;for(n=1;n<=number;n++){s=s+a/b;t=a;a=a+b;b=t;/*这部分是程序的关键,请读者猜猜t的作用*/}printf("sum is %9.6f\n",s);for(i=0;i<5;i++)printf("\40:%d!=%d\n",i,fact(i));}int fact(j)int j;{int sum;if(j==0)sum=1;elsesum=j*fact(j-1);return sum;}==============================================================【程序27】题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。