用java或c语言实现一个函数,用java或c语言实现一个函数

发布时间:2022-11-19

本文目录一览:

  1. 用C语言编写:编写一个函数,要求在主函数中输入两个数,输出其中最大值。
  2. [如何用java 或C语言代码怎么实现如下功能:](#如何用java 或C语言代码怎么实现如下功能:)
  3. 请教,如何用C语言编写一个函数。
  4. 怎么用java实现c语言中的fscanf函数
  5. [Java如何调用C语言代码 ?](#Java如何调用C语言代码 ?)

用C语言编写:编写一个函数,要求在主函数中输入两个数,输出其中最大值。

C语言代码如下:

#include<stdio.h>
int main()
{
    int a,b;
    printf("please enter two number:");     // 两个数字用空格隔开,以回车键结束输入。
    scanf("%d %d",&a,&b);
    if(a>b)
        printf("The max is %d",a);
    else if(b>a)
        printf("The max is %d",b);
    else
        printf("The two Numbers are the same");
    return 0;
}

运行结果图:

扩展资料:

c语言特点:

基本特性:
  1. 高级语言:它是把高级语言的基本结构和语句与低级语言的实用性结合起来的工作单元。
  2. 结构式语言:结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。
  3. C 语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。
  4. 代码级别的跨平台:由于标准的存在,使得几乎同样的C代码可用于多种操作系统,如Windows、DOS、UNIX等等;也适用于多种机型。C语言对编写需要进行硬件操作的场合,优于其它高级语言。
  5. 使用指针:可以直接进行靠近硬件的操作,但是C的指针操作不做保护,也给它带来了很多不安全的因素。 C在这方面做了改进,在保留了指针操作的同时又增强了安全性,受到了一些用户的支持,但是,由于这些改进增加语言的复杂度,也为另一部分所诟病。 Java则吸取了C的教训,取消了指针操作,也取消了C改进中一些备受争议的地方,在安全性和适合性方面均取得良好的效果,但其本身解释在虚拟机中运行,运行效率低于C/C。 一般而言,C,C++,java被视为同一系的语言,它们长期占据着程序使用榜的前三名。
特有特点:
  1. C语言是一个有结构化程序设计、具有变量作用域(variable scope)以及递归功能的过程式语言。
  2. C语言传递参数均是以值传递(pass by value),另外也可以传递指针(a pointer passed by value)。
  3. 不同的变量类型可以用结构体(struct)组合在一起。
  4. 只有32个保留字(reserved keywords),使变量、函数命名有更多弹性。
  5. 部份的变量类型可以转换,例如整型和字符型变量。
  6. 通过指针(pointer),C语言可以容易的对存储器进行低级控制。
  7. 预编译处理(preprocessor)让C语言的编译更具有弹性。
优缺点:

优点

  1. 简洁紧凑、灵活方便 C语言一共只有32个关键字,9种控制语句,程序书写形式自由,区分大小写。 把高级语言的基本结构和语句与低级语言的实用性结合起来。 C 语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。
  2. 运算符丰富 C语言的运算符包含的范围很广泛,共有34种运算符。 C语言把括号、赋值、强制类型转换等都作为运算符处理。 从而使C语言的运算类型极其丰富,表达式类型多样化。灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。
  3. 数据类型丰富 C语言的数据类型有:整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据结构的运算。并引入了指针概念,使程序效率更高。
  4. 表达方式灵活实用 C语言提供多种运算符和表达式值的方法,对问题的表达可通过多种途径获得,其程序设计更主动、灵活。 它语法限制不太严格,程序设计自由度大,如对整型量与字符型数据及逻辑型数据可以通用等。
  5. 允许直接访问物理地址,对硬件进行操作 由于C语言允许直接访问物理地址,可以直接对硬件进行操作,因此它既具有高级语言的功能,又具有低级语言的许多功能,能够像汇编语言一样对位(bit)、字节和地址进行操作,而这三者是计算机最基本的工作单元,可用来写系统软件。
  6. 生成目标代码质量高,程序执行效率高 C语言描述问题比汇编语言迅速,工作量小、可读性好,易于调试、修改和移植,而代码质量与汇编语言相当。 C语言一般只比汇编程序生成的目标代码效率低10%~20%。
  7. 可移植性好 C语言在不同机器上的C编译程序,86%的代码是公共的,所以C语言的编译程序便于移植。在一个环境上用C语言编写的程序,不改动或稍加改动,就可移植到另一个完全不同的环境中运行。
  8. 表达力强 C语言有丰富的数据结构和运算符。包含了各种数据结构,如整型、数组类型、指针类型和联合类型等,用来实现各种数据结构的运算。 C语言的运算符有34种,范围很宽,灵活使用各种运算符可以实现难度极大的运算。 C语言能直接访问硬件的物理地址,能进行位(bit)操作。兼有高级语言和低级语言的许多优点。 它既可用来编写系统软件,又可用来开发应用软件,已成为一种通用程序设计语言。 另外C语言具有强大的图形功能,支持多种显示器和驱动器。且计算功能、逻辑判断功能强大。 缺点
  9. C语言的缺点主要表现在数据的封装性上,这一点使得C在数据的安全性上有很大缺陷,这也是C和C++的一大区别。
  10. C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不作检查等。 从应用的角度,C语言比其他高级语言较难掌握。也就是说,对用C语言的人,要求对程序设计更熟练一些。 参考资料来源:C语言-百度百科

如何用java 或C语言代码怎么实现如下功能:

要在Java中调用C语言的库,需要使用Java提供了JNI。

举例说明

在C语言中定义一个 void sayHello() 函数(打印 Hello World);然后在 Java 中调用这个函数显示 Hello World。 现在分别从 Java 和 C 语言两部分说明:

1. Java 部分

首先定义一个 HelloNative,在其中声明 sayHello 函数,函数要声明为 Native 类型的。如下:

public class HelloNative {
    public native void sayHello();
}

编译这个类,生成 class 文件:

javac HelloNative.java

利用 javah 生成需要的 h 文件:

javah HelloNative

生成的 h 文件大概如下:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloNative */
#ifndef _Included_HelloNative
#define _Included_HelloNative
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloNative
* Method: sayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloNative_sayHello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif

可以看一下上面自动生成的程序,程序 include 了 jni.h,这个头文件在 $JAVA_HOME 下的 include 文件夹下。还可以发现生成的函数名是在之前的函数名前面加上了 Java_HelloNative。

2. C语言部分

根据上面生成的 h 文件编写相应的代码实现,建立一个 HelloNative.cpp 用来实现显示 Hello World 的函数。如下:

#include <stdio.h>
#include "HelloNative.h"
JNIEXPORT void JNICALL Java_HelloNative_sayHello(JNIEnv *, jobject)
{
    printf("Hello World!\n");
}

代码编写完成之后,我们再用 gcc 编译成库文件,命令如下:

gcc -fPIC -I/usr/lib/jvm/java-7-openjdk-i386/include -I/usr/lib/jvm/java-7-openjdk-i386/include/linux -shared -o libHelloNative.so HelloNative.cpp

这样就会在当前目录下生成一个 libHelloNative.so 的库文件。这时需要的库已经生成,在 C 语言下的工作已经完成了。 接下来需要在 Java 中编写一个程序测试一下。在程序前,需要将我们的库载入进去。载入的方法是调用 Java 的 System.loadLibrary("HelloNative");

public class TestNative {
    static {
        try {
            System.loadLibrary("HelloNative");
        } catch (UnsatisfiedLinkError e) {
            System.out.println("Cannot load hello library:\n " + e.toString());
        }
    }
    public static void main(String[] args) {
        HelloNative test = new HelloNative();
        test.sayHello();
    }
}

但是再编译后,运行的时候,问题又出现了。

Cannot load hello library:
java.lang.UnsatisfiedLinkError: no HelloNative in java.library.path
Exception in thread "main" java.lang.UnsatisfiedLinkError: HelloNative.sayHello()V
at HelloNative.sayHello(Native Method)
at TestNative.main(TestNative.java:13)

载入库失败,但是库明明就是放在当前文件夹下的,怎么会载入失败呢? 用 System.getProperty("java.library.path") 查看,发现 java.library.path 中并不存在当前的目录。主要有以下的几个解决办法:

  1. 将生成的库复制到 java.library.path 有的路径中去,当然这样不是很好。
  2. 设置环境变量 export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH,将当前的目录加入到 LD_LIBRARY_PATH 中。
  3. 设置 Java 的选项,将当前的目录加入到其中。java -Djava.library.path=. $LD_LIBRARY_PATH 这样之后程序就能够成功的运行了。可以看见显示的 "Hello World!" 了。

请教,如何用C语言编写一个函数。

一个函数(function)是一个可以从程序其它地方调用执行的语句块。以下是函数定义格式:

type name ( argument1, argument2, ...) statement

说明:

  • type 是函数返回的数据的类型。
  • name 是函数被调用时使用的名。
  • argument 是函数调用需要传入的参量(可以声明任意多个参量)。每个参量(argument)由一个数据类型后面跟一个标识名称组成,就像变量声明中一样(例如,int x)。参量仅在函数范围内有效,可以和函数中的其它变量一样使用,它们使得函数在被调用时可以传入参数,不同的参数用逗号(comma)隔开。
  • statement 是函数的内容。它可以是一句指令,也可以是一组指令组成的语句块。如果是一组指令,则语句块必须用花括号{}括起来,这也是我们最常见到情况。其实为了使程序的格式更加统一清晰,建议在仅有一条指令的时候也使用花括号,这是一个良好的编程习惯。

示例:

每一个 C 语言程序有且只有一个 main 函数,本身 main 就是一个函数。结合上面的格式,自己理解一下。

int main()
{
    return 0;
}

怎么用java实现c语言中的fscanf函数

函数名: fscanf
功能: 从一个流中执行格式化输入,fscanf 遇到空格和换行时结束,注意空格时也结束。这与 fgets 有区别,fgets 遇到空格不结束。
返回值:整型,成功返回读入的参数的个数,失败返回 EOF(-1)。

Java如何调用C语言代码 ?

Java Native Interface(JNI)是 Java 语言的本地编程接口,是 J2SDK 的一部分。在 Java 程序中,我们可以通过 JNI 实现一些用 Java 语言不便实现的功能。通常有以下几种情况我们需要使用 JNI 来实现:

  • 标准的 Java 类库没有提供你的应用程序所需要的功能,通常这些功能是平台相关的。
  • 你希望使用一些已经有的类库或者应用程序,而他们并非用 Java 语言编写的。
  • 程序的某些部分对速度要求比较苛刻,你选择用汇编或者 C 语言来实现并在 Java 语言中调用他们。

编写 Java 代码

我们在硬盘上建立一个 hello 目录作为我们的工作目录,首先我们需要编写自己的 Java 代码,在 Java 代码中我们会声明 native 方法,代码非常简单。如下所示:

class HelloWorld {
    public native void displayHelloWorld();
    static {
        System.loadLibrary("hello");
    }
    public static void main(String[] args) {
        new HelloWorld().displayHelloWorld();
    }
}

注意我们的 displayHelloWorld() 方法的声明,它有一个关键字 native,表明这个方法使用 Java 以外的语言实现。方法不包括实现,因为我们要用 C/C++ 语言实现它。注意 System.loadLibrary("hello") 这句代码,它是在静态初始化块中定义的,系统用来装载 hello 共享库,这就是我们在后面生成的 hello.dll(如果在其他的操作系统可能是其他的形式,比如 hello.so)。

编译 Java 代码

javac HelloWorld.java

生成 HelloWorld.class 文件。

创建 .h 文件

这一步中我们要使用 javah 命令生成 .h 文件,这个文件要在后面的 C/C++ 代码中用到,我们运行:

javah HelloWorld

这样我们可以看到在相同目录下生成了一个 HelloWorld.h 文件,文件内容如下:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */
#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: displayHelloWorld
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif

在此我们不对它进行太多的解释。

编写本地实现代码

在这部分我们要用 C/C++ 语言实现 Java 中定义的方法,我们在 VC++ 中新建一个 Project,然后创建一个 HelloWorldImp.cpp 文件,内容如下:

#include <jni.h>
#include "HelloWorld.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj) {
    printf("Hello world!\n");
    return;
}

注意我们这里 include 了 jni.h 和刚才得到的 HelloWorld.h 文件。因此你要在 VC++ 里面设置好,jni.hJAVA_HOME/include 里面。编译通过后再生成 hello.dll 文件。

运行 Java 程序

把上面生成的 hello.dll 文件复制到我们的工作目录,这时候我们的目录中包括 HelloWorld.javaHelloWorld.classhello.dll 文件。运行:

java HelloWorld

则可在控制台看到 Hello world! 的输出了。 运行 VC++:

  • 文件 -> 新建 -> 选“Win32 Console Application”(控制台程序) -> 在右方设置好路径并输入工程名 -> 确定。
  • 接下来的几个提示框点确定就行了,那是提示是否要用 VC++ 提供的框架之类的。
  • 在左边的工作空间中选“FileView”标签项,点开“+”号,右键点击“Source Files”,选“添加文件到目录”,此即添加你要建立的 C++ 源程序文件,会提示你没有文件,是否添加,你点是,输入文件名保存就 OK 了。
  • 然后 Source Files 下就出现了你刚才建立的 *.cpp 文件,双击,输入代码。
  • 以下就是点“组建”菜单中的“编译”、“组建”等命令进行调试了。相信你会了。