C语言程序笔记_第1页
C语言程序笔记_第2页
C语言程序笔记_第3页
C语言程序笔记_第4页
C语言程序笔记_第5页
已阅读5页,还剩34页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1比较大小两个数/谭浩强书176主函数里的调用max函数有问题并且运行窗口一闪而过(1)#include #include int main ()float max(float x,float y);float a,b,c;printf(please input two numbersn);scanf(%f,%f,&a,&b);c = max(a,b);/sleep(10);printf(the lagest number is:n);return 0;float max(float x,float y)float z;if(xy)z = x;elsez = y;return z;(2) 正确

2、的解答方式,运行窗口最后可以停住#include #include float max(float x,float y);int main ()float a,b,c;printf(please input two numbersn);scanf(%f,%f,&a,&b);c = max(a,b);/sleep(10);printf(the lagest number is:n);while(1);return 0;float max(float x,float y)float z;if(xy)z = x;elsez = y;return z;2/水仙花数#includeint main()i

3、nt num,a,b,c;while(scanf(%d,&num)if(num!=0)a=num%10;num/=10;b=num%10;c=num/10;if(a*a*a+b*b*b+c*c*c=num)printf(Yesn);elseprintf(Non);else break; return 0;3/输出小于某个数的奇数和偶数(1)#includeint main()int n;scanf(%d,&n);int a;while(n-)scanf(%d,&a);for(int i=1;i=a;i+=2)printf(%d ,i);puts();for(int i=2;i=a;i+=2)p

4、rintf(%d ,i);puts();(2)#includeint main()int a;while(a%2!=1)while(1)scanf(%d,&a);for(int i=1;i=a;i+=2)printf(%d ,i);puts();for(int i=2;i=a;i+=2)printf(%d ,i);puts();(3)/main函数簓里?:阰while语?句?应畖该?包悒?括f和fou语?句?#includeint a;int main() while(1)scanf(%d,&a);if(a%2!=1) for(int i=1;i=a;i+=2)printf(%d ,i);pu

5、ts(); for(int i=2;i=a;i+=2)printf(%d ,i);puts(); 4比较五个数的大小并输出最大和最小值#includeusing namespace std;int main()int a,b,c,d,e,f,g;cinabcde;if(ac)f=c;if(fd)f=d;if(fe)f=e;if(gc)g=c;if(gd)g=d;if(ge)g=e;coutf gendl;return 0;(1)#include int s5; int t; int i;int main() for(i=0;i5;i+) scanf(%d,&si); for(int m=1;m

6、5;m+) for(int n=0;nsn+1) t=sn+1; sn+1=sn; sn=t; printf(%d %dn,s0,s4); while (1);return 0; 5/输入成绩,系统分配等级,本例题中N代表总人数#includeint main()int n,score;scanf(%d,&n);while(n-)scanf(%d,&score);switch(score/10)case 10:printf(An);break;case 9:printf(An);break;case 8:printf(Bn);break;case 7:printf(Cn);break;case

7、 6:printf(Dn);break;default:printf(En);break;while(1);return 0;(2)#includeint main()int i,n,m;scanf(%d,&n);for(i=1;i=90)&(m=80)&(m=70)&(m=60)&(m=0)&(m=59)printf(En);while(1);return 0;6鸡兔同笼问题#include int chikNum,rabNum,staNum;int inputHead,inputFeet;int main()scanf(%d,&staNum);for(int i=0;i0)&(rabNum

8、0)printf(%d,%dn,chikNum,rabNum);elseprintf(No answern);while(1);return 0;7ascll排序(1)int main() char a,b,c;while(scanf( %c%c%c,&a,&b,&c)!=EOF) /加个?空?格?,?第台?二t个?也?一?样if(ab)&(bc)printf(%c %c %c,a,b,c);if(ac)&(cb)printf(%c %c %c,a,c,b);if(ba)&(ac)printf(%c %c %c,b,a,c);if(bc)&(ca)printf(%c %c %c,b,c,a);

9、if(ca)&(ab)printf(%c %c %c,c,a,b);if(cb)&(ba)printf(%c %c %c,c,b,a); return 0;(2)#include#includeint main()int n,i,j;char a100,t;scanf(%d,&n);gets(a);while(n-)gets(a);for(i=0;istrlen(a);i+)for(j=0;jstrlen(a);j+)if(aiaj)t=ai;ai=aj;aj=t;for(i=0;istrlen(a);i+)printf(%c ,ai);printf(n);return 0;8注意第二个sca

