一个找“完数”个数的C语言程序

合集下载

C语言程序设计例子

C语言程序设计例子

C语言程序设计例子题目:输入3个数abc,按大小顺序输出。

1.程序分析:利用指针方法。

2.程序源代码:/♦pointer*/#include "stdio-h11#include "conio.h”main(){iiit nl,ii2,n3;mt *pomter 1、*poiiiter2, *pomter3;pnntf(M please mput 3 numbei:nhn2,n3:H);scanfC%d%d、%cT,&iih&i2&n3);pomterl =&nl;pomter2=&n2;pomter3=&n3;if(nl>n2) swap(pomterLpointer2);if(nl>n3) swap(pomterLpointer3);if(n2>n3) swap(pomter2,pointer3);pnntf(M the sorted numbers are:%d,%d,%d\ir\nl,ii2,n3);getch();}swap(pl.p2)iiit *pl,*p2;{imp;p=*pl;*pl=*p2;*p2=p;}题目:编写input()和output()函数输入,输出5个学生的数据记录。

1.程序分析:2.程序源代码:#include "stdio-h11#include "conio.h”^define N 5stmct student{char num[6];char name[8];}stu[N];mput(stu)stmct student stu[];{intij;for(i=O;i<N;i-H-){pnntf(M\n please input %d of %d\n”,i+l,N);pnntf(M num: ”);scanf(H%s H,stu[i].num);pnntf(M name:");scanf(H%s H,stu [i].name);for(j=O;j<3j++){printf(M score %d・”j+l);scanf(,,%d,\&stu[i].score[j]);}prmtf(”\n”);}}print(stu)stmct student stu[];{intij;pnntf(M\nNo. Name Scol Sco2 Sco3\iT);fbr(i=O;i<N;i-H-){printf(M%-6s%-10s,\stu[i].num,stu[i].naine);for(j=O;j<3j++)pnntf(,,%-8d,\sni[i].scoielj]);pmitfCE);}}main(){mputQ;pnnt();getch();}题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。

C语言程序设计100个经典例子

C语言程序设计100个经典例子

经典C语言程序设计100例之蔡仲巾千创作1.数字排列2.奖金分配问题3.已知条件求解整数4.输入日期判断第几天5.输入整数进行排序6.用*号显示字母C的图案7.显示特殊图案8.打印九九口诀9.输出国际象棋棋盘10.打印楼梯并按条件打印笑脸11.经典兔子问题12.判断素数13.水仙花数问题14.正整数分解质因数 15.学习成绩划分16.正整数求其最大公约数和最小公倍数17.统计英文字母/空格/数字个数 18.求s=a+aa+aaa+aa...a的值19.求解"完数" 20.球体自由落下物理问题21.猴子吃桃问题22.乒乓球角逐抽签问题23.打印菱形图案 24.分数数列求和25.求1+2!+3!+...+20!的和26.利用递归方法求5! 27.将输入字符以相反顺序打印28.岁数问题29.求解正整数位数30.判断回文数31.星期几猜测游戏32.改变文本颜色33.学习gotoxy()与clrscr()函数34.练习函数调用35.设置文本颜色36.求100之内的素数37.对10个数进行排序38.求3*3矩阵对角线元素之和39.数字拔出数组重新排序40.将一个数组逆序输出41.static定义静态变量用法42.使用auto定义变量用法43.使用static的另一用法44.使用external的用法45.使用register定义变量方法46.宏#define命令练习(1) 47.宏#define命令练习(2) 48.宏#define命令练习(3)49.#if #ifdef和#ifndef的综合应用50.#include 的应用练习51.学习使用按位与 & 52.学习使用按位或 |53.学习使用按位异或 ^ 54.取一个整数从右端开始的4~7位。

