几个简单的c语言源程序

合集下载

简单的C语言程序

简单的C语言程序
第二章 简单的C语言程序
为了更好、更快地掌握C程序,我们先看几个C 语言程序: 例1: #include <stdio.h>
main( ) {
printf ("Hello!This is a C program\n"); }
运行结果: Hello!This is a C program.
1
例2: #include <stdio.h> main( ) { printf (“Hello!\nThis is a C program\n"); }
5
一个函数由两部分组成:
(1)函数的说明部分。包括函数名、函数类型、 函数属性、函数参数(形参)名、形式参数类型。 (2)函数体,即函数说明部分下面的大括弧{...}内的 部分。如果一个函数内有多个大括弧,则最外 层的一对{ }为函数体的范围。 函数体一般包括: ①变量定义。如[例1.3]中main函数中的 int a,b,c; ②执行部分。由若干个语句组C 语句分为五类
1. 表达式语句
赋值语句: 如: i=i+1; i++; x+y;
函数调用语句: 如: printf ("…");
空语句: 任何事情都不做。
11
2. 控制语句––改变语句的执行顺序
if ( ) ~ else ~ (条件)
switch
(多分支选择)
C语句
C语句全部为可执行语句,对应若干机器操作指令 C程序由许多源文件组成。(分别编译,然后连接) 每一个源文件由预编译命令和若干函数组成。 每一个函数由说明部分和语句部分组成。
9
C程序结构如图: C程序
源程序文件1 … 源程序文件i … 源程序文件n

单片机C语言小程序

单片机C语言小程序

