C语言学习

1.helloworld代码

1
2
3
4
5
6
7
#include <stdio.h>  /*头文件,C语言的一个文件,主要用于关键词输入和显示输出的功能,这里的作用是键入stdio的所有内容*/
int main(void) /*int 表示返回的类型为整形,main为函数名,void表示不传任何参数*/
{
int num;
num = 1;
printf("helloworld%d次",num);
}

######helloworld注解

1
2
3
4
5
1.注释用法/**/ 或者//
2.main函数是c程序的基础,所有c程序都是从main函数开始的
3.花括号{}表示函数的主体
4.void可写在括号里,也可以卸载main前面,推荐使用前者,后者有些编译器支持,有些不支持
5.所有变量使用前必须先定义
C程序的构成
1
2
程序是由一个或者多个函数组成,其中必须有一个main函数,函数由函数头和函数体构成,函数头包括预处理(指的是导入的文件)和函数名,函数体位于花括号中并由一系列语句组成,每个语句由分号结束,最后main函数由return结束.
2.算子:指参与运算的值 如 2+3,23就是算子
2.多个函数
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
void fun(void); /*通知编译器要用到该函数,第一个void表函数没有返回值,第二个void表示函数没有参数*/
int main(void)
{
printf("我进来了");
fun(); /*调用该函数*/
printf("结束了");
return 0;
}
void fun(void) /*声明函数*/
{
printf("我是66啊");
}
3.c语言关键字
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
auto 
case
break
char
const
continue
default
do
double
while
else
enum
exterm
float
for
goto
if
inline
int
long
register
restrict
return
short
signed
sizeof
static
struct
switch
typedef
union
unsigned
void
volatile
_bool
_complex
_imaginary

#####3.体重

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
int main(void)
{
float weight;
float value;
printf("请输入你的体重");
scanf("%f",&weight);
value = 770 * weight * 14.5833;
return 0;
}
/*如果scanf报错需要将属性中的常规里的c++/c中的sdl检查改成否*/

scanf()函数提供键盘输入功能,%f表示输入的是浮点数,&weight表示将输入的值赋值给weight
基本数据类型
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
整数:整数以二进制存储
浮点数:存储方式是将整数部分和小数部分分开存储
int有三个修饰符,long short unsigned
short int :占用可能比int更少的空间,适用于小数值存储(不同机器,short可能和int占用一样,如16位)
long int : 可能占用比int更多的内存,适用于大数值的场合
long long int:比long int更大的的内存和存储空间
unsigned int :无符号整形,正数,范围0-65535,int 为有符号,范围-3276832767
现在一般情况:
longlong 64位,long 32位,short 16位,int 16或者32
当数值超过类型的表示范围时,即溢出,会从头开始有符号从负的开始,无符号从0开始

char:(%c)
char grad = 'a'; 将a转换成相应的编码值
char grad = "a"; 将a当成字符串

float/double:
精度不同float至少6位,double至少10
sizeof
1
2
3
4
5
6
7
8
9
c内置运算符,以字节为单位打印类型的大小
在c中char就占一个字节,因为c把char类型的长度定义为一个字节
#include <stdio.h>
int main(void)
{
char num = 2;
printf("num占用%u",sizeof(num));
return 0;
}

#####4.年纪

1
2
3
4
5
6
7
8
9
10
11
12
//根据年纪算出过了多少秒
#include <stdio.h>
int main(void)
{
int age;
double total;
printf("请输入你的年龄\n");
scanf("%d", &age);
total = age * 3.156e7;
printf("共经过%f秒", total);
return 0
}
5.字符串 交流
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <string.h> //提供strlen的原型
#define DENSITY 62.4 //定义符号常量DENSITY
int main(void)
{
float weight,value;
int size,letters;
char name[40]; //数组存放40个字节,每个字节一个字符串
printf("请输入你的姓名\n",&name);
scanf("%s", name);
printf("请输入你的体重\n",weight);
scanf("%f", &weight);
size = sizeof(name);
letters = strlen(name); //获取字符串的长度
value = weight / DENSITY;
printf("名字占%u字节", size);
printf("名字长度为%d", letters);
printf("人的质量%f", value);
return 0;
}

