C语言之小知识点

前言

本节内容涵盖了初阶的循环,输入,输出,函数,结构体,数据类型大小,选择,预处理,宏关键字和指针初级。


一、循环

for循环

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
	//for(初始化部分;判断部分;调整部分)
	for (int i = 0; i <= 100; i++)
		printf("i = %2d\n", i);
	//break跳出它所属的那个循环                   
//continue跳过本次循环后面的语句,再次进入循环进行处理
	return 0;

	for尽量使用左闭右开
	/*int arr[10] = { 0 };
	int i = 0;
	for (i = 0; i < 10; i++)
		printf("i = %2d\n",arr[i]);
	return 0;*/

	for循环的变种:判断部分的省略会让它成为死循环,因为判断部分恒为真
	/*for (;;)
		printf("呵呵\n");*/

		for循环省略初始条件:
		int i = 0;
		int j = 0;
		for (; i < 3; i++)
			for (; j < 3; j++)  
//当i=1,j循环三次后j=3,此时跳出第二层的循环,i++进入第二次循环,
//此时j=3不进行再次循环,退出并打印三次呵呵
			{
				printf("呵呵\n");
			}
	
		return 0;
	}

	int i = 0;
	int k = 0;
	for (i = 0, k = 0; k = 0; i++, k++)  //循环要执行0次,因为k=0是赋值,k=0为假,不进行循环
		k++;
	return 0;
}

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
	/*
	for (int i = 1; i <= 10; i++)
		printf("i = %2d\n",i);
	*/
	/*
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
			break; //在while中,break用于永久的终止循环
		printf("i = %2d\n", i);  
		i++;
	}
	*/
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
			continue; //在while中,continue用于跳过它后面的循环,进行再次判断while的循环条件,检测是否进行下一次循环
		printf("i = %2d\n", i);
		i++;
	}
	return 0;
}

dowhile循环

/*
	do
	循环语句;
	while(表达式)
*/
#include <stdio.h>
int main(void)
{
	int i = 1;
	do 
	{
		printf("i = %2d\n", i);
		i++;
	} while (i < 11);//注意封号不能少
	return 0;
}

switch循环

/*
	switch(整型表达式)
	{
	    case 整型表达式:
		语句;
	}
*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
		int day = 0;
		printf("请输入1-7:");
		scanf("%d", &day);
		switch (day)
		{
		case 1:   //case决定入口,break决定出口,没有break,会沿着case1一直执行到case7
			printf("星期一\n");
			break;
		case 2:
			printf("星期二\n");
			break;
		case 3:
			printf("星期三\n");
			break;
		case 4:
			printf("星期四\n");
			break;
		case 5:
			printf("星期五\n");
			break;
		case 6:
			printf("星期六\n");
			break;
		case 7:
			printf("星期七\n");
			break;
		default:
			printf("非法输入!\n");
			break;
		}
	
		return 0;
	}
	

二、输入输出函数

1.输入getchar

代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
    char password[20] = { 0 };
    printf("请输入密码:>");
    scanf("%s", password); //password是一个数组,数组的数组名就是地址,所以此处不需要再去取地址
    printf("请确认密码(Y/N):>");
    //清理缓存区的一个字符
    //getchar();//处理'\n'既回车按键
    int temp = 0;
    while ((temp = getchar()) != '\n'); //清除缓存区的多个字符,读一行
    int ch = getchar();
    if (ch == 'Y')
    {
        printf("确认成功\n");
    }
    else
    {
        printf("确认失败\n");
    }
    return 0;
}
/*
vs2019结果:
请输入密码:>12356
请确认密码(Y/N):>确认失败
时间:2022年2月7日21:29:51
功能:了解getchar的功能
*/

2.输出函数putchar

代码如下(示例):

#include <stdio.h>
int main(void)
{
    int ch = 0;
    while ((ch = getchar()) != EOF)
    {
        if (ch < '0' || ch > '9')
            continue;
        putchar(ch);
    }

    return 0;
}

//getchar :从键盘获取字符
//EOF:是文件结束标志 end of file
#include <stdio.h>
int main(void)
{
	/*
	int ch = getchar();
	printf("%c\n", ch);
	putchar(ch); //输出一个字符
	*/
	int ch = 0;
	while ((ch = getchar() ) != EOF)  //Ctrl+z用来读取结束
	{
		putchar(ch);
	}
	return 0;
}

三、函数

代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS
普通法相加
#include <stdio.h>
int main(void)
{
        int a, b;
        scanf("%d %d",&a,&b);
        int sum = a + b;
        printf("%d",sum);
        return 0;
    }
    #include <stdio.h>
    函数法相加

    int add(int x, int y)
    {
        int z = 0;
        z = x + y;
        return z;
    }
    
    int main(void)
    {
        int a, b;
        printf("请输入加数a和b的值:\n");
        scanf("%d %d",&a,&b);
        int sum = add(a, b); //函数的方式解决
        printf("sum =%d", sum);
    }
    数组,是用下标来访问的
    /*int arr[10] = {1,2,3,4,5,6,7,8,10};
    int i = 0;
    while (i < 10)
    {
        printf("%d\n", arr[i]);
        i++;
    }
    return 0;
}*/

    //int a = 9 / 2;
    float a = 9 / 2.0; //除号两端有一个是小数,才会被判别为小数除法

    printf("%f", a);
    return 0;
}

四、操作符

位操作符
	&按位与 |按位或 ^按位异或
	int a = 2;
	a = a + 5;
	a += 5;
	!把真变成假,把假变成真 if(a)如果a真 if(!a)如果a假
	sizeof是一个操作符,用来计算变量类型的大小 sizeof a 表示是操作符 sizeof(a)是求大小 以字节为单位
	arr[10] = {...} 
	printf("%d",sizeof(arr))

