实训,第1关:素数判断

第1关:素数判断

100

  • 任务要求
  • 参考答案
  • 评论190
  • 任务描述
  • 本关知识
    • 定义函数的方法
    • 函数声明
    • 调用函数
    • 函数的返回值
  • 编程要求
  • 测试说明

任务描述

写一个判断素数的函数,在主函数输入一个整数,输出是否为素数的信息。

本关知识
定义函数的方法

C语言中的函数定义的一般形式如下:


  1. 类型名 函数名(形式参数表列 )
  2. {
  3. 函数体
  4. }

C语言中,函数由一个函数头和一个函数主体组成。下面列出一个函数的所有组成部分: 返回类型:一个函数可以返回一个值。类型名是函数返回的值的数据类型。有些函数执行所需的操作而不返回值,在这种情况下,类型名是关键字void函数名称:这是函数的实际名称。函数名和参数列表一起构成了函数签名。 形式参数:函数名后括号中的参数是形式参数,在调用次函数时,主调函数把实际参数的值传递给被调用函数中的形式参数。形式参数是可选的,也就是说,函数可能不包含参数。 函数主体:花括号内的部分称为函数体,它可以包括声明部分和语句部分。声明部分包括对函数中用到的变量进行定义以及对要调用的函数进行声明等内容。

例如,下面的max()函数是求两个数中较大的那个数:


  1. /* 函数返回两个数中较大的那个数 */
  2. int max(int num1,int num2)
  3. {
  4. /* 局部变量声明 */
  5. int result;
  6. if (num1 > num2)
  7. result = num1;
  8. else
  9. result = num2;
  10. return result;
  11. }
函数声明

函数声明会告诉编译器函数名称及如何调用函数。函数的实际主体可以单独定义。 函数声明包括以下几个部分: 函数类型 函数名( 参数表列 ); 针对上面定义的函数 max(),以下是函数声明: int max(int num1, int num2); 在函数声明中,参数的名称并不重要,只有参数的类型是必需的,因此下面也是有效的声明: int max(int, int); 当在一个源文件中定义函数且在另一个文件中调用函数时,函数声明是必需的。在这种情况下,您应该在调用函数的文件顶部声明函数。

调用函数

创建C函数时,会定义函数做什么,然后通过调用函数来完成已定义的任务。 当程序调用函数时,程序控制权会转移给被调用的函数。被调用的函数执行已定义的任务,当函数的返回语句被执行时,或到达函数的结束括号时,会把程序控制权交还给主程序。 调用函数时,传递所需参数,如果函数返回一个值,则可以存储返回值。

例如:


  1. #include
  2. /* 函数声明 */
  3. int max(int num1, int num2);
  4. int main ()
  5. {
  6. /* 局部变量定义 */
  7. int a = 100;
  8. int b = 200;
  9. int ret;
  10. /* 调用函数来获取最大值 */
  11. ret = max(a, b);
  12. printf( "Max value is : %d\n", ret );
  13. return 0;
  14. }
  15. /* 函数返回两个数中较大的那个数 */
  16. int max(int num1, int num2)
  17. {
  18. /* 局部变量声明 */
  19. int result;
  20. if (num1 > num2)
  21. result = num1;
  22. else
  23. result = num2;
  24. return result;
  25. }

补充说明: 形式参数就像函数内的其他局部变量,在进入函数时被创建,退出函数时被销毁。 当调用函数时,有两种向函数传递参数的方式: 传值调用:该方法把参数的实际值复制给函数的形式参数。在这种情况下,修改函数内的形式参数不会影响实际参数。 引用调用:通过指针传递方式,形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作。 默认情况下,C使用传值调用来传递参数。一般来说,这意味着函数内的代码不能改变用于调用函数的实际参数。

函数的返回值

函数的返回值是通过函数中的return语句获得的。return语句将被调用函数中的一个确定值带回到主调函数中去。 一个函数中可以有一个以上的return语句,执行到哪一个return语句,哪一个return语句就起作用。return语句后的括号可以不要,如“return z;”“return (z);”等价。 需要注意的是,在定义函数时指定的函数类型一般应与return语句中的表达式类型一致。

编程要求

本关的编程任务是补全IsPrime.c文件中main函数,以实现素数判断的功能。 实际的测试样例参见下文。 本关涉及的代码文件IsPrime.c的代码框架如下:


  1. //包含标准输入输出函数
  2. #include
  3. //基本框架如下,请在此添加‘素数判断’的代码
  4. /********** 修改以下代码 **********/
  5. ...
  6. int main(){
  7. scanf(...);
  8. isPrime(...);
  9. ...
  10. return 0;
  11. }
  12. //函数主体
  13. void isPrime(...){
  14. ...
  15. }
  16. /* or
  17. int isPrime(...){
  18. ...
  19. }
  20. or else
  21. ...
  22. */
  23. /********** 修改代码区间 **********/

其中: #include 的意思是包含stdio函数库,使得当前程序可以调用标准输入输出函数库中的函数。

测试说明

本关的测试过程如下:

  1. 平台编译IsPrime.c,然后链接相关程序库并生成IsPrime.exe;
  2. 平台运行IsPrime.exe,并以标准方式提供测试输入;
  3. 平台获取IsPrime.exe的输出,然后将其与预测输出对比,如果一致则测试通过;否则测试失败。 以下是平台对IsPrime.c的测试样例:

测试输入: 5 预期输出: 5是一个素数

测试输入: -10 预期输出: -10不是一个素数

测试输入: 18 预期输出: 18不是一个素数

测试输入: 1 预期输出: 1不是一个素数

//包含标准输入输出函数

#include

//基本框架如下,请在此添加‘素数判断’的代码

/********** 修改以下代码 **********/

int isPrime(int num);

int main(){

    int num;  

    printf("");  

    scanf("%d", &num);  

    if (isPrime(num) == 1) {  

        printf("%d是一个素数\n", num);  

    } else {  

        printf("%d不是一个素数\n", num);  

    }  

    return 0;

}

//函数主体

int isPrime(int num){

    if (num <= 1) {  

        return 0; // 不是素数  

    }  

    for (int i = 2; i * i <= num; i++) {  

        if (num % i == 0) {  

            return 0; // 不是素数  

        }  

    }  

    return 1; // 是素数  

}

/* or

int isPrime(...){

    ...

}

or else

...

*/

/********** 修改代码区间 **********/

你可能感兴趣的:(java,算法,前端)