嵌入式学习笔记

这篇博客详细记录了C语言的学习过程,从初识C语言的Hello World和printf函数,到输入输出操作,包括scanf、getchar()等。进一步介绍了流程控制语句如if、switch、while、for以及break和continue的使用。还涉及到了数组的基本概念和初始化。每个知识点都配以编程练习和作业,适合C语言初学者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C语言笔记

第一章 初识

1. Hello world!

#include <stdio.h>

int main()
{
	printf("Hello world!\n");
    return 0;
}

运行结果

2. 第一个函数:printf

#include <stdio.h>

int main()
{
	int a = 3;
	int b = 99;
	float c = 2.3;
	char d = '%';
	
	printf("帅!\n");
	printf("handsome!\n");
	printf("%d\n",a);
	printf("a=%d\n",a);
	
	a = 100;
	
	printf("修改后a = %d\n",a);
	
	printf("a=%d\n",b);
	printf("a=%d\n",a);

	printf("有一个小数c=%f\n",c);
	
	printf("a以十六进制输出=0x%x\n",a);
	printf("b以十六进制输出=0x%x\n",b);
	
	printf("有一串字符d= %c \n",d);
	
	printf("a的内存地址为: %p\n",&a);
	
	
	int beichushu = 10;
	int chushu = 3;
	float result;
	result = (float)beichushu/chushu;
	printf("除法运算结果: %f\n",result);
	printf("除法运算结果: %0.2f\n",(float)beichushu/chushu);
	printf("除法运算结果: %-0.3f\n",(float)beichushu/chushu);
	
    return 0;
}

在这里插入图片描述

第二章 输入输出

1. scanf 编程练习

#include <stdio.h>

int main()
{
	int date1;
	int date2;
	int date3;

	
    printf("请输入一个整数\n");
	scanf("%d",&date1);
	printf("输入完毕\n");
	printf("您输入的数据是:%d\n",date1);   
	
	
	printf("请输入3个数\n");
	scanf("%d%d%d",&date1,&date2,&date3);
	printf("输入完毕\n");
	printf("您输入的数据是:date1=%d,date2=%d,date3=%d\n",date1,date2,date3);

	printf("请输入3个数\n");
	scanf("%d,%d,%d",&date1,&date2,&date3);
	printf("输入完毕\n");
	printf("您输入的数据是:date1=%d,date2=%d,date3=%d\n",date1,date2,date3);


	return 0; 
 }

在这里插入图片描述

#include <stdio.h>

int main()
{
	char data1;
	char data2;
	char data3;
	
	int dataInt;
	float dataFloat;
	char dataChar;

	printf("请输入3个字符\n");
	scanf("%c%c%c",&data1,&data2,&data3);
	printf("输入完毕\n");
	printf("您输入的字符是:data1=%c,data2=%c,data3=%c\n",data1,data2,data3);
	
	printf("请依次输入整数,字符和小数\n");
	scanf("%d%c%f",&dataInt,&dataChar,&dataFloat);
	printf("输入完毕\n");
	printf("您输入的数据是: dataInt = %d dataChar = %c dataFloat = %0.3f",dataInt,dataChar,dataFloat);
	
	return 0; 
 }

在这里插入图片描述

2. getchar()、putchar() 、 puts()

#include<stdio.h>
int main()
{
	char c;
	puts("请输入一个字符");
	c = getchar();
	puts("你输入的字符是");
	putchar(c);
	
	
	//可以写成putchar(getchar());
	
	return 0;
}

在这里插入图片描述

3. Homehork

homework 1: 从键盘输入一个大写字母,在显示屏上显示对应的小写字母。

//从键盘输入一个大写字母,在显示屏上显示对应的小写字母。
#include <stdio.h>

