#1初识c语言#

1.main函数

main函数是程序的入口

一个工程中main函数有且仅有一个

#include <stdio.h>
int main()
{
	printf("Hello World!");
	return 0;
} 

2.数据类型

char                  字符数据类型 

short                 短整形

int                     整形

long                  长整形

long long          更长的整形

float                  单精度浮点数

double              双精度浮点数

下面为数据类型64位计算机对应字节大小  sizeof()用于计算字节大小

#include <stdio.h>
int main()
{
    printf("%d\n", sizeof(char));//1
    printf("%d\n", sizeof(short));//2      
    printf("%d\n", sizeof(int));//4
    printf("%d\n", sizeof(long));//8
    printf("%d\n", sizeof(long long));//8
    printf("%d\n", sizeof(float));//8
    printf("%d\n", sizeof(double));//8
    printf("%d\n", sizeof(long double));//16
    return 0;
}

32位计算机

long为4个字节

指针

32位:4    64位:8

3.变量和常量

(1)定义变量

#include <stdio.h>
int main()
{
	int age=18;
	float weight=50.5;
	char ch='w';
    return 0;
}

(2)变量的分类

全局变量

局部变量

#include <stdio.h>
int global = 2022;
int main()
{
    int local = 2021;
    int global = 2020;
    printf("global = %d\n", global);
    return 0;
}

第一个global为全局变量

第二个global为局部变量

当局部变量和全局变量同名的时候 局部变量优先使用

尽量多的使用局部变量

(3)变量的使用

输入和输出

#include<stdio.h>
int main()
{
	int input=0;
	printf("加入比特\n");
	printf("你要好好学习吗?(1/0)");
	scanf("%d",&input);//1/0
	if(input==1)
	printf("好offer");
	else
	printf("卖红薯\n");
	return 0; 
 } 
#include <stdio.h>
int main()
{
	char ch='A';
	printf("%c\n",ch); 
    return 0;
}

%c  打印字符

%d  打印整型十进制数据 

%f   打印浮点数字-打印小数

%p  以地址的形式打印

%o  打印8进制数字

%x  打印16进制数字

两个数求和

#include <stdio.h>
int main()
{
    int num1 = 0;
    int num2 = 0;
    int sum = 0;
    printf("输入两个操作数:>");
    scanf("%d %d", &num1, &num2);
    sum = num1 + num2;
    printf("sum = %d\n", sum);
    return 0;
}

(4)变量的作用域和生命周期

作用域

作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用 的 而限定这个名字的可用性的代码范围就是这个名字的作用域。

1. 局部变量的作用域是变量所在的局部范围。

2. 全局变量的作用域是整个工程。

生命周期

变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段

1. 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。

2. 全局变量的生命周期是:整个程序的生命周期。

(5)常量

1000;
//字面常量

#define MAX 100
//define定义常量

enum Sex
{
    male,
    female,
    secret
};
//枚举常量
//枚举常量的默认是从0开始,依次向下递增1的

const float pai = 3.14f;
//这里的pai是const修饰的常变量

4.字符串 转义字符

(1)计算字符串(重点)

#include <stdio.h>
int main()
{
	char arr1[]="abc";//数组
	char arr2[]={'a','b','c','\0'};// \0为字符串结束标志 不加会输出随机值 
	printf("%s\n",arr1);//%s打印字符串 
	printf("%s\n",arr2);
	return 0;
 } 
#include <stdio.h>
int main()
{
	char arr1[]="abc";
	char arr2[]={'a','b','c'};
	printf("%d\n",strlen(arr1));
    //3已知 strlen计算字符串长度 
	printf("%d\n",strlen(arr2));
    //未知 无\0 \0为结束标志 不算字符串长度
	printf("%c\n",'\32');
    //32作为八进制数字转化成十进制数字后所代表的ASCII码值对应的字符  
    //32十进制为26 26作为ASCII码值 
	printf("%c\n",'\x61');
    //61作为16进制数字转化成十进制数字后所代表的ASCII码值对应的字符 
	return 0;
 } 

\0为字符串结束标志

当"abc"    \0默认有 不写出来

当'a','b','c' \0没有

(2)转义字符