单片机C语言小程序#include <at89x51.h>#include <absacc.h>#define V AR XBYTE[0x00] /*V AR为外部位址0000*/#define read 0 /*93c46读取的识别码READ=0*/#define write 2 /*93c46写入的识别码WRITE=2*/#define ewen 4 /*93C46写致能的识别码EWEN=4*/#define ewds 6 /*93C46写除能的识别码EWDS=6*/#define cs INT0 /*93C46 CS接脚=8051 RD P3.2*/#define clk INT1 /*93C46 CLK接脚=8051 WR P3.3*/#define di T0 /*93C46 DI接脚=8051 T1 P3.4*/#define d0 T1 /*93C46 DO接脚=8051 T0 P3.5*/#define LOW 0x49 /*存放测试温度的下限值*/#define HIGH 0x51 /*存放测试温度的上限值*/bit FLAG0=0; /*宣告TIMER0响应旗号*///外接工业专用温度传感器时,目前设置测量温度为0-99度:static const char tab[13]={0x3a,0x53,0x6f,0x8a,0xa3, /*0度,10度,20度,30度,40度*/0xB8,0xC8,0xD5,0xDE,0xE5, /*50度,60度,70度,80度,90度*/0xEA,0xEE}; /*100度,110度*///使用板上AD590温度传感器时,目前设置测量温度为0-99度://static const char tab[13]={0x88,0x8d,0x92,0x97,0x9c, /*0度,10度,20度,30度,40度,*/// 0xa1,0xa6,0xab,0xb0,0xb5, /*50度,60度,70度,80度,90度*/// 0xba,0xc0}; /*100度,110度*/char data1[2];char C,S,k=0;char MEP[7]; /*显示器值存放阵列*///MEP[0]=数码管最低位显示值,温度指示小数点后位//MEP[1]=数码管次低位显示值,温度指示个位数//MEP[2]=数码管高位显示值,温度指示十位数//MEP[3]=数码管最低位显示值,功能显示目前定为1,2,3,4,5//MEP[4]=//MEP[5]=暂放置温度显示值,高4位为温度指示十位数值,低4位为温度指示个位数值//MEP[6]=在温度显示与电压调整副程式中,将测量值C暂存MEP[6]中unsigned char combuf[10];unsigned char ADR46,CH,CL,m,C1,C2; /*ADR46,93C46位址,CH高位元组,CL低*/ int sec,sec1;char ptr=0,ptr1=0x10,psr=0; /*ptr显示器值存放阵MEP[]指标,ptr1显示器扫描指标*/ char count=100,sb=0;void delay (unsigned int value) /*延时副程式*/{while (value!=0) value--; /*10us延时*/}void COMP(); /*宣告比较现在温度与设定温度副程式*/void SET();void disp(); /*宣告设定温度副程式*/void to9346(char c); /*宣告TO93C46副程式*/void SDT46(char c); /*宣告串入副程式*/RDT46(); /*宣告串出副程式*/void clear(void); /*宣告清除按键存放/显示器阵列MEP[]副副程式*/void xch(void); /*宣告按键存放/显示器阵列MEP[]右键滚入副程式*/void sjust(void); /*温度显示慢跳调整副程式*/void temper(); /*宣告温度显示与电压调整副程式*/void UP(); /*宣告温度上升键防抖动副程式*/void UPA(); /*宣告温度设置上升副程式*/void DOWN(); /*宣告温度下降键防抖动副程式*/void DOWNA(); /*宣告温度设置下降副程式*/void FONTION(); /*宣告模式键判断模式副程式*/void buf(); /*宣告从93C46取设定值副程式*/void SA VE(); /*宣告设置存储副程式*///********************************************************main() /*主程式*/{TMOD=0x11; /*TIMER0,TIMER1工作在MODE1*/TH0=(65535-50000)/256; /*设定TIMER0初值,50ms*/TL0=(65536-50000)%256;TH1=(65535-4000)/256; /*设定TIMER1初值,4ms*/TL1=(65536-4000)%256;IE=0x8a; /*TIMER0,TIMER1中断致能*/TR1=1; /*启动TIMER1*/P2_7=1; /*测试用,温度下限指示*/P2_6=1; /*测试用,温度在正常上下限间指示*/P2_5=1; /*测试用,温度上限指示*/buf(); /*从93C46取设定值副程式*/while(1) /*无条件循环*/{P3_1=0;MEP[3]=0xff; /*将模式位置零*/V AR=0x00; /*产生写入信号WR=0,令ADC0804开始转换*/while (P2_0==1); /*侦测ADC0804的接脚INTR=0否?是则转换完成*/S=V AR; /*读取ADC0804资料,存入C*/sjust(); /*温度显示慢跳调整副程式*/temper(); /*呼叫温度显示调整副程式*/MEP[5]=(MEP[2] < <4)|MEP[1];if(P2_4==0) SET(); /*如果模式键P2.4按下,则呼叫SET副程式,否则跳过副程式*/if(MEP[5] <combuf[5]) { P2_7=0; /*如果测试温度小于设定温度下限,等式成立时,则将低温指示打开P2_7=0*/P2_6=P2_5=1; /*关闭指示灯*/}if(MEP[5]> combuf[6]) { P2_5=0; /*如果测试温度大于设定温度上限,等式成立时,则将高温指示打开P2_5=0*/P2_7=P2_6=1; /*关闭指示灯*/}if(combuf[5] <MEP[5])if(MEP[5] <combuf[6]) { P2_6=0; /*如果测试温度介于设定温度上下限之间,则将正常指示打开P2_6=0*/ P2_7=P2_5=1;}} /*跳至while(1),无条件循环*/单片机的C语言轻松入门随着单片机开发技术的不断发展,目前已有越来越多的人从普遍使用汇编语言到逐渐使用高级语言开发,其中主要是以C语言为主,市场上几种常见的单片机均有其C语言开发环境.这里以最为流行的80C51单片机为例来学习单片机的C语言编程技术.本书共分六章,每章一个专题,以一些待完成的任务为中心,围绕该任务介绍C语言的一些知识,每一个任务都是可以独立完成的,每完成一个任务,都能掌握一定的知识,等到所有的任务都完成后,即可以完成C语言的入门工作.第1章C语言概述及其开发环境的建立学习一种编程语言,最重要的是建立一个练习环境,边学边练才能学好.Keil软件是目前最流行开发80C51系列单片机的软件,Keil提供了包括C编译器,宏汇编,连接器,库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境( Vision)将这些部份组合在一起.在学会使用汇编语言后,学习C语言编程是一件比较容易的事,我们将通过一系列的实例介绍C语言编程的方法.图1-1所示电路图使用89S52单片机作为主芯片,这种单片机性属于80C51系列,其内部有8K的FLASH ROM,可以反复擦写,并有ISP功能,支持在线下载,非常适于做实验.89S52的P1引脚上接8个发光二极管,P3.2~P3.4引脚上接4个按钮开关,我们的任务是让接在P1引脚上的发光二极管按要求发光.1.1 简单的C程序介绍例1-1: 让接在P1.0引脚上的LED发光./*************************************************平凡单片机工作室Copyright 2003 pingfan's mcustudioAll rights Reserved作者:周坚dddl.c单灯点亮程序*************************************************/图1-1 接有LED的单片机基本电路P1.0EA/VPPVCCXTAL2XTAL1GNDRST+5V+5V+R1E110K10UCY27P27P1KPZ1D8D189×××#include "reg51.h"sbit P1_0=P1^0;void main(){ P1_1=0;}这个程序的作用是让接在P1.0引脚上的LED点亮.下面来分析一下这个C语言程序包含了哪些信息.1)"文件包含"处理.程序的第一行是一个"文件包含"处理.所谓"文件包含"是指一个文件将另外一个文件的内容全部包含进来,所以这里的程序虽然只有4行,但C编译器在处理的时候却要处理几十或几百行.这里程序中包含REG51.h 文件的目的是为了要使用P1这个符号,即通知C编译器,程序中所写的P1是指80C51单片机的P1端口而不是其它变量.这是如何做到的呢打开reg51.h可以看到这样的一些内容:/*-------------------------------------------------------------------------REG51.HHeader file for generic 80C51 and 80C31 microcontroller.Copyright (c) 1988-2001 Keil Elektronik GmbH and Keil Software, Inc.All rights reserved.--------------------------------------------------------------------------*//* BYTE Register */sfr P0 = 0x80;sfr P1 = 0x90;sfr P2 = 0xA0;sfr P3 = 0xB0;sfr PSW = 0xD0;sfr ACC = 0xE0;sfr B = 0xF0;sfr SP = 0x81;sfr DPL = 0x82;sfr DPH = 0x83;sfr PCON = 0x87;sfr TCON = 0x88;sfr TMOD = 0x89; sfr TL0 = 0x8A; sfr TL1 = 0x8B; sfr TH0 = 0x8C; sfr TH1 = 0x8D; sfr IE = 0xA8;sfr IP = 0xB8;sfr SCON = 0x98; sfr SBUF = 0x99; /* BIT Register */ /* PSW */sbit CY = 0xD7; sbit AC = 0xD6; sbit F0 = 0xD5; sbit RS1 = 0xD4; sbit RS0 = 0xD3; sbit OV = 0xD2; sbit P = 0xD0;/* TCON */sbit TF1 = 0x8F; sbit TR1 = 0x8E; sbit TF0 = 0x8D; sbit TR0 = 0x8C; sbit IE1 = 0x8B; sbit IT1 = 0x8A; sbit IE0 = 0x89; sbit IT0 = 0x88;/* IE */sbit EA = 0xAF; sbit ES = 0xAC; sbit ET1 = 0xAB; sbit EX1 = 0xAA; sbit ET0 = 0xA9; sbit EX0 = 0xA8; /* IP */sbit PS = 0xBC; sbit PT1 = 0xBB; sbit PX1 = 0xBA; sbit PT0 = 0xB9; sbit PX0 = 0xB8; /* P3 */sbit RD = 0xB7; sbit WR = 0xB6; sbit T1 = 0xB5;sbit T0 = 0xB4;sbit INT1 = 0xB3;sbit INT0 = 0xB2;sbit TXD = 0xB1;sbit RXD = 0xB0;/* SCON */sbit SM0 = 0x9F;sbit SM1 = 0x9E;sbit SM2 = 0x9D;sbit REN = 0x9C;sbit TB8 = 0x9B;sbit RB8 = 0x9A;sbit TI = 0x99;sbit RI = 0x98;熟悉80C51内部结构的读者不难看出,这里都是一些符号的定义,即规定符号名与地址的对应关系.注意其中有sfr P1 = 0x90;这样的一行(上文中用黑体表示),即定义P1与地址0x90对应,P1口的地址就是0x90 (0x90是C语言中十六进制数的写法,相当于汇编语言中写90H).从这里还可以看到一个频繁出现的词:sfrsfr并标准C语言的关键字,而是Keil为能直接访问80C51中的SFR而提供了一个新的关键词,其用法是:sfrt 变量名=地址值.2)符号P1_0来表示P1.0引脚.在C语言里,如果直接写P1.0,C编译器并不能识别,而且P1.0也不是一个合法的C语言变量名,所以得给它另起一个名字,这里起的名为P1_0,可是P1_0是不是就是P1.0 呢你这么认为,C编译器可不这么认为,所以必须给它们建立联系,这里使用了Keil C 的关键字sbit来定义,sbit的用法有三种:第一种方法:sbit 位变量名=地址值第二种方法:sbit 位变量名=SFR名称^变量位地址值第三种方法:sbit 位变量名=SFR地址值^变量位地址值如定义PSW中的OV可以用以下三种方法:sbit OV=0xd2 (1)说明:0xd2是OV的位地址值sbit OV=PSW^2 (2)说明:其中PSW必须先用sfr定义好sbit OV=0xD0^2 (3)说明:0xD0就是PSW的地址值因此这里用sfr P1_0=P1^0;就是定义用符号P1_0来表示P1.0引脚,如果你愿意也可以起P10一类的名字,只要下面程序中也随之更改就行了.3)main称为"主函数".每一个C语言程序有且只有一个主函数,函数后面一定有一对大括号"{}",在大括号里面书写其它程序.从上面的分析我们了解了部分C语言的特性,下面再看一个稍复杂一点的例子.例1-2 让接在P1.0引脚上的LED闪烁发光/*************************************************平凡单片机工作室Copyright 2003 pingfan's mcustudioAll rights Reserved作者:周坚ddss.c单灯闪烁程序*************************************************/#include "reg51.h"#define uchar unsigned char#define uint unsigned intsbit P10=P1^0;/*延时程序由Delay参数确定延迟时间*/void mDelay(unsigned int Delay){ unsigned int i;for(;Delay>0;Delay--){ for(i=0;iNew Project…"菜单,出现对话框,要求给将要建立的工程起一个名字,这里起名为exam2,不需要输入扩展名.点击"保存"按钮,出现第二个对话框,如图1-2所示,这个对话框要求选择目标CPU(即你所用芯片的型号),Keil支持的CPU很多,这里选择Atmel公司的89S52芯片.点击AT M E L前面的"+"号,展开该层,点击其中的89S52, 然后再点击"确定"按钮,回到主窗口,此时,在工程窗口的文件页中,出现了"Target 1",前面有"+"号,点击"+"号展开,可以看到下一层的"Source Group1",这时的工程还是一个空的工程,里面什么文件也没有,需要手动把刚才编写好的源程序加入,点击"Source Group1"使其反白显示,然后,点击鼠标右键,出现一个下拉菜单,如图1-3所示,选中其中的"Add file to Group"Source Group1",出现一个对话框,要求寻找源文件.双击exam2.c文件,将文件加入项目,注意,在文件加入项目后,该对话框并不消失,等待继续加入其它文件,但初学时常会误认为操作没有成功而再次双击同一文件,这时会出现如图1-4所示的对话框,提示你所选文件已在列表中,此时应点击"确定",返回前一对话框,然后点击"Close"即可返回主接口,返回后,点击"Source Group 1"前的加号,exam3.c文件已在其中.双击文件名,即打开该源程序.1.3 工程的详细设置工程建立好以后,还要对工程进行进一步的设置,以满足要求.首先点击左边Project窗口的Target 1,然后使用菜单"Project->Option for target 'target1'"即出现对工程设置的对话框,这个对话框共有8个页面,大部份设置项取默认值就行了. Target页图1-2 选择单片机型号图1-3 加入文件如图1-5所示,Xtal后面的数值是晶振频率值,默认值是所选目标CPU的最高可用频率值,该值与最终产生的目标代码无关,仅用于软件模拟调试时显示程序执行时间.正确设置该数值可使显示时间与实际所用时间一致,一般将其设置成与你的硬件所用晶振频率相同,如果没必要了解程序执行的时间,也可以不设.Memory Model用于设置RAM使用情况,有三个选择项:Small: 所有变量都在单片机的内部RAM中;Compact:可以使用一页(256字节)外部扩展RAM;Larget: 可以使用全部外部的扩展RAM.Code Model用于设置ROM空间的使用,同样也有三个选择项:Small:只用低于2K的程序空间;Compact:单个函数的代码量不能超过2K,整个程序可以使用64K程序空间;Larget:可用全部64K空间;这些选择项必须根据所用硬件来决定,由于本例是单片应用,所以均不重新选择,按默认值设置.Operating:选择是否使用操作系统,可以选择Keil提供了两种操作系统:Rtx tiny和Rtx full,也可以不用操作系统(None),这里使用默认项None,即不用操作系统.图1-5 设置目标图1-4 重复加入源程序得到的提示OutPut页如图1-6所示,这里面也有多个选择项,其中Creat Hex file用于生成可执行代码文件,该文件可以用编程器写入单片机芯片,其格式为intelHEX格式,文件的扩展名为.HEX,默认情况下该项未被选中,如果要写片做硬件实验,就必须选中该项.工程设置对话框中的其它各页面与C51编译选项,A51的汇编选项,BL51连接器的连接选项等用法有关,这里均取默认值,不作任何修改.以下仅对一些有关页面中常用的选项作一个简单介绍.Listing页该页用于调整生成的列表文件选项.在汇编或编译完成后将产生(*.lst)的列表文件,在连接完成后也将产生(*.m51)的列表文件,该页用于对列表文件的内容和形式进行细致的调节,其中比较常用的选项是"C Compile Listing"下的"Assamble Code"项,选中该项可以在列表文件中生成C语言源程序所对应的汇编代码,建议会使用汇编语言的C初学者选中该项,在编译完成后多观察相应的List文件,查看C源代码与对应汇编代码,对于提高C语言编程能力大有好处.C51页该页用于对Keil的C51编译器的编译过程进行控制,其中比较常用的是"Code Optimization"组,如图1.7所示,该组中Level是优化等级,C51在对源程序进行编译时,可以对代码多至9级优化,默认使用第8级,一般不必修改,如果在编译中出现一些问题,可以降低优化级别试一试.Emphasis是选择编译优先方式,第一项是代码量优化(最终生成的代码量小);第二项是速度优先(最终生成的代码速度快);第三项是缺省.默认采用速度优先,可根据需要更改.图1-6 设置输出文件Debug页该页用于设置调试器,Keil提供了仿真器和一些硬件调试方法,如果没有相应的硬件调试器,应选择Use Simulator,其余设置一般不必更改,有关该页的详细情况将在程序调试部分再详细介绍.至此,设置完成,下面介绍如何编译,连接程序以获得目标代码,以及如何进行程序的调试工作.1.4 编译,连接下面我们通过一个例子来介绍C程序编译,连接的过程.这个例子使P1口所接LED以流水灯状态显示.将下面的源程序输入,命名为exam3.c,并建立名为exam3的工程文件,将exam3.c文件加入该工程中,设置工程,在Target页将Xtal后的值由24.0改为12.0,以便后面调试时观察延时时间是否正确,本项目中还要用到我们所提供的实验仿真板,为此需在Debug页对Dialog DLL对话框作一个设置,在进行项目设置时点击Debug,打开Debug页,可以看到Dialog DLL对话框后的Parmeter:输入框中已有默认值-pAT52,在其后键入空格后再输入-dledkey,如图1-8所示.例1-3 使P1口所接LED以流水灯状态显示/**************************************************; 平凡单片机工作室; ; Copyright 2003 pingfan's McuStudio; All rights Reserved图1-7C51编译器选项;作者:周坚;lsd.c;流水灯程序**************************************************/#include "reg51.h"#include "intrins.h"#define uchar unsigned char#define uint unsigned int/*延时程序由Delay参数确定延迟时间*/void mDelay(unsigned int Delay){ unsigned int i;for(;Delay>0;Delay--){ for(i=0;iBuild target,对当前工程进行连接,如果当前文件已修改,将先对该文件进行编译,然后再连接以产生目标代码;如果选择Rebuild All target files将会对当前工程中的所有文件重新进行编译然后再连接,确保最终生产的目标代码是最新的,而Translate ….项则仅对当前文件进行编译,不进行连接.以上操作也可以通过工具栏按钮直接进行.图1-9是有关编译,设置的工具栏按钮,从左到右分别是:编译,编译连接,全部重建,停止编译和对工程进行设置.编译过程中的信息将出现在输出窗口中的Build页中,如果源程序中有语法错误,会有错误报告出现,双击该行,可以定位到出错的位置,对源程序修改之后再次编译,最终要得到如图1-10所示的结果,提示获得了名为exam3.hex的文件,该文件即可被编程器读入并写到芯片中,同时还可看到,该程序的代码量(code=63),内部RAM的使用量(data=9),外部RAM的使用量(xdata=0)等一些信息.除此之外,编译,连接还产生了一些其它相关的文件,可被用于Keil的仿真与调试,到了这一步后即进行调试.1.5 程序的调试在对工程成功地进行汇编,连接以后,按Ctrl+F5或者使用菜单Debug->Start/Stop Debug Session即可进入调试状态,Keil内建了一个仿真CPU用来模拟执行程序,该仿真CPU功能强大,可以在没有硬件和仿真机的情况下进行程序的调试.进入调试状态后,Debug菜单项中原来不能用的命令现在已可以使用了,多出一个用于运行和调试的工具条,如图1-11所示,Debug菜单上的大部份命令可以在此找到对应的快捷按钮,从左到右依次是复位,运行,暂停,单步,过程单步,执行完当前子程序,运行到当前行,下一状态,打开跟踪,观察跟踪,反汇编窗口,观察窗口,代码作用范围分析,1#串行窗口,内存窗口,性能分析,工具按钮等命令.点击菜单Peripherals,即会多出一项"键盘LED仿真板(K)",选中该项,即会出现如图1-9 有关编译,连接,项目设置的工具条图1-11 调试工具条图1-10 编译,连接后得到目标代码图1-12所示界面.使用菜单STEP或相应的命令按钮或使用快捷键F11可以单步执行程序,使用菜单STEP OVER或功能键F10可以以过程单步形式执行命令,所谓过程单步,是指把C语言中的一个函数作为一条语句来全速执行.按下F11键,可以看到源程序窗口的左边出现了一个黄色调试箭头,指向源程序的第一行.每按一次F11,即执行该箭头所指程序行,然后箭头指向下一行,当箭头指向"mDelay(1000);"行时,再次按下F11,会发现,箭头指向了延时子程序mDelay的第一行.不断按F11键,即可逐步执行延时子程序.如果mDelay程序有错误,可以通过单步执行来查找错误,但是如果mDelay程序已正确,每次进行程序调试都要反复执行这些程序行,会使得调试效率很低,为此可以在调试时使用F10来替代F11,在main函数中执行到mDelay(1000)时将该行作为一条语句快速执行完毕.Keil软件还提供了一些窗口,用以观察一些系统中重要的寄存器或变量的值,这也是很重要的调试方法.以下通过一个对延时程序的延迟时间的调整来对这些调试方法作一个简单的介绍.这个程序中用到了延时程序mDelay,如果使用汇编语言编程,每段程序的延迟时间可以非常精确地计算出来,而使用C语言编程,就没有办法事先计算了.为此,可以使用观察程序执行时间的方法了来解.进入调试状态后,窗口左侧是寄存器和一些重要的系统变量的窗口,其中有一项是sec,即统计从开始执行到目前为止用去的时间.按F10,以过程单步的形式执行程序,在执行到mDelay(1000)这一行之前停下,查看sec的值(把鼠标停在sec 后的数值上即可看到完整的数值),记下该数值,然后按下F10,执行完mDelay(1000)后再次观察sec值,如图1-13所示,这里前后两次观察到的值分别是:0.00040400和1.01442600, 其差值为1.014022s,如果将该值改为124可获得更接近于1s的数值,而当该值取123时所获得的延时值将小于1s,因此,最佳的取值应该是124.图1-12 51单片机实验仿真板1.6 C语言的一些特点通过上述的几个例子,可以得出一些结论:1,C程序是由函数构成的,一个C源程序至少包括一个函数,一个C源程序有且只有一个名为main()的函数,也可能包含其它函数,因此,函数是C程序的基本单位.主程序通过直接书写语句和调用其它函数来实现有关功能,这些其它函数可以是由C语言本身提供给我们的(如例3中的_crol_(…)函数),这样的函数称之为库函数,也可以是用户自己编写的(如例2,3中用的mDelay(…)函数),这样的函数称之为用户自定义函数.那么库函数和用户自定义函数有什么区别呢简单地说,任何使用Keil C语言的人,都可以直接调用C的库函数而不需要为这个函数写任何代码,只需要包含具有该函数说明的相应的头文件即可;而自定义函数则是完全个性化的,是用户根据自己需要而编写的.Keil C提供了100多个库函数供我们直接使用.2,一个函数由两部份组成:(1)函数的首部,即函数的第一行.包括函数名,函数类型,函数属性,函数参数(形参)名,参数类型.例如:void mDelay (unsigned int DelayTime)一个函数名后面必须跟一对圆括号,即便没有任何参数也是如此.(2)函数体,即函数首部下面的大括号"{}"内的部份.如果一个函数内有多个大括号,则最外层的一对"{}"为函数体的范围.函数体一般包括:声明部份:在这部份中定义所用到的变量,例1.2中unsigned char j.执行部份:由若干个语句组成.在某此情况下也可以没有声明部份,甚至即没有声明部份,也没有执行部份,如:void mDelay(){}这是一个空函数,什么也不干,但它是合法的.在编写程序时,可以利用空函数,比如主程序需要调用一个延时函数,可具体延时多少,怎么个延时法,暂时还不清楚,我们可以主程序的框架结构弄清,先编译通过,把架子搭起来再说,至于里面的细节,可以在以后慢慢地填,这时利用空函数,先写这么一个函数,这样在主程序中就可以调用它了.3,一个C语言程序,总是从main函数开始执行的,而不管物理位置上这个main()放在什么地方.例1.2中就是放在了最后,事实上这往往是最常用的一种方式.图1-13 观察sec确定延时时间4,主程序中的mDelay如果写成mdelay就会编译出错,即C语言区分大小写,这一点往往让初学者非常困惑,尤其是学过一门其它语言的人,有人喜欢,有人不喜欢,但不管怎样,你得遵守这一规定.5,C语言书写的格式自由,可以在一行写多个语句,也可以把一个语句写在多行.没有行号(但可以有标号),书写的缩进没有要求.但是建议读者自己按一定的规范来写,可以给自己带来方便.6,每个语句和资料定义的最后必须有一个分号,分号是C语句的必要组成部份.7,可以用/*…..*/的形式为C程序的任何一部份作注释,在"/*"开始后,一直到"*/"为止的中间的任何内容都被认为是注释,所以在书写特别是修改源程序时特别要注意,有时无意之中删掉一个"*/",结果,从这里开始一直要遇到下一个"*/"中的全部内容都被认为是注释了.原本好好的一个程序,编译已过通过了,稍作修改,一下出现了几十甚至上百个错误,初学C的人往往对此深感头痛,这时就要检查一下,是不是有这样的情况,如果有的话,赶紧把这个"*/"补上.特别地,Keil C也支持C++风格的注释,就是用"//"引导的后面的语句是注释,例:P1_0=!P1_0; //取反P1.0这种风格的注释,只对本行有效,所以不会出现上面的问题,而且书写比较方便,所以在只需要一行注释的时候,我们往往采用这种格式.但要注意,只有Keil C支持这种格式,早期的Franklin C以及PC机上用的TC都不支持这种格式的注释,用上这种注释,编译时通不过,会报告编译错误.第2章分支程序设计第一部分课程学习了如何建立Keil C的编程环境,并了解了一些C语言的基础知识,这一部分将通过一个键控流水灯程序的分析来学习分支程序设计.2.1 程序功能与实现硬件电路描述如下:89S52单片机的P1口接有8个LED,当某一端口输出为"0"时,相应的LED点亮,P3.2,P3.3,P3.4,P3.5分别接有四个按钮K1~K4,按下按钮时,相应引脚被接地.现要求编写可键控的流水灯程序,当K1按下时,开始流动,K2按下时停止流动,全部灯灭,K3使灯由上往下流动,K4使灯由下往上流动.下面首先给出程序,然后再进行分析.例2-1:键控流水灯的程序#include "reg51.h"#include "intrins.h"#define uchar unsigned charvoid mDelay(unsigned int DelayTime){ unsigned int j=0;for(;DelayTime>0;DelayTime--){ for(j=0;j2的结果为真,而3<2的结果为假.C语言一共提供了6种关系运算符:"<"(小于),""(大于),">=(大于等于)","=="(等于)和"!="(不等于).用关系运算符将两个表达式连接起来的式子,称为关系表达式.例:a>b,a+b>b+c,(a=3)>=(b=5)等都是合法的关系表达式.关系表达式的值只有两种可能,即"真"和"假".在C语言中,没有专门的逻辑型变量,如果运算的结果是"真",用数值"1"表示,而运算的结果是"假"则用数值"0"表示.如式子:x1=3>2的结果是x1等于1,原因是3>2的结果是"真",即其结果为1,该结果被"="号赋给了x1,这里须注意,"="不是等于之意(C语言中等于用"=="表示),而是赋值号,即将该号后面的值赋给该号前面的变量,所以最终结果是x1等于1.式子:x2=30;DelayTime--)单片机的C语言轻松入门25{ for(j=0;j<125;j++){;}}}在main函数中用mDelay(1000)的形式调用该函数时,延时时间约为1s.如果将该函数中的unsigned int j改为unsigned char j,其他任何地方都不作更改,重新编译,连接后,可以发现延迟时间变为约0.38s.int和char是C语言中的两种不同的数据类型,可见程序中仅改变数据类型就会得到不同的结果.那么int和char型的数据究竟有什么区别呢3.3.1 整型数据1.整型数据在内存中的存放形式如果定义了一个int型变量i:int i=10; /*定义i为整型变量,并将10赋给该变量*/在Keil C中规定使用二个字节表示int型数据,因此,变量i在内存中的实际占用情况如下:0000,0000,0000,1010也就是整型数据总是用2个字节存放,不足部分用0补齐.事实上,数据是以补码的形式存在的.一个正数的补码和其原码的形式是相同的.如果数值是负的,补码的形式就不一样了.求负数的补码的方法是:将该数的绝对值的二进制形式取反加1.例如,-10,第一步取-10的绝对值10,其二进制编码是1010,由于是整型数占。

