

已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
c语言的基本概念编写一个简单的c程序,后缀名保存为c(本次文件名为a.c)gcc:对c程序进行编译和连接;gcc a.c./a.out:运行程序,输出程序的结果;其中a是c程序的文件名说明:其实并不是简单的在a.c文本中输入几行代码就能运行的,其内部实现步骤如下:1:gcc -e a.c 在c程序中有个#include的头文件,其中#开始的命令都叫做预处理命令,这里是把文件通过预处理器进行处理2:gcc -c a.c 对文件进行编译成机器认识的二进制的格式的目标代码,然后就出现一个a.o文件3:gcc a.o 把目标代码和其他的附加代码整合在一起,这样就有一个可以执行的程序a.out4:执行a.out就能够得到程序的结果注意:上面的例子中只使用了gcc a.c 对c程序进行编译和连接;然后./a.out来输出,并没有使用 1,2,3步骤;事实上gcc a.c 这一表达式已经完成编译和连接两个步骤,也就是说执行完gcc a.c之后,就已经生成out文件了,下面来了解gcc的命令参数就知道了;gcc命令的参数讲解-c:只编译,不连接成为可执行的文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件-o output_filename:确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out,所以上边例子的gcc a.c执行后就直接生成了out后缀文件,所以就省略了1-2-3步骤(gcc -o b.o a.c /这里是把a.c文件生成b.o文件,如果不为b文件指定o为后缀,那就只生成b文件)-g:产生符号调试工具(gnu的gdb)所必要的符号资讯,要想对源代码进行调试,我们就必须加入这个选项,这个参数一样可以生成out的后缀文件-o:对程序进行优化编译、连接,采用这个选项,整个源代码会在编译、连接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、连接的速度就相应地要慢一些;这个参数一样可以生成out的后缀文件-o2:比-o更好的优化编译、连接,当然整个编译、连接过程会更慢;这个参数一样可以生成out的后缀文件-std:选择编译程序所使用的c语言的标准,可以使用-std=c89 或者 -std=c99;这个参数一样可以生成out的后缀文件注释/*/:多行注释,一般用来对描述参数,程序信息/:单行注释,一般用来描述语法的讲解,每行语法对应一行单行注释例如:/*文件名:作者:年份:版本信息:*/#include /头文件_基本类型char:字符类型char c1 = a; /输出achar c2 = 97; /97是ascii转码 代表achar c3 = 3; /输出3char c4 = / /printf(%d,c4); /输出这个/号的ascii转码关键字sizeof:在printf中用来测量变量和类型在内存中所占的字节数sizeof(c); /变量sizeof(char); /类型sizeof(表达式); /他只关心括号里的类型占的字节大小,不会对表达式进行运算:int ashort o=9; a=sizeof(o=10); /只输出o类型占内存的大小,不会输出o=10;所以a等于o占内存字节的大小,而不是10;输出的是字节数值无符号整型:就是没有负号的整型数,其永远只有正数_二进制负十进制转换为二进制按位取反-加1负二进制转换为十进制减1-按位取反_判断运算符!= /表示不等于逻辑运算符&:与|:或!:非短路特性:int i=0,j=0;if(+i|+j); /当运算+i得出结果时,就不会再去运算+j,所以这里+j无效,j还是等于0if(-i&+j); /当运算-i得出结果时,就不会再去运算+j,所以这里+j无效,j还是等于0printf(%d %d,i,j); /经过两次运算,i最后还是0,j还是0_位运算:按位取反;如果是整数,运算后就是负数,同样负数运算后得到的是正数;3=-4; 4=-5 ;(n+1)&:按位与;两个二进制数进行与运算时,如果两个数都为真,其结果为真,如果两位数中有一位为假,其结果为假|: 按位或:两个二进制数进行与运算时,只要其中一个数为正,其对应的位就为真:按位异或;一真一假为真,另外如果两个都是真或都是假,其结果都为假:右移左移一位 相当于乘以2右移一位 相当于除以2逗号运算符在c语言中,多个表达式可以用逗号分开,其中用逗号分开的表达式的值分别结算,但整个表达式的值是最后一个表达式的值假设b=2,c=7,d=5,a1=(+b,c-,d+3); /有三个表达式,用逗号分开,所以最终的值应该是最后一个表达式的值,也就是d+3,为8,所以a1=8a2=+b,c-,d+3; /这时的三个表达式为a2=+b、c-、d+3,(这是因为赋值运算符比逗号运算符优先级高)所以最终表达式的值虽然也为8,但a2=3。注意:上面两个算法没有连续关系,所以第一次的+b的值不能作为第二次的+b值继续运算,因此第二次的+b结果是3还有一种情况:x=3,y=5;a=(x+3,y+,x+); /x+3的结果没有指定赋值,会被丢掉,这里的a=3 ;x=4 ;y=5a=(x+,x+3,x+7); /x+的结果保存下来,x+3的结果丢掉,a=11; x=4_缓冲区scanf:#includemain()int data1,data2;printf(请输入两个数字n); scanf(%d,&data1);scanf(%d,&data2);printf(%d %d,data1,data2);说明:如果输入1 3 得到的结果是正确的,但是如果输入的1 r 得到的是1和0,如果输入的是r 1 那么两个输出都是0因为,只有当第一个数据读走时,才会清除这个数据,当第一个是0时,0就不会被清除,导致第二个还是0这里的0是指错误码。也是变量的初始值解决方法:scanf(%*n); /*忽略读到的内容,n任何非n的字符将n之前的所有字符读走到缓冲区,这样你输入的路七八糟的字符都会被读入到缓冲区scanf(%*c); /从缓冲区读取一个字符,这样就把乱码读走了,不会影响第二个数据的正常输入实例:#includemain()int data1=0,data2=0;printf(请输入两个数字n); if(scanf(%d,&data1)=0) /如果=0.就执行上面的解决方法,就能把字符读走了scanf(%*n); /把n之前的所有字符读走,包含n,之后就不能通过n来完成输入,每输入一个数字都要按回车键了scanf(%*c); /读取所有字符忽略掉if(scanf(%d,&data2)=0)scanf(%*n);scanf(%*c);printf(%d %d,data1,data2);人工刷新输出:fflush(stdin)刷新标准输入缓冲区,把输入缓冲区里的东西丢弃非标准fflush(stdout)刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上printf(.);后面加fflush(stdout);可提高打印效率_数组数组初始化int a5=0; /这样就全部都初始化了int a30=10=4, 9=8, 23=67; /这样就对指定的元素初始化,并且没有初始化的都默认为0,这样也不存在顺序问题sizeof:测试数组的大小sizeof(数组字节)=sizeof(数组元素字节)*元素的个数 如:int a10; sizeof(a)=sizeof(a0)*10printf(%d,sizeof (a0) /求数组元素的字节printf(%d,sizeof (a) /求数组的字节如:int a10 /int占4个字节,a就是40字节,在除以每个元素的字节a0=4,就是数组的长度二维数组int a34=0; /对所有的元素进行初始化为0_函数#include#includebool prime(int data)int i=2;for(;idata;i+)if(data%i=0)return false; /假return true; /真main()int d=0;printf(输入一个数);scanf(%d,&d);printf(%sn,prime(d)?素数:合数); /为真选择素数,为假选择合数,输出是字符串exit:函数名: exit()所在头文件:#include 功 能: 关闭所有文件,终止正在执行的程序。exit(1)表示异常退出.这个1是返回给操作系统的不过在dos好像不需要这个返回值exit(x)(x不为0)都表示异常退出exit(0)表示正常退出用 法: void exit(int status);exit()和return的区别:按照ansi c,在最初调用的main()中使用return和exit()的效果相同。但要注意这里所说的是“最初调用”。如果main()在一个递归程序中,exit()仍然会终止程序;但return将控制权移交给递归的前一级,直到最初的那一级,此时return才会终止程序。return和exit()的另一个区别在于,即使在除main()之外的函数中调用exit(),它也将终止程序。#include #include #include int main(void)char status;printf(enter either 1 or 2n);status = getch(); /获取一个字符exit(status - 0); /status减去字符0的ascii码printf(%dn,status); /字符以%d形式输出return 0;_变量的类别局部变量:在函数体内定义的变量生命周期:从定义这个局部变量的地方开始到函数的结束作用范围:在定义这个局部变量的函数内static:静态局部变量,其数值就是上一次函数调用结束之后的数值,还可以修饰函数:static int a(int a);生命周期:整个程序作用范围:和普通局部变量一样全局变量:定义在整个程序中的变量称为 全局变量生命周期:整个程序的生命周期之内作用范围:整个程序的范围内都可以访问全局变量在定义之后自动初始化为0块变量:定义在 程序块 里面的变量叫做块变量程序块:使用 括起来的一组语句,比如 if 语句里的或者是循环语句等使用到 的地方生命周期:定义变量的地方开始,程序块结束的地方消失作用范围:程序块内rand();:随机生成一个数#include#include#includemain()int data = 0;srand(time(0); /随机数发生器的初始化函数,为了防止随机数每次重复常常使用系统时间来初始化;time(0)取得当前时间(秒的总和)data = rand()%100; /初始化随机数,取100内的数赋值给datawhile(t=time(0); /延迟 让程序等待这一秒过去 printf(%dn,data);time(0)%100 /当前秒总和int t;t=(time(0)%100)+5); /当前时间+5赋值给tprintf(%dn,t); /打印t的值while(t(time(0)%100); /延迟5秒。当表达式为真,执行循环,为假退出循环,刚好5秒register:寄存器,register int a;告诉编译器这个变量会被频繁的使用,请保存到寄存器中不能对寄存器变量取地址&有些系统不会把register修饰的变量放到寄存器中,由编译器决定const:只读变量修饰符,变量的数值是不能被改变的volatile:一个类型修饰符(type specifier)。它是被设计用来修饰被不同线程访问和修改的变量。如果没有volatile,基本上会导致这样的结果:要么无法编写多线程程序,要么编译器失去大量优化的机会;确保本条指令不会因编译器的优化而省略,且要求每次直接读值xbyte2=0x55;xbyte2=0x56;xbyte2=0x57;xbyte2=0x58;对外部硬件而言,上述四条语句分别表示不同的操作,会产生四种不同的动作,但是编译器就不能像对待纯粹的程序那样对上述四条语句进行优化,只认为xbyte2=0x58(即忽略前三条语句,只产生一条机器代码)。如果键入volatile,则编译器会逐一的进行编译并产生相应的机器代码(四条).定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:1). 并行设备的硬件寄存器(如:状态寄存器)2). 一个中断服务子程序中会访问到的非自动变量3). 多线程应用中被几个任务共享的变量_指针 int *q=null; /指针初始化注意: 不要返回一个局部变量的指针char a10; a=add; /这种赋值是错的char a10; a0=b; /这种是对的,意思为第一个赋值一个字符b_程序段:就是一段程序(可以是一个子过程sub,一个函数function(用面向对象的观点或称为方法) 程序都是从上到下施行的,那应该什么时候用到程序段数据段:在采用段式内存管理的架构中,数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。bss段:通常是指用来存放程序中未初始化的全局变量和静态变量的一块内存区域_堆和栈堆栈二者特性不同,各有适用场合。首先,最重要的一点,对象生存期不同。栈上的空间,是自动回收的,虽然省事,但如果不想让它自动回收,就要使用堆来创建对象;在一个函数内部创建一个对象,然后把它的地址传给函数外层用,就不能在栈上创建这个对象,因为当函数一结束,此对象就被销毁了,外面访问它会出错。而堆的话由于是完全手工创建手工回收,在碰到delete之前这个对象是不会被销毁的,就可以随意传递。堆上申请空间可以很大,但是栈的空间却很有限,根据操作系统不同而不同,一般只有14mb的大小,如果在栈上申请过大的空间就会出错。最后,栈上申请空间的速度比堆上快得多,所以如果是函数内部临时使用的小对象,一般用栈来分配。栈:它是一种具有后进先出性质的数据结构,也就是说后存放的先取,先存放的后取堆:堆的存取是随意,如同我们在图书馆的书架上取书char *p1; /全局未初始化区 main() int b; /栈 char s = abc; /栈 char *p2; /栈 char *p3 = 123456; / 1234560在常量区,p3在栈上。 p1 = (char *)malloc(10); 堆 p2 = (char *)malloc(20); 堆 栈是系统自动分配空间的,栈上的数据的生存周期只是在函数的运行过程中,运行后就释放掉,不可以再访问。堆则是程序员根据需要自己申请的空间,例如malloc(10);开辟十个字节的空间。而堆上的数据只要程序员不释放空间,就一直可以访问到,不过缺点是一旦忘记释放会造成内存泄露。堆内存申请:new:申请堆内存malloc:申请堆内存:a=(int*)malloc(100*sizeof(int);delete :释放堆内存空间,指向堆内存首元素的指针;如果申请的是一个堆内存变量,则delete后的可以省略;如果申请的是一个堆内存数组,则该不能省略#include iostream.hint main()int size;float sum=0;int *heaparray;cout size;heaparray=new intsize; /申请堆内存cout 请输入各元素: endl;for (int i=0;iheaparrayi;sum=sum+heaparrayi;cout 这些数的平均值为 sum/size endl;delete heaparray; /释放堆内存return 0;注意:这里使用到了两个输入输出关键字:cout,cin输出输入#include iostream.h /使用头文件cout result=resultsize;_读写一个字符串puts:输出一个字符串,可以指定一个文件指针,把字符串输出到文件中,也可以输出到显示设备上fputs#includemain()char a=1a3456;/*字符数组也可以定义数字,但输出的是ascll,并非数字*/printf(%dn,+a0);/*输出的是字符1的ascii码,1的ascii 码为49,+a0后等于50*/ printf(%dn,+a1);/*a在ascii码中等于97*/ printf(%cn,+a1);/*这里指的字符是可以自身+的,无论是字母还是数字都可以*/puts(a); /*定义好的字符数组,在puts中只需写上数组名就可以输出*/puts(123456); /*没有定义的字符或字符串就要用“”来括上*/puts(asdf);/*puts里不允许+,如puts(+b);*/gets:输入带有空格的字符串可以使用函数来进行输入,但是函数不会计算缓冲区的大小,会造成错误,溢出fgets:这个和上面的一样,但是却多了一个可以计算缓冲区大小,保证不会溢出的功能这个函数也可以把文本的字符串输入到程序的字符数组中来:、fgets(str,n,fp);str:存放字符的变量n:指定读取字符的个数fp:文件指针#includemain()char a10; /*不可以把定义长度的步骤省略*/fgets(a); /*类似于puts的使用方法*/ printf(%sn,a); /*gets函数读入字符时,包括空格和entre符,依次存放在数组中*/ _字符串操作函数(不支持二维字符数组或二维数组)strlen:求实际长度strupr:小写变大写strlwr:大写变小写#include/*头文件指定文件包含的库函数(和include指定的输出输入,函数变量道理一样)*/printf(%dn,strlen(str1);/*求字符串的实际长度,包括空格(也可以这样(strlen(asdf asd)*/printf(%sn,strupr(str1);/*把小写换成大写*/ printf(%sn,strlwr(str2);/* 把大写换成小写。不能小写换成小写或大写换大写,只能对换,否则输出结果不变*/strcpy:复制strcpy(str1,str1); /复制规则是由后边的复制给前边的字符数组strcpy(str1,123); /如果是定义好的数组给前边的复制就不用加strcat:链接)strcat(str1,str3); /把后边的字符或字符数组链接到前边,并放在前边的字符数组中输出,输出顺序是(前11后22:1122)strcat(str1,llo); /前边必须写成数组名形式,且之前必须定义.这里同样可以定义字符输入 strcmp:比较#include#includemain()char str1=zzz; /字母大于空格char str2=zz zz; printf(%dn,strcmp(str1,str2); /前边大,输出为正1,后边大,输出为负1char str3=zz0;char str4=zz ; /空格大于0所以str3大printf(%dn,strcmp(str3,str4);char str5=zz0;char str6=zz0z; /由于两个0相遇所以认为比较结束*/ printf(%dn,strcmp(str5,str6);说明:这个函数是比较两个字符串,比较规则是按ascll码值大小比较,顺序是从左至右逐个字符相比较,直到两组字符的0同时出现时结束,或遇到不相同的字符时停止。并不是比较两个字符串谁的长的意思_main()函数的形式int main(int argc,const char* argv) /带参数的函数int main(viod); /无参数形式main() /c90标准允许这种形式,但是c99标准不允许。因此即使你当前的编译器允许,也不要这么写坚持使用标准的意义在于:当你把程序从一个编译器移到另一个编译器时,照样能正常运行。c编译器允许main()函数没有参数,或者有两个参数(有些实现允许更多的参数,但这只是对标准的扩展)。这两个参数,一个是int类型,一个是字符串类型。第一个参数是命令行中的字符串数。按照惯例(但不是必须的),这个int参数被称为argc(argument count)。大家或许现在才明白这个形参为什么要取这么个奇怪的名字吧,呵呵!至于英文的意思,自己查字典吧。第二个参数是一个指向字符串的指针数组。命令行中的每个字符串被存储到内存中,并且分配一个指针指向它。按照惯例,这个指针数组被称为argv(argument value)。系统使用空格把各个字符串格开。一般情况下,把程序本身的名字赋值给argv0,接着,把最后的第一个字符串赋给argv1,等等。 现在我们来看一个例子:#include stdio.h int main(int argc, char *argv) int count; printf(the command line has %d arguments: /n,argc-1); for(count=1;count c(程序名) argv1 - i argv2 - love argv3 - you 至于argc的值,也即是参数的个数,程序在运行时会自动统计,不必我们操心。 说明:目前我使用的编译器不支持运行代码后,能输入main的参数,只需要理解就行了_指向数组的指针变量的运算“+,-”*p+等价于*(p+),先得到p所指向的变量,再使指针p+1;*(+p)等价于*+p,先使p加1,再取出*p的值。(*p)+,表示p所指向的元素值加1,即a0+;_宏定义1:也可以对符号进行宏定义2:带参数的宏:如下#include#define b(x) (x)=a?(x)-(a-a):(x)int main(void)char c;printf(请输入一个字符n);scanf(%c,&c);printf(%cn,b(c);return 0;说明:带参数的宏:b(x) b是标识符,对应于宏体(x)=a?(x)-(a-a):(x);括号里的x是参数,可以有多个参数,意思是将来把宏体的x的参数替换多个参数的宏#include#define b(x,v) (v)=a?(v)-(a-a):(v) /这里出现两个宏参数int main(void)char c;printf(请输入一个字符n);scanf(%c,&c);printf(%cn,b(,c); /要把宏参数的第二位v替换,所以第一位可以留空不填,但是第二位要填上实参return 0;_宏运算符在c语言中相邻的字符串字面量会被合并:printf(i/j = %d/n, i/j);printf(i/j = %d/n, i/j);#:运算符将一个宏的参数转换为字符串字面量:#define print_int(x) printf(#x = %d/n, x); /x之前的#运算符通知预处理器根据print_int的参数创建一个字符串字面量,也就是说参数x代表字符,后面的x则是普通的宏参数 print_int(hi) /调用宏hi就是参数printf(hi = %d/n, x); /在宏的参数中x代表字符串,现在把字符串hi传到宏中就成了这样,这是合法的,相同于 printf(i/j = %d/n, i/j); /后面的i/j是一个公式#:运算符可以将两标识符“粘”在一起,成为一个标识符,被称为粘合符。如果其中一个操作数是宏参数,“粘合”会在当前形式参数被相应的实际参数替换后发生。#define strcpy2(a, b) strcpy(a#_p, b#_p)strcpy2(h, s); /变成以下的strcpy(h_p, s_p) /结果#define max(type) type max_type#() max(int); /变成int max_int(),第一个正常被替换,第二个被粘合在一起,正常替换的时候不能 有其他参数,所以一旦有其他参数,就能合并,这时要使用#终止宏定义的作用域#undef ip /终止pi作用域-应用例子:#include #include #define strcpy1(a, b) strcpy(a#_p, #b)#define strcpy2(a, b) strcpy(a#_p, b#_p)int main(void) char var1_p30;char var2_p30;strcpy1(var1, ok); /第一个宏参数var1传递给a,变成var1_p;ok传给b,变成ok;var1_p30=ok;strcpy2(var2, var1); /把var1_p赋值给var2_pprintf(var1_p= %sn, var1_p);printf(var2_p= %sn, var2_p); /结构两个都是okreturn 0;_预定义的宏#include #include void why_me();int main()printf( %sn, _file_ ); /当前正在编译的源程序的名称printf( %sn, _date_ ); /编译程序的日期printf( %sn, _time_ ); /编译程序的时间printf( %dn, _line_ ); /当前正在编译的程序的行号printf( %sn, _stdc_?y:n ); /判断编译器是否符合c标准return 0;char *a=_file_; /也可以更多请访问网络:_条件编译说明:条件编译就是根据预处理器的执行结果 来包含或者排除某一段程序#ifdef debug:如果宏定义中定义了debug,就对这段程序编译。如果没有宏定义,或者宏定义了别的字符,这段程序将不被执行。#endif:由于程序中出现了#ifdef, 所以必须有endif作为程序结束。#ifndef debug:如果宏未定义debug,则执行这段程序,#endif:由于程序中出现了#ifndef, 所以必须有#endif作为程序结束。#if m:如果宏定义的m非0则为真,-1也为真,为真时则执行这段程序#endif:到这个位置结束,#endif下面可以有输出也可以没有,但endif一定要写,否则无结束条件则会出错。#else:可以用在#ifndef或#ifdef中,如果#ifndef或#ifdef条件不成立则执行#else_多文件程序的编写常见的程序都是由多个源文件和多个头文件组成程序分为多个源文件好处:相关的变量和函数放在一个源文件中,程序的结构更加清晰可以对每一个源文件分别进行编译,如果修改一个源文件只需要编译这个源文件,节约了时间函数放在多个文件中有利于代码的复用多个源文件编译:首先对每一个源文件只编译不连接 gcc -c 生成 .o 文件,如果要连接:gcc *.o;也可以使多个源文件编程一个out执行文件:a.c b.c ; gcc a.c b.c ; 生成 a.out ,只需要运行a.out就能使两个源文件一起使用 /a包含了头文件和函数,b只包含函数,_共享全局变量声明:extern:原理很简单,就是告诉编译器:“你现在编译的文件中,有一个标识符虽然没有在本文件中定义,但是它是在别的文件中定义的全局变量,你要放行!”/a.cppextern int i;int main()i = 100; /试图使用b中定义的全局变量/b.cppint i;顺利通过编译,链接。_自定义头文件可以共享全局变量,共享宏,变量,函数,等:但是只声明不定义;宏 #define u 123 这类型不属于定义,应该是声明先创建一个头文件 a.h#ifndef tee /防止头文件再次被本头文件引用,或者是其他源文件中如果定义了宏tee,也不可以再次引用这个头文件,否则错误#define tee#include#define u 123#endif /如果应用已经包含,就不能再引用上面,要引用这里的头文件#include#define b 123int a; /不能省略 ; 号int b()/说明这个函数的作用;把头文件和源文件放在当前(同一个目录)目录中,源文件在引用头文件时只需要引用#include a.h;头文件可以声明变量:int a; 但是不能定义变量:int a=5; 错误的也可以声明函数等,但都只能声明,不能对其定义算法,如果要实现算法,必须要一个mian函数入口,并且关联头文件,建议实现算法单独放在另一个 .c 文件_文件嵌套包含#include#include22_2f3.cpp#include22_2f2.cppmain()int a=2,m;m=b(a);printf(nm=%d,m);22_2f2:/由于文件类型不是头文件,所以这个文件的尾叠是.cppint b(int i)int j,k;j=i+4;k=c(j);k=2*k;printf(nj=%d,k=%d,j,k);return k;22_2f3:/由于文件类型不是头文件,所以这个文件的尾叠是.cppint c(int x)int y;y=x*x;printf(ny=%d,y);return y;第一个程序包含了2,但是2中包含了3.所以要先把3包含进来再把2包含,顺序不能错,因为2没有3,2就没有结果,2没有结果,1就没有结果,整个过程就会出错。所以先是#include22_2f3
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年航空机场行业当前发展趋势与投资机遇洞察报告
- 支部条例全文课件
- 攀爬墙安全知识培训课件
- 2024学年南通市七年级语文上学期期末考试卷附答案解析
- 2025年素描绘画岗位职业技能资格基础知识考试题与答案
- 2025年叉车安全培训考试题及答案
- 2024年高级家具设计师专业技术及理论知识考试题库(附含答案)
- 2024年摄像技巧及相关知识考试题库(附含答案)
- 2025年度湖北省高校大学《辅导员》招聘考试题库(含答案)
- 2025年四川省自贡市考研专业综合预测试题含答案
- 2024年山东省济南市行政职业能力测验题库(考点梳理)
- 人教版2024年小学升学考试数学模拟测试卷(共5套)(含答案解析)
- 测量基础能力测试
- 医院系统瘫痪应急预案
- 光伏项目技术标准清单
- 117湖南省怀化市雅礼实验学校2023-2024学年七年级下学期开学考试数学试题
- 水电站全套课件
- 输气管线破裂漏气应急处置方案
- 老年患者呼吸系统疾病的护理重点
- 脑卒中急救中的辅助检查与影像学应用
- 野外蚊虫叮咬预防知识讲座
评论
0/150
提交评论