C语言笔记【考研日记】

   

目录

 简单梳理一下C语言的知识结构

-2021/10/16 

分支语句(if,switch)

1.if(简单使用)

2.switch(简单使用)

 循环语句

1.while(简单使用)

2021/10/17

接while

getchar的简单应用

2.for

3.do while

循环体的应用

求1到n的阶乘

计算1!+2!+.....+10!

 ​

猜字游戏

比较三个数的大小

2021/10/18

 打印100到200之间的素数

 关机小程序

函数

 函数是什么

 c语言中函数的分类

1. 库函数

2.自定义函数

函数调用

 习题

2021/10/23

习题

2021/10/28

链式访问



   

      可以说是零基础了QWQ,之前大一的有学过c语言(已经忘光了),当时就没怎么学会,可以说是没有基础(就是循环语句都看不明白的那种),现在大三考研er,重拾c语言(希望可以变强),这篇文章主要会记录,我考研过程中我C语言的学习经历,学习过程中学习到的知识和碰到的各种问题都会记录下来。(之前没打算写博客)本人用的vs2017

这是基本框架,

#include<stdio.h>是头文件

int main()是主函数

return是函数的返回值,根据函数类型的不同,返回的值也是不同的。

 简单梳理一下C语言的知识结构

数据类型:char字符型,int整型,float浮点型,double双精度浮点型,

字符串函数:strlen(字符串长度),strcmp(比较字符串),

循环体:for,while,if,

数组:a[]

指针:*a

结构体:struct  


-2021/10/16 

比较两个数的大小主要代码

#include<stdio.h>
int MAX(int x, int y)
{
	if (x > y)
		return x;
	else
		return y;
	{

	}
}

int main()
{
	int a = 0;
	int b = 0;
	scanf_s("%d %d", &a, &b);
	int m=MAX(a, b);
	printf("%d\n", m);
	return 0;
}

//    #define _CRT_SECURE_NO_WARNINGS 1(把scanf_s改成scanf等)

分支语句(if,switch)

1.if(简单使用)

int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age >= 18)
		printf("chengnian");
	else
	{
		printf("meichengnian");
	}



}

判断奇数偶数

int main()
{
	int num;
	scanf("%d", &num);
	if (num % 2 == 1)
		printf("为奇数\n");
	else
	{
		printf("为偶数\n");
	}

	return 0;

}

输出一百以内的奇数

int main()
{

	int a;
	for (a = 1; a < 101; a++)
		if (a % 2 ==1)
			printf("%d\n", a);


	return 0;
}

2.switch(简单使用)

int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
		case 1 :
			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:
		break;
	}
	return 0;
}

判断m,n的值
 

int main()
{
	int n = 1;
	int m = 2;
	switch (n)
	{
	case 1:m++;//3
	case 2:n++;//2
	case 3:
		switch (n)
		{
		case 1:
			n++;//n=2不执行case1直接case2
		case 2:m++; n++;//m=4,n=3
			break;
		default:
			break;
		}
	case 4:m++;//m=5
		break;
	default:
		break;
	}
	printf("m= %d,n= %d", m, n);
	return 0;
}

结果如图:

 循环语句

1.while(简单使用)

int main()
{
	while (1)
	{
		printf("爱你\n");
	}
	return 0;

}

结果

 无限循环爱你。

打印一到一百

int main()
{
	int a = 1;
	while (a <= 100)
	{
		printf("%d\n",a);
		a++;
	}
	return 0;

}

 结果

在while循环中,continue用于,跳过本次循环也就是continue后面的代码

在while循环中,break用于永久终止循环

2021/10/17

接while

getchar的简单应用

int main()
{
	char password[20] = { 0 };
	printf("请输入密码:");
	scanf("%s", &password);
	printf("请确认密码(Y/N):");
	getchar();//处理\n
	int a = getchar();
	if (a != 'Y')
		{
		printf("请重新输入密码:");
		scanf("%s", &password);
		}
	else
	{
		printf("密码确认成功!");
	}
	return 0;

}

这段代码碰到这种密码7651 ab会失效