c语言实现单片机控制步进电机加减速源程序

c语言实现单片机控制步进电机加减速源程序

C 语言实现单片机控制步进电机加减速源程序1. 引言在现代工业控制系统中,步进电机作为一种常见的执行元件,广泛应用于各种自动化设备中。

而作为一种常见的嵌入式软件开发语言,C 语言在单片机控制步进电机的加减速过程中具有重要的作用。

本文将从单片机控制步进电机的加减速原理入手,结合 C 语言的编程技巧,介绍如何实现单片机控制步进电机的加减速源程序。

2. 单片机控制步进电机的加减速原理步进电机是一种能够精确控制角度的电机,它通过控制每个步骤的脉冲数来实现旋转。

在单片机控制步进电机的加减速过程中,需要考虑步进电机的加速阶段、匀速阶段和减速阶段。

在加速阶段,需要逐渐增加脉冲的频率,使步进电机的转速逐渐增加;在匀速阶段,需要保持恒定的脉冲频率,使步进电机以匀速旋转;在减速阶段,需要逐渐减小脉冲的频率,使步进电机的转速逐渐减小。

这一过程需要通过单片机的定时器和输出控制来实现。

3. C 语言实现步进电机加减速的源程序在 C 语言中,可以通过操作单片机的 GPIO 来控制步进电机的旋转。

