c语言函数

C语言作业I博客作业06

主宰稳场 提交于 2019-12-03 05:33:53
这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-3/homework/9887 我在这个课程的目标是 很好的编写程序,提高自己的准确率和速度 这个作业在那个具体方面帮助我实现目标 通过PTA上的代码作业让我发现自己的错误并不断改正 参考文献 C语言程序设计,CSDN编程社区 一、PTA实验作业 我的排名 1.1 输出闰年 输出21世纪中截止某个年份以来的所有闰年年份。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除 1.1.1数据处理 数据表达:变量“sum,n”;变量值的来源”赋值运算,算术运算“;变量类型“sum,n都是(int)整型变量” 数据处理:表达式“sum+=(n%10)*(n%10),n/=10”;流程结构“分支结构” 1.1.2实验代码截图 1.1.3造测试数据 输入 输出 说明 2010 2004 2008 这些年份为闰年 2048 2004 2008 2012 2016 2020 2024 2028 2032 2036 2040 2044 2048 这些年为闰年 2059 2004 2008 2012 2016 2020 2024 2028 2032 2036 2040 2044 2048 2052 2056 这些年为闰年 1

C语言qsort函数总结

一个人想着一个人 提交于 2019-12-03 05:25:08
   前几天在leetcode上刷题,用qsort对二维数组进行排序,发现不会写qsort的比较函数。后面在网上找了几篇博客才弄明白,趁今天有空,对这个做一下总结,主要是以下4个方面: 1、qsort总体介绍 2、qsort应用于一维数组 3、qsort应用于指针数组 4、qsort应用于二维数组 1、qsort总体介绍   函数声明:void qsort(void *base, size_t nitems, size_t size, int (*compare)(const void *, const void*))   参数解释:     base-- 指向要排序的 数组 的第一个元素的指针。注意这里说是数组,所以必须是对连续的内存块进行排序。     nitems-- 由 base 指向的数组中元素的个数     size-- 数组中每个元素的大小,以字节为单位     compare-- 用来比较两个元素的函数。这是qsort最难的一部分了。这里主要要注意以下2点:1、在写compare函数时,你的两个形参必须是const void *型,但是在compare函数内部你又必须将const void *类型的形参转换为实际的类型。这是我最当时最难以理解的一个问题了:我需要转换成什么类型。看了别人的总结才知道,是: 指向数组元素的指针,指向数组元素的指针,指向数组元素的指针

字符串逆序函数-- c语言

不问归期 提交于 2019-12-03 05:21:17
目前有两种思路,一个是申请一片辅助空间,然后将原字符串逆向拷贝到辅助空间,然后输出; 另一种是 原地逆序 ,不需要额外的辅助空间,方法就是字符串首尾交换。 #include <stdio.h> #include <string.h> char* str_reverse(char* str) //字符指针 { int n = strlen(str) / 2; int i = 0; char tmp = 0; for (i = 0; i < n; i++) { tmp = str[i]; str[i] = str[strlen(str) - i - 1]; //对调 str[strlen(str) - i - 1] = tmp; } return str; } int main() { char s[] = "hello world!"; printf("str_reverse(s) = %s\n", str_reverse(s)); return 0; } 或利用指针特性,直接利用参数,代码如下: #include <stdio.h> #include <string.h> void str_reverse(char* str) //字符指针 { int n = strlen(str) / 2; int i = 0; char tmp = 0; for (i = 0; i < n;

C语言文件操作函数之ferror &amp; feof &amp; clearerr

匿名 (未验证) 提交于 2019-12-03 00:43:02
这些函数都是和文件读写时发生错误有关,下面一一分析: 1:ferror 原型:int ferror(FILE * fp) 作用:测试一个文件流是否被设置了错误标识符,如果是返回非 0 整数,否则返回 0。 例子: short ch; FILE * f1; f1 = fopen( " test.txt " , " w " ); ch = fgetc(f1); // 注意,我们以 只写 方式打开了文件,但是却尝试向该文件读取一个字符,肯定会操作失败,这时,该文件流就会被设置上错误标识符 printf( " %d\n " , ch); // 这里输出 -1 ,因为当fgetc函数操作失败时返回 EOF,即 -1 if (ferror(f1)){ // 用函数ferror测试文件流是否存在错误标识符 printf( " Have a error.\n " ); // 结果自然是,所以输出错误信息 } fclose(f1); 注意:每次发生不同的操作错误都会更新文件流上次保存的错误标识符,例如:先后发生了A和B两个文件操作错误,并且A错误的标识符为16,B错误的标识符为32,那么文件流保存的错误标识符就是 32,用ferror(fp)读取返回的结果就是 32。 2:feof 原型:int feof(FILE * fp) 作用:测试一个文件流是否被设置了文件结束标识符,如果是返回非 0 整数

C语言 rand函数生成随机数

匿名 (未验证) 提交于 2019-12-03 00:27:02
在实际的项目中,有时候需要生成一个随机数,在C语言中随机数的生成可以通过使用rand函数来实现。 rand函数包含在头文件stdlib.h里,因此使用rand函数需要声明包含stdlib.h。 #include<stdlib.h> #include<stdio.h> int main(){ int i; for (i = 0 ; i < 10 ;i++){ printf ( " %d \n" , rand ()); } return 0 ; } 但是,这里就出现了一个问题。 显然,两次产生的随机数是完全相同的。因此可以这样修改 #include<stdlib.h> #include<stdio.h> #include<time.h> int main(){ int i; srand ((unsigned) ( time (NULL))); for (i = 0 ; i < 10 ;i++){ printf ( " %d \n" , rand ()); } return 0 ; } 在产生随机数之前调用一下srand就可以了。 同时,如果限定一下产生随机数的范围的话,可以这样产生10以内的随机数 #include<stdlib.h> #include<stdio.h> #include<time.h> int main(){ int i; srand ((unsigned) (