55.学习使用按位取反~ 56.用circle画圆形57.学用line画直线58.用rectangle画方形59.画图综合例子 60.画图综合例子261.打印杨辉三角形62.学习putpixel画点63.画椭圆ellipse 64.利用ellipse and rectangle画图65.画个最优美的图案 66.输入3个数字按大小顺序输出 67.输入数组交换元素重新输出68.多个整数后移位置问题69.圆圈报数问题70.计算一个字符串长度71.编写输入/输出函数72.创建链表73.反向输出链表74.连接两个链表75.算一道简单题目76.调用函数求1/2+1/4+...+1/n77.填空练习(指向指针的指针) 78.找到年龄最大的人 79.字符串排序80.海滩猴子分桃81.已知公式条件求数字82.八进制转换为十进制83.求0-7所能组成的奇数个数84.由两个素数之和暗示的偶数85.判断一个素数能被几个9整除 86.两个字符串连接程序87.结构体变量传递 88.读取数字的整数值并打印出该值个数的*89.数据加密90.专升本一题91.时间函数举例1 92.时间函数举例293.时间函数举例3 94.一个猜数游戏95.家庭财务管理小程序 96.计算字符串中子串出现的次数97.输入字符并保管到磁盘98.字符串转换成大写字母并输出保管99.文件操纵应用1 100.文件操纵应用2--------------------------------------------------------------------------------c语言经典100题【实用】【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。

C语言求完数(完全数)

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语言 编程及答案

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、输入一个字符,判断它是否是小写字母,如果是,将它转换成大写字母;如果不是,不转换。

C语言程序大全

C语言程序大全

四、编写程序题及参考答案【4.41】从键盘输入十个整数,用插入法对输入的数据按照从小到大的顺序进行排序,将排序后的结果输出。

【4.42】输入一个正整数,要求以相反的顺序输出该数。

例如输入12345,输出位54321。

【4.43】编写程序,读入一个整数N;若N为非负数,则计算N到2×N之间的整数和;若N为一个负数,则求2×N到N之间的整数和。

分别利用for和while写出两个程序。

【4.44】求解爱因斯坦数学题。

有一条长阶梯,若每步跨2阶,则最后剩余1阶,若每步跨3阶,则最后剩2阶,若每步跨5阶,则最后剩4阶,若每步跨6阶则最后剩5阶,若每步跨7阶,最后才正好一阶不剩。

请问,这条阶梯共有多少阶?【4.45】一个自然数被8除余1,所得的商被8除也余1,再将第二次的商被8除后余7,最后得到一个商为a。

又知这个自然数被17除余4,•所得的商被17除余15,最后得到一个商是a的2倍。

编写程序求这个自然数。

【4.46】编写程序,用二分法求一元二次方程2x3-4x2+3x-6=0在(10,10)区间的根。

【4.47】中国古代科学家祖冲之采用正多边形逼近的割圆法求出了π的值。

请编写一程序,采用割圆法求出π的值,要求精确到小数点之后的第十位。

【4.48】A、B、C、D、E五人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉。

日上三竿,A第一个醒来,他将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份。

B第二个醒来,也将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份。

C、D、E依次醒来,也按同样的方法拿鱼。

编写程序求出他们合伙至少捕了多少条鱼。

【4.49】一辆卡车违犯交通规则,撞人逃跑。

现场三人目击事件,但都没记住车号,只记下车号的一些特征。

甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的;丙是位数学家,他说:四位的车号刚好是一个整数的平方。

请根据以上线索求出车号。

十大C语言经典程序

十大C语言经典程序
(char *s) {int i,j,k; char t; k=strlen(s); for(i=0,j=k-1;i<k/2;i++,j--) { t=*(s+i); *(s+i)=*(s+j); *(s+j)=t; } } main() { FILE *fp; char str[200],*p,i,j; if((fp=fopen("p9_2.out","w"))==NULL) { printf("cannot open the file\n"); exit(0); } printf("input str:\n"); gets(str); printf(“\n%s”,str); fprintf(fp,“%s”,str); invert(str); printf(“\n%s”,str);
fprintf(fp,“\n%s”,str); fclose(fp); } 9、/*下面程序的功能是从字符数组 s 中删除存放在 c 中的字符。*/ #include <stdio.h> main() { char s[80],c; int j,k; printf("\nEnter a string: "); gets(s); printf("\nEnter a character: "); c=getchar( ); for(j=k=0;s[j]!= '\0';j++) if(s[j]!=c) s[k++]=s[j]; s[k]= '\0'; printf("\n%s",s); } 10、/*编写一个 void sort(int *x,int n)实现将 x 数组中的 n 个数据从大到小 排序。n 及数组元素在主函数中输入。将结果显示在屏幕上并输出到文件 p9_1.out 中*/ #include<stdio.h> void sort(int *x,int n) { int i,j,k,t; for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n;j++) if(x[j]>x[k]) k=j; if(k!=i) { t=x[i]; x[i]=x[k]; x[k]=t; } } } void main() {FILE *fp; int *p,i,a[10]; fp=fopen("p9_1.out","w"); p=a; printf("Input 10 numbers:"); for(i=0;i<10;i++)

