编程: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 |
转义序列
\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编程最基础的操作相关推荐
- python概率编程_Python中的概率编程
python概率编程 Learn about probabilistic programming in this guest post by Osvaldo Martin, a researcher ...
- 一文说通C#中的异步编程
天天写,不一定就明白. 又及,前两天看了一个关于同步方法中调用异步方法的文章,里面有些概念不太正确,所以整理了这个文章. 一.同步和异步. 先说同步. 同步概念大家都很熟悉.在异步概念出来之前,我 ...
- java函数式编程入口_Java中的函数式编程
前言 JDK8引入的Lambda表达式和Stream为Java平台提供了函数式编程的支持,极大地提高了开发效率.本文结合网络资源和自身使用经验,介绍下Java中的函数式编程 Java中的函数式编程 出 ...
- 如何通过编程竞赛来掌握C++编程
如何通过编程竞赛来掌握C++编程 一.为什么选择编程竞赛作为学习C++的方法 1 提升编程能力的有效途径 2 压力激发潜力,激发学习动力 3 增加编程实践机会,锻炼实战技能 4 社区交流,收获学习经验 ...
- 小学生学计算机编程的必要,小学生学编程,真的那么重要吗
原标题:小学生学编程,真的那么重要吗 编程简单的说就是告诉计算机要做什么.人类需要将解决问题的思路.方法和手段通过计算机能够理解的形式告诉计算机,使得计算机能够根据人的指令一步一步去工作,完成某种特定 ...
- c语言编程后怎么做成软件,编程软件是用来编程的,那编程软件是怎么做出来的?...
原标题:编程软件是用来编程的,那编程软件是怎么做出来的? 编程软件也可以通过使用编程语言进行编码来实现 就我当前的前端而言,我的编程和开发软件是Visual Studio Code.我通过该软件编写前 ...
- python编程中常用的12种基础知识总结
python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时间对象操作,命令行参数解析(getopt),print 格式化输出,进 ...
- python编程基础知识点总结_【转载】Python编程中常用的12种基础知识总结
Python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时间对象操作,命令行参数解析(getopt),print 格式化输出,进 ...
- Python 编程中常用的12种基础知识总结
Python 编程中常用的12 种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时间对象操作,命令行参数解析(getopt),print 格式化输出 ...
- shader编程-二维空间中使用矩阵实现物体的旋转、缩放、平移变换(WebGL-Shader开发基础03)
shader编程-二维空间中使用矩阵实现物体的旋转.缩放.平移变换 1. 变换前物体的绘制 2. 物体旋转的实现 3. 物体缩放的实现 4. 物体平移的实现 5. 平移与缩放另外一种实现方式 6. 所 ...
最新文章
- centOS外部浏览器无法访问tomcat8000端口解决办法
- 给定地址段为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为____到____
- 计算机视觉开源库OpenCV之CommandLineParser使用方法
- golang之‘...‘的用法
- QT的QMimeData类的使用
- 通过服务器端日志分析WebSocket的server和client交互
- 为or、in平反——or、in到底能不能利用索引?
- linux显示系统信息软件下载,linux查看系统信息软件安装信息命令学习笔记
- Java报警110_Java入门基础SL110
- Linux基本的网络配置
- 实验4-2-8 输出整数各位数字 (15 分)
- ubuntu jdk tomcat mysql_linux-ubuntu tomcat jdk 及 mysql 安装配置
- 转:Subversion TortoiseSVN: Installed and started on Windows 2003 server and local machines
- 2022年上半年网络工程师下午真题及答案
- matlab 光谱共聚焦,光谱共焦技术介绍.PDF
- 路由器组成及路由器发展概述
- 联想电脑尺寸在哪里看_联想电脑型号怎么查看【详细介绍】
- 华为首款台式机计算机发布,华为首款商用台式机一文读懂:商用PC进入智慧时代...
- 小米android手机密码忘了怎么解锁,小米5忘记了锁屏密码怎么办 小米5忘记锁屏密码的解决方法...
- 未来老婆查询生成器威信小程序源码