10、nf函数里的空格,如果没有空格,那么输出的结果会受【enter?键的影响】因为line feed的ascll值是10,而(space)的ascll值是32.档按下enter时,那两个键会影响最后的输出结果,干扰。scanf(%c,&c) 与 scanf( %c,&c),后者只是在%前多了个空格,似乎没有什么区别,但使用起来区别是很大的。scanf()作单字符输入时规定只接收一个字符,但它却把回车符也作为字符对待的。这就造成程序中只有一个输入字符的scanf()语句时,问题还不大,但如果后面还跟着第二个scanf()字符输入语句,这个scanf()就把前面输入的驾车符当作输入字符了。这就在输入逻

11、辑上造成了混乱,达不到人们预期的愿望。有了这个空格,因为scanf()是跳过空格读字符的,就回避了这个问题。实践证明,这个空格放在%c后面也不能达到目的。应当说,这也是比较巧妙的应用!#include int groNum;char c1;int main ()printf(please enter:n);scanf(%d,&groNum);for(int i=groNum;i0;i-)scanf( %c,&c1);printf(%dn,c1);while(1);return 0;9gets()函数可以读入空格,而scanf()不能。scanf(%s,c); 与gets(c);有什么区别呢?为

12、什么加上getchar();就正确呢,不加,后面的数组只能接收三个呢?scanf(%s,c)?与gets(c);有什么区别呢?scanf(%s,c);接受字符是以空格或者制表符或者回车分隔的,不会接受回车gets(),是以为回车分隔的。不加getchar();的时候scanf(%s,c); 时候输入的回车被第一个gets接收了,所以后面就只能接收三个了。提问者评价gets(),回车后,这时回车符会转换为0,但scanf()不会将回车符转换为0,会给下一个字符变量。#include #includeint main() typedef char CHARR20; CHARR c, d4; int

13、 i;scanf(%s,c); puts(c);printf(接收数组:);getchar();for(i=0;i4;i+)gets(di);for(i=0;i4;i+)puts(di); return 0;10阶乘问题(1)#includeint i,j,sum,a,b;int main()scanf(%d,&b);for(j=1;j=b;j+)scanf(%d,&a);sum = 1;for(i=1;i=a;i+)sum = sum * i;/sum = sum + sum;printf(%dn,sum);while(1);return 0;(2) 将原来的每个数相乘变为i不大于n的所有奇

14、数相乘例如:5!=1*3*5. #includeint main()int factorial(int m);int n, a;scanf(%d,&n);while(n-)scanf(%d,&a);printf(%dn, factorial(a) );while(1);return 0; int factorial(int m)int sum1, sum2, i,j;sum1 = 0; for(i = 1; i = m; i+)sum2 = 1;for(j = 1; j = i; j = j + 2)sum2 =sum2 * j;sum1 = sum1 + sum2;return sum1;1

15、1如题,输入一个日期,格式如:2010 10 24 ,判断这一天是这一年中的第几天。#includeint main()int a,b=0,c,y,m,d,fib;scanf(%d,&a);while(a-)scanf(%d %d %d,&y,&m,&d);if(y%400=0|y%100!=0&y%4=0)fib=29;else fib=28;for(c=1;c=m;c+)switch(c-1)case 1:case 3:case 5:case 7:case 8:case 10:b+=31;break;case 2:b+=fib;break;case 4:case 6:case 9:case

16、 11:b+=30;break;b+=d;printf(%dn,b);b=0;return 0;12 让第一个数码管亮,显示数字为二#include sbit duan =P10;sbit wei =P11;void main()while(1)wei = 1;P0 = 0x01;wei = 0;duan = 1;P0 = 0xc4;duan = 0;/while(1);13C51六个数码管分别从0到七流水线水显示#include #define uchar unsigned char#define uint unsigned int sbit duan = P10;sbit wei = P1

17、1;unsigned char Num=0xa0,0xf9,0xc4,0xd0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xa6,0xc1,0x86,0x8e;/void delay (uint);void main ()while(1)duan = 1;P0 = 0xf9;duan = 0;P0 = 0xff;wei = 1;P0 = 0x01;wei = 0;delayms(500);duan = 1;P0 = 0xc4;duan = 0;P0 = 0xff;wei = 1;P0 = 0x02;wei = 0;delayms(500);duan =