~ 按位取反:按二进制位取反(所有位)把所有二进制位中数字,1变成0,0变成1 00000000 00000000 000000000 00000000-->11111111 11111111 11111111 11111111
整数在内存中存储的是补码 一个整数的二进制表示有三种:原码 反码 补码 
	/*-1:10000000 00000000 00000000 00000001(原码)第一位1为符号位
	  反码:11111111 111111111 11111111 11111110
	  补码:反码+1=补码 11111111 11111111 11111111 11111111 计算机中存储的是补码
	  原码,反码,补码针对负数才计算 正数的原码,补码,反码相同
	  */
	  	int a = 0;  
	  	printf("%d\n", ~a);//00000000 000000000 00000000 00000000-->11111111 11111111 11111111 11111111:11111111...-->对应的原码:10000000 00000000
	  	// 00000000 00000001-->-1    原码=求反(补码-1)
	  	return 0;
	  }

	  -- ++
	int a = 10;
	//int b = ++a;
	int c = a++; 
	printf("a = %d\n", a); //前置++,先++ 后使用 后置++ ,先使用,后++
	//printf("b = %d\n", b);
	printf("c = %d\n", c);
	return 0;  
}

	三目操作符:exp1?exp2:exp3 exp1成立,exp2计算,整个表达式的结构是exp2的结果 exp1不成立,exp3计算,整个表达式结构是exp3的结果
	int a = 6;
	int b = 3;
	int max;
	max = a > b ? a : b;
	printf("max = %d\n", max);
	return 0;
}


	逗号表达式:用逗号隔开的一串表达式,逗号表达式是从左向右依次计算,整个表达式的结果是最后一个表达式的结果
	下标引用操作符:[] 
	函数调用操作符:()函数名后边的-->()

	//左移操作符:移动的是二进制位
	int a = 2;
	int b = a << 1;  //000000000 00000000 00000000 00000010 int4个字节,对应4*8=32位 a的二进制序列向左移动一位--> 00000000 00000000 00000000 000000100
	printf("%d", b);
	return 0;
}

五、预处理


c语言提供的关键字
1.c语言自己提供的,不能自己创造关键字
2.变量名不能是关键字
extern:用来申明外部符号的,auto:每个局部变量都是auto修饰的 register:寄存器关键字
static:静态的,unio:共用体(联合体) void 无(空)
预处理指令:define include

#define 定义常量和宏
define 是一个预处理指令 1-->define定义一个常量 #define MAX 100 2-->定义宏:#define ADD(x,y)x+y
4*ADD(2,3)----4*2+3=11 宏就是一种替换

六、指针初级

指针 32位--32根地址线--物理线--通电--1/0
	int a = 10;
	printf("%p\n", &a);//只会拿出它从前往后的第一个地址 %p用来打印地址
	int *pa = &a;//pa是用来存放地址的,所以pa称为指针变量 
*说明pa是指针变量 int 说明pa所指向的对象是int类型的
	char ch = 'w';
	char *pc = &ch; //*是给pc的,说明pc是指针,而前面的char是说明pc所指向的变量类型是char类型
	return 0;
}

指针变量可以存放自己的地址吗?int *pa = &pa;可以放进去但是变量类型不同会出错
	int a = 10;
	int* pa = &a;
	*pa = 20;//*是解引用操作,*pa就是通过pa里面的地址找到a
	printf("a=%d\n", a);
	return 0;
}
指针的大小是相同的4或者8,因为:指针是用来存放地址的,指针需要多大空间,取决于
地址的存储需要多大空间 32位机器 一个地址32bit 4byte 64位机器 一个地址64bit 8byte4 

七、指针初级

指针 32位--32根地址线--物理线--通电--1/0
	int a = 10;
	printf("%p\n", &a);//只会拿出它从前往后的第一个地址 %p用来打印地址
	int *pa = &a;//pa是用来存放地址的,所以pa称为指针变量 *说明pa是指针变量 int 说明pa所指向的对象是int类型的
	char ch = 'w';
	char *pc = &ch; //*是给pc的,说明pc是指针,而前面的char是说明pc所指向的变量类型是char类型
	return 0;
}

指针变量可以存放自己的地址吗?int *pa = &pa;可以放进去但是变量类型不同会出错
	int a = 10;
	int* pa = &a;
	*pa = 20;//*是解引用操作,*pa就是通过pa里面的地址找到a
	printf("a=%d\n", a);
	return 0;
}
指针的大小是相同的4或者8,因为:指针是用来存放地址的,指针需要多大空间,
取决于地址的存储需要多大空间 32位机器 一个地址32bit 4byte 64位机器 一个地址64bit 8byte4 

八、结构体初级

结构体:用来描述复杂对象,让c语言创造新的类型出来
struct Stu //创建一个学生
{    //成员
	char name[20];
	int age;
	double score;
};

//创建一个书的类型
struct Book 
{
	char name[20];
	float price;
	char id[30];
};
//结构体的创建和初始化
	struct Stu s = {"张三", 20, 85.5};
	printf("%s %d %lf\n", s.name, s.age, s.score); //点操作符 结构体变量.成员变量
	//->操作符
	struct Stu *ps = &s; // double 用%lf float 用%f *ps是结构体指针
 	printf("%s %d %lf\n",(*ps).name,(*ps).age,(*ps).score);
	printf("%s %d %lf\n", ps->name,ps->age,ps->score);  //->箭头->成员名必须左边是结构体指针
	return 0;
}





总结

了解的基础上加深学习,欢迎指正

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

dzq0311

谢谢支持,您的鼓励是我的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值