C语言 心得(4100字)

来源:m.fanwen118.com时间:2021.6.14

★难度稍微有点大的都要打草稿

时间长、效率低的根本原因:

算法低级

证据:1,约瑟夫环(笨方法—链表,巧妙—数学法) 2,二叉树(笨方法—模拟,巧妙—数学法(奇偶法))

事实证明:学好数学并巧妙利用是掌握高级算法的基础!!!!

评价一个程序的优劣可从以下几个方面考虑: 代码长度;运行效率;适用范围; 出错机率(变量的多 少、或使用高风险的函数,如gets或指针)。

提升方向:递归,指针,

位运算

2,编程之前,读懂题意(一字一句)输入,输出注意格式(最后一个不能有空格)

Int first = 1;

for ()

{

If ( first ) first = 0;

else printf ( “” );

Printf( “%d”, a[i] );

}

3,较大的数组(n>10^5)要放在main外面,否则会异常退出。

16,float a = 1.456保留2位小数并且四舍五入{ (int)(a*100+0.5)/100 } 20,善用break,continue;

21,scanf 后用gets的话,先打getschar();

22,float a[20]={0.1}; 只是把0.1赋给了a[0],其他的自动初始化为0.000; 23,重复使用同一变量或数组,一定要清零。。

25,判断一个事物是否具有某一性质的函数————谓词(predicate)

26,建议把谓词命名为is__xxx,如is__prime(即is it a prime?),返回值0表示假。

27,编写函数时,应尽量保证它能对任何合法参数都能得到正确的结果,如果不行,应在显著位置标明函数的缺陷,以免误用。 28,memset一个字节一个字节的赋值

需要的头文件

在C中<string.h>

在C++中 <cstring>

补充:一点技巧

memset可以方便的清空一个结构类型的变量或数组。

如:

structsample_struct

{

charcsName[16];

intiSeq;

intiType;

};

对于变量

structsample_strcutstTest;

一般情况下,清空stTest的方法:

stTest.csName[0]={'\0'};

stTest.iSeq=0;

stTest.iType=0;

用memset就非常方便:

memset(&stTest,0,sizeof(structsample_struct));

如果是数组:

structsample_struct TEST[10];

memset(TEST,0,sizeof(structsample_struct)*10);

另外:

如果结构体中有数组的话还是需要对数组单独进行初始化处理的。

28,头文件和memset一样

int a[N], b[N]; memcpy( b, a, sizeof(int)*k) 把a中的前k个元素赋给b数组;

double a[N], b[N];memcpy( b, a, sizeof(double)*k) 把a中的前k个元素赋给b数组; memcpy( b, a, sizeof(a)) 把a中所有的个元素赋给b数组。

29,处理无符号的指令mul(乘)、div(除)、movzx

处理有符号的指令imul(乘)、idiv(除)、movsx

30,编译器默认为无符号指令

31,使用位段和二进制掩码时,才使用无符号数。

32,strlen的返回值是无符号数。

33,(32位)int的范围:(2147483647+1)即-2147483648或-0——2147483647

34,%d 十进制输出、%o(小写字母) 八进制、%x(如为小写,则输出小写;反之,大写)十六进制;

八进制数表示法(如10表示为012(数字零)),十六进制(20表示为0x14或0X14(数字));

如要输出前缀%#o, %#x, %#X;

%e 指数法输出

实用函数大集锦: 1, string头文

件 memset(多用来清零),memcpy(数组复制) 2, m

ath头文件 double si

n (double);正弦 double cos (double);余弦 double ta

n (double);正切 double sqrt (double);开平方 double

pow(double x, double y);计算以x为底数的y次幂 double cei

l (double); 取上整 double floor (double); 取下整 ,相当于

int强制转换 double fabs (double);求绝对值 3, s

tdio头文件 fge

ts( str, N, stdin/fin(文件名)); sprintf (s, “%d”, x)

把整数x变成字符串s ; fprintf与之类似; sscanf (s, “%d”, &b) 把

字符串s以整数b输出。 4, c

