vs(c)-2


学习视频: b站比特c语言就业班

1.函数、数组

函数
在这里插入图片描述
数组 :用下标访问,下标从0开始
在这里插入图片描述
在这里插入图片描述

2.操作符

算术操作符:+ - * / %(取模)

在这里插入图片描述在这里插入图片描述

移位操作符:>> <<

在这里插入图片描述

位操作符:&(按位与) |(按位或) ^(按位异或)

赋值操作符:= += -= *= ^= |= >>= <<=

在这里插入图片描述

单目操作符:只有一个操作数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

~:二进制 按位取反

在这里插入图片描述

++

在这里插入图片描述
在这里插入图片描述

(类型):强制类型转换

在这里插入图片描述

逻辑操作符:&& ||

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

条件操作符:三目操作符

exp1 ? exp2 : exp3:exp1成立—>exp2,exp1不成立—>exp3
在这里插入图片描述

3.常见关键字

C语言提供,关键字不能用户创建,不能作为变量名
在这里插入图片描述
register:建议存放在寄存器中
计算机的数据存储位置:靠前快、贵
内存:更小
高数缓存:10+M
内存:8-16G
硬盘:500G+
 网盘:例如百度网盘
在这里插入图片描述
typedef:类型重命名
在这里插入图片描述
static
(1)局部变量
在这里插入图片描述
(2)全局变量
在这里插入图片描述
(3)函数
在这里插入图片描述

4.define定义常量和宏

define是预处理指令,不是关键字
1.define定义常量
在这里插入图片描述
2.define定义宏
在这里插入图片描述

5.指针

计算机:32/64位:32/64根地址线-物理线-通电-0/1
内存单元:字节
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

6.结构体

在这里插入图片描述

7.分支语句

一:if-else

if:是一种分支语句,既可以单分支,又可以多分支
语法结构:表达式为真,语句执行
代码比较:最好 将常量放在左边

if(表达式)
	语句;

或者:表达式为假,else执行

if(表达式)
	语句1;
else
	语句2;

多分支:

if(表达式)
	语句1;
else if(表达式)
	语句2;
else
	语句3;

执行多条语句:

if(表达式){
	语句列表;
}
else if(表达式){
	语句列表;
}
else{
	语句列表;
}

在这里插入图片描述
else匹配:匹配最近的if
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

二:switch

用于多分支
break:跳出自己所在的switch语句

intlongchar都可以,不能是float
switch(整型表达式){
语句项;
}

在这里插入图片描述
case 整形 常量表达式
字符也属于整形:字符以ASCII存储

在这里插入图片描述

若匹配了某case,default前没任何中断,default也需执行。
例:如下,func(1)返回0
在这里插入图片描述

vs2022
F10:逐过程
F11:逐语句
先F10再F11

9.循环语句

一:while:先判断再执行

语法结构
while(表达式)
	循环语句/代码块;

在这里插入图片描述
getchar与putchar
在这里插入图片描述
在这里插入图片描述
报错问题
参考:C6064:缺少“scanf_s”的整型参数(对应于转换说明符“2”

在这里插入图片描述
在这里插入图片描述

scanf不读取空格
gets可以读取空格

在这里插入图片描述

二:for

1.控制变量最好:前闭后开
2.判断部分省略:恒为真:死循环
3.多个循环变量控制

语法
for(表达式1(初始化);表达式2(判断);表达式3(调整))
	循环语句;

break和continue
在这里插入图片描述
在这里插入图片描述

三:do-while:先执行再判断

语法结构:
do
	循环语句;
while(表达式);

10.练习

(1)计算n的阶乘。

	int i = 0;
	printf("计算的n:");
	scanf_s("%d",&i);
	int sum = 1;
	for(;1<=i;i--){
		sum = sum*i;
	}
	printf("%d\n",sum);

在这里插入图片描述

(2)计算1!+2!+3!+…+10!。

	int i = 1;
	int sum2 = 0;
	for (; i < 11;i++) {
		int j = i;
		int sum1 = 1;
		for (; 1 <= j;j--) {
			sum1 = sum1 * j;
		}
		sum2 = sum1 + sum2;
	}
	printf("和:%d\n", sum2);

在这里插入图片描述

	//优化算法
	int i = 1;
	int n = 10;
	int sum1 = 1;
	int sum2 = 0;
	for (; i<=n;i++) {
		sum1 *= i;
		//sum1=i*sum1,9!=9*8!
		sum2 += sum1;
	}
	printf("和:%d\n", sum2);

在这里插入图片描述

(3)在一个有序数组中查找具体的某个数字n。编写int binsearch(int x, int v, int n);功能:在v[0]<=v[1]<=v[2]<= …<=v[n-1]的数组中查找x。

折半(二分)查找

由中间值mid判断 左右部分 相对于 查找元素k 的大小,一次性排除一半数值
在这里插入图片描述

//折半(二分)查找
int main() {
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	//目标数值k
	int k = 0;
	scanf_s("%d",&k);
	//数组元素个数
	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)
			left = mid + 1;
		else if (arr[mid] > k)
			right = mid - 1;
		else {
			printf("find!it;%d\n", mid);
			break;
		}
	}
	if (left > right)
		printf("not found!");
	return 0;
}

