zoukankan      html  css  js  c++  java
  • 编程:OJ中使用C编程最基础的操作

    平时一直写的都是Java,但有时候一些OJ需要必须使用C/C++,虽然学过,但好多用法都不是太清楚了,自己整理了一下C语言处理OJ问题时最常用的操作,应付一些基本的算法题应该不成问题。

    C语言程序执行过程

    源代码——预处理器Preprcessor——扩展源代码——编译器Compiler-——汇编代码——汇编器Assembler——目标代码(simple.obj)——链接器Linker——可执行代码(simple.exe)——加载器loader——内存执行——控制台输出。

    输入和输出

    内置库函数,在stdio.h(头文件)中定义。

    scanf("format string",argument_list);
    

    例如scanf("%d",&number)语句从控制台读取整数,并将给定值存储在数字变量中。

    printf("format string",argument_list);
    

    格式字符串("format string")可以是%d(整数),%c(字符),%s(字符串),%f(float)等)。

    基本数据类型

    C语言中有4种类型的数据类型。

    类型 包含的类型
    基本数据类型(Basic Data Type) int, char, float, double
    派生数据类型(Derived Data Type) array, pointer, structure, union
    枚举数据类型(Enumeration Data Type) enum
    Void数据类型(void Data Type) void

    转义序列

    新行
    回车
    水平制表符
    v 垂直制表符
    null

    switch语句

    switch表达式必须是整数或字符类型。case值必须是整数或字符常量。

    switch(expression){    
    case value1:    
     //code to be executed;    
     break;  //optional  
    case value2:    
     //code to be executed;    
     break;  //optional  
    ......    
    
    default:     
     code to be executed if all cases are not matched;    
    }
    
    

    类型转换

    语法:(type)value; 始终建议将较低的值转换为较高值以避免数据丢失。

    // 无类型转换:Output: 2
    int f= 9/4;  
    printf("f : %d
    ", f );
    
    //使用类型转换:Output: 2.250000
    float f=(float) 9/4;  
    printf("f : %f
    ", f );
    

    值和引用

    在通过值调用函数时,原始值不被修改。在通过引用的调用中,原始值可被修改并反映到外部调用者。

    void change(int num) {
        num = num + 10; 
    }
    
    void change(int *num) {
        *num = *num + 10; 
    }
    
    int main() {
        int x = 200;
     	change2(x);  // 通过值调用,变量x并没有改变
        change2(&x); // 通过引用调用,变量x已经改变了
        return 0;
    }
    
    通过值调用 通过引用调用
    将值的副本传递给函数 将值的地址传递给函数
    函数内的更改不会反映在函数外 函数内部的改变也反映在函数的外部
    将在不同的内存位置创建实际和正式的参数 将在相同的内存位置创建实际和正式的参数

    指针

    // 这段代码很有意思
    int main(){
        int a = 10, b = 20, *p1 = &a, *p2 = &b;
        printf("Before swap: *p1=%d *p2=%d
    ", *p1, *p2);
        *p1 = *p1 + *p2;
        *p2 = *p1 - *p2;
        *p1 = *p1 - *p2;
        printf("
    After swap: *p1=%d *p2=%d
    ", *p1, *p2);
    }
    
    // Output
    //Before swap: *p1=10 *p2=20
    //After swap: *p1=20 *p2=1
    

    数组

    int main(){
        // 数组声明初始化
        int arr[5]; // 声明大小,后赋值
        int arr2[5] = {1,2,3,4,5} // 声明赋值
        int arr3[] = {1,2,3,4,5}  
    
        // 二维数组
        int arr4[3][4] = {0}; // 初始化是一个好习惯 
        int arr5[3][4] = {{1,2,3,4},{2,3,4,5},{3,4,5,6}};
        int j, k;
        // 遍历
        for(j = 0; j < 3; j++) {
            for(k = 0; k < 4; k++){
                printf("%d ", arr5[j][k]);
            }
            printf("
    ");
        }
    
        // 将数组作为参数传递给函数
        int arr[5] = {5,4,3,2,1};
        bubsort(arr,5); // 调用
    }
    // 函数要声明
    void bubsort(int arr[], int len){
    }
    

    字符串

    C语言中的字符串是由(空字符)终止的字符数组。gets()函数从用户读取字符串,puts()函数打印字符串。这两个函数都在<stdio.h>头文件中定义。

    char ch[]={'h', 'e', 'l', 'l', '0', ''};
    char ch2[]="hello";
    
    // 输入输出
    char str[10];
    printf("输入一个字符串:
    ");
    gets(str);
    puts(str);
    
    // 字符串函数,在"string.h"库中定义。
    // strlen();字符串长度
    int len = strlen(str);
    printf("字符串长度:%d
    ", len);
    
    // strcpy(destination,source);字符串拷贝
    char str2[10];
    strcpy(str2,str); // 将字符串str拷贝到字符串str2
    
    // strcat(first_string, second_string)函数连接两个字符串,结果返回到first_string
    char str3[] = " world";
    strcat(str, str3);
    
    // strcmp(first_string, second_string)函数比较两个字符串,如果两个字符串相等,则返回0。
    if(strcmp(str, str2) == 0);
    
    // strrev(string)函数返回给定字符串的反转字符串。
    printf("字符串反转: %s 
    ", strrev(str));
    
    // strlwr(string)函数返回给定字符串的小写形式
    printf("小写形式: %s 
    ", strlwr(str));
    // strupr(string)函数返回给定字符串的大写形式
    printf("大写形式: %s 
    ", strupr(str));
    
    

    结构体

    // 定义一个结构体
    struct employee  
    {   int id;  
        char name[50];  
        float salary;  
    };
    
    // 在main中声明一个结构体变量
    struct employee e1;
    // 赋值调用
    e1.id = 110;
    
    // 结构体数组
    // 就是将结构体以数组形式保存
    struct employee e[10]; // 相当于定义了10个结构体变量
    
    // 结构体嵌套
    struct Employee
    {
        int id;
        char name[20];
        struct Date
        {
            int dd;
            int mm;
            int yyyy;
        }doj;
    }e1;
    // 赋值
    e1.id = 110;
    e1.doj.yyyy = 2019;
    

    联合体

    像结构体一样,联合体(Union)在C语言中是一个用户定义的数据类型,用于保存不同类型的元素。但它并不占所有成员的内存总和。它只占最大成员的内存,它分享最大成员的内存。

    文件处理

    常用函数:

    编号 函数名称 功能描述
    1 fopen() 打开新的或现有的文件
    2 fprintf() 将数据写入文件
    3 fscanf() 从文件读取数据
    4 fclose() 关闭文件
    // FILE *fopen( const char * filename, const char * mode );
    // int fprintf(FILE *stream, const char *format [, argument, ...])
    // int fscanf(FILE *stream, const char *format [, argument, ...])
    
    #include <stdio.h>  
    main() {
        FILE *fp;
        // 写文件
        fp = fopen("file.txt", "w");  
        fprintf(fp, "Hello World
    ");
        fclose(fp);   
        // 读文件
        char buff[255]; 
        fp = fopen("file.txt", "r");  
        while(fscanf(fp, "%s", buff)!=EOF){  
            printf("%s ", buff );  
        }  
        fclose(fp); 
    }
    

    数学函数

    math.h头文件中定义和实现有各种方法。math.h头文件的常用函数如下。

    序号 函数 描述
    1 ceil(number) 舍入给定数字。它返回大于或等于给定数字的整数值。
    2 floor(number) 舍入给定数字。它返回小于或等于给定数字的整数值。
    3 sqrt(number) 返回给定数字的平方根。
    4 pow(base,exponent) 返回给定数字的幂值。
    5 abs(number) 返回给定数字的绝对值。
  • 相关阅读:
    OSGi for C/C++
    Tizen NPPlugin开发
    Trove4j
    [Tizen]某些目录下存放的东西
    OpenMobile's Application Compatibility Layer (ACL)
    params
    页面无法访问
    websevice 服务前台和后台
    SQL 创建存储过程
    UpdatePanel
  • 原文地址:https://www.cnblogs.com/microbit1024/p/11484842.html
Copyright © 2011-2022 走看看