char函数

实验5

*爱你&永不变心* 提交于 2019-12-15 19:46:18
ex2_1_1 // 练习:使用二分查找,在一组有序元素中查找数据项 // 形参是数组,实参是数组名 #include <stdio.h> #include <stdlib.h> const int N=5; int binarySearch(int x[], int n, int item); // 函数声明 int main() { int a[N]={2,7,19,45,66}; int i,index, key; printf("数组a中的数据:\n"); for(i=0;i<N;i++) printf("%d ",a[i]); printf("\n"); printf("输入待查找的数据项: "); scanf("%d", &key); // 调用函数binarySearch()在数组a中查找指定数据项item,并返回查找结果给index // 补足代码① // ××× index=binarySearch(a,N,key); if(index>=0) printf("%d在数组中,下标为%d\n", key, index); else printf("%d不在数组中\n", key); system("pause"); return 0; } //函数功能描述: //使用二分查找算法在数组x中查找特定值item,数组x大小为n // 如果找到,返回其下标 //

scandir函数

Deadly 提交于 2019-12-15 19:30:54
在C语言课程的后端,讲完指针和标准文件IO处理,我会做出一个难度较大练习,题目就是, 利用标准的目录处理函数 opendir/readdir/closedir实现类似于 scandir的功能。其中接口要scandir 函数一致 。 这个题目看起来简单,实现难度相当大,主要采用复杂指针的操作。我第一次拿出来测试,全班大约只一二名实现80%的功能,其余很多觉得无从下手。程序很容易就会出现段错误。基本上短时间内正确的做出来的人可以划归专业级的程度了。有兴趣的人可以先不看后面内容,自行实现一下 首先看一下man的scandir 接口定义 int scandir(const char *dir, struct dirent ***namelist, int(*filter)(const struct dirent *), int(*compar)(const struct dirent **, const struct dirent **)); ,从定义来看就不是一个简单的函数,形参里,出现一个三级指针,二个函数指针。它的功能是,扫描名字为dir的目录,把满足filter函数的过滤条件(即filter执行为非0值)的目录项加入到一维指针数组namelist.数组的总长度为返回值n,如果compar不为空,则最终输出结果还要调用qsort来对数组进行排序后再输出。 从scandir的演示代码

实验五

巧了我就是萌 提交于 2019-12-15 16:51:44
// 练习:使用二分查找,在一组有序元素中查找数据项 // 形参是数组,实参是数组名 #include <stdio.h> #include <stdlib.h> const int N=5; int binarySearch(int x[], int n, int item); // 函数声明 int main() { int a[N]={2,7,19,45,66}; int i,index, key; printf("数组a中的数据:\n"); for(i=0;i<N;i++) printf("%d ",a[i]); printf("\n"); printf("输入待查找的数据项: "); scanf("%d", &key); // 调用函数binarySearch()在数组a中查找指定数据项item,并返回查找结果给index // 补足代码① // ××× index=binarySearch(a,N,key); if(index>=0) printf("%d在数组中,下标为%d\n", key, index); else printf("%d不在数组中\n", key); system("pause"); return 0; } //函数功能描述: //使用二分查找算法在数组x中查找特定值item,数组x大小为n // 如果找到,返回其下标 // 如果没找到,返回-1

ccf201903-2二十四点

我与影子孤独终老i 提交于 2019-12-15 13:35:09
这个题学了数据结构之后其实非常简单。 就一个运算符栈digit,一个操作符栈op. 那么逻辑是,如果是数字,直接进数字栈。 如果是操作符 如果栈顶优先级高于当前操作符。那么先让digit栈的栈顶两元素做当前运算。然后op栈顶弹出,直到栈顶元素的优先级小于当前的操作符,所以这里需要加上一个循环。而不是简单的一个if 然后就很简单了,思路指导代码。我这个代码写的有点不是很好看,凑合看吧。另外有个要注意的地方就是,这里的那个*不是* 而是x。 在这里我简单介绍一下我的函数preceed,这个是判断优先级的函数,第一参数表示栈顶操作符,第二参数表示当前操作符。 细心的注意到了这里最开始的时候s+='#'. 而且操作符栈op.push('#'). 如果是最后一个怎么判断它已经完了呢?如果是栈底第一个怎么判断它的优先级呢?就靠这个#来进行标识,栈里的#优先级是最低的。这个,害,好像不是很好描述。就编译原理里面也有这种思想。自己模拟一下就能够理解了,我觉得干这种事不应该着急着打代码的,,而是先模拟一下过程清楚思路 #include<iostream> #include<stack> #include<algorithm> using namespace std; char preceed(char a,char b); int main() { string s; int n; cin>>n;

