C语言注意事项.doc
Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateC语言注意事项11.switch语句,其一般形式为:switch(表达式) case常量表达式1: 语句1;case常量表达式2: 语句2; case常量表达式n: 语句n;default: 语句n1;其中switch(表达式)后不应该带有";",同时case语句常量后应该是":"。2.void fun(STREC *a) double ave=0.0; int i; for(i=0;i<N;i+) a->ave=a->ave+a->si; /*求各门成绩的总和*/ a->ave/=N; /*求平均分*/3.有参函数定义,其一般形式为:类型标识符函数名(形式参数表列)/*double fun(int i)*/声明部分 语句1.锁存器和触发器存储元件,用于开关电路。锁存器是由输入信号控制设备的状态。(2.如果一个锁存器有一个输入信号,使输出的装置1,它被称为一个集存。如果它有一个输入信号,迫使装置输出的0,它被称为一个复位锁存器。如果设备设置和重置的激励信号,它被称为一个置位复位锁存。触发器不同于一个锁存器,它有一个控制信号称为时钟. 3.基本触发器。基本触发器(简存)通常被称为闩锁器。该触发器电路交叉耦合和双大门或与非门的大门。它有两只inputs-s集,用于复位。该触发器是图4.1所示。它是采用交叉耦合和大门。(四1. (11)两只MOSFET的设计有匹配特性。因此,它们是相辅相成的。关闭时,其电阻实际上是无限;当上,他们的通道电阻约为200。2.由于栅基本上是一个开放的电路,它没有电流,并将输出电压等于地面或电源电压,这取决于晶体管导电。(3. 当输入一个接地(逻辑0),n沟道MOS是公正的,因而没有通道增强本身。它是一个开放的电路,因此离开输出线断开从地面。同时,p沟道晶体管正向偏置,所以它有一个通道内提高自己。该频道有一个电阻约200,输出连接线的供电。这将输出到五世(逻辑1)。 if语句的条件表达式一般会考查三方面的内容:(1)条件判断,即>与>、<与<、与!的区别,需要仔细分析题干的意思,确定条件表达式的内容。(2)逻辑判断,即&&(逻辑与)与|(逻辑或)的区别,需要根据题干确定if条件中若干个条件表达式的并存关系。(3)(赋值号)与(等于号)的区别,注意在if条件中不会出现(赋值号)。4.冒泡排序算法,其基本思想是,将待排序的元素看作是竖着排列的"气泡",较小的元素比较轻,从而要往上浮。在冒泡排序算法中我们要对这个"气泡"序列处理若干遍。所谓一遍处理,就是自底向上检查一遍这个序列,并时刻注意两个相邻的元素的顺序是否正确。如果发现两个相邻元素的顺序不对,即"轻"的元素在下面,就交换它们的位置。显然,处理一遍之后,"最轻"的元素就浮到了最高位置;处理二遍之后,"次轻"的元素就浮到了次高位置。依次类推,完成排序。用代码实现数组sN的升序排列为:for(i0; i<N; i)for(ji1; j<N; j)if(si>sj)tsi; sisjsjto;5. 对于m*n二维数组,如采用逐行查找最大元素的方法,代码实现为:int fun (int aM)int i,j,max=a00; for(i=0;i<2;i+) for(j=0;j<M;j+) if(max<aij) max= aij; return max;6.求1到1000之内能被7或11整除、但不能同时被7和11整除的所有整数,并放入数组a中*void fun (int *a, int *n)int i,j=0; for(i=1;i<=1000;i+) /*求1到1000之内能被7或11整除、但不能同时被7和11整除的所有整数,并放入数组a中*/ if(i%7=0|i%11=0)&&i%77!=0) aj+=i; *n=j; 7.求最大公约数算法一般采用辗转相除法。辗转相除法的算法为:首先将 m除以 n(m>n)得余数 r,再用余数r去除原来的除数,得到新的余数,重复此过程直到余数为 0时停止,此时的除数就是m 和 n的最大公约数。程序首先判断参数a和b的大小,如果a<b则进行交换,这里是一个数学逻辑错误,应先将a的值赋给中间变量t,再将b的值赋给a,最后将t的值赋给b。当余数r为0时,除数b即为所求的最大公约数,所以函数应返回b即;int fun(int a,int b) Int r,t; if(a<b)t=a;a=b;b=t; r=a%b;while (r!=0) a=b;b=r;r=a%b; return b /*最大公约数*/8.如果知道某数n的各个位,可以得到该数值n,如n的个位为a、十位为b、百位为c,那么nc*100b*10a。如果知道数值n,可以采用求余和除法操作来表示其各个位,如n%10(取个位)、n/10(取十位),例如:while (n) t=n%10;If(t%2=0)x=10*x+t;n=n/10;return x;9. void fun(char p1, char p2)int i,j; for(i=0;p1i!='0'i+) ; 求出第1个字符串的长度即将i指到第1个字符串的末尾 for(j=0;p2j!='0'j+) p1i+=p2j; 即将i指到第1个字符串的末尾 p1i='0'10."0"和"1"是字符串中的数字字符,为了进行数字运算,必须要将数字字符转换为数字,用数字字符减去字符'0'(零)的ASCII码,就得到对应的数字。int fun( char *p ) int n; n= *P-'0' p+;while( *p!=0 ) n=n*8+*P-'0'将八进制转化成十进制p+; return n;12.strcpy(字符数组1,字符数组2)把字符数组2所指字符串的内容复制到字符数组1所指存储空间中。函数返回字符数组1的值,即目的串的首地址为保证复制的合法性,字符数组1必须指向一个足够容纳字符数组2的存储空间strcat(字符数组1,字符数组2)该函数将字符数组2所指字符串的内容连接到字符数组1所指的字符串后面,并自动覆盖字符数组1串末尾的0,该函数返回字符数组1的地址值字符数组1所指定字符串应有足够的空间容纳两串合并后的内容strlen(字符数组)此函数计算出以字符数组为起始地址的字符串的长度,并作为函数值返回这一长度不包括串尾的结束标志0strcmp(字符数组1,字符数组2)该函数用来比较字符数组1和字符数组2所指字符串的大小。若字符数组1>字符数组2,函数值大于0(正数);若字符数组1字符数组2,函数值等于0;若字符数组1<字符数组2,函数值小于0(负数)根据字符的ASCII码值依此对字符数组1和字符数组2所指字符串对应位置上的字符两两进行比较,当出现第一对不同的字符时,即由这两个字符决定所在串的大小、13.打开文件操作,fopen函数用来打开一个文件,其一般形式为 "文件指针名fopen(文件名,使用文件方式);";文件结束检测函数feof函数;写字符函数fputc,功能是把一个字符写入指定的文件中,函数调用的形式为"fputc(字符量,文件指针);"其中,待写入的字符量可以是字符常量或变量,被写入的文件可以用写、读写、追加方式打开。文件一旦使用完毕,需使用关闭文件函数fclose将文件关闭,以避免文件的数据丢失等错误。14.迭代法求方程的实根;dowhile循环语句,其形式为: do 语句 while(表达式);dowhile循环与while循环的不同在于,它先执行循环中的语句,然后再判断表达式是否为真, 如果为真则继续循环;如果为假, 则终止循环。因此, dowhile循环至少要执行一次循环语句。double x0,x1;x1=0.0;dox0=x1;x1=cos(x0);while(fabs(x0-x1)>=1e-6); return x1;函数fun的功能:将字符串中的前导*号全部移到字符串的尾部。本题解题思路:(1)定义一个指针并指向字符串的首地址;(2)利用循环语句找出字符串的前导*号的个数n;(3)利用循环语句把剩余的字符拷贝到另一个字符串中;(4)在字符串的末尾接上n个*号。void fun( char *a )int i=0,n=0;char *p;p=a;while (*p='*') /*判断*p是否是*号,并统计*号的个数*/ n+;p+;while(*p) /*将前导*号后的字符传递给a*/ ai=*p;i+;p+;while(n!=0)ai='*'i+;n-; ai='0'函数fun的功能:除了字符串前导的*号之外,将串中其他*号全部删除。void fun( char *a ) int i=0; char *p=a; 定义一个临时指针p,初始指向原串首地址 while(*p&&*p='*') 利用循环语句把字符串前导*号拷贝到原串; ai=*p; i+; p+; while(*p) 继续移动指针,把串中和串尾的非*号字符拷贝到原串; if(*p!='*') ai=*p;i+; p+; ai='0' ;为修改后的字符串赋结束字符'0'。要求统计在tt所指字符串中'a'到'z'26个小写字母各自出现的次数,并依次放在pp所指数组中void fun(char *tt, int pp)int i; for(i=0;i<26;i+)ppi=0; /*初始化pp数组各元素为0*/ for(;*tt!='0'tt+) if(*tt>='a'&&*tt<='z') pp*tt-'a'+; 【下标】a为pp0,b为pp1.对于一个字符串要删除其尾部的*号,只需要在最后一个不是*号的字符后面加上结束符号0。void fun( char *a )while(*a!='0') a+; a-; /*指针a指向字符串的尾部*/while(*a='*')a-; /*指针a指向最后一个字母*/*(a+1)='0' /*在字符串最后加上结束标志符*/【解题思路】具体操作为:首先找到字符串的结尾,然后从最后一个字符开始往前逐个判断是否为*号,直到找到非*号字符为止,最后在该字符后面加上结束符号'0'。-