写在前面:笔者三年前简要学习了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;
//}