int main()
{
	char a = 'a';
	char b = 'b';
	char A = 'A';
	char B = 'B';
	printf("%c,%c,%c,%c\n",a,b,A,B);
	printf("a=%d,b=%d,A=%d,B=%d\n",a,b,A,B);
	puts("请输入一个大写字符:");
	scanf("%c",&a);
	printf("你输入的字母对应的小写字母为:%c\n",a+32);
	b = a+32;
	printf("你输入的字母对应的小写字母为:%c\n",b);
	puts("测试");
	getchar();
	//吸收回车符,来源于12行。当你分多次连续scanf获得字符的时候,要注意回车符
	putchar(getchar()+32);
	return 0;
}
吸收回车符,来源于12行。当你分多次连续scanf获得字符的时候,要注7意回车符

在这里插入图片描述
homework 2: 输入两个数,获得两个数加减乘除的值。

//输入两个数,获得两个数加减乘除的值。
#include <stdio.h>

int main()
{
	int a;
	int b;

	puts("请分别输入两个数a和b");
	scanf("%d%d",&a,&b);
	printf("这两个数的加减乘除运算结果分别为:\na+b=%d,\na-b=%d,\na*b=%d,\na/b=%f",a+b,a-b,a*b,(float)a/b);
	return 0;
}

在这里插入图片描述
homework 3: 请编序将“China”译成密码,码规律是:用原来的字后面第 个字代原来的字母。
例如,字母“A”后面第 4 个字母是“E”用“E”代替“A”。
因此,“China”应译为“Glmre”。
请编一程序,用赋初值的方法使 cl,c2,c3,c4,c5 这5 个变量的值分别为 ‘C’ ,‘h’ , ‘i’ , ‘n’ , ‘a’,
经过运算,使cl,c2,c3,c4,c5 分别变为G , l , m,r,e。分别用 putchar函数和 printf 函数输出这5个字符

#include <stdio.h>

int main()
{
	char a;
	char b;
	char c;
	char d;
	char e;
	puts ("请输入五个字符,程序会将其译为密码:");
	scanf("%c%c%c%c%c",&a,&b,&c,&d,&e);
	printf("密码:%c%c%c%c%c",a+4,b+4,c+4,d+4,e+4);
	return 0;
}

在这里插入图片描述

第三章 流程控制

1. if语句

#include <stdio.h>
int main()
{
	int money;
	puts("请问你有多少钱?");
	scanf("%d",&money);
	if(money > 100)
	{
		puts("有钱人");
	}
	printf("谈话结束\n");
	printf("测试%d",money > 100); //打印一下(money > 100)的值,发现当money >        	100为真时,(money > 100) == 1,反之 == 0。
	return 0;
}

在这里插入图片描述

#include <stdio.h>

int main()
{
	int data1;
	int data2;
	int data3;
	int datatmp;

	puts("请输入三个整数, 我将为其从小到大排列");
	scanf("%d%d%d",&data1,&data2,&data3);
	if(data1 > data2){
		datatmp = data1;
		data1 = data2;
		data2 = datatmp;
	}

	if(data2 > data3){
		datatmp = data2;
		data2 = data3;
		data3 = datatmp;
	}
	if(data1 > data2){
		datatmp = data1;
		data1 = data2;
		data2 = datatmp;
	}

	printf("%d<%d<%d\n",data1,data2,data3);

	return 0;
}

在这里插入图片描述

1.1 if else 编程练习

(1) if else

#include <stdio.h>

int main()
{
	int haveMoneyOrNot;
	int hansomeOrNot;
	
	puts("你有钱吗?有钱扣1,没有扣0。");
	scanf("%d",&haveMoneyOrNot);
	
	puts("你帅吗?帅扣1,不帅扣0。");
	scanf("%d",&hansomeOrNot);
	if(haveMoneyOrNot ==1 && hansomeOrNot == 1){
		puts("你好!");
		puts("结婚!");
	}else{
		puts("再见!");
	}
	puts("相亲结束。");
	return 0;
}

在这里插入图片描述
(2) if - else if - else
练习:若是小写字母则直接输出,若是大写则转换成小写输出。

//若是小写字母则直接输出,若是大写则转换成小写输出。
#include <stdio.h>