在编写源程序时,需要使用单片机的定时器模块来生成脉冲信号,以控制步进电机的旋转角度和速度。

以下是一个简单的 C 语言源程序,用于实现步进电机的加减速控制:```c#include <reg52.h>void main() {// 初始化定时器// 设置脉冲频率,控制步进电机的加减速过程// 控制步进电机的方向// 控制步进电机的启停}```4. 总结与回顾通过本文的介绍,我们了解了单片机控制步进电机的加减速原理和 C 语言实现步进电机加减速源程序的基本思路。

掌握这些知识之后,我们可以更灵活地应用在实际的嵌入式系统开发中。

在实际项目中,我们还可以根据具体的步进电机型号和控制要求,进一步优化 C 语言源程序,实现更加精准和稳定的步进电机控制。

希望本文能为读者在单片机控制步进电机方面的学习和应用提供一定的帮助。

5. 个人观点与理解在我看来,掌握 C 语言实现单片机控制步进电机加减速源程序的技术是非常重要的。

C语言简单计算器程序源代码

C语言简单计算器程序源代码

C语言简单计算器程序源代码以下是一个简单计算器程序的C语言源代码,超过1200字: ```c#include <stdio.h>int maichar operator;double num1, num2, result;printf("请输入操作数1: ");scanf("%lf", &num1);printf("请输入操作符(+, -, *, /): ");scanf(" %c", &operator);printf("请输入操作数2: ");scanf("%lf", &num2);switch (operator)case '+':result = num1 + num2;printf("%.2lf + %.2lf = %.2lf\n", num1, num2, result); break;case '-':result = num1 - num2;printf("%.2lf - %.2lf = %.2lf\n", num1, num2, result); break;case '*':result = num1 * num2;printf("%.2lf * %.2lf = %.2lf\n", num1, num2, result); break;case '/':if (num2 != 0)result = num1 / num2;printf("%.2lf / %.2lf = %.2lf\n", num1, num2, result); } elseprintf("错误:被除数不能为0!\n");}break;default:printf("错误:无效的操作符!\n");break;}return 0;```这个程序实现了一个简单的计算器,可以根据用户输入的操作数和操作符进行加、减、乘、除的四则运算,并输出结果。