#include <stdio.h>
int main()
{
	printf("abc\n");//、
	printf("c:\\test\32\\test.c");
    //\t水平制表符
	printf("%c\n",'a');
    //打印字符a
	printf("%c\n",'\''); 
    //打印单引号 加\ 转义变为普通单引号
	printf("%s\n","\"");
    //加\防止23双引号配对
    //??+)三字母词会解析成花括号  想正常输出?在前加\转义 
    //想正常打印 再加\
	return 0;
}

小题一练(可以尝试一下)

#include <stdio.h>
int main()
{
    printf("%d\n", strlen("abcdef"));
    printf("%d\n", strlen("c:\test\628\test.c")); 
    return 0;
}

答案:6和14

解析:

第一行打印abcdef的长度 默认有\0  \0不计入字符串的长度      打印结果为6

第二行打印 \t为一个字符 \62也为一个字符 8进制形式 数一下  打印结果为14

5.注释

c语言注释 /*xxxxxx*/

不能嵌套注释 可以同时注释多行

c++注释    //xxxxxx

可以注释一行也可注释多行

6.选择语句(if语句简单介绍)

#include <stdio.h>
int main()
{
    int coding = 0;
    printf("你会去敲代码吗?(选择1 or 0):>");
    scanf("%d", &coding);
    if(coding == 1)
    {
       prinf("坚持,你会有好offer\n");
    }
    else
    {
       printf("放弃,回家卖红薯\n");
    }
    return 0;
}

if else

if和else后一条语句 可不加大括号 多条语句 需要加大括号

if(条件判断)

条件判断为真 执行if内的语句

条件判断为假 执行else内的语句

7.循环语句(while语句简单介绍)

#include <stdio.h>
int main()
{
	int i=0;
	while(i<10000)
	{
		printf("emo\n");
		i++;
	}
    return 0;
}

如果你很emo

这样会输出一万行emo

i会加到10000跳出循环

while(判断条件)

8.函数

#include <stdio.h>
int main()
{
    int num1 = 0;
    int num2 = 0;
    int sum = 0;
    printf("输入两个操作数:>");
    scanf("%d %d", &num1, &num2);
    sum = num1 + num2;
    printf("sum = %d\n", sum);
    return 0;
}
//上述代码,写成函数如下:
#include <stdio.h>
int Add(int x, int y)
{
   int z = x+y;
   return z;
}
int main()
{
    int num1 = 0;
    int num2 = 0;
    int sum = 0;
    printf("输入两个操作数:>");
    scanf("%d %d", &num1, &num2);
    sum = Add(num1, num2);
    printf("sum = %d\n", sum);
    return 0;
}

函数可以让代码可以反复使用

9.数组

int arr[10]={1,2,3,4,5,6,7,8,9,0};//定义整形数组 最多10个元素

数组通过下标来访问元素 下标从0开始

元素:1 2 3 4 5 6 7 8 9 0

下标:0 1 2 3 4 5 6 7 8 9

遍历一维数组(打印一维数组的所有元素)

#include<stdio.h>
int main()
{
	int arr[10]={1,2,3,4,5,6,7,8,9,10};//定义一个存放10个整数数字的数组
	//char ch[20]; 下标是从0开始 依次递增 
	//float arr2[5]; 等等 数组定义 
	printf("%d\n",arr[4]);//打印第5个元素 下标为4
	int i=0;//while语句 
	while(i<10)
	{
		printf("%d ",arr[i]);
		i++;
	} 
}

利用循环可访问所有下标对应的元素

10.操作符

#include<stdio.h>
int main()
{
	int a=1;
	//移位操作符 移2进制
	//1整型占4个字节 32bit位
	//000000000000000000000000000000001 31个0 
	int b=a<<2;//<<左移 >>右移 左移后后面补0 
	printf("%d\n",b);
    //左移右移不改变a的值 a还是为1
    //b的值为1*2*2=4
    return 0;
}

    //位操作 2进制 
    //& 按位与
    //| 按位或
    //^按位或与 
    int a=3;  //011    

    int b=5;  //101 
    int c=a&(|)(^)b;

    如何判断真假

    非0为真

    0为假

    //001按位与 同时为真就为真

    //111按位或 同时为假才为假

    //110按位或与 相同为0 相异为1 
    printf("%d\n",c);

    //所以输出为1      

    //所以输出为7              

    //所以输出为6 

    int a=10;
    a=2;//=赋值 ==判断相等
    a=a+10;//写法1
    a+=10;//写法2  a=12等同 简便 
    a=a-20;//写法1
    a-=20//写法2
    a=a&2//写法1
    a&=2//写法2