int main()
{
	char cdata;
	
	puts("请输入一个英文字母");
	scanf("%c",&cdata);     	
	
	if(cdata >= 97 && cdata <= 122){
		printf("%c",cdata);
	}else if(cdata >= 65 && cdata <= 90){
		printf("%c",cdata+32);
	}else{
		printf("请输入正确的英文字母");
	}
	puts("\n程序结束。");
	
	return 0;
}

在这里插入图片描述

1.2 if 嵌套 编程练习

此案例不代表作者爱情观,只是玩下梗,无意引战。

#include <stdio.h>

int main()
{
	int healthOrNot;
	int richOrNot;
	int beantyfulOrNot;
	int moneyUseForMeOrNot;
	
	puts("tips:“以下问题肯定则输入1,否则输入0。”");
	puts("你的身体健康吗?");
	scanf("%d",&healthOrNot);
	
	if(healthOrNot == 1){
		puts("你有钱吗?");
		scanf("%d",&richOrNot);
		if(richOrNot == 1){
			puts("你漂不漂亮?");
			scanf("%d",&beantyfulOrNot);
			if(beantyfulOrNot == 1){
				puts("你的钱愿意给我花吗?");
				scanf("%d",&moneyUseForMeOrNot);
				if(moneyUseForMeOrNot == 1){
					puts("我也喜欢你欸,我们交往吧!");
				}else{
					puts("抱歉,我不跟小气鬼当朋友,虽然你又有钱又漂亮还有个好身体,但是请滚蛋谢谢。");
				}
			}else{
				puts("抱歉,你是个好人,但我更喜欢漂亮的。");
			}
		}else{
			puts("没有物质的爱情就像是一盘散沙不用风吹走两步就散了.jpg");
		}
	}else{
		puts("身体不健康的不能交朋友。");
	}
	
	return 0;
}

在这里插入图片描述

2. 列表选择 switch caes 语句

#include <stdio.h>

int main()
{
	int data;
	char cdata;
	
	puts("请输入1/2/3,来选择模式1/模式2/模式3。");
	scanf("%d",&data);
	
	switch(data){
		case 1:
		    puts("模式1启动。");
		    break;
		case 2:
		    puts("模式2启动。");
		    break;
		case 3:
		    puts("模式3启动。");
		    break;
		default: 
			puts("请输入规定字符选择模式。");
	}

	getchar();//为了吸收来自上一个键盘输入确定时的回车键。

	puts("请输入a/b/c,来选择模式a/模式b/模式c。");
	scanf("%c",&cdata);

	switch(cdata){
		case 'a':
			 puts("模式a启动。");
			break;
		case 'b':
			 puts("模式b启动。");
			break;
		case 'c':
			 puts("模式c启动。");
			break;
		default:
			puts("请输入规定字符选择模式。");
	}
	
	puts("DONE!");
	
	return 0;
}

在这里插入图片描述第25行 getchar(); 为了吸收来自上一个键盘输入确定时的回车键。

3. while 循环

#include <stdio.h>

int main()
{
	int times = 1;
	
	while(times <=10000){
		printf("LYZ最帅+%d\n",times);
		times++;
	}
	
	 return 0;
}

在这里插入图片描述
练习 :输入一个整数,程序自动计算从1开始累加直到这个数的和。

#include <stdio.h>

int main()
{
	int sum = 0;     //变量初始化为0,编程好习惯。
	int data = 1;
	int x;		
	
	puts("请输入一个整数,程序将自动计算从1开始累加直到这个数的和");
	scanf("%d",&x);	
	
	while(data <= x){
		sum = sum + data;
		data++;
	}

	printf("从1到%d的和为:%d",x,sum);
	
	return 0;
}

在这里插入图片描述

3.1 do while 循环
#include <stdio.h>

int main()
{
	int data = 1;
	
	while(data == 0){
		puts("This is a text!");
		data--;
	}
	
	do{
		puts("This is a text!");
		printf("%d\n",data);
		data--;
	}while(data != 0);
	
	return 0;
}

在这里插入图片描述

4. for 循环

与while一起比较,顺便介绍for与while的两种死循环。

#include<stdio.h>