在这里插入图片描述

(4)编写代码,演示多个字符从两端移动,向中间汇聚。

#include <stdio.h>
#include <string.h>//strlen的头文件
#include <windows.h>//Sleep的头文件
int main() {
	//编写代码,演示多个字符从两端移动,向中间汇聚
	char arr1[] = "welcome!";
	char arr2[] = "#######!";
	int left = 0;
	int right = strlen(arr1) - 1;

	while (left <= right) {
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		printf("%s\n", arr2);
		Sleep(1000);//单位毫秒:1000ms=1s
		system("cls");//清屏
		left += 1;
		right -= 1;
	}
	printf("%s\n", arr2);
	return 0;
}

在这里插入图片描述

(5)编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则提示登录成,如果三次均输入错误,则退出程序。

strcmp:比较对应位置的ASCII,出现不相等/比较完
strcmp(字符串1,字符串2);
<0:1<2
0:1=2
>0:1>2

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>//strcmp的头文件

int main() {
	int i = 0;
	char passwd[20] = { 0 };
	for (; i < 3; i++) {
		printf("key:");
		//数组是指针,不加取地址符,但必须在scanf下使用
		scanf("%s", passwd);
		//scanf_s("%s", &passwd, 20);
		//两个字符串比较不可以passwd == "123456":比较的是两字符串首字符的地址。应该用strcmp
		if (strcmp(passwd, "123456") == 0) {
			printf("succes!");
			break;
		}
		else if (strcmp(passwd, "123456") != 0 && i < 2)
			printf("again\n");
	}
	if (i == 3)
		printf("error!");
	return 0;
}

在这里插入图片描述

(6)猜数字:程序自动产生1-100的数,猜测这个数字。猜错:告知猜大、小,直至猜对。除非退出,游戏可持续。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>//srand、rand的头文件
#include <time.h>//time的头文件

//菜单
void manu() {
	printf("##################\n");
	printf("####  0.exit  ####\n");
	printf("####  1.play  ####\n");
	printf("##################\n");
}

//游戏
void game() {
	//生产随机数
	//rand:生成数:0—RAND_MAX(0x7ff:16进制,32767)之间,用srand改变其生产起点
	//模100的余数:0-99,+1,0-100
	int ret = rand() % 100 + 1;

	//猜数字
	int guess = 0;
	printf("猜:");
	while (1) {
		scanf("%d", &guess);
		if (guess < ret) {
			printf("小\n");
			printf("再猜:");
		}
		else if (guess > ret) {
			printf("大\n");
			printf("再猜:");
		}
		else {
			printf("YEAH! %d\n",ret);
			break;
		}
	}
}

int main() {
	int input = 0;

	//在调用rand的之前调用srand设置随机数的生成,需要unsigned int类型
	//时间戳:随时变化的值,time()获取,返回time-t类型,本质上也是(64位)整形
	srand((unsigned int)time(NULL));//利用time设置一个随机的起点

	do {
		manu();//打印菜单
		printf("选择:");
		scanf("%d",&input);
		switch (input) {
			case 1:
				printf("begin!\n");
				game();
				break;
			case 0:
				printf("bye!\n");
				break;
			default:
				printf("error!\n");
				break;
		}
	} while (input);
	return 0;
}

