C语言学习笔记-入门篇01:scanf()函数

176 阅读6分钟

写在前面:笔者三年前简要学习了python,现因学习原因需要学习C语言,出现错误还请大家批评指正,不胜感激!!!

引入——C程序设计第五版书本样例:

#include <stdio.h>  
  
/*有人用温度计测量出用华氏法表示的温度(如64°F),  
* 今要求把它转换为以摄氏法表示的温度(如 17.8℃)。  
* ps:c=5/9(f-32)*/  
  
`//int main() {  
// float f,c; // 定义f、c为单精度浮点型变量  
// f=64.0; // 指定f的值  
// c=(5.0/9)*(f-32); // 计算c  
// printf("f=%f\nc=%f\n",f,c); // 输出c  
// return 0;  
//}  `
  
/*printf("华氏温度 = %f\n摄氏温度 = %f\n", f, c);这段代码中的%f是什么意思?  
* 原来啊。%f是printf的格式化说明符,用以指定printf输出的结果的格式:  
* %f表示以浮点数形式输出,默认保留6位小数点,还可以指定保留的小数点位数,如:  
* %0.2f是指保留两位小数,%0.6f 表示保留六位小数,等等。  
* 这使得 printf 函数非常灵活,可以根据需要格式化浮点数的输出。*/  
 
// 优化建议:  
/`/#include <stdio.h>  
//  
//int main() {  
// float f, c; // 定义f、c为单精度浮点型变量  
// f = 64.0; // 指定f的值  
// c = (5.0 / 9) * (f - 32); // 使用摄氏温度公式计算c  
// printf("华氏温度 = %f\n摄氏温度 = %f\n", f, c); // 输出华氏温度和摄氏温度  
// return 0;  
//}  `
### 改进和优化的建议:
//  
**//添加注释:在程序中添加注释有助于理解代码的目的和功能。  
//使用更具描述性的输出:在打印结果时,使用描述性的标签,以使输出更易于理解。  
//使用常量而不是硬编码值:将温度值硬编码为64.0可能不是最佳做法。你可以考虑使用变量或  
//从用户输入获取值来使程序更灵活。  
//使用换行符:在输出中使用换行符 \n 可以使输出更清晰。**  
  
// 下面对代码进行优化,达到与用户交互的效果:  
// 挑战点:C语言中如何接受用户的输入?是scanf吗?  
// 是的,你可以使用 scanf 函数来接受用户输入。  
// scanf 是C语言标准库中的一个函数,用于从标准输入(通常是键盘)读取用户输入的数据。  
// PS: printf、scanf、等库函数都是C语言提供的内置函数,不是我们自己写的,因此要使用他们,必须预先使用 #include <stdio.h>预声明,  
// 否则无法使用(借别人的东西要告诉别人)。英文解释:include:包含、stdio:std:标准、i:输入、o:输出  

问题点:不知道如何使用scanf()函数接收多个参数,导致输出结果错误

`//int main(){  
// float f, c; // 定义f,c变量为float单精度浮点型  
//  
// // 使用scanf()来接受用户输入:  
//// scanf("请输入您要转换的华氏温度值:"); 这是错误示例,在py中的print函数是此用法,  
//// 但C语言中要先使用printf()来提示用户输入,然后使用scanf来扫描用户输入;  
//  
// printf("请输入您要转换的华氏温度值:"); // 使用printf()来提示用户输入  
//  
//// scanf("%f",f); 这是错误示例,不同于py,C语言中,scanf函数需要知道用户输入的  
//// 值存储到了哪个变量中,通过‘&’运算符可以获取变量的内存地址,从而使 scanf 函数能够  
//// 将用户输入的值存储到正确的地方。在这种情况下,&f 表示获取变量 f 的内存地址,以便  
//// scanf 可以将用户输入的浮点数值存储到 f 变量所指向的内存位置。  
////  
//// 简而言之,& 是用于获取变量的地址的符号,通常用于 scanf 或其他需要将用户输入的值存  
//// 储到变量中的函数中。  
//  
// scanf("%f",&f);  
// c = (5.0/9)*(f-32); // 计算c  
// printf("华氏温度为:%0.2f\n摄氏温度为:%0.3f\n",f,c);  
//  
// return 0;  
//  
//}  `