int main()
{
	int data;
	
	for(data = 0;data < 10;data++){
		puts("LYZ最帅!");
	}
	
	puts("DONE!");
	
	/* int dataText = 0;
	while(dataText < 10){
		puts("LYZ最帅!");
		dataText++;
	}
	
	puts("DONE!");      这俩效果一样,完完全全的等价,只是表达形式不同。
	 */
	 
	 // 介绍两种死循环:
	
	/* while(1){
		
	}
	
	for(;;){
		
	 } 
	 */
	return 0;
}

在这里插入图片描述

5. 循环干涉之 break 和 continue 的练习

5.1 break

练习:在全系1000名学生中,征集慈善募捐,当总数达到10万元时就结束,统计此时捐款人数,以及平均每人捐款的数目。

/* 题目:在全系1000名学生中,征集慈善募捐,当总数达到10万元时就结束,统计此时捐款人数,以及平均每人捐款的数目。 */

#include <stdio.h>

int main()
{
	float money;
	int person;
	float totleMoney;
	
	for(person = 1;person <= 1000;person++){
		printf("请输入您想要捐款的数目:");
		scanf("%f",&money);
		totleMoney = totleMoney + money;
		printf("当前捐款人数为:%d\n",person);
		printf("当前捐款总数为:%0.2f\n",totleMoney);
		printf("平均每人捐款数目为:%0.2f\n\n",totleMoney/person);
		
		if(totleMoney >= 100000){
			printf("捐款完成!\n");
			break;
			// 区分continue和break的区别,break语句可以用来从循环体内中途跳出循环体,即提前结束循环操作,接着执行循环下面的语句。
			// 注意!!    在循环语句中,break、continue语句一般都是与if语句一起使用。
		}
	}
	
	puts("DONE!");
	
	return 0;
}

在这里插入图片描述

5.2 continue

练习:要求输出100~200间不能被3整除的数。
进阶:要求输出任意两个数间不能被X整除的数。


/* 
要求输出100~200间不能被3整除的数。 

#include <stdio.h>

int main()
{
	int data;
	int ret;
	
	printf("100~200之间不能被3整除的数为:");
			
	
	for(data = 100; data <= 200; data++){
		ret = data%3;
		if(ret != 0){
			printf(" %d ",data);
		}
	}
	
	return 0;
}
 */


//

/* 
要求输出任意两个数间不能被X整除的数。 */

#include <stdio.h>

int main()
{
	int data;
	int Hdata;
	int Edata;
	int X;
	int ret;

	puts("输入两个任意政数和任意整数X的值,程序将输出这两任意数之间不能被X整除的数。");
	puts("请输入俩任意整数:");
	
	scanf("%d",&Hdata);
	scanf("%d",&Edata);
	
	puts("请输入X:");
	
	scanf("%d",&X);
	
	printf("俩任意整数之间不能被%d整除的数为:",X);
	
	for(data = Hdata; data <= Edata; data++){
		ret = data%X;
		if(ret == 0){
			continue; 
			// 区分continue和break的区别,break语句可以用来从循环体内中途跳出循环体,即提前结束循环操作,接着执行循环下面的语句。
			// 注意!!    在循环语句中,break、continue语句一般都是与if语句一起使用。
		}
		printf(" %d ",data);
	}
		
	puts("\n\nDONE!");
	
	return 0;
}
区分continue和break的区别,break语句可以用来从循环体内中途跳出循环体,即提前结束循环操作,接着执行循环下面的语句。
注意!!    在循环语句中,break、continue语句一般都是与if语句一起使用。

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

6. Homework

homework 1: 输入两个正整数m和n,求其最大公约数和最小公倍数。

//输入两个正整数m和n,求其最大公约数和最小公倍数。

#include <stdio.h>