在这里插入图片描述

(7)最大公约数。

int main(){

	//求最大公约数:辗转相除
	printf("所求两数:\n");
	int m = 0;
	int n = 0;
	scanf("%d%d",&m,&n);
	int t = 0;
	while (m%n) {
		t = m % n;
		m = n;
		n = t;
	}
	printf("最大公约数:%d",t);
	return 0;
}

在这里插入图片描述

(8)1000-2000的闰年。

int main(){
	int y = 0;
	int count = 0;
	printf("闰年有:\n");
	for (y = 1000; y <= 2000;y++) {
		//闰年判断;
		
		1.被4整除,不被100整除
		//if (y % 4 == 0) {
		//	if (y % 100 != 0) {
		//		printf("%d  ", y);
		//		count++;
		//	}
		//}

		2.被400整除
		//if (y % 400 == 0){
		//	printf("%d  ", y);
		//	count++;
		//}

		//1+2
		if (((y%4==0) && (y%100!=0)) || (y%400==0)) {
			printf("%d ", y);
			count++;
		}
	}
	printf("\n共:%d",count);
	return 0;
}

在这里插入图片描述

(9)100-200的素数。

int main() {
	//素数=质数:只能被1和其本身整除
	int i = 0;
	int count = 0;
	for (i = 100; i <= 200;i++) {
		int j = 0;
		for (j = 2; j < i;j++) {
			if (i % j == 0) {
				break;//跳出所在for循环
			}
		}
		if (i == j) {
			count++;
			printf("%d ", i);
		}
	}
	printf("\n共:%d", count);
	return 0;
}

在这里插入图片描述
开平方优化

int main() {
	//优化,缩短程序运算
	//sqrt:开平方函数,库函数
	//若存在m = a*b,则有 a或b < m开平方
	//既:若j(2,m开平方)内找到了a/b,则m不是素数

	//素数=质数:只能被1和其本身整除
	int i = 0;
	int count = 0;

	for (i = 100; i <= 200; i++)
	{
		int flag = 1;
		int j = 0;
		for (j = 2; j <= sqrt(i); j++)
		{
			if (i % j == 0)
			{
				flag = 0;
				break;//跳出所在for循环
			}
		}

		if (flag == 1) {
			count++;
			printf("%d ", i);
		}
	}
	printf("\n共:%d", count);
	return 0;
}

在这里插入图片描述

11.goto语句

没必要使用,只试用跳出多层循环情况:只能在其所在函数内跳转,不可跨函数
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

定时关机

(1)goto

int main() {
	//关机
	
	//cmd命令行:
	//	关机:shutdown -s -t 数字(单位:秒)
	//	取消关机:shutdown -a

	//system():执行系统命令,头文件stdlib.h
	char input[20] = { 0 };
	system("shutdown -s -t 360");
again:
	printf("电脑将在6分钟内关机!输入:哈哈,取消关机。\n");
	scanf("%s",&input);
	if (strcmp(input,"哈哈") == 0) {
		//字符串之间不能==比较
		//用strcmp()比较,相等返回0,头文件string.h
		system("shutdown -a");
	}
	else {
		goto again;
	}
	return 0;
}

(2)while循环

int main() {
	//关机
	
	//cmd命令行:
	//	关机:shutdown -s -t 数字(单位:秒)
	//	取消关机:shutdown -a

	//system():执行系统命令,头文件stdlib.h
	char input[20] = { 0 };
	system("shutdown -s -t 360");
	while(1){
		printf("电脑将在6分钟内关机!输入:哈哈,取消关机。\n");
		scanf("%s", &input);
		if (strcmp(input, "哈哈") == 0) {
			//字符串之间不能==比较
			//用strcmp()比较,相等返回0,头文件string.h
			system("shutdown -a");
			break;
		}
	}
	return 0;
}

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
(3)发行版本
在这里插入图片描述

在这里插入图片描述

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值