6-11 使用函数输出水仙花数 (20 分)

水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=1​3​​+5​3​​+3​3​​。 本题要求编写两个函数,一个判断给定整数是否水仙花数,另一个按从小到大的顺序打印出给定区间(m,n)内所有的水仙花数。

函数接口定义:

int narcissistic( int number );
void PrintN( int m, int n );

函数narcissistic判断number是否为水仙花数,是则返回1,否则返回0。

函数PrintN则打印开区间(m, n)内所有的水仙花数,每个数字占一行。题目保证100≤mn≤10000。

输入样例:

153 400

输出样例:

153 is a narcissistic number
370
3711)实验代码#include <stdio.h>

int narcissistic( int number );void PrintN( int m, int n );

int main(){    int m, n;

    scanf("%d %d", &m, &n);    if ( narcissistic(m) ) printf("%d is a narcissistic number\n", m);    PrintN(m, n);    if ( narcissistic(n) ) printf("%d is a narcissistic number\n", n);

    return 0;}

int narcissistic( int number )

 int x,count=0,i,sum=1,a,b=0; 
 x=number;
 while(x!=0)
 { 
  x=x/10;
  count++; //这里求n的位数
 } 
 x=number; //初始化x的值 进过while函数后x变化
 while(x!=0)
 { 
  a=x%10;  //求余
  for(i=1;i<=count;i++)
  {
   sum=sum*a;  //余数累乘
  }
  b=sum+b;   //累加
  x=x/10;   //位数减1
  sum=1; //初始化i sum 的值,发现循环里面套循环 end的值会变的很大 sum也是
 } 
 if(b==number)
 { 
  return 1;
 }else
 {
  return 0; 
 }
}
 
void PrintN( int m, int n )

 int i;  //从m+1位开始
 for(i=m+1;i<n;i++)
 {                               //前面之所以使用x=number 是因为后面需要重置number的值;这里不需要重置
  if(narcissistic( i )==1)    //满足条件为真
   printf("%d\n",i);
 }
}
 

void真正发挥的作用在于: (1) 对函数返回的限定; (2) 对函数参数的限定。

1、void的含义:

void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。void几乎只有“注释”和限制程序的作用,因为从来没有人会定义一个void变量,让我们试着来定义:

void a;

这行语句编译时会出错,提示“illegal use of type 'void'”。不过,即使void a的编译不会出错,它也没有任何实际意义。

2、void的使用规则:

规则一:如果函数没有返回值,那么应声明为void类型

在C语言中,凡不加返回值类型限定的函数,就会被编译器作为返回整型值处理。但是许多程序员却误以为其为void类型。例如:add ( int a, int b ){return a + b;}int main(int argc, char* argv[]){printf ( "2 + 3 = %d", add ( 2, 3) );}

程序运行的结果为输出:2 + 3 = 5,这说明不加返回值说明的函数的确为int函数。

规则二:如果函数无参数,那么应声明其参数为void。

在C++语言中声明一个这样的函数:

int function(void)

{

return 1;

}

则进行下面的调用是不合法的:

function(2);

因为在C++中,函数参数为void的意思是这个函数不接受任何参数。在Turbo C 2.0中编译:

#include "stdio.h"

fun()

{

return 1;

}

main()

{

printf("%d",fun(2));

getchar();

}

编译正确且输出1,这说明,在C语言中,可以给无参数的函数传送任意类型的参数,但是在C++编译器中编译同样的代码则会出错。在C++中,不能向无参数的函数传送任何参数,出错提示“'fun' : function does not take 1 parameters”。

所以,无论在C还是C++中,若函数不接受任何参数,一定要指明参数为void。

3、void具体使用例子:

定义函数返回值 函数名(参数1,参数2,参数3,.......){内容}int  sum(int a,int b){int c;return c;}

其中第一个int是返回值 就是别的函数调用此函数时这个函数给他的一个值。

如果调用时不需要返回值,则函数写为void sum(int a,int b){....}  此时函数没有返回值如果不需要参数  则int sum(void){...}此时void的意义为空,就是没有参数的意思如果都不要  则为void sum(void);

扩展资料:

void不能代表一个真实的变量。下面代码都企图让void代表一个真实的变量,因此都是错误的代码:

void a; //错误

function(void a); //错误

void体现了一种抽象,这个世界上的变量都是“有类型”。

void的出现只是为了一种抽象的需要,如果你正确地理解了面向对象中“抽象基类”的概念,也很容易理解void数据类型。正如不能给抽象基类定义一个实例,我们也不能定义一个void(让我们类比的称void为“抽象数据类型”)变量。