单目操作符

    //计算数组元素个数 数组总大小/每个元素大小 
    int arr[10]={0};
    int sz=0;
    printf("%d\n",sizeof(arr));
    sz=sizeof(arr)/sizeof(arr[0]);
    printf("sz=%d\n",sz); 

关系操作符

>

>=

<

<=

!=   用于测试“不相等”

==  用于测试“相等”

逻辑操作符

&&     逻辑与

||        逻辑或

条件操作符

exp1 ? exp2 : exp3

条件1成立 执行条件2 条件1不成立 执行条件3

逗号表达式

exp1, exp2, exp3, …expN 看最后一个表达式 中间表达式的数据变化要计算

下标引用、函数调用和结构成员

[ ] ( )  .  ->

#include<stdio.h>
int Add(int x,int y)
{
	int z=0;
	z=x+y;
	return z;
}
int main()
{
	//int arr[10]={0};
	//arr[4];//[]-下标引用操作符
	int a=10;
	int b=20;
	int sum=Add(a,b);//()--函数调用操作符
	printf("sum=%d",sum);
	return 0; 
}
//只要是整数 内存中存储的都是二进制的补码
//正数--原码 反码 补码 相同
//负数:
//原码                  反码                           补码
//直接按照正负       原码的符号位(最高位)不变        反码+1 
//写出的二进制序列   其他都按位取反
    

11.关键字

auto  break   case  char  const   continue  default  do   double else  enum   extern float  for   goto  if   int   long  register    return   short  signed sizeof   static struct  switch  typedef union  unsigned   void  volatile  while

(1)typedef

类型重命名

typedef unsigned int uint_32//将unsigned int 重命名为uint_32, 所以uint_32也是一个类型名

typedef 类型1 类型2 //类型1和类型2一样 换了个名字

unsigned int num1=0;

uint_32 num2=0;

两个变量的类型是一样的

(2)static

在C语言中: static是用来修饰变量和函数的

1. 修饰局部变量-称为静态局部变量

2. 修饰全局变量-称为静态全局变量

3. 修饰函数-称为静态函数

下面两个代码输出什么 可以尝试一下

代码1

#include <stdio.h>
void test()
{
    int i = 0;
    i++;
    printf("%d ", i);
}
int main()
{
 int i = 0;
    for(i=0; i<10; i++)
    {
        test();
    }
    return 0;
}

代码2

#include <stdio.h>
void test()
{
    //static修饰局部变量
    static int i = 0;
    i++;
    printf("%d ", i);
}
int main()
{
    int i = 0;
    for(i=0; i<10; i++)
    {
        test();
    }
    return 0;
}

代码1

打印10个1

代码2

打印 1 2 3 4 5 6 7 8 9 10

有static  i就不会每次被初始化为0 保留上一次结果

无static  i就会每次被初始化为0     因此最后打印一直为1

结论:

static修饰局部变量改变了变量的生命周期

让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束。

如果static修饰全局变量和函数 会怎么样呢?

一个全局变量被static修饰 使得这个全局变量只能在本源文件内使用 不能在其他源文件内使用

一个函数被static修饰 使得这个函数只能在本源文件内使用 不能在其他源文件内使用

13.指针

内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。

所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。

为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。

#include <stdio.h>
int main()
{
    int num = 10;
    &num;//取出num的地址
    //注:这里num的4个字节,每个字节都有地址,取出的是第一个字节的地址(较小的地址)
    printf("%p\n", &num);//打印地址,%p是以地址的形式打印
    return 0;
}

int num = 10;

int *p;//p为一个整形指针变量

p = &num;

#include <stdio.h>
int main()
{
    int num = 10;
    int *p = &num;
    *p = 20;
    return 0;
}

指针变量的大小

指针大小在32位平台是4个字节,64位平台是8个字节。

14.结构体

struct Stu
{
    char name[20];//名字
    int age;      //年龄
    char sex[5];  //性别
    char id[15]; //学号
};
//打印结构体信息
struct Stu s = {"张三", 20, "男", "20180101"};
//.为结构成员访问操作符
printf("name = %s age = %d sex = %s id = %s\n", s.name, s.age, s.sex, s.id);
//->操作符
struct Stu *ps = &s;
printf("name = %s age = %d sex = %s id = %s\n", ps->name, ps->age, ps->sex, ps->id);

#1初识c语言#完 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力的小恒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值