//sizeof给出数据的大小,strlen给出字符串的长度,因为一个字符占一个字节可以看成相同的结果
6.字符串简介
1
2
3
4
5
6
7
8
9
1.双引号不是字符串的一部分,而是通知编译器其中包含一个字符串,单引号代表的是一个字符
2.c没有字符串定义专门的变量类型,而是把它存在char数组中
3.%s告诉printf()要打印一个字符串
4.scanf会在遇到的第一个空白字符串处停止
5.字符串常量x和字符常量x不同.字符串常量x属于基本类型char,而字符串常量x属于派生类(char数组)
6.char字符,因为char字符对应ascii码,而八位最够对应所有的ascii码,所以一位足够
7.string.h文件里包含许多与字符串相关的函数的原型
8.c中的char表示一个字符,要表示一个字符序列,c使用字符串,字符串的一种形式是字符常量,用双引号括起来,也可以在字符数组中存储一个个字符,相邻的字符构成字符串.
9.程序中最好使用字符常量使用#define或者const表示,使得程序可读性更强,更利于修改维护
7.常量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
1.第一种定义常量,#define pi 3.1415 ,当程序编译时,会将所有出现pi的地方替换成pi的值3.1415
(注意:这里没有等号,且通常使用大写)
2.#define也可以支持定于字符和字符串变量,前者单引号,后者双引号
#define TEE 'T'
#define OPS "now you have done it"
3.第二种定义常量,const(比define灵活)
const int MONTHS = 12;
4.第三种,枚举(enum)

第一种代码:
#include <stdio.h>
#include <string.h>
#define PI 3.14
int main(void)
{
int r;
float size;
printf("请输入圆的半径\n");
scanf("%d", &r);
size = PI * r * r;
printf("圆的面积为%.2f", size); //保留两位小数
return 0;
}

第二种代码:
#include <stdio.h>
const float PI = 3.14;
int main(void)
{
int r;
float size;
printf("请输入圆的半径\n");
scanf("%d", &r);
size = PI * r * r;
printf("圆的面积为%.2f", size);
return 0;
}
8.查看整形和浮点型的大小限制
1
2
3
4
5
6
7
8
9
//用到了两个头文件,limits.h--->查看整形和float.h--->查看浮点型
#include <stdio.h>
#include <limits.h>
#include <float.h>
void main(void)
{
printf("整形最大值%d和最小值%d",INT_MAX,INT_MIN);
printf("浮点型正数最大值%f和最小值%f",FLT_MAX,FLT_MIN);
}
printf(),scanf()转换说明符
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
%d:有符号十进制整数
%s:字符串
%u:无符号十进制整数
%c:字符
%f:有符号十进制浮点数
%%:一个%
%p:指针
其他...
#include <stdio.h>
const int value = 120;
void main(void)
{
printf("*%d*\n",value);
printf("*%2d*\n",value);
printf("*%10d*\n",value); //不够10位,左补到10位,空格
printf("*%-10d*",value); //不够10位,右补到10位,空格
printf("*%010d*\n",value); //不够10位左边不够的补0
}

//printf参数传递解释
/*
printf("%1d %1d %1d %1d\n",n1,n2,n3,n4);
原理:该调用告诉计算机.n1,n2,n3,n4被调用,然后计算机将他们放入到堆栈中,计算机根据变量的类型而非转换说明符将这些值放到堆栈中,每个数占据一定的字节,然后printf函数将数据一个一个读出来

prinft作为函数也有返回值,很少被用到,作为打印输出的附带功能
前面的转换说明和后面的变量类型要一致,否则会产生奇怪的结果
*/
循环
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/*计算多个鞋对应的英寸尺度 */
#include <stdio.h>
int main()
{
const double SCALE = 0.325;
const double ADJUST = 7.64;
double shoe, foot;
shoe = 3.0;
while(shoe < 19.5)
{
foot = SCALE* shoe + ADJUST;
printf("鞋的尺码为%.2f,英寸为%.2f\n", shoe, foot);
shoe += 1.0;
}
return 0;
}
运算符
1
2
3
4
5
6
1.+-*/ 四则运算符
2.= 赋值运算符
3.sizeof 所占字节大小
4.++ 两种形式a++ 和 ++a
5.--
6.%取余
++和–
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/*a++和++a的区别,a++是用过a的值之后加1,而++a是用a前先给他加一,区别见第二个案例*/
#include <stdio.h>
int main()
{
int x=0, y=0;
while (x < 10)
{
x++;
++y;
printf("x = %d,y = %d\n", x, y);
}
}

#include <stdio.h>
int main()
{
int a = 2;
while (a++ < 19) //当这里使用a++时,是先与19比较后才加1,结果就是a++会多打印一个19
//而++a是在与19去比较前先优化
{
printf("a的值为%d\n", a);
}
}
类型转换
1
2


函数传参
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
void fun(int n);
int main()
{
int num;
while (num < 10)
{
printf("请输入一个num\n");
scanf("%d",&num);
fun(num);
}
return 1;
}
void fun(int n)
{
printf("num是%d\n", n);
}
if条件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
int main()
{
int num = 0;
while (++num < 10)
{
printf("当前num值为%d\n", num);
if (num == 6)
{
printf("66大顺啊!\n");
}
else
{
printf("%d不怎么样,你觉得呢?\n",num);
}
}
}
for循环
1
2
3
4
5
6
7
8
#include <stdio.h>
int main(void)
{
int num;
for (num = 10;num <= 20;num++)
printf("num是%d\n", num);

}
do while循环
1
2