所以进行改进

int main()
{
	char password[20] = { 0 };
	printf("请输入密码:");
	scanf("%s", &password);
	printf("请确认密码(Y/N):");
	//getchar();//处理\n
	int b = 0;
	while ((b = getchar() !='\n'))//清理缓冲区的内容
    {
		;
	}

	int a = getchar();
	if (a != 'Y')
		{
		printf("请重新输入密码:");
		scanf("%s", &password);
		}
	else
	{
		printf("密码确认成功!");
	}
	return 0;

}

这种就🆗啦

2.for

3.do while

int main()
{
	int a = 0;
	do
	{
		printf("%d",a);
		a++;
	} while (a<=10);
	return 0;
}

结果如图

 

循环体的应用

求1到n的阶乘

int main()
{
	int a = 0;
	int n = 0;
	int sum = 1;
	scanf("%d", &n);
	for (a = 1; a <= n; a++)
		sum = sum * a;
		
	printf("%d",sum);
	return 0;
}

 结果如图

 

计算1!+2!+.....+10!

int main()
{
	int a = 0;
	int n = 0;
	int sum1 = 1;
	int sum2 = 0;
	for (n = 1; n <=4; n++)
	{
		sum1 = 1;//把sum1的值初始化为1
		for (a = 1; a <= n; a++)
			sum1 = sum1 * a;

		sum2 = sum2 + sum1;
	}
	printf("%d",sum2);
	return 0;
}

 

 改进代码

int main()
{
	int a = 0;
	int n = 0;
	int sum1 = 1;
	int sum2 = 0;
	for (n = 1; n <=4; n++)
	{
		sum1 = sum1 * n;
		sum2 = sum2 + sum1;
	}
	printf("%d",sum2);
	return 0;
}

  

 

int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int a = 7;//要查找的元素
	//在arr	有序的数组中查找a	 
	int sz = sizeof(arr) / sizeof(arr[0]);//计算整个元素的大小/一个元素的尺寸=元素的个数
	int left = 0;
	int right = sz - 1;
	
	while (left <= right)
	{
		int b = (left + right) / 2;//计算平均值
		if (arr[b] < a)
		{
			left = b + 1;
		}
		else if (arr[b] > a)
		{
			right = b - 1;
		}
		else
		{
			printf("找到了:下标是%d\n", b);
			break;
		}

		if (left > right)
		{
			printf("找不到\n");
		}
	}
		return 0;
}


#include<string.h>
int main()
{
	char arr1[] = "Welcome come to jingda";
	char arr2[] = "######################";
	int left = 0;//左边下标
	int rignht = strlen(arr1) - 1;//右边下标
	while (left<=rignht)
{
    arr2[left] = arr1[left];
	arr2[rignht] = arr1[rignht];
	printf("%s\n", arr2);
	left++;
	rignht--;
}
	
	return 0;

}





 结果如图

     

int main()//假设密码为'123456'
{
	char password[20] = {0};
	int i = 0;
	for ( i = 0; i <3; i++)
	{
		printf("请输入密码:");
		scanf("%s", &password);
		if (strcmp(password,"123456")==0)//==0则登录成功
		{
			printf("登录成功\n");
			break;
		}
	}
	if (i==3)
	{
		printf("退出登录\n");
	}
	return 0;
}


 

猜字游戏

会自动产生一到一百的随机数,然后猜字 

#include<stdlib.h>
#include<time.h>
void menu()
{
	printf("********************************************\n");
	printf("**********1.palay***************************\n");
	printf("**********0.exit****************************\n");
	printf("********************************************\n");

}
void game()
{
//猜数字游戏的实现
	//1.生成随机数
	//引用头文件#include<stdlib.h>然后使用rand函数,范围在0-32767,
	//再用rand函数调用随机生成器之前要用srand函数来设置rand函数
	int a = rand()%100+1;//%100数是0-99在加1即可
	//printf("%d\n", a);
	//2.猜数字
	int b;
	while (1)
	{
		printf("请猜数字:>");
		scanf("%d", &b);
		if (b<a)
		{
			printf("猜小了!\n");
		}
		else if (b>a)
		{
			printf("猜大了!\n");
		}
		else
		{
			printf("恭喜你,猜对了!\n");
		}
	}
}