经典C语言源代码

经典C语言源代码

经典C语言源代码1、(1)某年某月某日是星期几#include<stdio.h>int main(){int year, month, day;while (scanf_s("%d%d%d", &year, &month, &day) != EOF){if (month == 1 || month == 2)//判断month是否为1或2{year--;month += 12;}int c = year / 100;int y = year - c * 100;int week = (c / 4) - 2 * c + (y + y / 4) + (13 * (month + 1) /5) + day - 1;while (week<0) { week += 7; }week %= 7;switch (week){case 1:printf("Monday\n"); break;case 2:printf("Tuesday\n"); break;case 3:printf("Wednesday\n"); break;case 4:printf("Thursday\n"); break;case 5:printf("Friday\n"); break;case 6:printf("Saturday\n"); break;case 0:printf("Sunday\n"); break;}}return 0;}1、(2)某年某月某日是第几天(一维数组)#include "stdio.h"void main() {int i, flag, year, month, day, dayth;int month_day[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };printf("请输入年/月/日:\n");scanf_s("%d/%d/%d", &year, &month, &day);dayth = day;flag = (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0);if (flag)month_day[2] = 29;for (i = 1; i < month; i++)dayth = dayth + month_day[i];printf("%d/%d/%d是第%d天\n", year, month, day, dayth); }2、30个数中找最小的数及其位置#include "stdio.h"# define SIZE 30void main() {int i;float data[SIZE];int min;printf("请输入%d个浮点数:\n",SIZE);for (i = 0; i < SIZE; i++) {//scanf_s("%f", &data[i]);data[i] = rand() % 30 + 1;printf("%f、", data[i]);}min = 0;for (i = 1; i < SIZE; i++) {if (data[i] < data[min])min = i;}printf("最小值是%5.2f,位置是%5d\n", data[min], min); }3、30个数从小到大排序(1)#include "stdio.h"# define SIZE 30void main() {int i,j;float data[SIZE],temp;int min;printf("请输入%d个整型数:\n",SIZE);for (i = 0; i < SIZE; i++) {scanf_s("%f", &data[i]);}for (i = 0; i < SIZE; i++) {min = i;for (j = i + 1; j < SIZE; j++)if (data[j] < data[min])min = j;temp = data[min];data[min] = data[i];data[i] = temp;}printf("\n排序后的结果是:\n");for (i = 0; i < SIZE; i++)printf("%5.2f", data[i]);}(2)模块化程序(数组名作为函数参数)#include "stdio.h"# define SIZE 5void accept_array(float a[], int size); void sort(float a[], int size);void show_array(float a[], int size);void main() {float score[SIZE];accept_array(score, SIZE);printf("排序前:");show_array(score, SIZE);sort(score, SIZE);printf("排序后:");show_array(score, SIZE);}void accept_array(float a[], int size) {int i;printf("请输入%d个分数:", size);for (i = 0; i < size; i++)scanf_s("%f", &a[i]);}void show_array(float a[], int size) { int i;for (i = 0; i < size; i++)printf(" %5.2f", a[i]);printf("\n");}void sort(float a[],int size) {int i, min, j;float temp;for (i = 0; i < SIZE; i++) {min = i;for (j = i + 1; j < SIZE; j++)if (a[j] < a[min])min = j;temp = a[min];a[min] = a[i];a[i] = temp;}}4、(1)指针加减:#include "stdio.h"#define SIZE 10void main() {int a[SIZE] = { 1,2,3,4,5,6,7,8,9,10 };int *pa, i;pa = &a[0];//pa=a;printf("\n");for (i = 0; i < SIZE; i++) {printf(" %d", *pa);//printf(" %d", *(pa+1));pa++;}}(2)指针比较:#include "stdio.h"#define SIZE 10void main() {int a[SIZE] = { 1,2,3,4,5,6,7,8,9,10 };int *pa, i;int *qa;pa = qa = &a[0];printf("请输入%d整型数:",SIZE);for (; pa < qa + SIZE; pa++)scanf_s("%d", pa);for (pa--; qa <= pa; pa--)printf(" %d", *pa);}5、两字符串相连:#include "stdio.h"#include "string.h"void str_cat(char str1[], char str2[]); void main() {int i, j;char str1[160];char str2[80];printf("请输入第一个字符串:");gets(str1);printf("请输入第二个字符串:");gets(str2);str_cat(str1, str2);puts(str1);}void str_cat(char str1[], char str2[]) { int i, j;i = 0;while (str1[i] != '\0')i++;j = 0;while (str2[j] != '\0') {str1[i] = str2[j];i++; j++;}str1[i] = '\0';}6、二维数组(a,b转置)#include "stdio.h"void main() {int i, j, b[2][3];int a[3][2] = { {1,2},{3,4},{5,6} }; for (i = 0; i < 2; i++) {for (j = 0; j < 3; j++)b[i][j] = a[j][i];}printf("\na:\n");for (i = 0; i < 3; i++) {for (j = 0; j < 2; j++)printf("%5d", a[i][j]);printf("\n");}printf("\nb:\n");for(i = 0; i < 2; i++) {for (j = 0; j < 3; j++)printf("%5d", b[i][j]);printf("\n");}7、输入一个二维数组并输出(指针)#include "stdio.h"void main() {int x[2][3];int i, j;for (i = 0; i < 2; i++)for (j = 0; j < 3; j++)scanf_s("%d", *(x + i) + j);putchar('\n');for (i = 0; i < 2; i++){for (j = 0; j < 3; j++)printf("%d ", *(*(x + i) + j));putchar('\n');}8、冒泡法排序一个数组#include "stdio.h"#define size 10void maopao(int a[]);void main() {int a[10];int i;printf("请输入10个整数:\n");for (i = 0; i < 10; i++)scanf_s("%d", &a[i]);maopao(a);}void maopao(int a[]) {int i, j, temp;for (i = 0; i < 9; i++) {//进行9轮排序for (j = 0; j < 9 - i; j++)//每轮进行9-i次交换{if (a[j] > a[j + 1]){temp = a[j];a[j] = a[j + 1];//大的沉底,小的上浮a[j + 1] = temp;}}}printf("排序结果:\n");for (i = 0; i < 10; i++)printf("%4d", a[i]);}9、两数组A,B,要求A<B,如A:4,7,9B:1,3,5,8,9变换后A:1,3,5B:4,7,8,9,9#include <stdio.h>void ReArranger(int* A, int* B, int m, int n) //A和B是各有m个和n个整数的非降序数组,本算法将B数组元素逐个插入到A 中,使A中各元素均不大于B中各元素,且两数组仍保持非降序排列。

