IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> c语言学习笔记2021_08_06 -> 正文阅读

[C++知识库]c语言学习笔记2021_08_06

指针
内存
如何产生地址 3232根地址线/数据线 正电 - 1 负电 - 0
00000000000000000000000000000000
......
111111111111111111111111111111112^32个地址 2^32bit = 0.5gb
2^32 byte = 4gb

&取地址符号 
int main()
{
int a = 10;//4个字节
int* p = &a;//& - 取地址 int* p - 指针变量用来存放地址
//printf("%p\n",p);
*p = 20;//* - 解引用操作符/间接访问操作符 可直接找到原a进行使用 
printf("%d\n",a);
//有一种变量是用来存放地址的 - 指针变量
//printf("%p\n",&a);
 return 0;
}

                           0x0012ff40
int a = 10; -->          10              a
int* p = &a;-->   0x0012ff40      p  32位一个指针字节的大小为4个字节  648个字节
*p = 20;*解引用操作符直接使用a 

int main()
{
char ch = 'w';
char* pc = &ch;
printf("%d\n",sizeof(pc));
*pc = 'a';
printf("%c\n",*pc);
 return 0;
}

结构体 char int double ...
复杂对象 - 结构体 - 我们自己创造出来的一种类型
struct - 结构体关键字
struct Book//创建一个结构体类型
{
	char name[20];//c语言程序设计
	short price;//55
};// ; - 不可缺少,结构体结束标志
int main()
{
	struct Book b1 = {"c语言程序设计",55};
                strcpy(b1.name,"c++");//strcpy - string copy - 字符串拷贝
	printf("%s\n",b1.name);
	struct Book* pb = &b1;
	//利用pb打印出我的书名和价格
	//. 结构体变量.成员  -> 结构体指针->成员
	printf("%s\n",pb->name);
	printf("%d\n",pb->price);
	printf("%s\n",(*pb).name);
	printf("%d\n",(*pb).price);
	printf("书名:%s\n",b1.name);
	printf("价格:%d元\n",b1.price);
		return 0;
}
 
分支和循环语句
c语言是一门结构化的程序设计语言
1.顺序结构 2.选择结构 3.循环结构
分支语句 if switch 循环语句 while for do while
c语言中由一个;号隔开即为一个语句
if语句
if(表达式) 语句;
if(表达式) 语句1else 语句2if(表达式) 语句1; else if(表达式) 语句2; else 语句3int main()
{
	int age = 10;
	if(age<18)
{
	      printf("未成年\n");
                      printf("不能谈恋爱\n");
}
	else if(age>=18 && age<23)
		printf("青年\n");
		//...
	else
		printf("老年\n");
		return 0;
}
if语句条件成立后要使多条内容成立需用{}语句块

悬空else
int main()
{
	int a = 0;
	int b = 0;
	if(a == 1);
	  if(b == 2)
		  printf("呵呵\n");
	  else//else对齐上列if的位置不影响程序运行结果,正确运行顺序为第一个if是否成立后才进入第一个if else语句
                        //else匹配上离它最近的if
		  printf("哈哈\n");
		return 0;
}
书写规范,常量和变量判断是否相等,将常量放左边

输出0-100中的奇数
int main()
{
	int a = 1;
	while (a<100)
	{
		if(a%2 == 1)
			printf("%d ",a);
		a++;
	}
		return 0;
}

判断一个数是否为奇数
int main()
{
	int a = 0;
	scanf("%d",&a);
	if( a%2 == 1 )
		printf("奇数\n");
	else
		printf("偶数\n");

		return 0;
}

switch语句 实现多分支 
int main()
{
	int day = 0;
	scanf("%d",&day);
	switch(day)//只决定从哪个case进入开始程序 switch只能定义整型(整型表达式)
	{
	case 1://case 后接整型常量表达式
		printf("星期一\n");
		break;//break - 在此语句case 1停止 - 跳出语句
	case 2:
		printf("星期二\n");
		break;
	//...

	}
		return 0;
}

int main()
{
	int day = 0;
	scanf("%d",&day);
	switch(day)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("工作日\n");
		break;
	case 6:
	case 7:
		printf("休息日\n");
		break;
                default:
                                printf("输入错误\n");
	                break;
//default和case无顺序,按书写规范则按顺序书写
	}
		return 0;
}

循环语句
while(表达式)
      循环语句;