18、1;P0 = 0x99;duan = 0;P0 = 0xff;wei = 1;P0 = 0x04;wei = 0;delayms(500);duan = 1;P0 = 0xd0;duan = 0;P0 = 0x82;wei = 1;P0 = 0x08;wei = 0;delayms(500);duan = 1;P0 =0x92;duan = 0;P0 = 0xff;wei = 1;P0 = 0x20;wei = 0;delayms(500);duan = 1;P0 = 0xf8;duan = 0;P0 = 0xff;wei = 1;P0 = 0x40;wei = 0;delayms(500);

19、void delayms(uint xms) uint i,j; for (i = xms;i0;i-) for (j = 110;j0;j-); 14实例 独立键盘 #include#define unchar unsigned char #define uint unsigned intsbit key1 = P34;sbit key2 = P35;sbit key3 = P36;sbit key4 = P37;sbit duan = P26;sbit wei = P27;uchar code table=0xa0,0xf9,0xc4,0xd0,0x99,0x92,0x82,0xf8,0x

20、80,0x90,0x88,0x83,0xa6,0xc1,0x86,0x8e;void delayms(uiint);void display (uchar numdis)uchar shi,ge;shi = numdis/10;ge = numdis%10;duan = 1;P0 = tableshi;duan = 0;P0 = 0xff;wei = 1;P0 = 0xfe;wei = 0;delayms(5);duan = 1;P0 = tablege;duan = 0;P0 = 0xff;wei = 1;P0 = 0xfd;wei = 0;delayms(5);void delayms(u

21、int xms)uint i,j;for(i=xms;i0;i-) for(j=110;j0;j-);void init () TMOD = 0x01; TH0 = (65536-45872)/256; TH1 = (65536-45872)%256; EA = 1; ET0 = 1;void keyscan()if(key1 = 0) delayms(10); if(key1=0) num+; if(num=60) num=0; while(!key1); if(key2= 0) delayms(10); if(key1=0) num+; if(num=60) num=0; while(!k

22、ey2); if(key3 = 0) delayms(10); if(key3=0) num+; if(num=60) num=0; while(!key1); if(key4 = 0) delayms(10); if(key4=0) num+; if(num=60) num=0; while(!key1); void main()init();while(1)keyscan();display(num);void T0_time()interrupt 1 TH0 = (65536-45872)/256; TH1 = (65536-45872)%256; numt0+; if(numt = 2

23、0) numt0 = 0;num+;if(num = 60)num = 0; 15输入两个正整数m,n.(m,n,都是三位数);输出m,n,相加时需要进位多少次。方一:#includeint main()int m,n;scanf(%d %d,&m,&n);while(m|n)int a3,b3;for(int i=0;i3;i+)ai=m%10;bi=n%10;m/=10;n/=10;int flag=0;int count=0;for(int i=0;i=10)flag=1;count+;elseflag=0;printf(%dn,count);scanf(%d %d,&m,&n);whi

24、le(1);return 0;方二:# main()03.04.int a,b,c,d,e,f,n,m,i;05.for(;)06.07.scanf(%d%d,&n,&m);08.if(n=0&m=0) /两数相与,结果存入下09.return 0;/如果两个数都是零,则输出零10.else11.12.i=0;13.a=n/100;b=n%100/10;c=n%10;14.d=m/100;e=m%100/10;f=m%10;15.if(c+f=10)16.i+=1;b+=1;17.if(b+e=10)18.i+=1;a+=1;19.if(a+d=10)20.i+=1;

25、/c和f是两个数的个位,所以当他们的和大于十时,用i来记录全程的进位,/并且,把这个个位的进位付给十位,同理十位和百位的加和也是类似的思路21.printf(%dn,i);22.23.24.return 0;25.16描述相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排、五人一排、七人一排地变换队形,而他每次只掠一眼队伍的排尾就知道总人数了。输入3个非负整数a,b,c ,表示每种队形排尾的人数(a3,b5,c7),输出总人数的最小值(或报告无解)。已知总人数不小于10,不超过100 。输入输入3个非负整数a,b,c ,表示每种队形排尾的人数(a3,b5,c7)。例如,输入

