Take time

分类 C_Program 下的文章

30/11
2017

45行代码的C计算器

在论坛上发现了一个很强的C计算器代码

仅有几十行,能实现普通的运算

#include "stdio.h"
#include "string.h"
#define MAX 1001

double stack[MAX];
int tail;

int main()
{
 int a;
 while(scanf("%d ",&a)&&a!=0)
 {
 tail=0;
 stack[++tail]=1.0*a;//tail始终指向末尾数字位置
 //1.入栈所有数据(如果遇到*/号,只更新栈尾)
 char ch1,ch2;
 while(scanf("%c %d%c",&ch1,&a,&ch2)!=EOF)
 {
 if(ch1=='+')
 {
 stack[++tail]=1.0*a;//push
 }
 else if(ch1=='-')
 {
 stack[++tail]=-1.0*a;//push neg
 }
 else if(ch1=='*')
 {
 stack[tail]=stack[tail]*a;//update tail
 }
 else if(ch1=='/')
 {
 stack[tail]=stack[tail]/(double)a;//updata tail
 }
 if(ch2!=' ')
 break;
 }
 //2.把栈里头的东西全部加起来,求和
 double result=0;
 for(int i=1;i<=tail;i++)
 result+=stack[i];
 printf("%.2lf\n",result);
 }
 return 1;
}

+ MORE

14/5
2017

C_Program 学习笔记_3

上回讲到scanf格式化输入语句,利用格式化输入和输出的特性来转换进制。由于程序中肯定会用到不止字母啊,整数啊这样的字符,所以下面介绍数据类型,所谓数据类型,就是在程序前面告诉计算机,这个程序要用到哪种精度、取值范围、 数据所表示的信息

整型—— int

长整型—— long int

短整型—— short int

无符号整型—— unsigned int

浮点型

单精度—— float

双精度—— dobule

字符型—— char

布尔型—— bool

枚举型—— enum

语言入门,我们并不需要认识全部数据类型,在这里介绍整形int,浮点型里面的单精度float,双精度double,字符型char。

首先是整形,它可以在程序前面定义如字母,整数这类,但用到小数,负数这类就要请到浮点型来帮我们定义了。可以用一个程序来说明它们的区别:

#include <stdio.h>


int main()
{
 int a ; //定义整形变量a
 float b ; //定义浮点型变量b
 printf("输入a:"); //提示用户输入a的值

 scanf("%d",&a);

 printf("输入的a是:%d",a);

 return 0;
}

运行一下,我们先输入8,回车,可以看到可以输出8

但当我们输入有小数的数字时,程序只输出整数部分,由此可以说明整形int只认整数

接下来试试浮点型float

#include <stdio.h>


int main()
{
 int a ; //定义整形变量a
 float b ; //定义浮点型变量b
 //printf("输入a:"); //提示用户输入a的值

 //scanf("%d",&a);

 //printf("输入的a是:%d",a);
 printf("输入b:");
 scanf("%f",&b);
 printf("输入的b是:%f",b);
 return 0;
}

需要注意的是,用浮点型时不能用%d占位了,因为这是给整形用的

浮点型我们需要用%f来占位。运行程序,输入3.141592658,回车

发现程序输出只到小数后面第六位,这就是我们所说的精度了。如果想要改为double双精度变量,那么占位符需要改成%lf。

还有一个char字符型,有了这个我们就可以输入字母了

#include <stdio.h>


void main()
{
 char c;
 printf("输入c字符:");
 scanf("%c",&c);
 printf("c就是:%c",c);

}

在这里,字符型的占位符是%c

 

 

下面就利用上面说到的数据类型来写一个整型,字符型,浮点型混合运算程序:

#include <stdio.h>
#include <stdlib.h>

int main()
{
 int i=1;
 char c='A';
 float f=2.2f;
 double sum=i+c+f;
 printf("%f\n",sum);
 return 0;
}

当不同数据类型混合运算时,程序会先将char转换为int整型,将int转换为double,再将float转成double,最后进行计算。

在这个程序里面,大写A会转成ASCII码,为65,这样程序就能运算了。

+ MORE

6/5
2017

C program 学习笔记_2

上回在程序中用printf语句输入了我们想要输出的文字,但站在用户的角度来说,每次运行程序都要跑到后台来设置输出的内容,简直非常蛋疼,
那我们就用scanf格式化输入语句,将我们在窗口输入的内容再输出去。

首先依旧是打开Code::Block,新建项目,在sources里面打开main.c文件,输入以下程序

#include<stdio.h>
int main()
{     int x,y,z; //用int定义三个整形变量x,y,z

printf("输入三个10以内数字:");
scanf("%d,%d,%d \n",&x,&y,&z); // %d是占位符意思是让计算机给输入的内容留三个位置
printf("输出之前的内容:%d",x,y,z);
return 0;
}

然后按F9建立项目并运行

 

得到如图结果

说明:C语言中的%d用于十进制数的输入和输出格式控制,所以只能用给十进制数留空,如果输入字母那么计算机便会自动输出一个十进制数。如果我们需要十六进制数的输入和输出就要用%x来控制了。

 

在scanf语句中我们的输入要有三个%d,因为我们定义了三个变量,输入也需要三个十进制数程序才能继续运行输出结果,引号后面需要用&来给前面定义的变量赋值。

到这里我们可以拓展一下,利用%d和%x来写一个十进制转换到十六进制的程序

新建项目,到main.c里面写程序

#include <stdio.h>

int main()
{
   int x; //定义一个变量
   printf("输入一个十进制数:\n");
   scanf("%d",&x);
   printf("输出十六进制数:\n0x%x",x);
   return 0;

} 



 

前面说过,%x用来输入和输出十六进制数,我们利用了这个作用来转换十进制和十六进制,同理,我们也可以交换%d和%x的位置来实现十六进制转到十进制的功能。

+ MORE

27/4
2017

C program 学习笔记_1

在编程语言中,C语言一直是最热门的高级编程语言,本人由于专业以及开发的需求需要C编程,就从0开始咯,一步一步学习这个使用广泛的语言。
C语言的应用领域不言而喻,小到身边的单片机,大到操作系统(比如Linux系统就是非常棒的C语言作品),虽然看起来复杂,但C也是最接近机器思维的语言,因而其执行效率也高)。
接下来就是个人学习C的一些心得

首先下载安装带编译器版本的CodeBlock(http://sourceforge.net/projects/codeblocks/files/Binaries/16.01/Windows/codeblocks-16.01mingw-setup.exe)并安装

安装完成后新建一个Project,打开工程文件名下的Sources的main.c

删掉例程,写一个最基础的C程序:

//这个是注释符,用作程序语句的作用解读

/*这个也是注释符,用作多行注释内容*/

#include<stdio.h> //声明引用函数或者头文件
void main() /*定义函数类型,在此程序中定义的是一个"空主函数" */
{ //这个是大括号,用于将函数内容括起来
printf("Hello,LXG"); /*这个是打印语句,用作将("Hello,LXG")里面的东西
 从程序调试框中显示出来,每个语句后面要用英文分号(;)将语句写完*/

} //写完函数内容当然要把他们括回来咯

到这里,我们的第一条C程序就完成了,按下F9来创建程序并运行,可以看到如下图内容。这个程序主要是让初学者了解C的基本结构以及它里面有什么。

接下来会讲解C中语句的使用~

 

+ MORE