C语言最简单的C程序设计

C语言最简单的C程序设计

响铃 回车
#include “stdio.h”
main( ){
char a=‘A’,b=‘B’,c=‘\007’;
putchar(a); putchar(b); putchar(‘\n’);
putchar(c); sleep(3); putchar(c);
putchar(65);putchar(66);putchar(‘\007’);
radius=1.5; length=2*Pi*radius; area=Pi*radius*radius; printf(“radius=%f\n”,radius);
/*求圆周长*/ /*求圆面积*/ /*输出圆半径*/
printf(“length=%7.2f,area=%7.2f\n”,length,area);
sleep(3); putchar(‘\007’);
}
运行结果: AB
17
响 延时3秒 响 AB 响 延时3秒 响
4.2 getchar函数
功能:从键盘输入一个字符 形式:getchar( ) 特点:无参数,其值是从输入设备得到的字符。
#include “stdio.h”
main( ) {
char c;
13
四、字符数据的输入输出
14
4.1、putchar(字符输出函数)
功能:向输出设备输出一个字符。 形式:putchar(参数) 其中,参数可以是整型或字符型变量或常量。 例如:putchar(97) ; putchar(‘a’) ; 都输出字符 a,
char c=‘ b’ ; putchar ( c ) ;输出字符 b。
}
输出结果: a,a,c,ф
97,97,355,232对于整型数据,若用字符格式输出,由于整型

C语言程序设计100个简单地经典例子

C语言程序设计100个简单地经典例子

经典C语言程序设计100例1.数字排列2.奖金分配问题3.已知条件求解整数4.输入日期判断第几天5.输入整数进行排序6.用*号显示字母C的图案7.显示特殊图案8.打印九九口诀9.输出国际象棋棋盘10.打印楼梯并按条件打印笑脸11.经典兔子问题12.判断素数13.水仙花数问题14.正整数分解质因数15.学习成绩划分16.正整数求其最大公约数和最小公倍数17.统计英文字母/空格/数字个数18.求s=a+aa+aaa+aa...a的值19.求解"完数"20.球体自由落下物理问题21.猴子吃桃问题22.乒乓球比赛抽签问题23.打印菱形图案24.分数数列求和25.求1+2!+3!+...+20!的和26.利用递归方法求5!27.将输入字符以相反顺序打印28.岁数问题29.求解正整数位数30.判断回文数31.星期几猜测游戏32.改变文本颜色33.学习gotoxy()与clrscr()函数34.练习函数调用35.设置文本颜色36.求100之内的素数37.对10个数进行排序38.求3*3矩阵对角线元素之和39.数字插入数组重新排序40.将一个数组逆序输出41.static定义静态变量用法42.使用auto定义变量用法43.使用static的另一用法44.使用external的用法45.使用register定义变量方法46.宏#define命令练习(1)47.宏#define命令练习(2)48.宏#define命令练习(3)49.#if #ifdef和#ifndef的综合应用50.#include 的应用练习51.学习使用按位与 &52.学习使用按位或 |53.学习使用按位异或 ^54.取一个整数从右端开始的4~7位。

