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

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

函数接口定义:

  1. int narcissistic( int number );
  2. void PrintN( int m, int n );

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

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

输入样例:

  1. 153 400

输出样例:

  1. 153 is a narcissistic number
  2. 370
  3. 3711)实验代码#include <stdio.h>
  4. int narcissistic( int number );void PrintN( int m, int n );
  5. int main(){    int m, n;
  6.     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);
  7.     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. Electron入门笔记(一)-自己快速搭建一个app demo

    Electron学习-快速搭建app demo 作者: 狐狸家的鱼 Github: 八至 一.安装Node 1.从node官网下载 ,最好安装.msi后缀名的文件,新手可以查看安装教程进行安装. 2. ...

  2. zabbix自动发现

    zabbix3.4 Discovery自动发现教程 Zabbix 创建发现规则创建发现规则配置 ---- 自动发现 ---- 创建发现规则 看一个例子 这样发现规则就没有问题了,下面让主机自动加入到某 ...

  3. win32: WM_PAINT 实现双缓冲缓图

    相关参考资料: GDI下实现双缓冲 - http://jingyan.baidu.com/article/e73e26c0f8df2424acb6a76e.html <Win32_19>用 ...

  4. Django(四)框架之第三篇模板语法

    https://www.cnblogs.com/yuanchenqi/articles/6083427.htm https://www.cnblogs.com/haiyan123/p/7725568. ...

  5. 计算机基础:计算机网络-chapter5 运输层

    一.运输层做什么事情,通过什么协议实现, 运输层做什么 为相互通信的应用提供逻辑通信 通过端口号来确定应用,提供端到端的服务: 为什么需要运输层,IP层不是就实现了传输数据吗 从IP层来说,是两台主机 ...

  6. Android Studio 签名 安全图片

    apk 输出地址: /Users/houzhibin/javaself/android/SpgApp/app/build/outputs/apk 上图是debug版的: 发布版的需要在终端输入命令行: ...

  7. vue(基础二)_组件,过滤器,具名插槽

    一.前言 主要包括:  1.组件(全局组件和局部组件)                     2.父组件和子组件之间的通信(单层)                     3.插槽和具名插槽     ...

  8. secureCRT恶意终止下次无法启动

    secureCRT使用中恶意中断后会在C:\Documents and Settings\wuyipeng\Application Data目录下产生一个secureCRT.dmp文件 下次正常运行s ...

  9. springmvc拦截器说明

    一般 我们在spring mvc的配置文件中 这样配置拦截器 <!--拦截器 --> <mvc:interceptors> <!--多个拦截器,顺序执行 --> & ...

  10. Java运算符和引用数据类型(Scanner、Random)

    运算符 算术运算符: 运算符 运算规则 范例 结果 + 正号 +3 3 + 加 2+3 5 + 连接字符串 “中”+“国” “中国” - 负号 int a=3;-a -3 - 减 3-1 2 * 乘 ...