26、:2 4 5输出输出总人数的最小值(或报告无解,即输出No answer)。实例,输出:89 方一:#include02.using namespace std;03.int main()04.05.int a,b,c;06.cinabc;07.int n=(a*70+b*21+c*15)%105;08.if(n100|n10) coutNo answerendl;09.else coutnendl;10. 11.方二:#includeusing namespace std;int main() int x, a, b, c;Scanf(“%d,%d,%d”,&a,&b&c);cin a b

27、c;for(x = 0; x = 100; x+) if(x % 3 = a & x % 5 = b & x % 7 = c) /a%b就是计算a除以b得出的余数。 cout x 100 & x 10)cout No answer endl;/输出No answer的值,然后在换到下一行。【VC+中using namespace std有什么用的】std 是一个命名空间.不同的命名空间可以有相同的类名被定义 .using namespace std;就是指明下面的程序使用std,如果不用这句指明的话就要用std:string(string是std空间中定义的也可以在全局空间中定义,只要名字空间

28、不一样即可.).否则可以默认名字空间中有std.便不用std:来修饰它是C+新标准中有的,解决多人作编大程序时名字冲突问题。比如A B两个班都有叫张三的人,你要使用A班的张三,必然要先指名是A班这个名字空间(namespace),然后你对张三的所有命令才能达到你的预想,不会叫错人 如果你用#include就不需写这句话(旧标准)。但是如果你用#include就必须要写。17(1)#include#includeint main()int N;scanf(%d,&N);while(N-)double x1,y1,x2,y2;double distance;scanf(%lf%lf%lf%lf,&

29、x1,&y1,&x2,&y2);double x=pow(x1-x2,2);double y=pow(y1-y2,2);distance=sqrt(x+y);/distance=sqrt(pow(x1-x2,2)+pow(y1-y2,2);printf(%.2lfn,distance);return 0;(2)#include int i,n,a,b,c,d;int main ()int sum=0;/printf(please enter n:n);/scanf(%d,&n);/for(i=0;in;i+)/printf(please enter four words:n);scanf(%d

30、 %d %d %d,&a,&b,&c,&d);if(a != c) | (b != d)sum = (a-c)*(a-c)+(b-d)*(b-d)(2);printf(%d/n,sum);elseprintf(sum = 0);/while(1);return 0;18 51单片机。用定时器0的方式0实现第一个发光二极管以200ms间隔闪烁,用定时器一的方式实现数码管前两位59s循环及时。#include #define uchar unsigned char #define uint unsigned intsbit duan = P10;sbit wei = P11;sbit led1 =

31、 P12;uchar code table= 0xa0,0xf9,0xc4,0xd0, 0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xa6,0xc1,0x86,0x8e;void delayms(uint);void display(uchar,uchar); uchar num,num1,num2,shi,ge;void main () TMOD = 0x11; TH0 = (65536-45872)/256; TL0 = (65536-45872)%256; TH1 = (65536-45872)/256; TL1 = (65536-45872)%

32、256; EA = 1; ET0 = 1; ET1 = 1; TR0 = 1; TR1 = 1; while(1) display(shi,ge); void display(uchar shi,uchar ge)duan = 1;P0 = tableshi;duan = 0;P0 = 0xff;wei = 1;P0 = 0xf9 ;wei = 0;delayms(5);duan = 1;P0 = tablege;duan = 0;P0 = 0xff;wei = 1;P0 = 0x88;wei = 0;delayms(5);void delayms(uint xms) uint i,j; fo

33、r (i=0;ixms;i+) for(j=0;j110;j+); void T0_time()interrupt 1 TH0 = (65536-45872)/256; TL0 = (65536-45872)%256; num1+; if(num1=4) num1=0;led1=led1; void T1_time()interrupt 3 TH0 = (65536-45872)/256; TL0 = (65536-45872)%256; num2+; if(num2=60) num2=0;/led2=led2;num+;if(num=60)num=0;shi=num/10;ge=num%10

34、; 19/在数码管上电时,数码管不显示,顺序按下矩阵键盘后在数码管上依次显示0到F,六个数码管同时静态显示即可/宏定义,声明参量并且定义管口#include #define uchar unsigned char #define uint unsigned intsbit duan = P10;sbit wei = P11;/无符号字符数组,code相当于C语言中的const的常量数组uchar code table=0xa0,0xf9,0xc4,0xd0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xa6,0xc1,0x86,0x8e /十六个数码管;