SystemVerilog语言简介

匿名 (未验证) 提交于 2019-12-03 00:25:02
SystemVerilog是一种 硬件描述和验证语言 (HDVL),它 基于IEEE1364-2001 Verilog硬件描述语言(HDL),并对其进行了扩展,包括扩充了数据类型、结构、压缩和非压缩数组、 接口、断言等等 ,这些都使得 SystemVerilog在一个更高的抽象层次上提高了设计建模的能力 。SystemVerilog由Accellera开发,它 主要定位在芯片的实现和验证流程上,并为系统级的设计流程提供了强大的连接能力 。下面我们从几个方面对SystemVerilog所作的增强进行简要的介绍,期望能够通过这个介绍使大家对SystemVerilog有一个概括性的了解。 1. 接口(Interface) Verilog模块之间的连接是通过模块端口进行的。为了给组成设计的各个模块定义端口,我们必须对期望的硬件设计有一个详细的认识。不幸的是,在设计的早期,我们很难把握设计的细节。而且,一旦模块的端口定义完成后,我们也很难改变端口的配置。另外,一个设计中的许多模块往往具有相同的端口定义,在Verilog中,我们必须在每个模块中进行相同的定义,这为我们增加了无谓的工作量。 SystemVerilog提供了一个新的、高层抽象的模块连接,这个连接被称为 接口( Interface ) 。接口在关键字 interface 和 endinterface 之间定义,它独立于模块

函数-C语言

匿名 (未验证) 提交于 2019-12-03 00:22:01
一般C程序由许多函数组成,其中最重要的是 main函数 ,他是程序的 起点 ; 函数中可以调用任何函数,包括它 本身 ; 调用 一个函数时,就是执行该函数体内的代码,这个函数 执行结束 后,就会 回到调用该函数 的地方. 程序依然是按照语句顺序 顺序执行 ,当调用某函数时,在 调用位置 将 参数值 传递给函数,之后从该函数的第一句代码开始执行直到执行到 return语句 或到达这个函数体的 结束括号 ,返回调用它的位置,执行该位置后的代码. 文章来源: 函数-C语言

C语言__函数

匿名 (未验证) 提交于 2019-12-03 00:21:02
C语言__函数 函数的分类 C语言中的函数就是面向对象中的"方法",C语言的函数可以大概分为3类: 主函数 ,也就是main函数。每个程序中只能有一个、也必须有一个主函数。无论主函数写在什么位置,C程序总是从主函数开始执行 自定义的函数 ,可有可无,数目不限 库函数 ,例如stdio.h中的输出函数printf()和输入函数scanf() 函数的声明和定义 默认情况下,只有后面定义的函数才可以调用前面定义过的函数。 此条规范在标准的C编译器环境下是需要遵循的的(不过在使用GCC编译器的C语言就没有此条的限制了) 函数声明: 函数返回值类型 函数名 ( 形参类型 函数名称) ――> int sum (int a, int b); 函数返回值类型 函数名 ( 形参类型 ) ――> int sum (int , int ); 函数定义: int sum (int a, int b) 在大型的C程序中,为了分模块进行开发,一般会将函数的声明和定义(即实现)分别放在2个文件中,函数声明放在.h头文件中,函数定义放在.c源文件中。 在具有主函数的文件头使用#include预编处理<函数声明.h>头文件即可。但是直接预处理<函数定义.c>文件会报错,因为预处理仅仅是相当于将预处理的这个文件拷贝到当前文件下该预处理代码的位置,在连接的时候会报错标识符重复的问题。 函数的形参和实参 在定义函数时,

C语言指针相关解析

匿名 (未验证) 提交于 2019-12-03 00:19:01
在C语言中除了一级指针和二级指针,还有一些比较常用但又比较拗口的指针类型。 比如:指针数组和数组指针。它们的名称只是前后顺序不一样,却有着千差万别,容我向大家徐徐道来。 先看两种定义:int *p[5], int(*p)[5]。 第一个是指针数组,由于"[ ]"的优先级高于“*”,所以p先和"[ ]"结合,构成了数组,后和"*"结合,成了指针数组。 指针数组依然是数组,只不过它里面存放的是指针。如图: 第二个是数组指针,在加了“()”后,p先与“*”结合,因此成为了数组指针。顾名思义,它是一个指针,指向p[4]数组 的首地址。 继续如图!: 函数指针:例如void(*fun1)( );函数指针是用来存放函数地址的变量,在函数中,函数的地址是入口地址,由函数名来表示。 函数指针比较好理解,因此不会赘言太多。 在函数指针的基础上,介绍一个定义: 函数指针数组,它是一个数组,用来存放一组函数的地址。 函数指针数组的一个简单应用:计算器 int (* p )[ 5 ]( int x , int y )={ 0 , add , sub , mul , div }; 其中int(*p)[5]()就是一个函数指针数组,这样调用函数时,特别方便,效率也高。 在函数指针数组的概念下,最后介绍一个顺口溜一般的类型: 函数指针数组的指针。它是一个指针,指向一个数组,数组里面存放函数的地址。 依次拆开

C语言中qsort函数的用法

匿名 (未验证) 提交于 2019-12-03 00:19:01
qsort()函数需要引入头文件stdlib.h。 qsort(*arr, n, sizeof(arr[ 0 ]) , cmp) ; 1 第四个是函数指针,用于指定从小到大排序还是从大到小排序。 cmp函数指针通常是固定的,写法如下: int cmp( const void *a, const void *b) { return *( int *)a - *( int *)b; //由小到大排序 //return *(int *)b - *(int *)a; 由大到小排序 } 文章来源: C语言中qsort函数的用法