使用函数输出水仙花数 (void的用法)的更多相关文章

  1. Linux下用Bash语言实现输出水仙花数的功能

    题目链接: 题目描述 打印出所有"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该本身. 例如:153是一个水仙花数,因为153=1^3+5^ ...

  2. Python输出水仙花数,用逗号分隔

    描述 "水仙花数"是指一个三位整数,其各位数字的3次方和等于该数本身.‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪ ...

  3. python3输出“水仙花数”

    for num in range(100,1000): #如果num在[100,1000)范围,就依次循环取出num的值,第一次取100,下一次取101....最后一次取999 bai = num / ...

  4. C语言成绩测试 ,水仙花数,打印星图

    #include <stdio.h>//输入输出头文件 #include<string.h> #include<stdlib.h> //局部被调用函数1 成绩检测 ...

  5. Java 求解自幂数(水仙花数)

    什么是自幂数 如果在一个固定的进制中,一个 n 位自然数等于自身各个数位上数字的 n 次幂之和,则称此数为自幂数. 例如:在十进制中,153 是一个三位数,各个数位的3次幂之和为 1^3+5^3+3^ ...

  6. 二、求水仙花数,打印出100-999之间所有的"水仙花数"

    所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身. 例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方 public c ...

  7. python3 练习题100例 (二十一)打印一定范围内的水仙花数

    题目内容: 水仙花数是指一个n位数 (n≥3),它的每个位上的数字的n次幂之和等于它本身. 例如:153是一个“水仙花数”,因为 153 是个 3位数,而1**3+5**3+3**3==153. 输入 ...

  8. C语言经典练习题:水仙花数

    废话不说直接进入正题:传说中的水仙花数就是一个三位数的各个位数的三次方之和就是这个数本身例如153=1*1*1+5*5*5+3*3*3. 好,开始解题:首先,题中已经说了水仙花数是一个三位数,也就是说 ...

  9. python初学者-水仙花数简单算法

    输出"水仙花数".所谓水仙花是指一个3位数的十进制数,其各位数字的立方和等于该数本身.例如:153是水仙花数. 用for循环实现水仙花数的计算图如下所示: 1 for i in r ...

随机推荐

  1. MongoDB常用操作命令

    查看所有数据库: > show dbs; 选定数据库: > use ECommerce; 查看当前数据库状态: > db.stats(); 查看当前数据库中所有集合: > sh ...

  2. 【SFA官方翻译】Spring WebFlux和Spring Cloud进行响应式微服务开发

    源码,修正一些错误: https://github.com/bigben0123/sample-spring-cloud-webflux 原创 SpringForAll社区 2018-05-18 作者 ...

  3. JS小积累(一)— 判断在线离线

    JS小积累-判断在线离线 作者: 狐狸家的鱼 Github: 八至 if(window.navigator.onLine==true){ console.log('online'); ... } el ...

  4. R语言绘图(FZ)

    P-Value Central Lmit Theorem(CLT) mean(null>diff) hist(null) qqnorm(null) qqline(null) pops<-r ...

  5. Tomcat 下载安装与配置

    一.下载 tomcat下载链接:https://tomcat.apache.org/ 1.进入tomcat官网后,选择需要下载的版本.我使用的是tomcat9,所以在这我选择tomcat9 2.选择z ...

  6. Harbor 使用 Helm 一键安装

    安装 Harbor Harbor 支持多种安装方式,源码目录下面默认有一个安装脚本(make/install.sh),采用 docker-compose 的形式运行 Harbor 各个组件,和前面的课 ...

  7. 关于indexOf,charAt,subString的区别

    @Test public void indexOf() { // 注意:在Unicode表中A-Z的十进制对应:65-90 // a-z的进制对应:97-122 // 0-9的十进制对应:48-57 ...

  8. django_orm查询性能优化

    查询操作和性能优化 1.基本操作 增 models.Tb1.objects.create(c1='xx', c2='oo') 增加一条数据,可以接受字典类型数据 **kwargs obj = mode ...

  9. CodeForces1073E 数位dp+状压dp

    http://codeforces.com/problemset/problem/1073/E 题意 给定K,L,R,求L~R之间最多不包含超过K个数码的数的和. 显然这是一道数位dp,在做的过程中会 ...

  10. python正则提取关键字

    python使用正则表达式提取关键字 import sys reload(sys) sys.setdefaultencoding("utf-8") import re ss = & ...