一、 如何把自己的函数加进去
①无返回值
#include<stdio.h>
void jolly(void);
int main(void)
{
jolly();
return 0;
}
void jolly(void) //这里没有‘;’
{
printf("forhe's a jolly goof fellow\n");
}
/*这里main是主函数,先执行main(),再执行自己定义的函数*/
②有返回值
#include<stdio.h>
double sum_squares(long a,long b);
int main()
{
………….
}
Double sum_squares(long a,long b)
{
Doubletotal=0;
Long I;
………….
Return total;
}
二、 print语句
1、会替换以前的数据,转义序列
#include<stdio.h>
Int main()
{
float salary;
printf(“Enter your desired monthly salary:”);
printf(“$_______\b\b\b\b\b\b\b”);//\b是往后退
printf(“%f”,&salary);
printf(“\n\t$%.2f a month is $%.2f a year.”,
salary,salary*12.0);//3
printf(”\rGee!\n”);//4
/*对于第三行,打印完后,光标会在本行不动,继续读第4个,这时/r会返回第一行,打印Gee!,因为打印是替换机制,所有打印第四行必须替换第三行东西。/t是制表符,和tab建作用相同,有时系统设置tab是4个空格或8个空格,输出就会有几个空格*/
2、print语句后从右到左计算
Int a=1;
Printf("a=%d,++a=%d”,a,++a);
输出 2,2
三、 数据类型
1、浮点数舍入错误
Float类型的数字通常只能储存所有数字开头起6或7位有效数字。
如2e10+1再减去2e10时显示只能2后5到6个零
2、double16位有效数字
Float7位有效数字(3.500000)
※3、类型转化
①char和short都会自动转换成int
②float会被转换成double
③如果目标类型事无符号整型,且待赋值的数是整数时,额外的数会被忽略。如:目标类型是8位unsigned char,代付的值是原始数据求模256
四、(字符串和格式化输出)
1、char name[40],此时scanf(“%s,name”)
//name不用取地址符&
2、scanf()在取到合适的值后会在有空格的地方停止
//如输入Kevin chen,输出只会是Kevin
/*scanf(“%d ,%d”)格式字符串的空白意味着跳过下一个输入项前面的所有空白*/
3、使用#include<string.h>才可以使用strlen()函数,给出字符串中字符长度(包括空格和标点符号)
4、c预处理
#define BOOK “westlife’biography”
/*用大写字母表示常量,对于字符串,必须用双引号,并且双引号不会打出*/
/*如果想输出双引号,单引号,斜杠,”\””就会输出双引号*/
5、const限定符
Const int vim=15
//此刻vim值不可修改
6、printf(“010.2f”,qq);
/*10前的0代表如果qq不够10个宽度,用零补,如0572043666*/
7、%.4s 、
//意味着对于python来说只打印pyth
8、打印较长的字符串
//不能在双引号括起来的字符串中间直接断开
方法①用\隔开
②用“
//对于一句话,可以使用多个“隔开
9、printf()用*表示宽度
Printf(“the number is %*d”,width,number);
例子
#include<stdio.h>
#include<string.h>
int main()
{
charname1[20];
charname2[20];
printf("please enter two names:");
scanf("%s %s",name1,name2);
printf("%s %s\n",name1,name2);
printf("%*zd%*zd\n",strlen(name1),strlen(name1),strlen(name2),
strlen(name2));
printf("%zd%*zd",strlen(name1),strlen(name1),strlen(name2));
return 0;
}
输入Kevin bee
输出Kevin bee
5 3
5 3
10、scanf中会跳过含有*的项
Scanf(“%*d,%*d,%d”,&n);
Printf(“the last number is %d”,n);
11、打印%,输出时必须用两个%,这样才可输出%
12、%s会是打印一句话,%c会打印一个字符
13、%lf表示double类型
14、最后程序的getchar会取走scanf没有取走的换行符(每次后一个scanf会将上一个scanf后用户输入的换行符替换掉),多加一次putchar就会起到暂停的作用
五、 运算符、语句
1、整数除法结果的小数部分被丢弃,这一过程被称为截断
2、7.0可直接用7.表示
3、截断计算结果的小数部分,不会四舍五入
4、求余数的运算符只能用于整数,不能用于浮点数
当char类型赋值超过一字节大小,待赋值将是原始值求模(求余数)256
※5、强制类型装换
A=1.6+1.7=3.3
B=(int)1.6+(int)1.7=2
例如(float)9变为9.0
6、打印字母a-g
Char ch=’a’;
While(ch<=’g’)
Printf(“%5c”,ch++);
Printf(“\n”);
/*”=”一定要在《后面*/
7、while循环注意
当while这一句后没有花括号,紧接着一句在循环内,其余不在
例子:while(x++<103)
Printf(“%dd\n”,x);//这句话在循环内
Printf(“%4d\n”,x);//没有在循环内
※8、将程序段带注释的成功去除
#if 0
语句//注释
#endif
这样带注释的语句就成功去除
9、想要使用pow()函数
要用<math.h>,同时使用gcc –lm(加文件)
#include<stdio.h>
#include<math.h>
void cube(double x);//说明是double类型
int main()
{
double n,m;
printf("you will get a cube\n");
printf("please enter a number\n");
scanf("%lf",&n);
m=pow(n,3);
cube(m);//给参数
return 0;
}
void cube(double x)
{
printf("%f",x);
}
※10、逻辑运算符
a=1,b=2,c=3,d=4,m=1,n=1;
(m=a>b)&&(n=c>d)
M=0,所以这句话的真值为0,此时不在运行后一句话,既n不改变
所以输出m=0,n=1
11、sizeof运算符
①sizeof(x=f+2)
/*不会对x赋值,只是求x此时所占的字节*/
②sizeof()以字节微单文给出指定类型大小
/*运算对象是类型时,圆括号必不可少,如int,但是对于特定量,可有可无,但是一直用带括号的,输出的格式化是%zd代表十进制,%zx代表16进制*/
③sizeof一个数组名的时候会算上所有
Float a【10】
Sizeof(a)=40
12、条件运算符 ? :
Max=(a>b)?a:b
/*如果a》b成立,则max=a,否则max=b
六、 循环
1、 a=scanf(…)的情形
a=scanf(‘%ld”,&num);
/*如果输入的是字符串要求的,a此时=1,既a为真*/
2、 while(a)和while(a!=0)相同
3、为了检查比较的==和=不用错,一般用1==stay来表示
4、_Bool类型
_Bool input_is_good//不用下划线,is是另外一种用法
给这句话赋值就可以弄布尔值,布尔值只能存1或0,表示真假
5、关系运算符(<)比算术运算符低(+-),比赋值运算符高
6、①while是入口条件循环,满足开始条件才可循环。
While(scanf(“%d”,&num)==1)
;
/*此时程序会跳过数字,知道不是数字,while结束,此时“;”什么都不做,只是一个空语句*/
②do while是出口条件循环
Do{
Printf(“qq”)
}while();
Statement//这句话不在循环内
7、不能用关系运算符比较字符串,比方xxx==yyy
8、比较浮点数,尽量用《和》,因为浮点数的舍入误差会导致在逻辑上应该相等的不相等。使用fbs()函数算出绝对值可以方便比较浮点数
8、while循环当有数值时,会一直循环
While(age=55)
{
}
/*这种情况也会无限循环,因为还是常数*/
9、while(a)就是等于while(a!=0)或者就是while(a!=false)
10、for循环
①for(count=1;count<=22;count++)
printf(“hello”)
/*顺序是先过count=1,然后再判断,之后打印
接着再进行第三句,更新数据,然后判断(第一句只执行一次)*/
执行第一句之后,还要再判断条件才可输出
※②for(x=1;y<=75;y=(++x*5)+50)
Printf(“%d %d”,x,y);
//等于
For(x=1;y<=75;y=x*5+50)
{
Printf(“%d %d”,x,y);
++x;
}
//也等于
For(x=1;y<=75;++x,y=x*5+50)//使用逗号表达式
③for(printf(“hello”);num!=6;)
/*print只执行一次,num!=6是条件*/
11、①a=249,500;
解释为a=249;
500;
②a=(249,500);
这个时候a=500
12、嵌套循环(输出三角形等问题)
For(row=0;row《ROWS;row++)
{
For(ch=(‘A’+row);ch<(‘A’+CHARS);ch++)
Printf(“%c”,ch);
Printf(“\n”);
}
有行有列
13、数组对于scanf来说&的有无
①char name【20】不用&
②int score【10】,对score【0】赋值,用scanf要用&
七、 分支和跳转
1、 if语句
①if(stament)
statement
else
statement
② if
Else if
Else if
Else
③else会和最近的一个else匹配
If( )①
If( )②
Else//与2匹配
If()①
{
If()②
}
Else//和①匹配
2、 getcahr和putchar
ch=putchar()和scanf(“%c”,&ch)等价
putchar同理
3、常量不能用自增或自减符号
a=2
n=++(a+a++)
错误,a+a++已经是常数
3、 continue和break
4.switch语句
switch(ch)
{
Case ‘a’://常数不加‘’
Statement;
Break;
Case ‘b’:
Statement;
Break;
Default://如果ch既不等于a,也不等于b,则输出这句话
statement
}