int main()
{
	int a,b,m;
	int i,j;

	puts("请输入两个数,程序将输出这两个数的最大公约数和最小公倍数。");
	
	scanf("%d%d",&a,&b);
	
	i = a;
	j = b;
	
	
//求最大公约数
//方法1:一般方法。

	m = (a < b) ? a : b;     // 将最小值赋给m。
	
	while(1){
		if(a % m == 0 && b % m == 0){
			printf("%d和%d的最大公约数是:%d\n",i,j,m);
			break;
		}
		m--;
	}
	
	
	
//方法2:辗转相除法。
	
	while(1){
		m = i % b;
		a = b;
		b = m;
		if(m == 0){
			printf("%d和%d的最大公约数是:%d\n",i,j,a);
			break;
		}
	}

	
//求最大公倍数

	a = i;
	b = j;
	
	m = a > b ? a : b;
	
	while(1){
		if(m % a == 0 && m % b == 0){
			printf("%d和%d的最大公倍数是:%d\n",i,j,m);
			break;
		}
		m++;
	}
	return 0;
}

在这里插入图片描述
homework 2: C语言输出所有水仙花数,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。

// C语言输出所有水仙花数,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。

#include <stdio.h>

int main()
{
    int data;
	int gdata;
	int sdata;
	int bdata;
	
	
	for(data = 100;data <= 999;data++){
		
		gdata = data % 10;
		sdata = data % 100 / 10;
		bdata = data /100;
		
		if(data == gdata * gdata * gdata + sdata * sdata * sdata + bdata * bdata * bdata ){
			printf("水仙花数是:%d\n",data);
		}
	}
	return 0;
}

在这里插入图片描述

第四章 数组

1. 数组的引用及基本用法

练习:定义一个一维数组,并对其中元素赋值并打印其内存地址。

//数组的基本认识,a[10]是数组名是整一块儿内存空间,包含了十个子空间a[0]、a[1] ···a[9]。
//练习:定义一个一维数组,并对其中元素赋值并打印其内存地址。

#include <stdio.h>

int main()
{
	int a[10];  //这边的十表示数组大小。
	
	/* int a[0] = 100;
	int a[1] = 101;   
	int a[2] = 102;		//这里面的0、1、2、是a[10]里面的子空间的下标。
	.
	.
	. */                //这样定义傻费劲
	
	int data;
	
	for(data = 0;data < 10;data++){
		a[data] = data + 100;
	}
	
	puts("数组初始化完成。");
	
	for(data = 0;data < 10;data++){
		printf("a[%d] = %d\n",data,a[data]);
	}
	
	for(data = 0;data < 10;data++){
		printf("The address of a[%d] is: %p\n",data,&a[data]);
	}//打印该数组内存地址。
	
	puts("DONE!");
	
	return 0;
}  
}  
数组的基本认识,a[10]是数组名是整一块儿内存空间,包含了十个子空间a[0]、a[1] ···a[9]。

在这里插入图片描述

2. 数组各种初始化

#include <stdio.h>

int main()
{
	int data;

	//全部赋值:
	int a[10] = {1,2,3,4,5,6,7,8,9,10};
	
	puts("数组初始化完成。");
	
	for(data = 0;data < 10;data++){
		printf("address: a[%d] = %p	 data: a[%d] = %d\n",data,&a[data],data,a[data]);
	}
	
	//部分赋值:
	int b[10] = {1,2,3};		//后面的系统会自动赋0。
	puts("数组初始化完成。");
	
	for(data = 0;data < 10;data++){
		printf("address: b[%d] = %p	 data: b[%d] = %d\n",data,&b[data],data,b[data]);
	}
	
	//初始化为0:
	int c[10] = {0};
	puts("数组初始化完成。");
	
	for(data = 0;data < 10;data++){
		printf("address: c[%d] = %p	 data: c[%d] = %d\n",data,&c[data],data,c[data]);
	}
	
	//还可以不指定数组长度:
	int d[] = {1,2,3,4,5};
	puts("数组初始化完成。");
	
	for(data = 0;d[data] != 0;data++){
		printf("address: d[%d] = %p	 data: d[%d] = %d\n",data,&d[data],data,d[data]);
	}
	
	puts("DONE!");
	
	return 0;
}

在这里插入图片描述

继续加油!

一些知识点 & 个人理解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值