/*结果符合预期:  
请输入您要转换的华氏温度值:64.0  
华氏温度为:64.00  
摄氏温度为:17.778  
*/  

标准主函数的写法:

//int main(){ int整型和返回值return 0 是对应关系:0是整型。main函数是程序的入口,他在哪程序就从它的下一行开始执行。  
//  
// return 0;  
//}  
 
//float main(){  
// return 0.1;  
//}  
 
//int main(void){ // void:明确告知主函数没有参数  
//  
// return 0;  
//}  

C语言中的数据类型:使用sizeof()函数查看不同类型变量所占空间:

//int main(){  
//  
// printf("%zu\n", sizeof(int)); // "%zu":输出sizeof()的返回值;  
//  
// // sizeof(数据类型):数据类型所占空间  
// printf("%zu\n", sizeof(char)); // 字符型  
// printf("%zu\n", sizeof(short)); // 短整型  
// printf("%zu\n", sizeof(long)); // 长整型  
// printf("%zu\n", sizeof(long long )); // 更长整型  
// printf("%zu\n", sizeof(float));  
// printf("%zu\n", sizeof(double));  
//  
// return 0;  
//}  
 
// 结果如下:  
//F:\C_and_C++\Coding\C语言程序设计第五版3.1\cmake-build-debug\untitled.exe  
//4 4个字节,4✖8bit=32bit  
//1  
//2  
//8  
//8  
//4  
//8  
//  
//进程已结束,退出代码0  

/数据类型的作用:/

//⭐向内存申请合适的空间:(创建变量的本质)

//int main(){  
// int age = 20; //向内存申请int大小(4个字节)的空间:  
// double price = 66.6;  
//  
// printf("小明今年%d岁\n",age);  
// printf("这本书卖%0.1f元\n",price); // %0.1f:保留一位小数  
//  
// return 0;  
//}  
// 小明今年20岁  
// 这本书卖66.6

/变量和常量:/

//⭐当局部变量和全局变量相同时,优先使用哪一个?

//int a = 10; // 全局变量  
//  
//int main(){  
// int a = 100;  
// printf("我有%d元\n",a);  
//  
// return 0;  
//}  
//我有100元  
// -------- 当局部变量和全局变量相同时,优先使用局部变量  
 
//变量和常量的使用:  
//计算两数之和  
//int main(){  
// int a,b,sum; // 定义两整型数a,b ps:创建变量时最好赋初值  
//  
// printf("请输入a,b的值:");  
### 找到错误原因啦:scanf可以接收多个参数,但中间只能使用空格分隔!
// scanf("%d %d",&a,&b);   
//// scanf("%d",&a); // gpt说可以接受多个参数,但我未成功,实际上就是,下面继续尝试  
// // 原来scanf函数包含两个参数时,**输入的两个值也只能用空格分隔!**  
//// printf("请输入b的值:");  
//// scanf("%d",&b);  
//  
// sum = a+b;  
//  
// printf("两数之和为:%d\n",sum);  
//  
// return 0;  
//}  
//两个scanf:  
//请输入a的值:1  
//请输入b的值:2  
//两数之和为:3  
 
//一个scanf:  
//请输入a,b的值:1 2  
//两数之和为:3  

总算把scanf玩明白了

// 看了鹏哥C语言,下面尝试一下:

//int main()  
//{  
// int num1 = 0; // 初始化变量  
// int num2 = 0;  
// // 写代码先写逻辑,再写代码实现:  
// printf("请输入要求和的两个整数:");  
// // 接收用户输入:scanf()  
// scanf("d% d%",&num1,&num2);  
// // 求和  
// // sum = num1+num2; // 注意sum这个变量也需要创建:int sum  
// int sum = num1+num2;  
// // 输出  
// printf("两整数之和为%d\n",sum);  
//  
// return 0;  
//}

参考链接:【C语言程序设计从入门到进阶【比特鹏哥c语言2023完整版视频教程】(c语言基础入门c语言软件安装C语言指针c语言考研C语言专升本C语言期末计算机二级C语言c语言】 www.bilibili.com/video/BV1Vm…