C语言程序设计100个简单地经典例子

C语言程序设计100个简单地经典例子

经典C语言程序设计100例1.数字排列2.奖金分配问题3.已知条件求解整数4.输入日期判断第几天5.输入整数进行排序6.用*号显示字母C的图案7.显示特殊图案8.打印九九口诀9.输出国际象棋棋盘10.打印楼梯并按条件打印笑脸11.经典兔子问题12.判断素数13.水仙花数问题14.正整数分解质因数15.学习成绩划分16.正整数求其最大公约数和最小公倍数17.统计英文字母/空格/数字个数18.求s=a+aa+aaa+aa...a的值19.求解"完数"20.球体自由落下物理问题21.猴子吃桃问题22.乒乓球比赛抽签问题23.打印菱形图案24.分数数列求和25.求1+2!+3!+...+20!的和26.利用递归方法求5!27.将输入字符以相反顺序打印28.岁数问题29.求解正整数位数30.判断回文数31.星期几猜测游戏32.改变文本颜色33.学习gotoxy()与clrscr()函数34.练习函数调用35.设置文本颜色36.求100之内的素数37.对10个数进行排序38.求3*3矩阵对角线元素之和39.数字插入数组重新排序40.将一个数组逆序输出41.static定义静态变量用法42.使用auto定义变量用法43.使用static的另一用法44.使用external的用法45.使用register定义变量方法46.宏#define命令练习(1)47.宏#define命令练习(2)48.宏#define命令练习(3)49.#if #ifdef和#ifndef的综合应用50.#include 的应用练习51.学习使用按位与 &52.学习使用按位或 |53.学习使用按位异或 ^54.取一个整数从右端开始的4~7位。

55.学习使用按位取反~56.用circle画圆形57.学用line画直线58.用rectangle画方形59.画图综合例子160.画图综合例子261.打印杨辉三角形62.学习putpixel画点63.画椭圆ellipse64.利用ellipse and rectangle画图65.画个最优美的图案66.输入3个数字按大小顺序输出67.输入数组交换元素重新输出68.多个整数后移位置问题69.圆圈报数问题70.计算一个字符串长度71.编写输入/输出函数72.创建链表73.反向输出链表74.连接两个链表75.算一道简单题目76.调用函数求1/2+1/4+...+1/n77.填空练习(指向指针的指针)78.找到年龄最大的人79.字符串排序80.海滩猴子分桃81.已知公式条件求数字82.八进制转换为十进制83.求0-7所能组成的奇数个数84.由两个素数之和表示的偶数85.判断一个素数能被几个9整除86.两个字符串连接程序87.结构体变量传递88.读取数字的整数值并打印出该值个数的*89.数据加密90.专升本一题91.时间函数举例192.时间函数举例293.时间函数举例394.一个猜数游戏95.家庭财务管理小程序96.计算字符串中子串出现的次数97.输入字符并保存到磁盘98.字符串转换成大写字母并输出保存99.文件操作应用1100.文件操作应用2--------------------------------------------------------------------------------c语言经典100题【实用】【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。

第5章-C语言程序设计(第2版)教材习题答案

第5章-C语言程序设计(第2版)教材习题答案

【教材】《C语言程序设计(第2版)》清华大学出版社,黄保和,江弋编著。

2011年10月第二版。

ISBN:978-7-302-26972-4。

售价:35元。

【答案版本】本习题答案为2012年2月修订版本。

一、选择题1. 设有程序段”int k=10; while(k=0) k=k-1;”,则下面叙述正确的是D)循环体语句一次也不执行。

A. while循环执行10次B. 循环是无限循环C. 循环体语句执行一次D. 循环体语句一次也不执行2. 设有程序段”int x=0,s=0;while(!x!=0) s+=++x; printf(“%d”,s);”则A)运行程序段后输出1。

A. 运行程序段后输出1B. 程序段执行无限次C. 运行程序段后输出0D. 程序段中的控制表达式是非法的3. 下面循环语句中,错误的是D) int a=1,b=2;do b-- while(b= =0);。

A. int a=1,b=2; while(b--);B. int a=1,b=2; do a++; while(a==b);C. int a=1,b=2; while(a=3);D. int a=1,b=2; do b-- while(b==0);4. 已知”int i=5;”,下列do…while循环语句的循环次数为C) 5。