35、/定义一个人延时函数void delayms (uint xms) uint i,j; for(i=0;ixms;i+) for(j=0;j110;j+); /声明一个显示函数,显示函数仅仅选送段选数据void display(uchar num) P0=tablenum;/选送函数只选送段选数据 duan = 1; duan = 0; /矩阵键盘函数void matrixkeyscant() uchar temp,key; P3 = 0xfe;/p3管口,将第一行线置一 temp = P3; temp = temp&0xf0;/进行与运算,主要作用是判断temp的 /高四位是否有低电平,高四

36、位实际反应列线 if(temp!=0xf0) delayms(10);temp = P3;temp = temp&0xf0;if(temp!=0xf0)/重新读P3口的数据。重新进行与运算。/若temp仍然不等于零,则确认键盘按下temp = P3;switch(temp)case 0xee:key = 0;break;case 0xde:key = 1;break;case 0xbe:key= 2;break;case 0x7e:key = 3;break;/在判断完按键序号后,还需要等待按键被释放while(temp!=0xf0)temp = P3;temp = temp&0xf0;dis

37、play(key); P3 = 0xfd;/p3管口,将第一行线置一 temp = P3; temp = temp&0xf0;/进行与运算,主要作用是判断temp的 /高四位是否有低电平,高四位实际反应列线 if(temp!=0xf0) delayms(10);temp = P3;temp = temp&0xf0;if(temp!=0xf0)/重新读P3口的数据。重新进行与运算。/若temp仍然不等于零,则确认键盘按下temp = P3;switch(temp)case 0xed:key = 4;break;case 0xdd:key = 5 ;break;case 0xbd:key= 6;b

38、reak;case 0x7d:key = 7;break;/在判断完按键序号后,还需要等待按键被释放while(temp!=0xf0)temp = P3;temp = temp&0xf0;display(key); P3 = 0xfb;/p3管口,将第一行线置一 temp = P3; temp = temp&0xf0;/进行与运算,主要作用是判断temp的 /高四位是否有低电平,高四位实际反应列线 if(temp!=0xf0) delayms(10);temp = P3;temp = temp&0xf0;if(temp!=0xf0)/重新读P3口的数据。重新进行与运算。/若temp仍然不等于零

39、,则确认键盘按下temp = P3;switch(temp)case 0xeb:key = 8;break;case 0xdb:key = 9;break;case 0xbb:key= 10;break;case 0x7b:key = 11;break;/在判断完按键序号后,还需要等待按键被释放while(temp!=0xf0)temp = P3;temp = temp&0xf0;display(key); P3 = 0xf7;/p3管口,将第一行线置一 temp = P3; temp = temp&0xf0;/进行与运算,主要作用是判断temp的 /高四位是否有低电平,高四位实际反应列线 i

40、f(temp!=0xf0) delayms(10);temp = P3;temp = temp&0xf0;if(temp!=0xf0)/重新读P3口的数据。重新进行与运算。/若temp仍然不等于零,则确认键盘按下temp = P3;switch(temp)case 0xe7:key = 12;break;case 0xde:key = 13;break;case 0xb7:key= 14;break;case 0x77:key =15 ;break;/在判断完按键序号后,还需要等待按键被释放while(temp!=0xf0)temp = P3;temp = temp&0xf0;display(

41、key); /声明主函数void main () P0=0; duan=1; duan =0; P0=0xe0; wei=1; wei=0; while(1) matrixkeyscant(); 20aaaaa#include #define uchar unsigned char#define uint unsigned charsbit key = P20;sbit duan = P10;sbit wei = P11;uchar code table=0xa0,0xf9,0xc4,0xd0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xa6,0xc1,

42、0x86,0x8e;uchar num,numt0;void delayms(uint);void display(uchar numdis) duan = 1; P0 = tablenumdis; duan = 0; P0 = 0xff; wei = 1;P0 = 0xf9; wei = 0; delayms(5);void delayms(uint xms) uint i,j; for(i=0;ixms;i+) for(j=0;j110;j+); void init() TMOD = 0X01; TH0 = (65536-45872)/256; TL0 = (65536-45872)%256; EA = 1; ET0 = 1; void keyscant() if(key = 0) delayms(10);if(key = 0) num = 60; num-; wh

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论