% 求余(求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...