C语言学习笔记

发布 2021-05-12 01:31:28 阅读 4416

% 求余(求mod)运算符。

变量命名规则:只能以字母数字下划线三种字符组成,且第一个字符必须为字母或下划线。

scanf(“%d”,&a); prindf(“%d”,a);

c语言中,变量名是区分大小写的。

int 范围 -32768~32768

float的指数部分有8bit(2^8),由于是有符号型,所以得到对应的指数范围-128~128。

double的指数部分有11bit(2^11),由于是有符号型,所以得到对应的指数范围-1024~1024。

由于float的指数部分对应的指数范围为-128~128,所以取值范围为:

2^128到2^128,约等于-3.4e38 — 3.4e38

精度(有效数字)主要看尾数位:

float的尾数位是23bit,对应7~8位十进制数,所以有效数字有的编译器是7位,也有的是8位。

char 字符型只能容纳一个字符。

d 是输出输入格式为整型,用于 int , short int

f 是输出输入格式为单精度浮点型,用于 float

double 变量要用 %lf, l 是 long 的意思。

c 字符 char

转义字符。a 响铃(bel) 007

b 退格(bs) 008

f 换页(ff) 012

n 换行(lf) 010

r 回车(cr) 013

t 水平制表(ht) 009

v 垂直制表(vt) 011

\ 反斜杠 092

? 问号字符 063

' 单引号字符 039

" 双引号字符 034

0 空字符(null) 000

ddd 任意字符三位八进制

xhh 任意字符二位十六进制

运算符优先级:

非(取反,与!=不同,要区别) !a,若a为真,则!a为假。

优先级 (高——低)

(非)算数运算符 (优先级:先括号,后乘除,再加减。)

关系运算符 <=

&和|| 略高于||)

赋值运算符

条件运算符 eg: max=(a>b)?a:b; (如果a>b,max=a,否则max=b)

多分支选择结构。

switch (变量)

case 值1:**;break;

case 值n:**;break;

default: 语句n; /当变量不等于上面所有值时,执行default后的语句。

break 退出{}

case后只能跟一个值,而不能是表达式。

switch(变量)后没有; {前后都没有;

循环结构。for(变量=初值;范围;步长)

循环体}while(条件) \条件满足即循环。

**(循环体)}

函数。函数格式。

返回值类型函数名称(参数表)

语句1;语句2;

语句n;return s;

函数不调用是不执行的。 直接输入函数名称(),即调用函数。

函数名称后面的(参数),是可选的。不填则该函数叫无参函数,有值,则为有参函数。

返回值的语句“return”

void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。

void几乎只有“注释”和限制程序的作用,定义一个void变量没有意义,不妨试着定义:

void a;

这行语句编译时会出错,提示“illegal use of type 'void'”。不过,即使void a的编译不会出错,它也没有任何实际意义。

void真正发挥的作用在于:

(1) 对函数返回的限定;

2) 对函数参数的限定。

数组。变量不能作为数组的维数。

方括号中的维数表达式可以包含运算符,但其计算结果必须是一个长整型值。

数组,顾名思义就是一组同类型的数。

一、数组的声明。

声明数组的语法为在数组名后加上用方括号括起来的维数说明。本接仅介绍一维数组。下面是一个整型数组的例子:

int array[10];

这条语句定义了一个具有10个整型元素的名为array的数组。这些整数在内存中是连续存储的。数组的大小等于每个元素的大小乘上数组元素的个数。

方括号中的维数表达式可以包含运算符,但其计算结果必须是一个长整型值。这个数组是一维的。

下面这些声明是合法的:

int offset[5+3];

float count[5*2+3];

下面是不合法的:

int n=10;

int offset[n]; 在声明时,变量不能作为数组的维数*/

二、用下标访问数组元素。

int offset[10];

表明该数组是一维数组,里面有10个数,它们分别为offset[0],offset[1],…offset[9];千万注意,数组的第一个元素下标从0开始。一些刚学编程的人员经常在这儿犯一些错误。

offset[3]=25;

上面的例子是把25赋值给整型数组offset的第四个元素。

在赋值的时候,可以使用变量作为数组下标。

main()

int i,offset[10];

for(i=0;i<10;i++)scanf(%d,&offset[i]);

for(i=9;i>=0;i--)printf(%d ,offset[i]);

printf();

题目的意思是先输入10个整数,存入到数组中,然后反序输出。

三、数组的初始化。

前面说了,变量可以在定义的时候初始化,数组也可以。

int array[5]=;

在定义数组时,可以用放在一对大括号中的初始化表对其进行初始化。初始化值的个数可以和数组元素个数一样多。

如果初始化的个数多于元素个数,将产生编译错误;如果少于元素个数,其余的元素被初始化为0。

如果维数表达式为空时,那么将用初始化值的个数来隐式地指定数组元素的个数,如下所式:

int array=

这也表明数组array元素个数为5。

main()

int i,array=

for(i=0;i<5;i++)printf(%d ,array[i]);

printf();

最终结果为1 3 5 7 9