type头文件 isalpha是否为英文字母 isdigit isu

pper islower ispunct是否为标点符号 toupper tolower 5, #

in

clude<assert.h>作用: 规定参数范围,限制非法的函数调用,“迫使”程序员编出

高质量的程序 示例:intis_prime( int x ) { assert

( x>=0 ); }

输入结束

标志: 1, gets != NULL 返回值:它收到的字符串的地址 表示gets函数

没有获得任意数据之前如果遇到文件结尾标志将返回NULL。可以这样测试一下,运行程序,不输

入任何字符,直接按ctrl+z。。 2, s

canf ( “%d%d”, &a, &b )==2; s

canf()函数返回的值为:正确按指定格式输入变量的个数;也即能正确接收到值的变量个数;

当scanf函数的第n个变量格式不正确时,返回值为n-1. 3, g

etchar() != EO

F char c; c = getchar; putchar(c);也可以 getchar的返回

值为该字符的ASCII码值(int)

调试技巧:

1,watch窗口中,在整形变量后面加上",c"可以显示该变量对应的ASCII字符; 'v',d就是显示字符'v'对应的十进制ASCII码值是118; 'v',x显示的是对应的十六进制的ASCII码值;

watch窗口中,把指针当成数组看,只要在指针名后面加上一个长度,就可以想看数组一样看到对应的数据了。比如我上面的a,4。那么如果一个指针指向的数据很大,比如一个整形指针a是指向一个1000个 整数的大块内存,我只想看看最后4个数据,要怎样呢?那就 (a+996),4 呗。从第996个数据开始,看4个~;

在watch窗口中察看错误原因,只需要在错误之后面颊上",hr"就可以了。比如我上面的dwError,hr和 2, hr都能够显示错误消息;

2,Figure

1设置高级位置断点

2 然后选择D行所在的断点,然后点击condition按钮,在弹出对话框的最下面一个编辑框中输入一个很大数目,具体视应用而定,这里1000就够了。

3 按F5重新运行程序,程序中断。Ctrl+B打开断点框,发现此断点后跟随一串说明:...487 times remaining。意思是还剩下487次没有执行,那就是说执行到513(1000-487)次时候出错的。因此,我们按 步 骤2所讲,更改此断点的skip次数,将1000改为513。

4 再次重新运行程序,程序执行了513次循环,然后自动停在断点处。这时,我们就可以仔细查看DoSome是如何返回0的。这样,你就避免了手指的痛苦,节省了时间。 再看位置断点其他修饰条件。如Figure 1所示,在“Enter the expression to be evaluated:”下面,可以输入一些条件,当这些条件满足时,断点才启动。譬如,刚才的程序,我们需要i为100时程序停下来, 我们就可以输入在编辑框中输入“i==100”。

另外,如果在此编辑框中如果只输入变量名称,则变量发生改变时,断点才会启动。这对检测一个变量何时被修改很方便,特别对一些大程序。

用好位置断点的修饰条件,可以大大方便解决某些问题。

3,对于用while输入多组数据,一定多测几次,及时发现数据溢出或未清零等事故。

1, i

n

t

(

3

2

)

-

(

2

^

31)——(2^31-1) 即-2147483648——2147483647 2, u

nsigne

d int0——(2^32-1) 即 0——4294967295 3, f

loat–(2^128

)——(2^128) 即 -3.40*10^38——3.40*10^38 4, d

ouble –

(2^1024) ——(2^1024) 即 -1.79*10^308——1.79*10^30

8 其中 float 4字节共32bits, 1bit(符号),8bits(指数),23bi

ts(尾数),精确到6位小数,不安全; double 8字节共64bits, 1bit(符

)

1

1

b

i

t

s

转义序列:1,\a 铃声(提醒) (指数),52bits(尾数),精确到15位小数。

2,\f 换页

3,\r \n 回车换行 4,\t 水平制表符 5,\v 垂直制表符 6,\’单引号 7,\”双引号 8,\\ 反斜杠 9,\? 问号


第二篇:C语言小结 13500字

C语言小结