55.学习使用按位取反~56.用circle画圆形57.学用line画直线58.用rectangle画方形59.画图综合例子160.画图综合例子261.打印杨辉三角形62.学习putpixel画点63.画椭圆ellipse64.利用ellipse and rectangle画图65.画个最优美的图案66.输入3个数字按大小顺序输出67.输入数组交换元素重新输出68.多个整数后移位置问题69.圆圈报数问题70.计算一个字符串长度71.编写输入/输出函数72.创建链表73.反向输出链表74.连接两个链表75.算一道简单题目76.调用函数求1/2+1/4+...+1/n77.填空练习(指向指针的指针)78.找到年龄最大的人79.字符串排序80.海滩猴子分桃81.已知公式条件求数字82.八进制转换为十进制83.求0-7所能组成的奇数个数84.由两个素数之和表示的偶数85.判断一个素数能被几个9整除86.两个字符串连接程序87.结构体变量传递88.读取数字的整数值并打印出该值个数的*89.数据加密90.专升本一题91.时间函数举例192.时间函数举例293.时间函数举例394.一个猜数游戏95.家庭财务管理小程序96.计算字符串中子串出现的次数97.输入字符并保存到磁盘98.字符串转换成大写字母并输出保存99.文件操作应用1100.文件操作应用2--------------------------------------------------------------------------------c语言经典100题【实用】【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。

简单易懂的C语言源代码(供初学者使用)

简单易懂的C语言源代码(供初学者使用)

