在很多大学专业课程中,C语言是必修课,基本上大一就开始学习C语言。 然而,对于很多学生来说,学习C语言是非常困难的。 作为一个经历过的人,我决定为了给所有C语言初学者和编程爱好者贡献一点小小的贡献。
废话不多说,我们进入主题吧
初识C语言
首先我们看一段代码:
#include
int main()
{
printf("Hello world");
return 0;
}
运行这段代码的结果是:
以这段代码为例,我们需要了解C语言中最基本的元素,即头文件#、主函数main()和主函数类型int。 这些东西我们现在可能不理解,但是没关系。 这个疑问在以后学习函数的时候就会得到解答。 初学者写C程序时,只需要先复制这些东西,下面的代码就可以应用这个模板。
C语言数据类型
C语言程序包含多种数据类型。 在编写C语言程序之前,首先要声明相关的变量以及变量的数据类型。 这是C语言的一个核心思想。 基本数据类型包括整数、实数类型和字符类型。 稍后你还将了解数组、指针类型、结构体等。
比较常用的基本数据类型总结如下表:
通过数据类型关键字占用的字节数声明变量的示例
基本整数类型
整数
整数a;
长整型
长的
长一个; 或者
长整型;
长整型
长长
长长一个; 或者
长长整型;
单精度实数
漂浮
浮动一个;
长双实数
长的
12
长ch;
字符串类型
字符
字符ch;
(C语言声明变量的格式为:数据类型变量名,如int i;)
看到这里,很多同学可能想问:为什么我们在写C语言的时候需要用到这么多的数据类型呢? 其实这是C语言的一大特点,即不同的数据类型用于不同的计算。 我们可以通过下面的程序来看看数据类型在程序中的重要作用:
#include
int main()
{
int i=1,j=1;
for (j = 1; j < 32; j++)
{
i = i * 2;
}
printf("2的32次方是:%d\n",i);
return 0;
}
同学们应该知道,正确答案是:,但实际结果是:
这只是又一个负面信号。 如果让上面的程序计算2的40次方,结果就会变成0! 为什么是这样? 这是程序中非常常见的“类型溢出”。 简单来说,int类型的数据只能容纳4个字节的数据,而你的结果超过4个字节,那么它容纳不了,返回一个错误的值。 为此,解决类型溢出的办法也很简单:找一个更大的容器(数据类型)来容纳数据,比如long long数据。 修改后的程序运行结果如下:
#include
int main()
{
int j=1;
long long i = 1;
for (j = 1; j < 32; j++)
{
i = i * 2;
}
printf("2的32次方是:%I64d\n",i);
return 0;
}
同时,也可以用2的40次方计算出正确的结果:
所以,同学们,不要小看数据类型选择这一步,它可能会对你的程序产生致命的影响!
C语言输入输出
()和()是C语言中专门用于字符输入和输出的函数。 ()输出一个字符到当前光标位置,而()从键盘读取一个字符,一次只读取一个字符。 代码示例:
#include
int main()
{
char ch;
printf("Input a key:");
ch = getchar();
printf("The key is:");
putchar(ch);
return 0;
}
相关运行结果:
同学们可以看到,当我输入一串字符时,()只读取第一个字符
·使用()输出数据的一般格式:(“格式控制字符串”,输出值参数表);,一些基本的格式转换指令如下:
格式转换指令使用
%%
输出百分号%
%d
输出有符号十进制整数(如int类型),正数的符号省略
%C
输出一个字符
%s
输出字符串
%F
输出小数实数据(包括单精度和双精度),整数部分全部输出,小数部分一般默认6位小数。
%I64d
输出long long类型数据(注意:是大写的I,不是数字1)
示例代码:
#include
int main()
{
int a = -100;
float b = 3.1415926535;
double c = 2.78563445511;
char ch = 'a';
printf("a=%d\n",a);
printf("b=%f\n",b);
printf("c=%f\n",c);
printf("ch=%c\n",ch);
return 0;
}
运行结果:
在()的格式描述中,还可以添加格式修饰符来微调输出格式,例如指定输出数据字段宽度、显示精度、左右对齐等。基本常用的格式修饰符有如下:
格式修饰符的使用
英文字母l
用于输出长数据
英文字母L
用于输出长数据
输出域宽度m(m为整数)
指定输出项占用的列数。
如果m为正整数,当输出数据的宽度小于m时,会在域中右对齐,多余的左边用空格填充; 当输出数据的宽度大于m时,所有数据将按照实际宽度输出。如果m为负整数,则输出数据在域中向左对齐,其他同多于。
显示精度.n(n>=0且为整数)
对于浮点数,指定输出浮点数的小数位数。
如果你不明白,代码如下:
#include
int main()
{
int a = 100, b = 23458;
float i = 3.1415926535, j = 78.5454465;
long k = 123456789;
printf("a=%4d\n",a);
printf("b=%-4d\n",b);
printf("i=%.10f\n",i);
printf("j=%3.7f\n",j);
printf("k=%ld\n",k);
return 0;
}
运行结果:
使用scanf()格式化数据输入的方法与()函数的用法类似。 以下面的代码为例:
scanf("%d",&a);
其中,函数的双引号部分称为“格式化控制字符串”,逗号后面有一个地址字符'&',用于确定输入数据的地址。 同时scanf()函数还支持多个变量的输入:
scanf("%d%d",&i,&j);
特殊之处在于,用scanf()输入字符串类型数据时,不需要地址字符(这个特殊之处将在后面讨论,本节主要介绍基本的常用格式)。 例子:
scanf("%s",string);
但本节中您需要记住的是输入数据时如何将其写在双引号内。 以下面的代码为例:
#include
int main()
{
int a, b;
printf("Input numbers:\n");
scanf("a=%d,b=%d",&a,&b);
printf("Result:\n");
printf("a=%d,b=%d\n",a,b);
return 0;
}
这是错误的输入格式:
正确的输入格式如下:
使用函数scanf()时,遇到以下情况则认为数据输入完成:
遇到空格符、回车符、制表符(Tab); 达到输入域宽度(scanf()函数的格式修饰符的用法和含义与()函数相同,只是输出域宽度变成输入域宽度)遇到非法字符
完成本节后,学生将能够编写一些基本的C语言程序,例如简单的四次算术运算、单位之间的转换等。下面是一个例子:求圆的面积
#include
int main()
{
float r, s;//圆的面积可能不是整数,所以以浮点数的形式定义半径r及面积s
float pi = 3.1415926;//C语言中没有Π值,所以Π值需要自己定义
printf("输入半径:");
scanf("%f",&r);
s = pi * r * r;
printf("圆的面积是:%.4f",s);//输出的值保留4位小数,这个可以根据自己的喜好定义
return 0;
}