int main()
{
	int i = 1;
	while(i<=10)
	{
                           if(i == 5break;//循环停止 continue - 返回循环初,从此处后while中代码不再执行
		printf("%d",i);
		i++;
	}
		return 0;
}

getchar
int main()
{
int ch = getchar();
putchar(ch);
printf("%c\n",ch);
//putchar等价于此时的printf
		return 0;
}

int main()
{
int ch = 0;
//ctrl + z
//EOF - end of file - -1
while((ch=getchar()) !=EOF)
{
	putchar(ch);
}

int main()
{
int ret = 0;
int ch = 0;
char passward[20] = {0};
printf("请输入密码:>");
scanf("%s",passward);//输入密码,并存放在passward数组中
//输入函数后,输入的数据会被保存到输入缓冲区,例如"123456"
//此时缓冲区内容为"123456\n",当scanf取走缓冲区中的"123456"时,getchar只能接收
//缓冲区中的"\n",侧if语句中else成立,程序输出放弃确认
while((ch = getchar())='\n')
{
;
}
//getchar();//获取掉"\n"
printf("请确认(y/n):>");
ret = getchar();//y/n
if(ret == 'y')
{
printf("确认成功\n");
}
else
{
printf("放弃确认\n");
//ascii 10 = \n
}
		return 0;
}

只输出数字字符
int main()
{
	int ch = 0;
	while((ch = getchar()) != EOF)
	{
		if(ch<'0'||ch>'9')
			continue;
		else
			putchar(ch);
	}
		return 0;
}

for循环
for(表达式1;表达式2;表达式3;) - 1初始化部分 2条件判断部分 3调整部分
int main()
{
	int i =0;
	//初始化 判断 调整
    for(i = 1; i<=10 ;i++)
{
	printf("%d",i);
}
return 0;
}
breakcontinuefor循环中的功能与while循环一致
int main()
{
	int i =0;
	//初始化 判断 调整
    for(i = 1; i<=10 ;i++)
{
	if(i == 5)
	   continue;
	printf("%d",i);
}
return 0;
}
for循环中continue不会跳过调整部分'i++'
1.不可在for循环体内修改循环变量,防止for循环失去控制
2.建议for语句的循环控制变量的取值采用“前闭后开区间”写法

1.for循环的初始化调整判断都可省略,但是for循环的判断部分如果被省略,那判断条件就是恒为真
int main()
{
for(;;)
{
printf("hehe\n");//死循环hehe因为for的判断部分被省略
}
return 0;
}

int main()
{
int i = 0;
int j = 0;
for(;i<10;i++)
{
for(;j<10;j++)
{
printf("hehe\n");
}
}
return 0;
}
结果为10个hehe,当j++10时跳出第二个for循环后因j=0的初始条件消失,所以在跳出第二个for循环后,j恒等于10

int main()
{
int x,y;
for(x=0,y=0;x<2 && y<5;x++,y++)
{
printf("hehe\n");
}
return 0;
}

int main()
{
 int i = 0;
 int k = 0;
for(i=0,k=0;k=0;i++,k++)
k++;//该循环循环0次,因为该循环判断条件为k = 0,0为假,循环不进行
return 0;
}

do...while()循环
do
       循环语句;
while(表达式)int main()
{
int i =1;
do
{
if(i ==5)
    continue;
printf("%d",i);
i++;
}
while(i<=10);
return 0;
}
breakcontinuedo while循环中功能与while/for循环相同

计算n的阶乘
int main()
{
int n = 0;
int i = 0;
int ret = 1;
scanf("%d",&n);
for(n,i=1;i<=n;i++)
	{ret = ret*i;
}
printf("%d",ret);
return 0;
}

计算1!+...+n!的和
int main()
{
int n = 0;
int i = 0;
int ret = 1;
int sum = 0;
for(n=1;n<=3;n++)
{
	ret=1;
for(i=1;i<=n;i++)
	{
		ret = ret*i;
}
     
      sum = sum + ret;
}
printf("sum = %d\n",sum);
return 0;
}

int main()
{
int n = 0;
int i = 0;
int ret = 1;
int sum = 0;
for(n=1;n<=3;n++)
{

		ret = ret*n;
		sum = sum + ret;
}     
 printf("sum = %d\n",sum);
 return 0;
}

int main()
{
	int arr[] = {1,2,3,4,5,6,7,8,9};
	int k = 9;
	//写一个代码,在arr数组(有序的)中找到7
	int sz = sizeof arr / sizeof arr[0];
	int n = 0;
	for(n=1;n<=sz;n++)
	{
		if(k == arr[n])
			{printf("找到了,下标为:%d\n",n);
		break;
	}
	if(n==sz)
		printf("找不到\n");
	}
 return 0;

折半查找算法/二分查找算法 算法次数=log2n
int main()
{
	int arr[] = {1,2,3,4,5,6,7,8,9,10};
	int k = 9;
	int sz = sizeof(arr)/sizeof(arr[0]);//计算数组元素个数
	int left = 0;//左下标
	int right = sz-1;//右下标
	while(left<=right)
	{
		int mid = (left+right)/2;
		if(arr[mid]>k)
		{
			right = mid-1;
		}
		else if(arr[mid]<k)
		{
			left = mid+1;
		}
		else
		{
			printf("找到了,下标是:%d\n",mid);
			break;
		}
	if(left>right)
		{
			printf("找不到\n");
		}
		}
 return 0;
   }

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <stdlib.h>
int main()
{
	//welcome to bit!!!
	//#################
	//w################
	//w###############!
	//...
	//welcome to bit!!!
	//char arr[] = "abc";
	//[a b c \0]
	//0 1 2 3
	//4-2
	char arr1[] = "welcome to bit!!!!!";
	char arr2[] = "###################";
	int left = 0;
	//int right = sizeof(arr1)/sizeof(arr1[0])-2;
	int right = strlen(arr1)-1;
	while(left<=right)
	{
	arr2[left] = arr1[left];
	arr2[right] = arr1[right];
	printf("%s\n",arr2);
	//休息一秒
	Sleep(1000);
	system("cls");//执行系统命令的一个函数-cls -清空屏幕函数
	left++;
	right--;
	}
	printf("%s\n",arr2);
 return 0;
   }

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <stdlib.h>
int main()
{
	int i = 0;
	char password[20] = {0};
	for(i=0;i<3;i++)
	{
		printf("请输入密码:>");
		scanf("%s",password);
		if(strcmp(password, "123456")==0)//== 不能用来比较两个字符串是否相等
			//应该使用一个库函数-strcmp
		{
			printf("登录成功\n");
			break;
		}
		else
			printf("密码错误\n");
	}
	if(i == 3)
		printf("三次密码均错误,退出程序\n");
 return 0;
   }

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-07 11:49:05  更:2021-08-07 11:50:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/10 0:48:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码