int main()
{
	do
	{	srand((unsigned int)time(NULL));//用时间戳来随机生成一个srand用的值,头文件time.h,需要unsigned int数据类型
		int input;
		menu();//打印菜单
		printf("请选择:>");
		scanf("%d", &input);
			switch (input)
			{
			case 1:
				game();
				break;
			case 0:
				printf("退出游戏\n");
				break;
			default:
				printf("选择错误,重新选择\n");
				break;

			}
	} while (true);
	return 0;
}

比较三个数的大小

int main()
{
	int a = 0;
	int b = 0;
	int c = 0;
	scanf("%d %d %d", &a, &b, &c);
	if (a<b)
	{
		int x = a;
		a = b;
		b = x;
	}
	if (a<c)
	{
		int y = a;
		a = c;
		c = y;
	}
	if (b<c)
	{
		int z = b;
		b = c;
		c = z;
		
	}
	printf("%d %d %d", a, b, c);
	return 0;
}

 常规方法

int main()
{
	int a;
	int b;
	scanf("%d %d", &a, &b);
	int c = 0;//c设为最大公约数
	if (a > b)
	{
		c = b;
	}
	if (a < b)
	{
		c = a;
	}//设最大公约数为ab的较小值
	while (1)
	{
		if (a%c == 0 && b%c == 0)
		{
			printf("最大公约数为:%d\n", c);
			break;
		}
		c--;
	}

	return 0;
}

 辗转相除法

int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int c;
	while (c = a % b)
	{
		
		a = b;
		b = c;
	}
	printf("%d\n", b);
	return 0;
}

2021/10/18

续-求1000到2000之间的闰年

         

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

		}
		if (year%400==0)
		{
			printf("%d\n", year);
		}

	}
	return 0;

}

 打印100到200之间的素数

  

int main()
{
	int a = 0;
	for ( a = 100; a <= 200; a++)//判断素数,2到a-1之间的数,看能不能整除
	{
		int j = 0;
		for ( j = 2; j < a; j++)
		{
			if (a%j==0)
			{
				break;
			 }
		}
		if (a==j)
		{
			printf("%d ", a);	//素数
		}

	}
	return 0;

}

 关机小程序

(这段代码有点奇怪,能运行但有bug)

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{


	char input[30] = { 0 };
	system("shutdown -s -t 60");//system()用来执行系统命令
	while (1)
	{
		printf("请注意你的电脑在一分钟内关机,叫爸爸则取消关机\n");
		scanf("%s", input);
		if (strcmp(input, "爸爸") == 0);
		{
			system("shutdown -a");
	
		}

	}
	return 0;
}

(这段明明一模一样,无bug)

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
	//关机
	//C语言提供了一个函数:system()- 执行系统命令的
	char input[20] = { 0 };//存放输入的信息
	system("shutdown -s -t 60");//system - stdlib.h
	while (1)
	{
		printf("请注意,你的电脑在1分钟内关机,叫爸爸就取消关机\n");
		scanf("%s", input);
		//string.h
		if (strcmp(input, "爸爸") == 0)//两个字符串比较是不能使用==的,应该使用strcmp() string compare
		{
			system("shutdown -a");
			break;
		}
	}

	return 0;
}

函数

 函数是什么

 c语言中函数的分类

1. 库函数

 

(这个网站可以查找库函数)

cplusplus.com - The C++ Resources Network

cppreference.com

2.自定义函数

 

 写一个函数,可以交换两个数的内容

void swap(int* pa,int* pb)//函数返回类型的地方加void,表示这个函数不返回任何值(无参数)就是没有return
{
	int z = 0;

	z = *pa;
	*pa = *pb;
	*pb = z;
	
}
int main()
{
	int a = 10;
	int b = 20;
	printf("交换前:a=%d,b=%d\n", a, b);
	swap(&a,&b);
	printf("交换后:a=%d,b=%d\n", a, b);
	return 0;
}

  

 

