之前发了很多有关C语言知识的文章。但是对于C语言的学习,只知道知识是不行的,需要自己亲自敲一些代码才能够学好C语言。在这里讲解一下简单的C语言程序(代码),希望自己能够在自己的电脑上敲几遍。
a与b的算术运算
描述:输出a和b的初始化值的简单算术运算。
代码:
#include <stdio.h>
int main()
{
int a=5,b=3;
printf("a+b=%d\n",a+b); //a与b相加
printf("a-b=%d\n",a-b); //a与b相减
printf("a*b=%d\n",a*b); //a与b相乘
printf("a/b=%d\n",a/b); //a与b相除
printf("a%%b=%d\n",a%b); //a取b的余数
return 0;
}
输出结果:
分析:printf函数是将双引号中的内容输出到弹出框中,其中因为a和b的数据类型都是int型,所以运算结果都要用%d的形式输出,前3个运算都是正确的,符合现实生活中的运算。但是第四个就会有疑问了。其实在C语言中整数与整数相除的结果是整数,所以输出是1。最后是一个取余运算。
带有输入值(可改变a和b的值)的代码:
#include <stdio.h>
int main()
{
int a,b;
scanf("%d %d",&a,&b);
printf("a+b=%d\n",a+b); //a与b相加
printf("a-b=%d\n",a-b); //a与b相减
printf("a*b=%d\n",a*b); //a与b相乘
printf("a/b=%d\n",a/b); //a与b相除
printf("a%%b=%d\n",a%b); //a取b的余数
return 0;
}
运行效果:
可以将以上的代码复制到编辑软件试运行一下。需要注意的是,在输入两个数字是只能输入整数,数字间要用空格隔开。如果想要计算一个浮点数的话,下面的代码就可以。
#include <stdio.h>
int main()
{
double a,b;
scanf("%lf %lf",&a,&b);
printf("a+b=%lf\n",a+b); //a与b相加
printf("a-b=%lf\n",a-b); //a与b相减
printf("a*b=%lf\n",a*b); //a与b相乘
printf("a/b=%lf\n",a/b); //a与b相除
// printf("a%%b=%lf\n",a%b); //a取b的余数
return 0;
}
需要注意的是输入和输出的格式控制符;浮点数无法进行取余运算,所以在这里进行了注释,也可以用如下的代码替换,但是会有误差。
printf("a%%b=%lf\n",(int)a%(int)b); //a取b的余数
三个数的排序
描述:输入三个整数,从小到大(或从大到小)排序输出。
代码:
#include <stdio.h>
int main()
{
int a,b,c,t;
scanf("%d %d %d",&a,&b,&c); //输入要排序的三个整数
if(a>b)
{
t=a;
a=b;
b=t;
}
if(a>c)
{
t=a;
a=c;
c=t;
}
if(b>c)
{
t=b;
b=c;
c=t;
}
printf("%d %d %d",a,b,c); //输出排序后的结果
return 0;
}
运行结果:
分析:一次将输入的三个数a,b,c进行比较。如果比较结果符合语言设定的,即符合if语句条件的,则将它们的数值进行转换。两个数值的互换一般是利用一个中间值,将某一个值赋给这个中间值,该值等于另一个值,另一个值等于这个中间值。建议在纸上一步一步的写出各个值的变换情况。
该方法虽然简单,但是一旦要求排序的数的个数多起来,难免会在写代码时造成思路的混乱。接下来介绍一种比较常用的排序算法——冒泡排序。
代码如下(以五个数的排序为例)
#include <stdio.h>
int main()
{
int a[5],i,j,t;
for(i=0;i<5;i++)
scanf("%d",&a[i]); //输入要排序的五个整数
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
if(a[i]>a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
for(i=0;i<5;i++)
printf("%d ",a[i]); //输出排序后的结果
printf("\n");
return 0;
}
输出结果
分析:该方法与之前的方法相似,都是让这些数一个一个的进行比较。其优点是代码量相对较少,而且很容易扩充。如果想对更多的数进行排序的话,可以直接修改数组的长度。但是还有一个缺点就是有重复的比较,浪费CPU的资源。可以在纸上一步一步的写出各行代码的过程,这样不仅能深刻的理会到该方法的执行过程,也能找到它的缺点。
不过还可以进行优化,优化的代码是
#include <stdio.h>
int main()
{
int a[5],i,j,t;
for(i=0;i<5;i++)
scanf("%d",&a[i]); //输入要排序的五个整数
for(i=0;i<5;i++)
{
for(j=i;j<5;j++)
if(a[i]>a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
for(i=0;i<5;i++)
printf("%d ",a[i]); //输出排序后的结果
printf("\n");
return 0;
}
分析:最大的变化是里层的for循环j的初始值从0变为i。这样再进行第二次循环后,不再对序列为i之前的数与a[j]进行比较。因为在此之前就已经比较过了,即序列为i之前的数一定比a[j]的小。
如果有问题的可以在公众号回复栏中写出问题描述发给我,我看到的话会进行相应的回复。如果发现文章有问题,也欢迎在公众号回复栏中提问,我会查阅资料进行确认并做出修改和回复。
既然阅读了本篇文章,顺便点一下右下边的在看按钮。