do{ printf(“%d\n”,i--); } while(i!=0);A. 0B. 1C. 5D. 无限5. 循环语句”for(int i=0,j=10; i==j; i++,j--)”的循环次数是A) 0。

A. 0B. 5C. 10D. 无限6. 下述有关break语句的描述中,不正确的是C) break语句用于if语句的内嵌语句内,它结束该if语句。

A. break语句用于循环体内,它将结束该循环B. break语句用于开关语句,它结束该开关语句C. break语句用于if语句的内嵌语句内,它结束该if语句D. break语句在一个循环体内可使用多次7. 下面关于循环语句的描述中,错误的是B)循环体内必须同时出现break语句和continue 语句。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一个找“完数”个数的C语言程序
题目:一个数如果恰好等于它的所有因子之和,这个数就称为"完数"。

例如1+2+4+7+14=28.编程找出1000以内的所有完数。

#include "Stdio.h"
#include "Conio.h"
int main(void)
{
/* 此处添加你自己的代码*/
int i,n,sum ;
printf("\nFind a num like 28 == 1 + 2 + 4 + 7 + 14 in 0~1000 ");
printf("\nThe all num is :");
for( n = 1; n < 1000; n++)
{
sum = 0;
for(i = 1;i < n; i++)
if(n%i == 0)
sum += i;
if(sum == n)
printf("%4d",n);
}
getch();
return 0;
}
--------- 完数(Prefect number的形式------------------------------
欧几里德证明了:一个偶数是完数,当且仅当它具有如下形式:2^(p-1)*(2^p-1)
其中2^p-1是素数
完全数(Perfect number)是一些特殊的自然数:它所有的真因子(即除了本身以外的约数
)的和,恰好等于它本身。

例如:第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3
=6。

第二个完全数是28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4 + 7 + 14=28。

后面的数是496,8128。

古希腊数学家欧几里德是通过2^(n-1)*(2^n-1) 的表达式发现头四个完全数的。

当n = 2^1*(2^2-1) = 6
当n = 2^2*(2^3-1) = 28
当n = 2^4*(2^5-1) = 496
当n = 2^6*(2^7-1) = 8128
欧几里德证明了:一个偶数是完数,当且仅当它具有如下形式:2^(n-1)*(2^n -1)。

尽管没有发现奇完数,但是当代数学家奥斯丁·欧尔(Oystein Ore)证明,若有奇完全
数,则其形状必然是12p + 1或36p + 9的形式,其中p是素数。

在1018以下的自然数中奇完
数是不存在的。

3
例子
6,28、496,8128,33550336,8589869056(10位),137438691328(12位),
2305843008139952128(19位)……
偶完数都是以6或8结尾。

如果以8结尾,那么就肯定是以28结尾。

除6以外的偶完数,把它的各位数字相加,直到变成一位数,那么这个一位数一定是1(亦即
:除6以外的完数,被9除都余1。

):
28:2+8=10,1+0=1
496:4+9+6=19,1+9=10,1+0=1
所有的偶完数都可以表达为2的一些连续正整数次幂之和,从2p - 1到22p - 2: <注:以下a的n次方表示形式为a(n)>
6=2(1 ) + 2(2 )
28=2(2 ) + 2(3) + 2(4)
8128=2(6) + 2(7) + ... + 2(12)
33550336=2(12) + 2(13 ) + ... + 2(24)
每一个偶完数都可以写成连续自然数之和:
6=1+2+3
28=1+2+3+4+5+6+7;
496=1+2+3+…+30+31
8128 = 1+2+3+...+126+127
除6以外的偶完数,还可以表示成连续奇数的立方和(被加的项共有):
28=1(3) + 3(3)
496=1(3) + 3(3) + 5(3) + 7(3)
8128=1(3 ) + 3(3) + 5(3) + ... + 15(3)
33550336=1(3) + 3(3) + 5(3) + ... + 125(3) + 127(3)
每一个完数的所有约数(包括本身)的倒数之和,都等于2:
1/1 + 1/2 + 1/3 + 1/6 =2
1/1 + 1/2 + 1/4 + 1/7 + 1/14 + 1/28 =2
它们的二进制表达式也很有趣:
(6)10 = (110)2
(28)10 = (11100)2
(8128)10 = (1111111000000)2。

相关文档
最新文档