平时一直写的都是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

转义序列

\n 新行
\r 回车
\t 水平制表符
\v 垂直制表符
\0 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\n", f );//使用类型转换:Output: 2.250000
float f=(float) 9/4;
printf("f : %f\n", 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\n", *p1, *p2);*p1 = *p1 + *p2;*p2 = *p1 - *p2;*p1 = *p1 - *p2;printf("\nAfter swap: *p1=%d *p2=%d\n", *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("\n");}// 将数组作为参数传递给函数int arr[5] = {5,4,3,2,1};bubsort(arr,5); // 调用
}
// 函数要声明
void bubsort(int arr[], int len){
}

字符串

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

char ch[]={'h', 'e', 'l', 'l', '0', '\0'};
char ch2[]="hello";// 输入输出
char str[10];
printf("输入一个字符串:\n");
gets(str);
puts(str);// 字符串函数,在"string.h"库中定义。
// strlen();字符串长度
int len = strlen(str);
printf("字符串长度:%d\n", 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 \n", strrev(str));// strlwr(string)函数返回给定字符串的小写形式
printf("小写形式: %s \n", strlwr(str));
// strupr(string)函数返回给定字符串的大写形式
printf("大写形式: %s \n", 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\n");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) 返回给定数字的绝对值。

转载于:https://www.cnblogs.com/small-world/p/11484842.html

编程:OJ中使用C编程最基础的操作相关推荐

  1. python概率编程_Python中的概率编程

    python概率编程 Learn about probabilistic programming in this guest post by Osvaldo Martin, a researcher ...

  2. 一文说通C#中的异步编程

    天天写,不一定就明白. 又及,前两天看了一个关于同步方法中调用异步方法的文章,里面有些概念不太正确,所以整理了这个文章.   一.同步和异步. 先说同步. 同步概念大家都很熟悉.在异步概念出来之前,我 ...

  3. java函数式编程入口_Java中的函数式编程

    前言 JDK8引入的Lambda表达式和Stream为Java平台提供了函数式编程的支持,极大地提高了开发效率.本文结合网络资源和自身使用经验,介绍下Java中的函数式编程 Java中的函数式编程 出 ...

  4. 如何通过编程竞赛来掌握C++编程

    如何通过编程竞赛来掌握C++编程 一.为什么选择编程竞赛作为学习C++的方法 1 提升编程能力的有效途径 2 压力激发潜力,激发学习动力 3 增加编程实践机会,锻炼实战技能 4 社区交流,收获学习经验 ...

  5. 小学生学计算机编程的必要,小学生学编程,真的那么重要吗

    原标题:小学生学编程,真的那么重要吗 编程简单的说就是告诉计算机要做什么.人类需要将解决问题的思路.方法和手段通过计算机能够理解的形式告诉计算机,使得计算机能够根据人的指令一步一步去工作,完成某种特定 ...

  6. c语言编程后怎么做成软件,编程软件是用来编程的,那编程软件是怎么做出来的?...

    原标题:编程软件是用来编程的,那编程软件是怎么做出来的? 编程软件也可以通过使用编程语言进行编码来实现 就我当前的前端而言,我的编程和开发软件是Visual Studio Code.我通过该软件编写前 ...

  7. python编程中常用的12种基础知识总结

    python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时间对象操作,命令行参数解析(getopt),print 格式化输出,进 ...

  8. python编程基础知识点总结_【转载】Python编程中常用的12种基础知识总结

    Python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时间对象操作,命令行参数解析(getopt),print 格式化输出,进 ...

  9. Python 编程中常用的12种基础知识总结

    Python 编程中常用的12 种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时间对象操作,命令行参数解析(getopt),print 格式化输出 ...

  10. shader编程-二维空间中使用矩阵实现物体的旋转、缩放、平移变换(WebGL-Shader开发基础03)

    shader编程-二维空间中使用矩阵实现物体的旋转.缩放.平移变换 1. 变换前物体的绘制 2. 物体旋转的实现 3. 物体缩放的实现 4. 物体平移的实现 5. 平移与缩放另外一种实现方式 6. 所 ...

最新文章

  1. centOS外部浏览器无法访问tomcat8000端口解决办法
  2. 给定地址段为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为____到____
  3. 计算机视觉开源库OpenCV之CommandLineParser使用方法
  4. golang之‘...‘的用法
  5. QT的QMimeData类的使用
  6. 通过服务器端日志分析WebSocket的server和client交互
  7. 为or、in平反——or、in到底能不能利用索引?
  8. linux显示系统信息软件下载,linux查看系统信息软件安装信息命令学习笔记
  9. Java报警110_Java入门基础SL110
  10. Linux基本的网络配置
  11. 实验4-2-8 输出整数各位数字 (15 分)
  12. ubuntu jdk tomcat mysql_linux-ubuntu tomcat jdk 及 mysql 安装配置
  13. 转:Subversion TortoiseSVN: Installed and started on Windows 2003 server and local machines
  14. 2022年上半年网络工程师下午真题及答案
  15. matlab 光谱共聚焦,光谱共焦技术介绍.PDF
  16. 路由器组成及路由器发展概述
  17. 联想电脑尺寸在哪里看_联想电脑型号怎么查看【详细介绍】
  18. 华为首款台式机计算机发布,华为首款商用台式机一文读懂:商用PC进入智慧时代...
  19. 小米android手机密码忘了怎么解锁,小米5忘记了锁屏密码怎么办 小米5忘记锁屏密码的解决方法...
  20. 未来老婆查询生成器威信小程序源码

热门文章

  1. 帆软高级函数应用之其他函数
  2. oracle行相减,oracle两张表满足某个条件时,表中满足条件的那一行的某列相减
  3. 用keil怎么擦除_环氧树脂结构胶怎么清洗 结构胶弄到衣服上怎么洗掉
  4. Dubbo2.7源码分析-如何发布服务
  5. kendoGrid动态列的实现-高级查询结果展示优化过程
  6. Git学习的简单笔记
  7. js 简单语法 集合
  8. OJ 上常见错误提示
  9. ACCP学习旅程之----- 使用Dreamweaver制作网页
  10. apache+tomcat+jk配置负载均衡