C语言 心得

时间:2024.2.18

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

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

算法低级

证据: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语言小结


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);

}

更多相关推荐:
日语学习心得

数学与信息科学学院数学1班00号某某基础日语会话速成课心得我起初学习日语是因为对日本动漫感兴趣由于想更进一步了解日本的语言文化便选修了基础日语会话速成课怀着新鲜感我开始了这门课程但几节课下来我发现学好日语并不是...

日语 学习入门心得

1培养一点兴趣进入大学接触到日语这种过去可能完全没有接触过的语言有些同学难以适应不得要领成绩欠佳时推脱说我对日语没兴趣所以怎么也学不好我觉得这借口不高明语言学习是一种技巧性的学习有点类似学开车肯花功夫且功夫花到...

日语心得

日语心得班级姓名学号日语心得我学日语是从看动画片听日本音乐开始的由于自己对日本动画片和音乐产生了浓厚的兴趣故使我对学日本语言也产生了强烈的愿望日本动画片在世界独领风骚所配音乐优美动听要想看最新原版的动漫就得学习...

我的日语学习心得

我的日语学习心得学英语学了十二年过了四级过六级但是做梦也没有想到我竟然学了日语并且以日语作为自己的工作语言那是我刚读十七年级的时候家穷一门心思想挣钱打着计算机的旗号要去找工作我也明白资本越多越挣钱的道理所以决定...

日语学习心得

今天我想在这里分享一下学习日语的心得以及考日语证书方面的经验第一步就是掌握五十音图它的发音排列写法都做到心中有数这对我们以后学习单词语法都会有帮助一开始接触五十音图确实会觉得很复杂一下子记不了那么多我们可以给自...

初级日语学习的心得与体会

初级日语学习的心得与体会学院数学与信息科学学院班级12数本2班姓名曾瑾学号20xx24092224时间如奔腾的江水一去不复返几周来的日语选修课已接近尾声对课堂上的那种学习日语的激情却依依不舍说实在的现在日语作为...

日语自学心得

日语自学心得自学日语至今2年多了觉得还是蛮有意思的现在想总结一下这2年来的经验1首先是五十音图先是读一定要跟着录音读读到像唱歌一样熟悉然后先是横着读然后是竖着读再来是写在小学生田字格本上写一个田字可以写四个很重...

日语学习心得

日语学习心得学习日语对中国人来讲其实是有优势的且不说它里面有很多汉字就说它的发音好多都跟汉语也很像这也是当时我选择它为二外的一个重要原因吧现在一年学下来由原来的一个门外汉到现在的菜鸟级应该说这其中还是有点滴感受...

二外日语学习心得

更多日语学习方法请加早道官方微信早道日语二外日语学习心得发表时间20xx921115010信息来源日语论坛点击3982日语学习心得南京师范大学范晓燕学习日语对中国人来讲其实是有优势的且不说它里面有很多汉字就说它...

Dojaubd我的日语学习心得

懒惰是很奇怪的东西它使你以为那是安逸是休息是福气但实际上它所给你的是无聊是倦怠是消沉它剥夺你对前途的希望割断你和别人之间的友情使你心胸日渐狭窄对人生也越来越怀疑罗兰我的日语学习心得学英语学了十二年过了四级过六级...

日语学习心得小结

日语学习心得去年12月的日语等级考试成绩如今已经公布承蒙新世界以及高老师的栽培我取得了不错的成绩在此有幸写下一篇在日语学习中的一些心得与感悟希望能对正在努力的新世界的学员们有一些帮助其实正式从五十音图开始学习日...

初级日语学习心得

公选课名称班级学号姓名初级日语时间如奔腾的江水急速而又一去不复返几周来的日语课已接近尾声对课堂上的那种学习日语的激情却依依不舍说实在的现在日语作为一门小语种在中国很流行许多学生学习日语的原因各有不同有的为考研有...

心得 日语(46篇)