#include<stdio.h>main(){float pi=3.14159265,r;printf("enter radius:\n");scanf("%f",&r);printf("r=%.2f,c=%.2f,area=%.2f\n",r,2*pi*r,pi*r*r);system("pause");}#include<stdio.h>main(){int m,n,x,y;printf("inputm,n:\n");scanf("%d%d",&m,&n);if (n%2==1){printf("error!! n bu shi ji shu!\n",n);return;}/*n在这里不能是奇数*/x=(4*m-n)/2;y=(n-2*m)/2;if((x>=0)&&(y>=0))printf("x=%d,y=%d\n",x,y); elseprintf("shu ru cuo wu!\n");getch();}#include<stdio.h>#include<math.h>#include<stdlib.h>main(){float a,b,C;printf("enter 3number(a,b,C):\n"); scanf("%.2f %.2f %.2f",&a,&b,&C); s=0.5*a*b*sinC;printf("s=%.2f\n",s);system("pause");}#include<stdio.h>main(){int ds,nl,yf;char c;printf("shu ru ds;\n");scanf("%d",&ds);if (ds<14||ds>1184){printf("input error!press any end...\n"); scanf("%c",&c);exit(0);}/*输入的数字必须是-14~1184之间*/nl=(ds+115)%100;yf=(ds+115)/100;printf("nl=%d,yf=%d\n",nl,yf);system("pause");}#include<stdio.h>#include<string.h>main(){char s1[100],s2[100],s3[100],s4[100]; printf("input a string:\n");gets(s1);strcpy(s1,s2);strcat(s1,"--------------");strcpy(s3,strcat(s1,"--------------"));strcat(strcpy(s3,strcat(s1,"--------------")),s2);strcpy(s4,strcat(strcpy(s3,strcat(s1,"--------------")),s2)); puts(s4);system("pasue");getch();}#include<stdio.h>#include<math.h>main(){float x1,x2,a,b,c;printf("input 3 number(a,b,c):\n");scanf("%f%f%f",&a,&b,&c);x1=(-b+sqrt(b*b-4*a*c))/(2*a);x2=(-b-sqrt(b*b-4*a*c))/(2*a);printf("x1=%f,X2=%f\n",x1,x2);system("pause");getch();}#include<stdio.h>main(){int a,b,c,t;printf("input 3 number:\n");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("1:%d,2:%d,3:%d\n",a,b,c);system("pause");}#include<stdio.h>#include<stdlib.h>#include<conio.h>main(){float pi=3.14159265,r;textbackground(YELLOW);/* 设置背景色为黄色,注意颜色应该大写,可更改 */ textcolor(RED); /* 设置文件颜色为红色,可更改 */clrscr(); /* 清屏,使设置生效 */printf("enter radius:");scanf("%f",&r);if(r<0)printf("Enter Error!\n");elseprintf("r=%.2f,c=%.2f,area=%.2f\n",r,2*pi*r,pi*r*r); system("pause");/* 暂停,按任一键继续 */#include<stdio.h>#include<math.h>#include<conio.h>main(){float a,b,c,delt,x1,x2,p,q;textcolor(YELLOW);clrscr();printf("Input a b c:\n");scanf("%f%f%f",&a,&b,&c);if(a==0){printf("It's not a quadratic equation!\n");system("pause");return;}delt=b*b-4*a*c;if(delt>=0){x1=(-b+sqrt(delt))/(2*a);x2=(-b-sqrt(delt))/(2*a);printf("x1=%.3f x2=%.4f\n",x1,x2);}else{p=-b/(2*a);q=sqrt(-delt)/(2*a);printf("p=%.4fq=%.4f\n",p,q);}system("pause");getch();}}#include<stdio.h>main(){float pi=3.14159265,r;int k=0;while(k<=3){printf("enter radius:\n");scanf("%f",&r);printf("r=%.2f,c=%.2f,area=%.2f\n",r,2*pi*r,pi*r*r); printf("press any key to continue\npress esc to exit."); k++;}}#include<stdio.h>#include<stdlib.h>#include<time.h>#include<conio.h>main(){int a,b,c,oper;long limit,i=0;char char1;textcolor(GREEN);/*设置字体颜色为绿色*/clrscr(); /*清屏,是设置生效*/while(i<=3){printf("qing xuan ze jia huo jian(1or2,1:+,2:-\n"); scanf("%d",&oper);printf("Enter max (<10000):\n");scanf("%ld",&limit);srand((unsigned long)time(0));a=rand()*limit/RAND_MAX;b=rand()*limit/RAND_MAX;while((a<b)&&(oper==2)){a=rand()*limit/RAND_MAX;b=rand()*limit/RAND_MAX;}char1=(oper==2?'-':'+');printf("%d%c%d\n",a,char1,b);scanf("%d",&c);if((oper==2&&a-b==c)||(oper!=2&&a+b==c)) printf("OK!You are very clever!\n"); elseprintf("The result is not correct!\n"); i++;}getch();}#include<stdio.h>#include<conio.h>main(){int y,i=0;textcolor(YELLOW);/*天下事无难易之分只有做与不做之别*/ textbackground(GREEN);clrscr();/*清屏,是设置生效*/while(i<=3){printf("Input year:\n");scanf("%d",&y);if(y%4==0){if(y%100==0){if(y%400==0)printf("y shi run nian!\n"); elseprintf("y bu shi run nian !\n"); }elseprintf("y shi run nian!\n");}elseprintf("y bu shi run nian!");i++;}getche();}#include<stdio.h>#include<time.h>#include<string.h>main(){int xz,wday1,hour1;struct tm *timeptr;time_t secsnow;char s1[30],s2[30],s3[30];printf("input whom do you say to?:\n"); scanf("%d",&xz);if(xz==1)strcpy(s1,"mother");else if(xz==2)strcpy(s1,"father");elsestrcpy(s1,"");time(&secsnow);timeptr=localtime(&secsnow);wday1=timeptr->tm_wday;if(wday1==6)strcpy(s2,"Happy saturday!");else if(wday1==0)strcpy(s2,"Happy sunday");elsestrcpy(s2,"");hour1=timeptr->tm_hour;if(hour1>=4&&hour1<=10)strcpy(s3,"Good morning!");else if(hour1>=17&&hour1<=22)strcpy(s3,"Good afternoon!");elsestrcpy(s3,"Good evening!");printf("%s%s%s",s1,s2,s3);getch();}#include<stdio.h>#include<conio.h>main(){int day,year,month,i=0;textbackground(BROWN);clrscr();while(i<=3){printf("Input 2 number:\n");scanf("%d%d",&year,&month);switch(month){case 1:case 3:case 5:case 7:case 8:case 10:case 12: day=31;break;case 4:case 6:case 11:day=30;break;case 2:day=28;if((year%4==0&&year%100!=0)||year%400==0)day=29;break;deflault:printf("Invalid month input!\n");return;}printf("There are%d days in %d.%d\n",day,year,month); i++;getch();}}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1》分解质因数的程序:#include<stdio.h>zhishu(x,y){int m=1;while(y%x==0){if(y%x==0)y=y/x;if(y%x==0)m++;}printf("^%d x ",m);}sushu(j){int n,m=0;for(n=2;n<j;n++)if(j%n!=0)m++;if(m==j-2)return 1;elsereturn 0;}void main(){int a,i;printf("请输入一个整数:");scanf("%d",&a);printf("\n整数%d可分解为:\n",a);for(i=2;i<=a/2;i++)if(a%i==0&&sushu(i)==1){printf("%d",i);zhishu(i,a);}printf("1^1\n\n");}2》看你的星座的程序:#include<stdio.h>void main(){int m,d;float s;printf("请输入你的生日(月、日):\n");scanf("%d",&m);scanf("%d",&d);if(m>12||m<1||d>31||d<1)printf("你输入的生日错误!");if(m>=1&&m<=12&&d>=1&&d<=31);{s=(float)(m+d/100);if(s>=3.21&&s<=4.20)printf("你的星座是:白羊座");else if(s>=4.21&&s<=5.20)printf("你的星座是:金牛座");else if(s>=5.21&&s<=6.21)printf("你的星座是:双子座");else if(s>=6.22&&s<=7.22)printf("你的星座是:巨蟹座");else if(s>=7.23&&s<=8.22)printf("你的星座是:狮子座");else if(s>=8.23&&s<=9.22)printf("你的星座是:处女座");else if(s>=9.23&&s<=10.23)printf("你的星座是:天秤座");else if(s>=10.24&&s<=11.21)printf("你的星座是:天蝎座");else if(s>=11.22&&s<=12.21)printf("你的星座是:射手座");else if((s<=12.31&&s>=12.22)||(s<=1.19&&s>1.00))printf("你的星座是:摩羯座");else if(s>=1.20&&s<=2.18)printf("你的星座是:水瓶座");else if(s>=2.19&&s<=3.20)printf("你的星座是:双鱼座");elseprintf("ERRORS!OUT OF MY EXPECTATION!");}printf("\n\n");}3》天干地支年的计算:#include<stdio.h>void main(){int a,i,j;printf("请输入公历年份:");scanf("%d",&a);i=(a-3)%10;j=(a-3)%12;printf("%d年是",a);switch(i){case 1: printf("甲");break;case 2: printf("乙");break;case 3: printf("丙");break;case 4: printf("丁");break;case 5: printf("戊");break;case 6: printf("己");break;case 7: printf("庚");break;case 8: printf("辛");break;case 9: printf("壬");break;case 0: printf("癸");break;}switch(j){case 1:printf("子鼠");break;case 2:printf("丑牛");break;case 3:printf("寅虎");break;case 4:printf("卯兔");break;case 5:printf("辰龙");break;case 6:printf("巳蛇");break;case 7:printf("午马");break;case 8:printf("未羊");break;case 9:printf("申猴");break;case 10:printf("酉鸡");break;case 11:printf("戌狗");break;case 0:printf("亥猪");break;}printf("年\n\n");}4》大学生一门课的成绩(人大):#include<stdio.h>void main(){ int a,b;double s,GPA;printf("请输入期末考试的成绩:");scanf("%d",&a);printf("请输入平时课业的成绩:");scanf("%d",&b);if(a<=55&&a>=0)s=(double)a;else if(a>55&&a<=100)s=(double)0.6*a+(double)0.4*b;elseprintf("输入不正确!");printf("该学生的这门课的总成绩为:%.2lf\n",s);if(s>=90&&s<=100)GPA=(double)4.0;else if(s>=86&&s<90)GPA=(double)3.7;else if(s>=83&&s<86)GPA=(double)3.3;else if(s>=80&&s<83)GPA=(double)3.0;else if(s>=76&&s<80)GPA=(double)2.7;else if(s>=73&&s<76)GPA=(double)2.3;else if(s>=70&&s<73)GPA=(double)2.0;else if(s>=66&&s<70)GPA=(double)1.7;else if(s>=63&&s<66)GPA=(double)1.3;else if(s>=60&&s<63)GPA=(double)1.0;elseGPA=(double)0.0;printf("该学生的GPA是:%.1lf\n",GPA);if(GPA>=1.0)printf("该学生及格了!\n\n");elseprintf("该学生不及格!\n\n");}5》求大学生一门课成绩的算法(武大):#include<stdio.h>void main(){int a,b;double s,GPA;printf("请输入期末考试的成绩:");scanf("%d",&a);printf("请输入平时课业的成绩:");scanf("%d",&b);if(a<=55&&a>=0)s=(double)a;else if(a>55&&a<=100)s=(double)0.6*a+(double)0.4*b;elseprintf("输入不正确!");printf("该学生的这门课的总成绩为:%.2lf\n",s);if(s>=96&&s<=100)GPA=(double)4.3;else if(s>=90&&s<96)GPA=(double)4.0;else if(s>=85&&s<90)GPA=(double)3.7;else if(s>=80&&s<85)GPA=(double)3.3;else if(s>=75&&s<80)GPA=(double)3.0;else if(s>=70&&s<75)GPA=(double)2.7;else if(s>=67&&s<70)GPA=(double)2.3;else if(s>=63&&s<67)GPA=(double)2.0;else if(s>=60&&s<63)GPA=(double)1.7;elseGPA=(double)1.0;printf("该学生的GPA是:%.1lf\n\n",GPA);}6》判断你胖不胖:#include<stdio.h>void main(){float a,b;double i,j;printf("请输入你的体重(kg):");scanf("%f",&a);printf("请输入你的身高(m):");scanf("%f",&b);i=a/b;j=i/b;printf("你的体质指数是:%.2f\n",j);if(j<14)printf("你已经瘦得不成样子了!!");else if(j<18.5&&j>=14)printf("你比较瘦了!");else if(j>=18.5&&j<24)printf("你很健康!");else if(j>=24&&j<28)printf("你只是稍微胖些。

相关文档
最新文档