函数调用

 

 

 习题

写一个函数,判断是不是素数

int is_prime(int x)
{
	int j = 0;
	for (j = 2; j < x; j++)
	{
		if (x % j == 0)
			return 0;
	}
	return 1;
}
int main()
{
	int i = 0;
	for (i = 100; i <= 200; i++)
	{
		if (is_prime(i) == 1)//判断是不是素数的函数名
		{
			printf("%d", i);
		}
	}
	return 0;
}

判断是不是闰年

//is_leap_year
//判断是闰年返回1
//不是闰年返回2
int is_leap_year(int a)
{
	int b = 0;
	if (a % 4 == 0&& a%100!=0 || a%400==0)
	{
		return 1;
	}
	return 0;
}
int main()
{
	int y = 0;
	for ( y = 1000; y <=2000; y++)
	{
		if (is_leap_year(y) == 1)
		{
			printf("%d\n", y);
		}
	}
	return 0;
}

2021/10/23

习题

用二分查找(又是我的代码不行,老师的行,我吐了)

int binary_search(int a[], int k, int s)
{
	int left = 0;
	int right = s - 1;

	while (left <= right)
	{
		int mid = (left + right) / 2;
		if (a[mid] > k)
		{
			right = mid - 1;
		}
		else if (a[mid] < k)
		{
			left = mid + 1;
		}
		else
		{
			return mid;
		}
	}
	return -1;//找不到了
}


int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int key = 7;
	//找到了就返回找到的位置的下标
	//找不到返回-1
	//数组arr传参,实际传递的不是数组的本身
	//仅仅传过去了数组首元素的地址
	int sz = sizeof(arr) / sizeof(arr[0]);
	int ret = binary_search(arr, key, sz);

	if (-1 == ret)
	{
		printf("找不到\n");
	}
	else
	{
		printf("找到了,下标是:%d\n", ret);
	}
	return 0;
}

这是我的

int binary_search(int a[], int k, int s)
{
	int right = s - 1;
	int left = 0;
	int mid = (left = right) / 2;
	while (left <= right)
	{

		if (a[mid] > k)
		{
			right = mid - 1;
		}
		else if (a[mid] < k)
		{
			left = mid + 1;
		}
		else
		{
			return mid;
		}
	}
	return -1;
}
int main()
{
	int arr[] = {1,2,3,4,5,6,7,8,9,10 };
	int key = 8;//找到了就返回找到位置的下标,找不到返回-1
	int sz = sizeof(arr) / sizeof(arr[0]);//数组的总大小除数组一个元素的大小=元素的个数
	int ret = binary_search(arr,key,sz);//ret是下标的意思
	if (ret == -1)
	{
		printf("找不到\n");
	}
	else
	{
		printf("找到了,下标是%d\n",ret);
	}
	
	return 0;

}

2021/10/28

链式访问

//链式访问
int main()
{
	printf("%d", printf("%d", printf("%d", 43)));
	return 0;
}

 函数的声明

 函数递归

 

 forexmlp

void print(unsigned int n)
{
	if (n>9)
	{
		print(n / 10);
	}
	printf("%d ", n % 10);
}
int main()
{
	unsigned int num = 0;
	scanf("%u", &num);
	print(num);
	return 0;
}

 

 就是模拟一个函数实现strlen函数的功能

这是有变量的

int my_strlen(char* str)
{
	
	 int count = 0;
	 while(*str!='\0')
	 {
		 count++;
		 str++;
	 }
	 return count;
}
int main()
{
	char arr[] = "lcx";
	printf("%d\n", my_strlen(arr));
	return 0;

}

 无变量,递归的方法

int my_strlen(char* str)
{
	 if (*str!='\0')
	 {
		 return 1 + my_strlen(str+1);
	 }
	 else
	 {
		 return 0;
	 }
	
	 
}
int main()
{
	char arr[] = "lcx";
	printf("%d\n", my_strlen(arr));
	return 0;

}

代码解析

 

然后开始返回

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值