四、字符数组。

整数和浮点数数组很好理解,在一维数组中,还有一类字符型数组。

char array[5]=;

对于单个字符,必须要用单引号括起来。又由于字符和整型是等价的,所以上面的字符型数组也可以这样表示:

char array[5]=;用对应的ascii码*/

举一个例子:

main()

int i;

char array[5]=;

for(i=0;i<5;i++)printf(%d ,array[i]);

printf();

最终的输出结果为72 69 76 76 79

但是字符型数组和整型数组也有不同的地方,看下面的:

char array=hello;

如果我们能看到内部的话,实际上编译器是这样处理的:

char array=

看上面最后一个字符'\0',它是一个字符常量,turbo c编译器总是给字符型数组的最后自动加上一个\0,这是字符的结束标志。所以虽然hello只有5个字符,但存入到数组的个数却是6个。但是,数组的长度仍然是5。

int i;

i=strlen(array); 求字符串的长度,在里面*/

可以看出i仍然是5,表明最后的'\0'没有算。

#include

main()

int i,j;

char array=094387fdhgkdladhladaskdh;

j=strlen(array);

for(i=0;i

printf();

其实我们可以根据判断'\0'来输出字符串,看下面的:

main()

int i;

char array=094387fdhgkdladhladaskdh;

for(i=0;array[i]!=0';i++)printf(%c,array[i]);

printf();

举几个例子:

1.输入10个整数存入数组中,然后把它们从小到大排列并放在同一数组中。(思路:先找出最小的,放在第一个位置,为了防止把原先的数覆盖掉,可以把原先的第一个数和最小数的位置互换)。

main()

int array[10];

int i,j,min,stmp;

for(i=0;i<10;i++)scanf(%d,&array[i]);

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

min=array[i];

for(j=i+1;j<10;j++)

if(min>array[j]) 里面的4行语句很重要*/

min=array[j];

stmp=array[i];

array[i]=array[j];

array[j]=stmp;

for(i=0;i<10;i++)printf(%d ,array[i]);

printf();

分析:先让第一个值作为基准,如果后面有比它小的,那么就把这两个数互换一下,同时把基准换成小的值。两个数互换应该这样(stmp=a;a=b;b=stmp;),而不是(a=b;b=a;),想想这是为什么?

必须要用一个变量作为桥梁。这种一个一个的把最小的放在前面的排序方法,我们形象的叫做冒泡法。

2.输入一行字符存入数组,然后把他们反序存入到同一数组中。

#include

main()

char c,stmp,array[80];

int i=0,j;

while((c=getchar())n') 注意这儿的用法*/

array[i++]c;

array[i]='0'; 为什么要加'\0'?是否可以不加?*/

for(j=i-1;j>=i/2;j--)

stmp=array[j];

array[j]=array[i-1-j];

array[i-1-j]=stmp;

for(i=0;array[i]!=0';i++)printf(%c,array[i]);

printf();

3.一个已经排好序的数组,输入一个数,利用二分法把这个数从原数组中删除,数组顺序保持不变。如原数组为1,3,5,7,9,11,13,15,17,19,待删除的数为13,则输出为1,3,5,7,9,11,15,17,19。

二分法:每次都是判断中间的数是否满足要求,若满足则删除,若不满足,则把该数当作边界,然后再找中点。例如这一题,第一次的是10个数的中点,为11,发现11<13,则找11-19的中点15,发现15>13,再找11-15的中点13,正好,则删除。

main()

int array[10]=;

int first=0,end=9,middle=(first+end)/2,num,i;

scanf(%d,&num);

while(array[middle]!=num) /注意这里面的三行***/

if(array[middle]>num) end=middle;

else first=middle;

middle=(first+end)/2;

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

if(i>=middle) array[i]=array[i+1];

printf(%d ,array[i]);

printf();

程序没有考虑当输入的数在原先数组中没有时怎么处理。如果要考虑这个问题,程序该怎么改动呢?

strlen

c语言学习笔记

一元二次方程详解。不管我们写什么样的程序,首先要建起构架。c语言的构架是 include intmain void 我们首先需要把三个系数保存到电脑里面,怎么保存呢?我们会以变量的形式保存到电脑里面。比如说 inta 1 intb 2 intc 3 这个 的意思是赋值的意思,不是相等的意思。什么叫变...

C语言学习笔记

a.1.需要成对敲入的符号。2.文件名不要出现。号,否则无法生成。c或。cpp文件,所以不能编译和运行。3.分号 代表一个语句,只有一个 的语句是空语句,所以下面的 不会报错,但表示若条件成立只执行空语句,并且条件语句结束 if a b 等价于 if a b 空语句。4.格式化输出中,建议用 x输出...

c语言学习笔记

回文数程序。回文数 1234321 12321 费博拉奇序数 1 2,3,5,8,13,21,34 include main void int f1,f2,f3,m f1 1 f2 2 if m 1 f3 1 if m 2 f3 2 else for i 3 i n i f3 f1 f2 f1 f2...