一、 C语言结构

1、主函数用main作为函数名,每个C程序都必须包含且仅含一个main函数,C程序的执行是从主函数中的第一句开始,到主函数中的最后依据结束

2、头文件的引用#include<name.h>或#include“name.h”

3、函数由函数首部和函数体组成:函数首部,即函数的第一行,包括函数名、函数类型、函数参数名和参数类型,一个函数后面必须跟一对圆括号;函数体,及函数首部下面的花括号{}内的部分,如果一个函数内有多个花括号,最外层的一对{}为函数体的范围

二、 数据类型及其运算

1、标识符:标识符可作变量名、符号名、函数名、数组名、文件名以及具有特定含义的名字。合法的标识符由字母、数字和下划线组成,并且第一个字符必须为字母或下划线,C语言区分字母大小写

2、数据类型

分类: 整型: int,长整型以long int或long表示;实型:单精度float、双精度double、长双精度型long double; 字符型:char 结构体:用户定义的一种数据结构,它包含若干个不同数据类型(当然也可以相同)的数据项,这些数据之间有内在的联系 共用体:使几个不同的变量共占同一段内存的结构 指针类型:专门用来存放地址的数据类型 空类型:在定义的时候不确定数据类型,而在使用的时候通过强制转换来确定的数据类型 定义:结构体如:struct student {int num;char name[20];}student1,student2; 共用体:union共用体名{成员表列}变量表列; 空类型:基本型 *指针变量名 如float *p;

3、C运算符的种类、运算优先级和结合性 见课本365面(很重要)

4、数据转换:自动转化(内存长度低的向高转) 强制转换: 将结果转换成所需要的数据类型,如;float s=1.23; int a; a=(int)s;

5、 C表达式类型和求值规则:

赋值表达式:<变量><赋值运算符><表达式> 算术表达式 关系表达式:一般表达式:<表达式1><关系运算符><表达式2>(“真”用1表示“假”用0表示) 逻辑表达式:一般形式<表示式1><逻辑运算符><表达式2>(真1、假0) 条件表达式:一般形式:表达式1?表达式2:表达式3 逗号表达式:一般形式:表达式1,表达式2,??,表达式n。整个逗号表达式的值为表达式n的值

例:已有定义:int x=7,y=8,z=9;,则表达式!(x+y)+z-1&&y+z/2的值为1

三、 基本语句

1、简单语句: 空语句: “;”占一个语句位置,但并不执行任何操作 说明语句:这是对数据和函数进行描述的语句,如定义变量语句、外部变量申明和函数声明等。所有说明语句都必须放在其他非说明语句(或执行语句)之前 表达式语句:一定要有分号,分号是语句的一部分 流程控制语句:分为两类:构成流程的控制语句,如if语句、switch语句和while语句、do-while语句、for语句;流程转向语句,如break语句、continue语句、return语句和goto语句 复合语句:复合语句之后不必再用分号结束

2、数据的输入与输出:输入;getchar()函数 作用是从终端设备接受一个字符,只有按下Enter键时,读入才开始;scanf(格式控制符串,输入项地址表);输出:putchar()函数 作

用是向终端输出一个字符;printf(格式控制字符串,输出表链);

格式字符:f格式符:%m.nf指定输出的数据共占m列,其中有n位小数,如果数值长度小

于m,则左端补空格; o格式符:以八进制数形式输出整数; x格式符:以十六进制数

形式输出整数; u格式符:用来输出unsigned类型数据,即无符号数,以十进制形式输

四、选择结构程序设计

1、if语句:(1)、if(表达式)语句 (2)、if(表达式) 语句1

else 语句2

(3)、if(表达式1)语句1 (4)、 if(表达式1) else if(表达式2)语句2 if(表达式2)语句1 else if(表达式3)语句3 else 语句2 ?? else

else if(表达式m)语句m if(表达式3)语句3 else 语句n else 语句4 (注意:else总是和它上面的最近的未

配对的if配对)

2、switch语句:

(1)、 (2)、switch(表达式1) switch(表达式) {case 常量表达式1-语句1 {case 常量表达式1-语句1 case 常量表达式2:switch(表达式2)语句2 case 常量表达式2-语句2 case 常量表达式3:switch(表达式3)语句3 ?? ??

case 常量表达式n-语句n case 常量表达式n:switch(表达式n)语句n default :语句n+1 default :语句n+1 } }

五、循环结构程序设计

1、for循环结构:一般表达式为:for(表达式1;表达式2;表达式3){??}

可以改为while循环:表达式1;

while(表达式2)

{语句

表达式3;

} (注:“ for(;;) ”相当于“ while(1) ”

2、while和do-while循环结构: while语句的一般形式:while(表达式) do-while就语句的一般形式:do {语句} {循环体语句} while(表达式);

3、continue语句和break语句: (1)、continue语句的一般形式为:continue; 其作用

是结束本次循环,即跳过循环体内continue语句后面尚未执行的语句,接着进行下一次是否

执行循环的判定

(2)、break语句的一般形式是:break; 跳出循环体,即提前结束循环,接着执行循环后面

的语句,break语句不能用于循环语句和switch语句之外的任何其他语句

注:continue语句只结束本次循环,而不是终止整个循环的执行。而break语句则是结束整

个循环,不再判断执行循环体的条件是否成立。

4、循环的嵌套:(1)、while() (2)、do (3)、for(; ;) { ? {? {? while() do for(; ;) {?} {?} {?} } while(); } }

(4)、while() (5)、for(; ;) (6)、do {? {? {? do while() for(; ;) {?} {?} {?} while(); ? } ? } while(); }

六、 数组的定义和引用

1、数组的定义与引用:定义数组时,[ ]不能写成(),数组长度必须明确指定;

赋初值时,可以不明确说明数组长度(注:不能使用如下形式数组元素赋以相同的初值:如

int a[8]={8*0};)

2、字符数组:系统对字符串常自动加一个作为结束’\0’标志 (#include<string.h>)

字符串处理函数:printf()函数,一般形式是:printf(“%m.ns”,字符类型指针); puts()

函数,一般形式是:puts(字符类型指针); scanf()函数,一般形式是:scanf(“%ms”,字符

类型指针); gets函数,一般形式是:gets(字符类型指针); 字符串连接函数strcat()

函数,一般形式是:strcat(字符数组1,字符数组2);(数组必须足够大) 字符拷

贝函数strcpy()函数,一般形式是:strcpy(字符数组1,字符串2); (作用是将字符串2复制到

字符数组1中去) 字符串比较函数strcmp()函数,一般形式是:strcmp(字符串1,

字符串2)(串1=串2,返回0;串1>串2,返回一正整数;串1<串2,返回一负整数) strlen()函数,一般形式是:strlen(字符型指针);(测字符串的实际长度)

七、 函数

1、有参函数的定义:类型标识符 函数名 (形式参数列表)

{ 声明部分 语句 }

“定义”是指对函数功能的确立,包括指定函数函数名、函数类型、形参及其类型、函数体

等,它是一个完整的、独立的函数单位 “声明”的作用则是把函数名、函数类型以及

形参的类型、个数和顺序通知编译系统,以便在调用该函数时系统按此进行对照检查(例如

函数名是否正确,实参与形参的类型和个数是否一致)但int型可不声明

2、函数的返回值:return;如此使用return语句时,只起控制流程的作用,不带回任何值,

故次时函数亦为void型 return 表达式; 此表达式的值就是函数的返回值

3、形参、实参和参数值的传递:参数值传递分为:值传递和传地址。值传递不改变实参的

值,传地址一般是指指针变量作形参(改变实参的值)

4、函数的调用:函数不能嵌套定义,但可以嵌套调用、递归调用

5、静部变量用“static”声明 ,寄存器变量用进行“register”声明 ,外部变量用“extern”

声明,自动变量用“auto”声明,“auto”可省略 ,在函数类型(名)加extern表示外部函数

八、 编译预处理

1、宏定义:不带参的一般形式为:#define 标识符字符串 带参的一般形式为:#define

宏名(参数表)字符串 可以用#undef命令终止宏定义的作用域 宏定义只代换

不分配内存,宏定义不存在类型问题,宏定义不占运行时间,只占编译时间每展开一次都使

程序增长,而函数调用不会使程序变长

2、条件编译的几种形式(1)、# ifdef标识符 (2)、# ifndef标识符 (3)、# if表达式 程序段1 程序段1 程序段1 # else # else # else 程序段2 程序段2 程序段2 # end if # end if # end if

九、 指针

1、地址即指针,一般定义为:基本类型 *指针变量名

2、只有整型变量的地址才能放到指向整型变量的指针变量中

3、指针变量作为函数参数:不能企图通过改变指针形参的值而使指针实参的值改变

4、数组与指针:如果指针变量p一指向数组中的一个元素,则p+1指向同一数组中的下一

个元素 p+i和a+i就是a[i]的地址 指向数组的指针变量,p[i]与*(p+i)等价 数组

a代表数组首元素的地址,它是一个指针常量,所以a++是无法实现的 *p++等价于

*(p++) 如果用指针变量作实参,必须先使指针变量有确定值,指向一个已定义的

单元 二维数组a[2]值就是&a[2][0] a[0]+1和*(a+0)+1都是&a[0][1] *(a[i]+j)或

*(*(a+i)+j)是a[i][j]的值 *(a+i)和a[i]等价 a[i][j]的地址为&a[0][0]+i*m+j 字符

数组可以在定义时整体赋初值,但不能在赋值语句中整体赋值

5、p+i代表地址计算:p+c*i,c为字节数 不应把一个整数赋给指针变量,只能将变量的

地址赋给指针变量

十、 位运算

1、如有一个整数a(2字节),想要其中的低字节,只需将a与八进制数377按位与即可,

如想取其高字节,只需c=a&0177400(0177400表示八进制数的177400)

2、假如a=3,b=4.想要a和b的值互换,可以用如下赋值语句实现:

a=a^b;

b=b^a;

a=a^b; (课本325页例12.2也比较重要)

十一、 文件操作

1、分为ASCII文件和二进制文件 文件型指针:FILE *fp;

2、了解常用函数的格式: 打开一个文件:if((fp=fopen(“file1”,r))==NULL)

{printf(“cannot open this file\n”);

Exit(0);

}

fputc函数的功能是把一个字符写到磁盘文件上,一般形式是fputc(ch,fp) ch是要输出的字

符,fp是文件指针变量 fgets函数的功能是从指定的文件读入一个字符串,一般形式是

fgets(str,n,fp); str是字符数组,n为要求得到的字符个数,fp是文件指针变量

fscanf()函数的功能是根据文本文件中的格式输入数据,一般形式是:fscanf(文件指针,格式控制字符串,输出列表); fprintf()函数的功能是将内存中的数据转换,并以ASCII码形式输出到文本五文件中,起调用的一般形式为:fprintf(文件指针,格式控制字符串,输出表列)

十二、 特别提醒

1、3种基本结构:顺序结构,选择结构,循环结构

2、不能把一个字符串常量赋给一个字符变量

3、注意++,--(右结合性) (i的值为3)(i++)+(i++)+(i++)的值为9; (++i)+(++i)+(++i)的值

4、课本48页 表3-3,81页 表4-1, 243页 表10-2,276页 表10-4,333页 表13-1,347页 表13-3,364页 附录A,365页 附录C

十三、 速做机试

1、windows 操作可使用快捷键(如:Ctrl+c复制,Ctrl+v粘贴,选中后按F2重命名),能快速使用键盘也是件好事,使用鼠标打开最好双击,不要点右健,再点打开那样会很慢

2、改错、填空:类推,比方说:若i=0;那行错了,则很可能是i=1;

3、程序设计:牢记报告上一些基本程序,比方说:排序,公倍数公约数,同构数,素数 例 :水仙花数 (一个三位正整数,其个位数字的立方和等于该数本身)

若i是一个三位数,则百位数为a=i/100 十位数为b=i/10%10 个位数为c=i%10

1)、 for (a=1;a<=9;a++)

for (b=0;b<=9;b++)

for (c=0;c<=9;c++)

if (a*100+b*10+c==a*a*a+b*b*b+c*c*c) s+=a*100+b*10+c;

素数 1)、for (i=101;i<500;i+=2) 2)、isp(int a)

{ {int t,j; j=1;t=2;

for (j=2;j<=i/2;j++) while((t<=a/2)&&j)

if (i%j==0) break; { if(a%t==0) j=0;

if (j>i/2 && i%10!=3) s+=i; else t=t+1;

} }

return(j);

}

计算1+2+3+4+?+n<2000的最大n的值

int n=0,s=0;

while(s<2000)

s = s + (++n);

n--;

s=1+1/12+1/123+1/1234+1/12345

for (i=1;i<=5;i++)

{

t=t*10+i;

s=s+1.0/t;

}

计算100以内的全部同构数之和(同构数即:它出现在它的平方数的右端)

for(i=1;i<100;i++)

if( ( (i*i-i) % (i<10?10:100)==0 ))

C语言小结

s=s+i;

int i,s=4;

for (i=1;i<8;i++)

s=(s+2)*3;

完全数:(一个数如果恰好等于它的因子(自身除外)之和)

do

{if(k%i==0) sum+=I;

i++;}

while(i<=k/2);

最大公约数和最小公倍数

int fun1(int m,int n) int fun2(int x,int y)

{int t,r; {return((x*y)/fun1(x,y)); if(m>n) }

{t=n; n=m; m=t;}

while(m!=0)

{r=n%m; n=m; m=r;}

return(n);

}

3*3二维矩阵的转置

for(i=0;i<3;i++) for(i=0;i<2;i++)

for(j=0;j<4;j++) for(j=i+1;j<3;j++)

y[j][i]=x[i][j]; {t=p[i][j]; p[j][j]=p[j][i]; p[j][i]=t;}

折半查找法

while((!sign)&&(top<=bott)) {mid=(bott+top)/2; if(numble==a[mid])

{printf(“it’s position is %d\n”,mid+1); sign=1;} else if(numble<a[mid]) bott=mid-1; else top=mid+1; 排序

冒泡法排序(对十个数排序) 选择法排序 for(j=0;j<9;j++) for(i=0;i<9;i++) for(i=0;i<9-j;i++) if(a[i]>a[i+1]) {t=a[i]; a[i]=a[i+1]; a[i+1]=t; } 杨辉三角

for(i=1;i<N;i++) {a[i][1]=1; a[i][i]=1;} for(i=3;i<N;i++) for(j=2;j<=i-1;j++) a[i][j]=a[i-1][j-1]+a[i-1][j] for(i=1;i<N;i++) { for(j=1;j<=i;j++);

printf(“%6d”,a[i][j]); printf(“\n”); }

n的阶乘 float fac(int x) {float y;

if(x==0||x==1) y=1;

else y=fac(x-1)*x; return(y); }

比较三个数的大小

#define MAX(a,b) ( (a)>(b)?(a):(b) ) pintd(“max=%d\n”,MAX(MAX(a,b),c) );

字符串排序 if(strcmp(s[i],s[i+1])>0) {strcpy(tepm,s[i]); strcpy(s[i].s[i+1]); strcpy(s[i+1],temp); } (char temp[]; ) {min=i;

for(j=i+1;j<10;j++) if(a[min]>a[j]) min=j;

t=a[i]; a[i]=a[min]; a[min]=t; }

void sortstr(char **p) {int i.j; char *temp; for(i=0;i<5;i++)

{for(j=i+1;j<5;j++)

{if(strcmp(*(p+i),*(p+j))>0) {temp=*(p+i); *(p+i)=*(p+j); *(p+j)=temp;} } } }

数据循环左(右)移

左移c=(value>>(16-n))|(value<<n)

右移c=(value>>n)|(value<<(16-n))

求补码

unsign int getbites(unsign value)

{unsign int z;

z=value&0100000;

if(z==0100000) z=~value+1;

else z=value;

return(z);

}

求s=a+aa+aaa+?aa?a的值

while(i<=n)

{tn=tn+a;

sn=sn+tn;

a=a*10;

++I;

}

十四、小知识点小结

1、 对换两边的数据类型必须相同 malloc(sizeof( struct aa))

2、 计算机算法分为数值运算算法和非数值运算算法

3、 一个算法的特点:有穷性,确定性,零个或多个输入,一个或多个输出,有效性

4、 以ox开头的数是十六进制数

5、 一个int型的变量值的范围是-327668~32767

6、 指数形式:字母E(或e)之前必须有数字,且e后面的指数必须为整数 如:6.344e+003

7、 浮点型数据是按照指数形式存储的 float型变量只能接收七位有效数字

8、 初始化不是在编译阶段完成的(静态存储变量和外部变量除外),而是在程序运行时执

行本函数时赋初值的,相当于有一个赋值语句

9、 scanf(“%3d%3d”,&a,&b); 输入123456 则123赋给a,456赋给b 输入数据时不能规定

精度,即scanf(“7.2f”,&a);是不合法的

10、 在用“%c”格式输入字符时,空格字符和“转义字符”都作为有效字符输入

11、 全局变量在程序的全部执行过程中都在用存储单元

12、 一个变量只能声明为一种存储类别

13、 (定义时不赋初值)对静态局部变量来说,编译时自动赋值0(对数值型变量)或

空字符(对字符变量),而自动变量,不赋值则它的值是一个不确定的值

14、 全局变量用static声明,则该变量的作用域只限于本文件模版

15、 内部函数static int fun(int a,int b) 外部函数extern int fun(int a,int b)

16、 只能对结构体变量中的各个成员分别进行输入和输出

17、 结构体变量.成员名 (*p).成员名 p->成员名 三者等价

18、 typedef int NUM[100];(声明NUM为整型数组类型) typedef可以声明各中类型

名,但不能用来定义变量,没有创造新类型

19、 “按位与”(&),如果两个相应的二进制位都为1,则该位的结果为1;“或”(|)

只要有一个为1,则为1;“异或”(^)同号为0;“取反”(~) 游侠儿

回文数的例子:回文数是指正读和反读都一样的正整数。例如3773等都是回文数。求出[100,9999]以内的回文数是6的倍数的最大回文数。

基本要求

1.根据题目要求设立合适的数据结构,分析数值规律;

2.回文判断用子函数实现;

3. 能够将所有回文数,能被6整除的回文数及最大的回文数等结果保存在文件中 如:所有回文数:??.

能被6整除的回文数:??.

最大回文:??. ??.

最佳答案 #include <stdio.h>

#include <stdlib.h>

int huiwen(char *str) /* 回文子函数 */

{

int len=strlen(str);

int i=0;

for(i=0; i<len/2; i++) {

if(*(str+i) != *(str+len-1-i)) return 1;

} return 0;

}

int main()

{ int i=0;

char str[5];

int hw6[10000] = {0};

int cnt=0;

int max=0;

printf("所有回文数:\n");

for(i=9999; i>=100; i--) {

memset(str, 0, 5);

sprintf(str, "%d", i);

if(huiwen(str) == 0) {

printf("%d\n", i); /* 这里把所有回文数打印出来 */

if(i % 6 == 0) {

hw6[cnt++] = i; /* 记录下被6整除的回文数 */

if(max == 0)

max = i; /* 最大被6整除的回文数,只会被执行一次 */

}

}

}

printf("能被6整除的回文数:\n");

for(i=0; i<cnt; i++) {

printf("%d\n", hw6[i]);

}

printf("最大回文数: %d\n",max);

}

更多类似范文
┣ 日语学习体会 3800字
┣ 获奖感想(日语) 300字
┣ 日语学习体会 3800字
┣ 关于日语学习方法的总结 2600字
┣ 更多心得 日语
┗ 搜索类似范文