一、开发环境与工具
1.集成开发环境(IDE)有devC++、啊哈 C、Vc++、turboC 等。
2.代码编辑工具 - Notepad++
这是一款小巧高效的文本编辑器,支持 27 种编程语言,对 C、C++、Java 等语言的语法高亮度显示,可根据关键字显示节点并自由折叠 / 打开,还能显示缩进引导线,方便查看代码结构。
新建 C 语言代码文件时以.c 为后缀,并且可进行颜色、中文编码、标注等补充配置。
3.代码编译工具 - gcc
gcc 是常用的 C 语言编译器。安装后需配置环境变量,使命令终端在任意文件夹都能识别 gcc 指令。
使用时,在命令终端(cmd)中通过 cd 指令切换到代码所在文件夹,利用 “gcc 源文件 -o 生成程序名” 指令进行编译和运行,例如 “gcc test.c -o pro” 。
二、C 程序基础框架
1.变量
在程序运行中值可改变,使用前需先定义。
如 “int a = 3;” 定义了一个整型变量 a 并初始化。
变量名(标识符)由字母、数字、下划线组成,且只能以字母或下划线开头,区分大小写。
可以使用驼峰命名法等方式命名,如 “int secondsPerYear”。从内存角度看,变量就像蜂巢快递柜,里面的数据可变化。
2.数据类型
(1)整型数
C 语言中整型用int表示,通常占 4 个字节(32 位),能表示一定范围的整数。
但在不同开发环境(如 c51)中,整型可能占 2 个字节,其取值范围会相应变化,如 c51 中整型取值范围为 -32768 到 32767(无符号整型为 0 到 65535 )。
(2)字符型
用char定义,占 1 个字节(8bit),存储字符的 ASCII 码值。
例如char data3 = ‘c’;实际存储的是字符’c’对应的 ASCII 码值,通过该编码可实现字符与数值的转换。
(3)浮点类型
用于表示小数,float类型占 4 个字节(32 位) 。
它能满足一般精度的小数运算需求,但在表示高精度小数时可能存在精度损失问题,在对精度要求极高的场景下需谨慎使用或考虑使用更高精度的double类型(占 8 个字节,64 位)。
(4)数据类型转换
包括自动类型转换和强制类型转换。
自动类型转换发生在不同数据类型进行混合运算时,系统会自动将精度低的数据类型转换为精度高的类型。
强制类型转换则是根据编程需求,将一种数据类型强制转换为另一种数据类型,格式为(目标数据类型)表达式,不过强制转换可能会导致数据精度丢失或溢出,使用时需注意。
3.常量
在程序运行过程中,其值不能改变的量。
符号常量通过#define预处理指令定义,如#define PI 3.14 ,定义后在程序中使用PI就代表 3.14 。
这种方式增强了程序的可读性和可维护性,若需要修改PI的值,只需在定义处修改即可,无需在每个使用PI的地方逐一修改。
4.转义字符
用于表示一些特殊字符,这些字符无法直接通过键盘输入或在字符串中正常显示。
如\n表示换行符,使输出内容在该字符处换行;
\t表示制表符,用于对齐文本;
\表示反斜杠本身等。
三、输入输出函数
1.printf 函数
用于向标准输出设备(通常是显示器)输出数据。
它既可以原样输出字符串,如printf(“Hello, World!”);会在屏幕上显示Hello, World! 。
也能通过%占位符(格式字符)输出不同类型的数据,具体如下:
%d:输出十进制整数,如int num = 10
%c:输出单个字符,如char ch = ‘A’
%s:输出字符串,如char str[] = “C Programming”
%f:输出小数,默认保留 6 位小数
可通过%-m.nf格式指定位数,m表示输出字段宽度(包含小数点),n表示小数位数,-表示左对齐,如printf(“fnum = %-8.2f”, fnum)
%x:以十六进制格式输出整数,字母部分小写 。
%p:一般用于打印内存地址,也是十六进制格式输出,会输出变量的内存地址(具体地址值因系统和运行环境而异) 。
2.scanf 函数
用于从标准输入设备(通常是键盘)读取数据并存储到变量中。
使用时变量前必须加取地址符& ,例如int num; scanf(“%d”, &num); ,这样才能将用户从键盘输入的整数正确存储到变量num中。
当需要读取多个变量时,要分别使用scanf函数,
如int a, b, c; scanf(“%d”, &a); scanf(“%d”, &b); scanf(“%d”, &c); 。
输入格式要与scanf格式字符串中的字符一致,
如scanf(“%d,%d”, &a, &b); 输入时需用逗号分隔两个整数,如1,2 。
在处理字符混合输入时,要特别注意输入控制流程,因为字符输入可能会受到缓冲区残留字符的影响,导致输入结果不符合预期,通常可以在读取字符前使用getchar()函数清理缓冲区。
3.getchar 函数
用于从标准输入读取一个字符。
它每次只读取一个字符,包括空白字符(如空格、换行符等)。
例如char ch; ch = getchar(); ,程序会暂停等待用户输入一个字符,输入后该字符被赋值给变量ch。
四、代码练习
1.printf_1
#include <stdio.h>
int main()
{
int a=3,b=10;
float f=3.14;
char c='#';
float num;
num=(float)b/a;
printf("结果为:num=%f\n",num);
printf("结果为:num2=%f\n",(float)b/a);
printf("hello world!\n");
printf("a=%d\n",a);
a=100;
printf("修改后为:a=%d\n",a);
printf("十六进制为:a=0x%x\n",a);
printf("小数为:f=%f\n",f);
printf("字符为:c=%c\n",c);
printf("地址为:%p\n",&a);
return 0;
}
2.printf_2
#include <stdio.h>
int main()
{
int num_1 = 8;
int num_2 = 3;
int num_3;
int data;
float data_1;
printf("这是一个简单的加减乘除运算程序!!!\n");
printf("原始数据为:%d,%d\n",num_1,num_2);
data = num_1 + num_2;
printf("数据相加为:%d\n",data);
data = num_1 - num_2;
printf("数据相减为:%d\n",data);
data = num_1 * num_2;
printf("数据相乘为:%d\n",data);
data_1 = (float)num_1 / num_2;
printf("数据相除为:%f\n",data_1);
return 0;
}
3.scanf_1
#include <stdio.h>
int main()
{
int data_1;
int data_2;
int data_3;
printf("请输入一个整数:\n");
scanf("%d",&data_1);
printf("输入完毕!!!\n");
printf("你输入的整数是:data_1=%d\n",data_1);
printf("请输入3个整数:\n");
scanf("%d%d%d",&data_1,&data_2,&data_3);
printf("输入完毕!!!\n");
printf("你输入的整数是:data_1=%d,data_2=%d,data_3=%d\n",data_1,data_2,data_3);
return 0;
}
4.scanf_2
#include <stdio.h>
int main()
{
/*
int data_1;
char data_2;
float data_3;
printf("请依次输入整数、字符和小数!!!\n");
scanf("%d%c%f",&data_1,&data_2,&data_3);
printf("你输入的数据为:data_1=%d,data_2=%c,data_3=%f\n",data_1,data_2,data_3);
*/
/*
char c;
puts("请输入一个字符:");
c = getchar();
putchar(c);
*/
/*
char a;
char A;
puts("请输入一个大写字母:");
A = getchar();
printf("它的小写字母为:%c\n",A+32);
*/
char c1,c2,c3,c4,c5;
printf("请输入原码:%c%c%c%c%c\n",c1,c2,c3,c4,c5);
scanf("%c%c%c%c%c",&c1,&c2,&c3,&c4,&c5);
printf("编译密码为:%c%c%c%c%c\n",c1+4,c2+4,c3+4,c4+4,c5+4);
/*
puts跟printf的区别:
1.puts自动加入换行符
2.puts只能输出字符串
*/
return 0;
}