实验五

青春壹個敷衍的年華 提交于 2019-12-15 13:16:01
// 练习:使用二分查找,在一组有序元素中查找数据项 // 形参是数组,实参是数组名 #include <stdio.h> #include <stdlib.h> const int N=5; int binarySearch(int x[], int n, int item); // 函数声明 int main() { int a[N]={2,7,19,45,66}; int i,index, key; printf("数组a中的数据:\n"); for(i=0;i<N;i++) printf("%d ",a[i]); printf("\n"); printf("输入待查找的数据项: "); scanf("%d", &key); index=binarySearch(a,N,key); // 调用函数binarySearch()在数组a中查找指定数据项item,并返回查找结果给index // 补足代码① // ××× if(index>=0) printf("%d在数组中,下标为%d\n", key, index); else printf("%d不在数组中\n", key); system("pause"); return 0; } //函数功能描述: //使用二分查找算法在数组x中查找特定值item,数组x大小为n // 如果找到,返回其下标 // 如果没找到,返回-1

实现mypwd

早过忘川 提交于 2019-12-15 11:03:12
实现mypwd 1.学习pwd命令 pwd命令功能为输出当前所在工作目录的绝对路径名称 绝对路径和相对路径: 绝对路径:从根目录开始直到文件位置 相对路径:相对于程序当前所在目录到文件位置 绝对路径:home/wyf/grd_3/pwd 相对路径:./pwd 用 man pwd 命令查看pwd的详细功能 pwd中有两个带参数的执行方式分别为 pwd -l 和 pwd -p pwd -l 功能为从环境中执行PWD命令,即使它包含符号链接 pwd -p 功能为避免所有符号链接,执行pwd命令 分别执行两个命令,结果无区别,经查找发现是因为路径中无特殊符号链接 换了个目录尝试,发现了区别 2.研究pwd实现需要的系统调用(man -k; grep),写出伪代码 输入 man -k dir | grep 2 查看系统调用,可以发现getcwd函数,功能为获取当前工作目录 通过 man getcwd 命令查看getcwd函数功能 如图可知getcwd的功能是返回一个包含调用程序所在位置绝对路径的以空字符为结尾的字符串 char *getcwd(char *buf, size_t size); 函数的第一个参数为数组首地址,第二个参数为空间值,只要在程序中使用该函数就可以实现获得绝对路径的功能 只要在程序中使用调用char getcwd(char buf, size_t size

复习Primer、 2

可紊 提交于 2019-12-15 10:27:17
缓冲区溢出 对一些容器(如vector、string、数组等)试图通过一个越界的索引访问一个容器中内容 char*型和字符串字面值 char ch [ 11 ] = "hello world" //错误,后面还有个空字符作为结束 ‘/0’ char * ch = "hello world" // 与上面一个,后面也有个空字符 //其实本质上 char *ch 与char ch[]一样,数组被默认为指针 //例如: const char c1 [ ] = "deng yao hui" ; const char c2 [ ] = "deng yao hui is a good student" ; if ( c1 < c2 ) //错误!!试图比较两个不相关的地址 return OK ; 左值和右值 左值代表一个对象或者函数,右值代表的是数,例子: int arr [ ] = { 1 , 2 , 3 , 4 , 5 , 6 } ; //此时,arr为左值,运算符=号运算的是左值 //{1,2,3...}是右值,是 值 int * p_arr = arr ; //此时的p_arr是左值,arr代表的是arr的地址,是右值 int first_arr = * p //*p是右值,解引用符*作用于左值上,返回的是一个右值*p 就是这么拗口,哈哈! 来源: CSDN 作者: dyh

汉诺塔问题

自闭症网瘾萝莉.ら 提交于 2019-12-15 05:42:03
汉诺塔(Hanoi)是必须用递归方法才能解决的经典问题。(这话不是我说的,是题目自带的)把圆盘从下面开始按大小顺序重新摆放到第二根柱子上,并且规定,每次只能移动一个圆盘,在小圆盘上不能放大圆盘。 **输入格式要求:"%d" 提示信息:“Input the number of disks:” **输出格式要求:“Steps of moving %d disks from A to B by means of C:\n” “Move %d: from %c to %c\n” 程序运行示例如下: Input the number of disks:3 Steps of moving 3 disks from A to B by means of C: Move 1: from A to B Move 2: from A to C Move 1: from B to C Move 3: from A to B Move 1: from C to A Move 2: from C to B Move 1: from A to B # include <stdio.h> void Hanoi ( int n , char a , char b , char c ) ; void Move ( int n , char a , char b ) ; int main ( ) { int n ;

【TCHAR、_T与_TEXT】【strcpy、wcscpy与_tcscpy】(转)

瘦欲@ 提交于 2019-12-15 04:57:47
https://blog.csdn.net/lu_chaoqun/article/details/19208105 (内容出自《把脉VC++》,挺好的一本书,下面内容是我整理摘录的两小节,顺便吐槽微软还真是整天把C搞的多复杂,让人找来找去) 4.5.3 TCHAR、_T与_TEXT 计算机最初使用的不是UNICODE,最初的系统和程序都采用的是ANSI或者MBCS,那么,问题来了:我们开发程序的时候,是采用char还是wchar_t?观察如下代码: char msg[] = "学习C++"; 当我们准备采用wchar_t时,则需要改成: wchar_t msg[] = L"学习C++"; 太麻烦了!幸运的是,Visual C++的开发者预知到了这样的麻烦,他们从而为此造出了一批宏,这些宏看起来乱七八糟的,但是确实解决了我们的问题,且看一段代码: TCHAR msg[] = _T("学习C++"); 这段代码中,msg到底是char数组还是wchar_t数组呢?Visual C++的解释是,如果需要它是char数组,那么它就是char数组;否则,它就是wchar_t数组。这样的魅力来源于宏TCHAR的定义: typedef unsigned char CHAR; typedef unsigned wchar_t WCHAR; #ifdef UNICODE typedef wchar

C语言详解FILE文件操作

倾然丶 夕夏残阳落幕 提交于 2019-12-15 01:42:59
1. 需要了解的概念 需要理解的知识点包括:数据流、缓冲区、文件类型、文件存取方式 1.1 数据流: 指程序与数据的交互是以流的形式进行的。进行C语言文件的存取时,都会先进行“打开文件”操作,这个操作就是在打开数据流,而“关闭文件”操作就是关闭数据流。 1.2 缓冲区(Buffer): 指在程序执行时,所提供的额外内存,可用来暂时存放做准备执行的数据。它的设置是为了提高存取效率,因为内存的存取速度比磁盘驱动器快得多。 C语言中带缓冲区的文件处理: C语言的文件处理功能依据系统是否设置“缓冲区”分为两种:一种是设置缓冲区,另一种是不设置缓冲区。由于不设置缓冲区的文件处理方式,必须使用较低级的I/O函数(包含在头文件io.h和fcntl.h中)来直接对磁盘存取,这种方式的存取速度慢,并且由于不是C的标准函数,跨平台操作时容易出问题。下面只介绍第一种处理方式,即设置缓冲区的文件处理方式: 当使用标准I/O函数(包含在头文件stdio.h中)时,系统会自动设置缓冲区,并通过数据流来读写文件。当进行文件读取时,不会直接对磁盘进行读取,而是先打开数据流,将磁盘上的文件信息拷贝到缓冲区内,然后程序再从缓冲区中读取所需数据,如下图所示: 事实上,当写入文件时,并不会马上写入磁盘中,而是先写入缓冲区,只有在缓冲区已满或“关闭文件”时,才会将数据写入磁盘,如下图所示。 1.3 文件类型: