
作者:微信公开课+
作品:微信公开课
地区:全国小程序
标签:教育,工具,微信公开课,资讯
描述:微信公开课是微信官方与小程序行业合作伙伴沟通交流的微信小程序社区,为线下微信小程序公开课的免费授课提供线上的相关服务,包括查阅小程序活动议程、参与小程序活动互动以及回顾小程序课程内容等。
声明:作者对小程序服务信息内容及运营行为等真实性/合法性及有效性承担全部责任
订阅微信公开课小程序
-
C语言切换成MIPS汇编语言,B[8] = A[i-j];
2019-03-12 17:01:43微信公开课小程序热门讨论「C语言切换成MIPS汇编语言,B[8] = A[i-j];」最新回复-sub$t0,$s3,$s4#ijsll$t0,$t0,2#$t0=4(ij),因为一个字占四个字节,所以ij个字要4倍,mips中是字节地址add$t0,$t0,$s6#¥t0=A的地址加上$t0,即是A[ij]的地址lw$t1,0($t0)#按相应地址从存储器复制值,赋给$t1sw$t1,32($s7)#8个字,32个字节,所以加上32,这一步为将$t1中的值存储到存储器相应地址,这个地址就是&B[8]了,即B的基础地址加上字节数!此时应该完成了
逻辑左移2位相当于*4,MIPS指令的机器默认是4字节储存,按照字节寻址方式的话需要在标号上×4才能正确访问地址 更多有关「C语言切换成MIPS汇编语言,B[8] = A[i-j];」的疑问请扫码关注微信公开课+小程序! -
c语言小程序
2019-03-12 17:01:43微信公开课小程序热门讨论「c语言小程序#」最新回复-includestdio.h#includestdlib.hintmain(intargc,char*argv[]){inti,len;chars[20]={ };printf(输入电话号码:);scanf(%s,s);len=strlen(s);for(i=0;ilen;i++){if((s[i]=0&&s[i]=9)||s[i]==){continue;}switch(s[i]){caseA:caseB:caseC:s[i]=2;break;caseD:caseE:caseF:s[i]=3;break;caseG:caseH:caseI:s[i]=4;break;caseJ:caseK:caseL:s[i]=5;break;caseM:caseN:caseO:s[i]=6;break;caseP:caseQ:caseR:caseS:s[i]=7;break;caseT:caseU:caseV:s[i]=8;break;caseW:caseX:caseY:caseZ:s[i]=9;break;default:break;}}printf( %s,s);return0;}
黑白棋游戏#includegraphics.h/*图形系统头文件*/#defineLEFT0x4b00/*光标左键值*/#defineRIGHT0x4d00/*光标右键值*/#defineDOWN0x5000/*光标下键值*/#defineUP0x4800/*光标上键值*/#defineESC0x011b/*ESC键值*/#defineENTER0x1c0d/*回车键值*/inta[8][8]={0},key,score1,score2;/*具体分数以及按键与存放棋子的变量*/charplayone[3],playtwo[3];/*两个人的得分转换成字符串输出*/voidplaytoplay(void);/*人人对战函数*/voidDrawQp(void);/*画棋盘函数*/voidSetPlayColor(intx);/*设置棋子第一次的颜色*/voidMoveColor(intx,inty);/*恢复原来棋盘状态*/intQpChange(intx,inty,intz);/*判断棋盘的变化*/voidDoScore(void);/*处理分数*/voidPrintScore(intn);/*输出成绩*/voidplayWin(void);/*输出胜利者信息*//******主函数*********/voidmain(void){intgd=DETECT,gr;initgraph(&gd,&gr,c:tc);/*初始化图形系统*/DrawQp();/*画棋盘*/playtoplay();/*人人对战*/getch();closegraph();/*关闭图形系统*/}voidDrawQp()/*画棋盘*/{inti,j;score1=score2=0;/*棋手一开始得分都为0*/setbkcolor(BLUE);for(i=100;i=64-score1-score2)/*如果尝试超过空格数则停步*/{MoveColor(x,y);fillellipse(x,y,15,15);break;}elsecontinue;/*如果按键无效*/}DoScore();/*分数的改变*/break;/*棋盘变化了,则轮对方走棋*/}else/*已经有棋子就继续按键*/continue;}else/*四个方向按键的判断*/if(key==LEFT&&x120)/*左方向键*/{MoveColor(x,y);fillellipse(x,y,15,15);SetPlayColor(t);x-=40;fillellipse(x,y,15,15);}elseif(key==RIGHT&&x80)/*右方向键*/{MoveColor(x,y);fillellipse(x,y,15,15);SetPlayColor(t);x+=40;fillellipse(x,y,15,15);}elseif(key==UP&&y120)/*上方向键*/{MoveColor(x,y);fillellipse(x,y,15,15);SetPlayColor(t);y-=40;fillellipse(x,y,15,15);}elseif(key==DOWN&&y1)/*判断左边*/{for(k=j-1;k=0;k--)if(a[i][k]==a[i][j]||!a[i][k])break;if(a[i][k]!=0&&k=0){for(kk=j-1;kkk&&k=0;kk--){a[i][kk]=a[i][j];fillellipse(120+i*40,120+kk*40,15,15);}if(kk!=j-1)yes=1;}}if(i1)/*判断上边*/{for(k=i-1;k=0;k--)if(a[k][j]==a[i][j]||!a[k][j])break;if(a[k][j]!=0&&k=0){for(kk=i-1;kkk&&k=0;kk--){a[kk][j]=a[i][j];fillellipse(120+kk*40,120+j*40,15,15);}if(kk!=i-1)yes=1;}}if(i1&&j=0&&kk=0&&kkk&&k=0;ii--,jj++){a[ii][jj]=a[i][j];fillellipse(120+ii*40,120+jj*40,15,15);}if(ii!=i-1)yes=1;}}if(i1)/*左下*/{for(k=i+1,kk=j-1;k=0;k++,kk--)if(a[k][kk]==a[i][j]||!a[k][kk])break;if(a[k][kk]!=0&&k=0){for(ii=i+1,jj=j-1;ii1&&j1)/*左上*/{for(k=i-1,kk=j-1;k=0&&kk=0;k--,kk--)if(a[k][kk]==a[i][j]||!a[k][kk])break;if(a[k][kk]!=0&&k=0&&kk=0){for(ii=i-1,jj=j-1;iik&&k=0;ii--,jj--){a[ii][jj]=a[i][j];fillellipse(120+ii*40,120+jj*40,15,15);}if(ii!=i-1)yes=1;}}if(iscore1)/*开始判断最后的结果*/outtextxy(100,50,blackwin!);elseif(score2#include#include#include#include#defineLEFT0x4b00#defineRIGHT0x4d00#defineDOWN0x5000#defineUP0x4800#defineESC0x011b#defineSPACE0x3920#defineBILI20#defineJZ4#defineJS3#defineN19intbox[N][N];intstep_x,step_y;intkey;intflag=1;voiddraw_box();voiddraw_cicle(intx,inty,intcolor);voidchange();voidjudgewho(intx,inty);voidjudgekey();intjudgeresult(intx,inty);voidattentoin();voidattention(){charch;window(1,1,80,25);textbackground(LIGHTBLUE);textcolor(YELLOW);clrscr();gotoxy(15,2);printf(游戏操作规则:);gotoxy(15,4);printf(PlayRules:);gotoxy(15,6);printf(1、按左右上下方向键移动棋子);gotoxy(15,8);printf(1.PressLeft,Right,Up,DownKeytomovePiece);gotoxy(15,10);printf(2、按空格确定落棋子);gotoxy(15,12);printf(2.PressSpacetoplacethePiece);gotoxy(15,14);printf(3、禁止在棋盘外按空格);gotoxy(15,16);printf(3.DONOTpressSpaceoutsideofthechessboard);gotoxy(15,18);printf(你是否接受上述的游戏规则(Y/N));gotoxy(15,20);printf(DoyouaccepttheabovePlayingRules?[Y/N]:);while(1){gotoxy(60,20);ch=getche();if(ch==Y||ch==y)break;elseif(ch==N||ch==n){window(1,1,80,25);textbackground(BLACK);textcolor(LIGHTGRAY);clrscr();exit(0);}gotoxy(51,12);printf();}}voiddraw_box(){intx1,x2,y1,y2;setbkcolor(LIGHTBLUE);setcolor(YELLOW);gotoxy(7,2);printf(Left,Right,Up,DownKEYtomove,Spacetoput,ESC-quit.);for(x1=1,y1=1,y2=18;x1=1;i--)if(box[i][j]==0){draw_circle(step_x,step_y,LIGHTBLUE);break;}if(i18)break;else{for(i=step_x+1,j=step_y;i18)break;step_x=i;judgewho(step_x,step_y);break;}caseDOWN:if((step_y+1)18)break;else{for(i=step_x,j=step_y+1;j18)break;step_y=j;judgewho(step_x,step_y);break;}caseUP:if((step_y-1)=1;j--)if(box[i][j]==0){draw_circle(step_x,step_y,LIGHTBLUE);break;}if(j=1&&step_x=1&&step_y=1;j--){if(box[j][k]==flag)n1++;elsebreak;}/*水平向右数*/for(j=x,k=y;j=5){return(1);break;}/*垂直向上数*/n1=0;n2=0;for(j=x,k=y;k=1;k--){if(box[j][k]==flag)n1++;elsebreak;}/*垂直向下数*/for(j=x,k=y;k=5){return(1);break;}/*向左上方数*/n1=0;n2=0;for(j=x,k=y;j=1,k=1;j--,k--){if(box[j][k]==flag)n1++;elsebreak;}/*向右下方数*/for(j=x,k=y;j=5){return(1);break;}/*向右上方数*/n1=0;n2=0;for(j=x,k=y;j=1;j++,k--){if(box[j][k]==flag)n1++;elsebreak;}/*向左下方数*/for(j=x,k=y;j=1,k=5){return(1);break;}return(0);break;}}voidmain(){intgdriver=VGA,gmode=VGAHI;clrscr();attention();initgraph(&gdriver,&gmode,c:tc);/*setwritemode(XOR_PUT);*/flag=1;draw_box();do{step_x=0;step_y=0;/*draw_circle(step_x,step_y,8);*/judgewho(step_x-1,step_y-1);do{while(bioskey(1)==0);key=bioskey(0);judgekey();}while(key!=SPACE&&key!=ESC);}while(key!=ESC);closegraph();} 更多有关「c语言小程序#」的疑问请扫码关注微信公开课+小程序! -
c语言小程序 关于for循环,if else和break,帮忙改下错谢谢
2019-03-12 17:01:43微信公开课小程序热门讨论「c语言小程序 关于for循环,if else和break,帮忙改下错谢谢」最新回复-scanf之后加getchar()接收回车
#includestdio.hintmain(){chara;inti=6;while(--i){ printf(Youhave%dchances.Pleaseinputacharacter:,i); a=getchar(); getchar(); if(a==A) { printf(Congratulations!n); break; } else{ printf(Pleasetryagain.n);}}if(i==0)printf(Youvetriedtoomanytimes!n);getchar();return0;} 更多有关「c语言小程序 关于for循环,if else和break,帮忙改下错谢谢」的疑问请扫码关注微信公开课+小程序! -
c语言小程序例题
2019-03-12 17:01:43微信公开课小程序热门讨论「c语言小程序例题」最新回复-实验一基本数据处理1.1显示短句在屏幕上显示一个短句“Programmingisfun!”1.2求两个数的和与差1.3求平方根输入1个实数x,计算并输出其平方根(保留1位小数)。#includestdio.h#includemath.h1.4华氏温度转换为摄氏温度输入华氏温度f,计算并输出相应的摄氏温度c(保留2位小数)。c=5/9(f32).1.5大写字母转换成小写字母输入一个大写英文字母,输出相应的小写字母。实验二分支结构2.1显示两级成绩输入一个学生的数学成绩,如果它低于60,输出“Fail”,否则,输出“Pass”。2.2找最小值输入四个整数,输出其中的最小值。2.3求三角形的面积和周长输入三角形的三条边a,b,c,如果能构成一个三角形,输出面积area和周长perimeter(保留2位小数);否则,输出“Thesesidesdonotcorrespondtoavalidtriangle”。在一个三角形中,任意两边之和大于第三边。三角形的面积计算公式:area*area=s(sa)(sb)(sc)其中:s=(a+b+c)/22.4判断数的符号输入整数x,若x大于0,y=1;若x等于0,y=0;否则,y=1,最后输出y。2.5字母转换输入一个字符,如果它是大写字母,输出相应的小写字母;如果它是小写字母,输出相应的大写字母;否则,原样输出。实验三循环3.1求n!读入1个正整数n(n=50),计算并输出n!。3.2求1-1/3+1/5-1/7+??读入1个正实数eps,计算并输出1-1/3+1/5-1/7+??,直到最后一项的绝对值小于eps(保留6位小数)。%.6f\n,sum);}3.3求2/1+3/2+5/3+8/5+...输入一个正整数n,输出2/1+3/2+5/3+8/5+...的前n项之和,保留2位小数。(该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子)3.4求a+aa+aaa+aa…a输入2个正整数a和n,求a+aa+aaa+aa?a(n个a)之和。3.5判断素数输入一个正整数m,如果它是素数,输出YES,否则,输出NO(素数就是只能被1和自身整除的正整数,1不是素数,2是素数)。3.6统计字符输入一行字符,分别统计出其中的英文字母、空格、数字和其他字符的个数。实验四嵌套循环4.1求1+1/2!+....+1/n!输入1个正整数n,计算s的前n项的和(保留4位小数)。s=1+1/2!+....+1/n!4.2求各位数字的立方和等于它本身的数输入2个正整数m和n(1=m,n=1000),输出m到n之间的所有满足各位数字的立方和等于它本身的数。4.3统计素数并求和输入2个正整数m和n(1=m,n=500),统计并输出m和n之间的素数的个数以及这些素数的和。4.4统计单词输入一行字符,统计其中单词的个数。各单词之间用空格分隔,空格数可以是多个。4.5输出一个整数的各位数字输入一个整数,从高位开始逐位输出它的各位数字。5.2排序输入一个正整数n(1n=10),再输入n个整数,将它们从大到小排序后输出。#includestdio.h5.3矩阵运算读入1个正整数n(1≤n≤6),再读入n阶方阵a,计算该矩阵对角线元素的和。5.4找鞍点(选作)输入1个正整数n(1≤n≤6)和n阶方阵a中的元素,如果找到a的鞍点(鞍点的元素值在该行上最大,在该列上最小),就输出它的下标,否则,输出NO(设a最多有1个鞍点)。实验六函数6.1求s=1+1/2!+....+1/n!输入1个正整数n,计算s的前n项的和(保留4位小数)。要求定义并调用函数fact(n)计算n的阶乘。6.3统计一个整数中数字的个数读入1个整数,统计并输出该数中2的个数。要求定义并调用函数countdigit(number,digit),它的功能是统计整数number中数字digit的个数。例如,countdigit(10090,0)的返回值是3。6.4统计素数并求和输入2个正整数m和n(1=m,n=500),统计并输出m和n之间的素数的个数以及这些素数的和(素数就是只能被1和自身整除的正整数,1不是素数,2是素数)。要求定义并调用函数prime(m)判断m是否为素数。6.5求完数输入2个正整数m和n(1=m,n=1000),输出m到n之间的所有完数(完数就是因子和与它本身相等的数)。要求定义并调用函数factorsum(number),它的功能是返回number的因子和。6.6求各位数字的立方和等于它本身的数输入2个正整数m和n(1=m,n=1000),输出m到n之间的所有满足各位数字的立方和等于它本身的数。要求定义并调用函数is(number)判断number的各位数字之立方和是否等于它本身。实验七指针7.1查找整数定义一个函数search(int*list,intn,intx),在数组list中查找元素x,若找到则返回相应下标,否则返回1。7.2数据移动教材P258习题10.47.3删除字符编写一个函数delchar(char*s,charc),该函数将字符串s中出现的所有c字符删除。自己定义main函数,并在其中调用delchar(s,c)函数。7.4字符串复制用字符指针定义函数strmcpy(char*s,char*t,intm),将字符串t中从第m个字符开始的全部字符复制到字符串s中去。7.5字符串连接用字符指针实现函数strcat(s,t),将字符串t复制到字符串s的末端,并且返回字符串s的首地址。7.6字符串排序教材P259习题10.20实验八结构体和链表8.1计算时间差期编写一程序,计算两个时刻之间的时间差,并将其值返回。时间以时、分、秒表示,二个时刻的差小于24小时。8.2成绩处理输入一个正整数n,再输入n个学生的学号和数学、英语、C语言成绩,要求(1)计算每一个学生的平均成绩。(2)输出平均成绩最高的学生的记录。(3)按平均成绩从高到低输出学生的成绩单(学号、数学、英语、计算机成绩和平均成绩)8.3成绩处理(选作)有两个单向链表,头指针分别为list1、list2,链表中每一结点包含姓名、工资基本信息,请编一函数,把两个链表拼组成一个链表,并返回拼组后的新链表。(参考习题11.8)实验九文件9.1统计字母、数字和字符统计一个文本文件中字母、数字及其他字符各有多少个。9.2删除注释将一个C语言源程序文件中所有注释去掉后,存入另一个文件。9.3文件合并文本文件a1.txt和a2.txt中包含若干从小到大排过序的整数,现要求把两个文件中的数据合起来,仍按从小到大顺序写入文件a3.txt中,试编写相应程序。
去网上搜索:C语言经典一百例 更多有关「c语言小程序例题」的疑问请扫码关注微信公开课+小程序! -
C语言猜拳小游戏程序求助
2019-03-12 17:01:43微信公开课小程序热门讨论「C语言猜拳小游戏程序求助#」最新回复-includestdio.h#includestdlib.h#includetime.hintget_int(void);//规范输入的函数intgame(inty,intx);//游戏函数intresult(intm,intn);//比较最终结果的函数intmain(){intx,y,m,n;intk=0;charq;printf(1代表石头;2代表剪刀;3代表布;\n);printf(请输入您的选择.\n);while(k3){scanf(%d,&y);k++;game(y,x);}result(m,n);system(pause);return0;}intgame(inty,intx){intm=0;//玩家赢的次数intn=0;//电脑赢的次数srand(time(NULL));x=rand()%3+1;//取随机数1~3if(y==1&&x==3){printf(你出石头\n);printf(电脑出布\n);printf(你输了\n);++n;//电脑赢的次数}elseif(y==1&&x==1){printf(大家都出石头,平局\n);++m;++n;}elseif(y==1&&x==2){printf(你出石头\n);printf(电脑出剪刀\n);printf(你赢了\n);++m;//玩家赢的次数}if(y==2&&x==1){printf(你出剪刀\n);printf(电脑出石头\n);printf(你输了\n);++n;}elseif(y==2&&x==2){printf(大家都出剪刀,平局\n);++m;++n;}elseif(y==2&&x==3){printf(你出剪刀\n);printf(电脑出布\n);printf(你赢了\n);++m;}if(y==3&&x==1){printf(你出布\n);printf(电脑石头\n);printf(你赢了\n);++m;}elseif(y==3&&x==2){printf(你出石头\n);printf(电脑出剪刀\n);printf(你输了\n);++n;}elseif(y==3&&x==3){printf(大家都出布,平局\n);++m;++n;}returnm,n;//返回m,n的值}intresult(intm,intn)//比较最终结果{if(mn)printf(3局%d胜,你输了.\n,m);elseif(mn)printf(3局%d胜,你赢了.\n,m);elseif(m==n)printf(一胜一负一平局,旗鼓相当。\n);return0;}//改好了,直接比较三次出结果就行了呀!最后暂停查看下system(pause);
在你这个程序中,你是先输入在判断是否合法!while((y=get_int())!=q&&k4)所以你只有第四次输入才会判断k是否大于4,这就是你为什么有输四次了! 更多有关「C语言猜拳小游戏程序求助#」的疑问请扫码关注微信公开课+小程序! -
c语言的一个小程序
2019-03-12 17:01:43微信公开课小程序热门讨论「c语言的一个小程序#」最新回复-includestdio.hvoidmain(){inti,j,m;for(i=3;i=3;i){i0?m=i:m=i;for(j=0;jm;j++)printf();for(j=0;j7m*2;j++)printf(*);printf( );}}
#includestdio.h#includemath.h#defineN7voidPrintSpace(intn){while(n--)putchar();}voidPrintCh(intn,constcharch){while(n--)putchar(ch);}intmain(){inti;intmid=(N+1)/2;charch=*;for(i=1;i=N;i++){PrintSpace(abs(i-mid));PrintCh(7-abs(2*(i-mid)),ch);putchar( );}getchar();return0;} 更多有关「c语言的一个小程序#」的疑问请扫码关注微信公开课+小程序! -
C语言的经典编程例子
2019-03-12 17:01:43微信公开课小程序热门讨论「C语言的经典编程例子」最新回复-【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。2.程序源代码:main(){inti,j,k;printf( );for(i=1;i5;i++)/*以下为三重循环*/for(j=1;j5;j++)for(k=1;k5;k++){if(i!=k&&i!=j&&j!=k)/*确保i、j、k三位互不相同*/printf(%d,%d,%d ,i,j,k);}}==============================================================【程序2】题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。2.程序源代码:main(){longinti;intbonus1,bonus2,bonus4,bonus6,bonus10,bonus;scanf(%ld,&i);bonus1=100000*0.1;bonus2=bonus1+100000*0.75;bonus4=bonus2+200000*0.5;bonus6=bonus4+200000*0.3;bonus10=bonus6+400000*0.15;if(i=100000)bonus=i*0.1;elseif(i=200000)bonus=bonus1+(i100000)*0.075;elseif(i=400000)bonus=bonus2+(i200000)*0.05;elseif(i=600000)bonus=bonus4+(i400000)*0.03;elseif(i=1000000)bonus=bonus6+(i600000)*0.015;elsebonus=bonus10+(i1000000)*0.01;printf(bonus=%d,bonus);}==============================================================【程序3】题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。请看具体分析:2.程序源代码:#includemath.hmain(){longinti,x,y,z;for(i=1;i100000;i++){x=sqrt(i+100);/*x为加上100后开方后的结果*/y=sqrt(i+268);/*y为再加上168后开方后的结果*/if(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/printf( %ld ,i);}}==============================================================【程序4】题目:输入某年某月某日,判断这一天是这一年的第几天?1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。2.程序源代码:main(){intday,month,year,sum,leap;printf( pleaseinputyear,month,day );scanf(%d,%d,%d,&year,&month,&day);switch(month)/*先计算某月以前月份的总天数*/{case1:sum=0;break;case2:sum=31;break;case3:sum=59;break;case4:sum=90;break;case5:sum=120;break;case6:sum=151;break;case7:sum=181;break;case8:sum=212;break;case9:sum=243;break;case10:sum=273;break;case11:sum=304;break;case12:sum=334;break;default:printf(dataerror);break;}sum=sum+day;/*再加上某天的天数*/if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/leap=1;elseleap=0;if(leap==1&&month2)/*如果是闰年且月份大于2,总天数应该加一天*/sum++;printf(Itisthe%dthday.,sum);}==============================================================【程序5】题目:输入三个整数x,y,z,请把这三个数由小到大输出。1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果xy则将x与y的值进行交换,然后再用x与z进行比较,如果xz则将x与z的值进行交换,这样能使x最小。2.程序源代码:main(){intx,y,z,t;scanf(%d%d%d,&x,&y,&z);if(xy){t=x;x=y;y=t;}/*交换x,y的值*/if(xz){t=z;z=x;x=t;}/*交换x,z的值*/if(yz){t=y;y=z;z=t;}/*交换z,y的值*/printf(smalltobig:%d%d%d ,x,y,z);
程序员》推荐C++图书三人谈主持人:熊节(透明),《程序员》杂志编辑,C-View成员嘉宾:孟岩(梦魇),联想公司掌上设备事业部应用开发处任职,C-View成员。与侯捷先生合译《C++StandardLibrary》一书金尹(恶魔),上海天宇公司CTO,在《程序员》连载有“自由与繁荣的国度”系列文章透明:“学C++用哪本书入门”,这是被问得最多的一个问题。但是哪一本书是最好的入门书?似乎很难找到答案。《C++Primer》太厚,《EffectiveC++》对读者要求比较高,《EssentialC++》又常常被批评为“太浅”。其实说穿了:nosilverbullet。想从一本书学会C++,那是不可能的。有朋友问我如何学C++,我会建议他先去找本数据结构书,把里面的习题全部用C++做一遍,然后再去看《EffectiveC++》。myan经常说“要在学习初期养成好习惯”,我对此颇不以为然。个人认为,《EssentialC++》适合作教材,《C++Primer》适合作参考书,《EffectiveC++》适合作课外读物。恶魔:很后悔当初买了《C++Primer》。因为从我个人角度来看,它的功能效用基本是和《TheC++ProgrammingLanguage》重合。当然对于入门来说,它还是很不错的。但是《C++Primer》太厚,一来导致看书极其不方便,二来系统学习需要花比较长的时间。对于目前这个越来越快餐化的时代来说,的确有很多不适合的地方,不过可以作为初学者的参考书。现在我以一块K3CPU的代价把它借给了别人,希望我那位同事能够从中得到一些益处。如果已经具备了C基础,我建议看国内的书,例如钱能的《C++大学教程(第二版)》。(如果没有C的基础还是看谭浩强的C语言)。这本书对C讲得还算比较清晰,有很多习题值得一做,特别是最后的struct和union两个部分。其中的一些算法比较拖沓和繁琐(比如树和链表的遍历算法),读者可以尝试修改这些例子,作为最后对C语言的一些总结测试。梦魇:这个问题让我想起四五年前的情形。今天对于C++有一点认识的人,多半是从那几年就开始学C++了。那时根本没有品牌观念。从书店里找一本C++书,如果看着还算明白,就买下来。我记得那时候宛延闿、张国锋、麦中凡教授的书都受到很高的赞誉。我个人最早的一本C++书是GregPerry的一本书,今天想起来,其实是一本打着C++旗号的C语言教程。对我作用最大的一本书是国防科技出版社出版的一本书,书名记不得了,作者叫斯蒂芬·布莱哈。透明:还记得以前曾批评过一本C++书,是北航出的,整本书就没有出现过class关键字。那本书,说穿了其实只是介绍了C语言和iostream库的用法,根本不能算C++。而当时我常常推荐的一本书是电子科技大学张松梅老师的C++教程。那本书,直到今天来看也没有太大的问题,唯一的缺憾就是由于年代久远,许多东西已经过时了。而对于一本技术书籍来说,“过时”是最不可接受的。总体来说,那时使用C++的人真是在“盲人摸象”。不过这也有好处,就是对C++的很多细节能搞清楚,以后看到经典好书时比较容易理解;当然坏处就是概念不清,甚至都不知道C++和VisualC++、BorlandC++到底有什么不一样。梦魇:整个90年代,其实大部分人对于C++的认识都似是而非。一开始是等同于BorlandC++,后来是等同于VisualC++和MFC。所以一般来说,打着BC和VC旗号的书卖得很好,人们觉得这就是C++。而我比较幸运,布莱哈的那本书虽然从现在的眼光来看谈不上高超,但基本路子是对的。可能是因为原书是给UNIX程序员的培训教材,所以没有让我一开始就形成“C++==VC++”的认识。其实一直到1996年,我们那里搞计算机的都是唯BorlandC++马首是瞻的,到了VC4.0出来,一下子格局全变了。1997年VC5推出之后,书店里MFC书铺天盖地,学MFC的人,头抬得都比别人高一些。不过现在看来,那时候大部分的MFC书都是三流货色。我曾经有一段时间认为,那一批程序员中间有不少被误导了。根本原因就是相对的封闭。透明:我觉得一本书的价值有两方面:第一,教给你实用的技术;第二,促使你去思考。对于一本介绍VC(或者说MFC)使用方法的书,我根本不希望它能促使我有什么思考,所以我就一定要求它在技术上精益求精完美无瑕。我刚开始用VC的时候,买的第一本书就是潘爱民老师翻译的《VC技术内幕》(第四版),没有受到那些“三流货色”的误导,应该说是很幸运的。梦魇:1999年机械工业出版社开始出版“计算机科学丛书”,其中的《ThinkinginC++》第一版受到了广泛的欢迎。其实我一直不认为这本书很出色,虽然拿过一次大奖。然而我们都得承认,这本书在C++书籍领域里第一次建立了品牌观念,很多初学者开始知道,不是随便买哪一本都一样的。再往后就是2000年的《深入浅出MFC(第二版)》第二版,以及侯先生在《程序员》上发表的那一篇《C++/OOP大系》,加上整个大环境的变化,品牌观念深入人心,C++书籍市场终于开始逐渐与世界同步。回想往事,我的感觉是,那个需要战战兢兢选择入门书的时代已经过去,今天的C++初学者,大可以放心地买口碑好、自己读起来思路顺畅的书,入门不再是太大的问题。还有一些程序员已经学了几年C++,但看到今天出版的一些新书,感觉比较陌生,这也不是什么问题。侯先生经常说“凡走过必留下足迹”,所谓“走弯路”,未必不是一件好事。至于具体的推荐表,就不好一概而论了。总之在我的印象里,《EssentialC++》、《C++Primer》、钱能教授的C++教程,都不错。甚至有人一上来就看BjarneStroustrup的《TheC++ProgrammingLanguage》,只要他喜欢,也没什么不可以。透明:我同意你的观点。不管怎么说,编程是门实践性非常强的学问。要想对C++对象模型有深入的了解,最好的办法就是写一串程序去看结果;要想学会OOP,也只能从项目中学。对于初学者,最好的学习方法就是不停地写程序,写真正有用的程序,写到有问题的时候就去查书,于是自然就会知道哪本书好哪本书不好。不过我们的教育制度能不能让大学里的学生们有这样的学习机会,我表示怀疑。以我的经验,学C++有两个门槛:入门和使用。完全看不懂C++,这是一个门槛,但是只要有一本合适的入门书,很快就能跨过。要想真正用上C++,却不是件很容易的事情。尤其对于学生来说,接触到的东西多是“玩具”,很难有实战的机会。所以经常看见有人问“C++到底能做什么”,这是C++学习中一个比较麻烦的问题。我们都是做了相当长时间的C++程序之后才看到一些真正经典的书,也正是因为走了相当长的弯路之后才知道这些书的经典之所在。所谓弯路,我想也是一种必须的积累。就算一开始就看《EssentialC++》和《C++Primer》,没有两三年的时间恐怕还是难有所得。恶魔:有两句十分有道理的话,一是我大学的C语言老师说的“写程序不如说是抄程序”,另一句是一网友说的“好的设计来自借鉴,天才的设计来自剽窃”。对于我这个理性批判主义者来说,这两句话的确不太适合。但是无论从哪个角度来讲,对于初学者来说,剽窃大师的作品是通向成功的最快捷径。我个人认为,对于C++的初学者来说,首先要确定自己专业领域内主要使用的特性的方向。因为C++的特性如此众多,初学者想贪多基本是不可能成功的。C++的编程范式基本可以分为ADT+PP、GP和OO三个方向。对于ADT+PP范式来说,初学者的主要问题不是学习C++,而是学习C的使用。对于这样的初学者,国内的几本书还是写得比较清楚,符合中国人的习惯,比如谭浩强的《C语言教程》、钱能的《C++语言大学教程》。这两本书我首推第一本,因为这一本我潜心研究了一年,这本书当中很多程序是可以剽窃的,而且可以对这些程序进行加工和提升。比如结构这一章中,它所给出的用struct来实现链表、二叉树的算法是相当蹩脚的。学习ADT+PP的初学者将这本书揣摩透以后可以尝试修改这两个程序。另外这本书的第二版稍微涉及了一些关于“类”的内容。学习ADT+PP的初学者,可以不被OO中的一些专有特性扰乱自己的思路,对于类层次扁平、无继承、无多态的程序编写是有很大好处的。透明:你好象比较推崇国内教授写的书。现在社会上有种不好的风气:一捧就捧上天,一贬就贬下地。就好象对待谭教授的书,前几年是奉为经典,这几年又有很多人使劲批评。学C++更是有点“崇洋媚外”,总是觉得初学就应该看《EssentialC++》。我看这种观点也是片面的。恶魔:当然《EssentialC++》也值得看看。但是我个人觉得这本书没有谭浩强的《C语言教程》来得好。主要原因是:第一,C++的所有特性都点到了,但是不深,看了以后会三心二意没有方向;第二,可以抄袭借鉴的例子太少。《C语言教程》中有很多有趣的问题,比如猴子吃桃、汉诺塔等等,这些例子对于刚刚涉及C/C++语言编程的人来说是学习编程很好的例子。《EssentialC++》只能是前两本书看透以后,作为学习C++特性的一个过渡性的书籍。让读者真正领略到什么是C++的编程、和C编程的不同点在哪里。透明:我发现一个很有趣的现象:初学者往往喜欢问“哪本书比较好”,这让我很是不解。这有点像一个刚学打篮球的人问“王治郅和科比谁比较厉害”。当然科比更厉害一些。但如果你是想学打篮球,这两个人都非常非常有资格教你,你跟谁学都能学得很强——关键不是在于你选哪个老师,而是在于你自己用多少功夫去学。透明:回到原来话题。学会了C++的语法,能看懂C++代码之后,必须有些书来指导进阶(或者叫指点迷津)。我觉得《设计模式》很好,能够让读者看到一些精妙的用法。不过正如我经常说的,模式带来的麻烦和好处一样多,甚至麻烦还要更多。而且,C++本身的问题使得在C++中使用GoF模式愈加麻烦。梦魇:《DesignPatterns》这本书绝对是不可以没有的,而且中英文版都不可少。最初我看中文版,说实话看不懂,但是也不觉得人家翻译得不好,所以就想,大概是原文就很难懂,加上自己水平有限。于是总是想着再找几本patterns的书来看。后来找到几本书,口碑还不错,不过水平高下,一比就出来了,还是那本《DesignPatterns》最经典,最耐看。英文版出来之后,两个版本对照看,明白多了。现在觉得,其实就设计模式来讲,把这本看明白了就很不错了,不用再花费很多心思找其他的书。我现在的包里始终夹着这本书,随身携带,有备无患。至于说设计模式的副作用,和可能带来的弊端,我的体会也挺多。不过是这样,我们想一想,究竟什么情况下设计模式可以用得很好呢?一种是有经验丰富的人引导,比如要是RobertMartin带队,你在某个地方用错了设计模式,他就会指出来,说这里不对,将来会产生什么样的弊端。对于他来说,丰富的实践经验足以支持他进行“预测型”设计。但是大部分人没这个能力,因此我们只好走第二条路和第三条路,就是“试探型”设计和“重构型”设计。遇到一个问题,你觉得用某种模式挺合适的,就大胆地用了,成功是积累经验,发现不好,出了问题了,只好改回来,那也是积累教训。这叫做“试探型”。至于重构,应该算是最有组织、成功率最高的工程化方法。先把问题“quickanddirty”地解决了,所有的暗礁都暴露出来,然后再根据实际情况采用合适的模式优化设计。现在XP和UP都高度重视refactory,UP在Elaboration和Construction阶段都鼓励抽出专门的iterations进行重构。所以说如果组织快速的软件开发,当然比较倾向于这条路——打成功率嘛。透明:讲到重构,我顺便说说《Refactoring》这本书的影响。从工程本身的角度来说,你所谓的“重构型设计”是没有什么问题的。但中国的开发者(也包括我在内)往往比较冲动,比较容易相信银弹的存在。曾经有那么一段时间,我在Java中尝试过了重构的方法之后,又拿到C++中去尝试。结果发现,在Java中速度非常快的重构过程,到C++中就被减慢了。究其原因,就是因为C++和Java的约束条件不同。拿着Java中成功的案例直接套C++,不失败才怪。所以,我必须说:《Refactoring》这本书很有价值。但对于C++程序员来说,它的价值是让你思考,思考这种方法的可行性。如果一个C++程序员没有打算迁移到Java,那么我必须告诉他:《Refactoring》这本书不是让你照着它用的,甚至不是让你去相信它的。对于C++程序员,《Refactoring》全书可以放心相信的只有第13章,其他的部分,都必须非常谨慎地对待。梦魇:我还要就“试探型”的方法多说两句,我觉得对于个人发展来讲,“试探”也是必不可少的,撞墙不可怕,高水平的人不都是撞出来的吗?你失败了一次,就知道这个模式有什么潜在的问题,下次再用,就会多看几步,像下棋似的。撞的多了,路数就出来了。我不知道你们是否有这个感觉:用错了模式,吃了亏,再回过头去翻翻《DesignPatterns》,看到人家早就指出来这个问题,不过就是那么几句话,原来看上去干巴巴的,现在觉得句句都讲到心坎上,GoF的形象马上就高大起来,还带着光环,感觉是既兴奋又懊悔。透明:现在回头来看,我更欣赏myan推荐给我的《DesigningObject-OrientedC++ApplicationsUsingBoochMethod》。这本书能够帮助C++程序员理清思路培养习惯,可惜国内没有引进。相比后来商业味浓厚的UML系列书籍,我觉得这本书对于面向对象的阐释精辟独到,至今未有能出其右者。梦魇:刚才我们两人都说到RobertMartin,他可是我的榜样。那本1995年的《DesigningObjectOrientedC++Application》,我觉得是每一个C++软件工程师都应该反复研读的书。可惜不仅国内没有引进,在国外的名气也不大。如果你觉得面向对象的那些道理你好像都明白,可就是一遇到实际问题就使不上劲,那这本书就是你的最佳导师。提到理清思路,还有一本书不得不提,就是AndrewKoenig的《RuminationsOnC++》。每个人都应该问自己,我学了这么多年的C++,究竟什么是C++最基本的设计理念?遇到问题我第一个直觉是什么?第一个试探型的解决方案应该具有那些特点?如果你不能给出明确的答案,就应该认真地去读这本书,读完了你就有了“主心骨”。透明:插一句话,谈谈“推荐书”的问题。入门书基本上是放之四海而皆准的,所以推荐的意义也不大。而入门后的发展方向,每个人不同,这个时候就需要“高人”的指点。举个例子:我学C++的时候,myan还不认识我,所以也没有给我推荐书,我还是学过来了,所以即使你当时向我推荐了《EssentialC++》或者《C++Primer》,我也不会太感谢你;但在我认真研究OO的时候,你推荐RobertMartin那本书给我,对我帮助就特别大,而且我从别的地方也很难找到类似的推荐,所以我就很感谢你。一个程序员,必须有framework的意识,要学会用framework,还要主动去分析framework(在这方面,《DesignPatterns》能有一定的帮助)。但是,真正高质量、成气候的framework的书恐怕也就只有针对MFC的。从这个角度来说,MFC纵有千般不是,C++程序员都非常有必要先去用它、熟悉它、研究它,甚至借助《深入浅出MFC》这样的书来剖析它。不然,很难有framework的意识和感觉。当然,另一个framework也很好,那就是STL。不管用不用MFC、STL,对这两个东西的掌握和理解都是极有帮助的。最近我又在看《深入浅出MFC》,虽然已经不用MFC编程了,但帮助是一定有的。梦魇:MFC和STL方面,我还是比较推崇侯先生的两本书《深入浅出MFC》和《STL源码解析》。《深入浅出MFC》这本书,名气自然是大得不得了,不过也有不少人批评。其实书也没有十全十美的,批评当然是少不了的,不过有的时候我看到有人评论这本书,把它跟InsideVC相比,真的是牛头不对马嘴。你刚才其实说得很对,程序员应该有一点framework意识。而这本《深入浅出MFC》与其说是在讲MFC编程,不如说通篇是在拿MFC为例分析ApplicationFramework的架构和脉络。所以无论你对于MFC本身是什么态度,这本书对每一个C++程序员都有很大的益处。透明:是的。《VC技术内幕》会告诉你“DYNAMIC_CREATE这个宏怎么用”,《深入浅出MFC》则告诉你“DYNAMIC_CREATE这个宏是怎么实现的”。所以,如果你只需要在VC下写一些小应用程序,《深入浅出MFC》的价值并不太大;但是,如果你需要设计一个稍微大一点的东西(不一定是framework),MFC的设计思想就会有所帮助。梦魇:另外,我觉得对于MFC也应该有一个公允的评价。过去是吹捧得天上有地下无,书店里铺天盖地都是MFC的书,搞得大家只知有MFC,不知有C++,甚至直到现在还有人问:“我是学MFC呢,还是学C++?VC++是不是比C++更高级的语言?”MFC成了一尊神像,阻碍了人们的视线。所以得把它从神坛上拉下来。这就是过去一两年有很多人,包括我在内批评MFC的一个目的。可是现在大家视野开阔了,.NET也出来了,MFC不再是神像了,少数人就开始以贬损MFC为乐了。我觉得这种态度是不对的。什么叫好的框架?我觉得在十几年的时间能够象MFC这样保持稳定并且不断进步的框架就是好的框架。可能我们在一些具体的设计问题上有不同看法,觉得“这个地方这么设计不是更漂亮吗?”很多时候是的,但是这不重要,重要的是MFC成熟稳定、有十几年的成功经验,这是最了不起的东西。另外一点,MFC中间包括着学习Win32API编程的最佳资料。这是除了其framework方面之外的另一个亮点。我现在使用Win32API开发,但是经常参考MFC的源代码,收获很大。透明:STL方面,我对于剖析它的源代码兴趣并不大,毕竟里面源代码多是算法问题。所以,《STL源码剖析》我也只是随便翻翻就束之高阁了。我觉得这本书用来做计算机系的数据结构和算法教材不错,不知道有没有老师乐意这样做。对于STL,我的态度一向都是“应用至上”。不过,我一直认为SGISTL本身就是一本精彩的书,一本数据结构和算法的经典参考书,同时也是泛型技术的参考书。想知道一个算法是如何实现的,看看STL源代码就行;想知道如何使用typetraits,STL源代码里面也有例子。看别人写的书,总觉得隔着一层纱,有点挠不到痒处的感觉。SGISTL的代码写得非常漂亮,一个C++程序员如果不看看这本书,实在是可惜。梦魇:至于STL,除了《STL源码解析》之外,我举贤不避亲,强烈推荐侯先生与我合译的那本《TheC++StandardLibrary》。这本书质量之高是无需怀疑的。我现在手边常备此书,随时查阅,对我帮助很大。透明:C++和Java相比,最大的优势就是它没有一个专门的公司来管它,最大的弱点也是它没有一个专门的公司来管它。Java程序员在学会简单的语法之后,立刻进入SUN提供的framework,一边用这个现成的framework做实际开发,一边在开发过程中继续学习Java一些幽深的特性。而这个时候,C++程序员恐怕还在问“VC和BCB哪个好”呢。这无疑是浪费时间。梦魇:刚才你说Java和C++的优劣,这个话题已经成了我们这个年代永不消失的声波了。我也不想再谈这个。不过有一点我得说清楚:现在我们很多用C++的人吃了不少苦头,探过脖子去看看Java,觉得它真是太可爱了,这种印象是不准确的。另外,Java也不简单,而且会越来越庞大复杂。在很多场合,Java还不具有竞争力。至于将来如何,我看有些Java爱好者也过分乐观了,似乎计算机科学界几十年解决不了的问题都可以借着Java的东风解决掉,恐怕没那么容易。透明:那当然。我再次强调:NoSilverBullet。读书很重要,但古人说“行万里路,读万卷书”,还是把“行路”放在“读书”前面。尤其对于技术书籍,如果它不能帮我解决问题、不能给我带来非常实际的利益,那么我是不会去读它的。恶魔说得对,我们这个社会很快餐,我们这个行业尤其很快餐,我们也只能努力适应它。本回答被提问者采纳 更多有关「C语言的经典编程例子」的疑问请扫码关注微信公开课+小程序! -
C语言的记事本程序
2019-03-12 17:01:43微信公开课小程序热门讨论「C语言的记事本程序」最新回复-以前自己写的玩的,有最简单的功能,但是没有计算字数功能,将就用吧,好用就采纳
下面是c的记事本小程序,for windows:加入到工程中,再加上rc资源菜单,用devc++编译即可实现:1、C程序:#includewindows.h#defineCM_FILE_SAVEAS9072#defineCM_FILE_EXIT9071#defineCM_FILE_OPEN9070#defineCM_ABOUT9069staticcharg_szClassName[]=MyWindowClass;staticHINSTANCEg_hInst=NULL;#defineIDC_MAIN_TEXT 1001BOOLLoadFile(HWNDhEdit,LPSTRpszFileName){ HANDLEhFile; BOOLbSuccess=FALSE; hFile=CreateFile(pszFileName,GENERIC_READ,FILE_SHARE_READ,NULL, OPEN_EXISTING,0,0); if(hFile!=INVALID_HANDLE_VALUE) { DWORDdwFileSize; dwFileSize=GetFileSize(hFile,NULL); if(dwFileSize!=0xFFFFFFFF) { LPSTRpszFileText; pszFileText=(LPSTR)GlobalAlloc(GPTR,dwFileSize+1); if(pszFileText!=NULL) { DWORDdwRead; if(ReadFile(hFile,pszFileText,dwFileSize,&dwRead,NULL)) {pszFileText[dwFileSize]=0;//Nullterminatorif(SetWindowText(hEdit,pszFileText))bSuccess=TRUE;//Itworked! } GlobalFree(pszFileText); } } CloseHandle(hFile); } returnbSuccess;}BOOLSaveFile(HWNDhEdit,LPSTRpszFileName){ HANDLEhFile; BOOLbSuccess=FALSE; hFile=CreateFile(pszFileName,GENERIC_WRITE,0,0, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0); if(hFile!=INVALID_HANDLE_VALUE) { DWORDdwTextLength; dwTextLength=GetWindowTextLength(hEdit); if(dwTextLength0)//Noneedtobotheriftheresnotext. { LPSTRpszText; pszText=(LPSTR)GlobalAlloc(GPTR,dwTextLength+1); if(pszText!=NULL) { if(GetWindowText(hEdit,pszText,dwTextLength+1)) {DWORDdwWritten;if(WriteFile(hFile,pszText,dwTextLength,&dwWritten,NULL))bSuccess=TRUE; } GlobalFree(pszText); } } CloseHandle(hFile); } returnbSuccess;}BOOLDoFileOpenSave(HWNDhwnd,BOOLbSave){ OPENFILENAMEofn; charszFileName[MAX_PATH]; ZeroMemory(&ofn,sizeof(ofn)); szFileName[0]=0; ofn.lStructSize=sizeof(ofn); ofn.hwndOwner=hwnd; ofn.lpstrFilter=TextFiles(*.txt)0*.txt0AllFiles(*.*)0*.*00; ofn.lpstrFile=szFileName; ofn.nMaxFile=MAX_PATH; ofn.lpstrDefExt=txt; if(bSave) { ofn.Flags=OFN_EXPLORER|OFN_PATHMUSTEXIST|OFN_HIDEREADONLY| OFN_OVERWRITEPROMPT;if(GetSaveFileName(&ofn)) { if(!SaveFile(GetDlgItem(hwnd,IDC_MAIN_TEXT),szFileName)) { MessageBox(hwnd,Savefilefailed.,Error,MB_OK|MB_ICONEXCLAMATION); returnFALSE; } } } else { ofn.Flags=OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY; if(GetOpenFileName(&ofn)) { if(!LoadFile(GetDlgItem(hwnd,IDC_MAIN_TEXT),szFileName)) { MessageBox(hwnd,Loadoffilefailed.,Error,MB_OK|MB_ICONEXCLAMATION); returnFALSE; } } } returnTRUE;}LRESULTCALLBACKWndProc(HWNDhwnd,UINTMessage,WPARAMwParam,LPARAMlParam){ switch(Message) { caseWM_CREATE: CreateWindow(EDIT,, WS_CHILD|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL|ES_MULTILINE|ES_WANTRETURN, CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT, hwnd,(HMENU)IDC_MAIN_TEXT,g_hInst,NULL); SendDlgItemMessage(hwnd,IDC_MAIN_TEXT,WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0)); break; caseWM_SIZE: if(wParam!=SIZE_MINIMIZED) MoveWindow(GetDlgItem(hwnd,IDC_MAIN_TEXT),0,0,LOWORD(lParam),HIWORD(lParam),TRUE); break; caseWM_SETFOCUS: SetFocus(GetDlgItem(hwnd,IDC_MAIN_TEXT)); break; caseWM_COMMAND: switch(LOWORD(wParam)) { caseCM_FILE_OPEN:DoFileOpenSave(hwnd,FALSE); break; caseCM_FILE_SAVEAS:DoFileOpenSave(hwnd,TRUE); break; caseCM_FILE_EXIT:PostMessage(hwnd,WM_CLOSE,0,0); break; caseCM_ABOUT:MessageBox(NULL,FileEditorforWindows!nUsingtheWin32API,About...,0); } break; caseWM_CLOSE: DestroyWindow(hwnd); break; caseWM_DESTROY: PostQuitMessage(0); break; default: returnDefWindowProc(hwnd,Message,wParam,lParam); } return0;}intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance, LPSTRlpCmdLine,intnCmdShow){ WNDCLASSEXWndClass; HWNDhwnd; MSGMsg; g_hInst=hInstance; WndClass.cbSize=sizeof(WNDCLASSEX); WndClass.style =0; WndClass.lpfnWndProc =WndProc; WndClass.cbClsExtra=0; WndClass.cbWndExtra=0; WndClass.hInstance =g_hInst; WndClass.hIcon =LoadIcon(NULL,IDI_APPLICATION); WndClass.hCursor=LoadCursor(NULL,IDC_ARROW); WndClass.hbrBackground=(HBRUSH)(COLOR_WINDOW+1); WndClass.lpszMenuName =MAINMENU; WndClass.lpszClassName=g_szClassName; WndClass.hIconSm=LoadIcon(NULL,IDI_APPLICATION); if(!RegisterClassEx(&WndClass)) { MessageBox(0,WindowRegistrationFailed!,Error!, MB_ICONEXCLAMATION|MB_OK|MB_SYSTEMMODAL); return0; } hwnd=CreateWindowEx( WS_EX_CLIENTEDGE, g_szClassName, FileEditorExampleProgram, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,CW_USEDEFAULT,1024,768, NULL,NULL,g_hInst,NULL); if(hwnd==NULL) { MessageBox(0,WindowCreationFailed!,Error!, MB_ICONEXCLAMATION|MB_OK|MB_SYSTEMMODAL); return0; } ShowWindow(hwnd,nCmdShow); UpdateWindow(hwnd); while(GetMessage(&Msg,NULL,0,0)) { TranslateMessage(&Msg); DispatchMessage(&Msg); } returnMsg.wParam;}2、RC资源菜单程序:#defineCM_FILE_SAVEAS9072#defineCM_FILE_EXIT9071#defineCM_FILE_OPEN9070#defineCM_ABOUT9069MAINMENUMENU{POPUP&File{ MENUITEM&Open...,CM_FILE_OPEN MENUITEMSave&As...,CM_FILE_SAVEAS MENUITEMSEPARATOR MENUITEME&xit,CM_FILE_EXIT}POPUP&Help{ MENUITEM&About,CM_ABOUT}}已经在devc++调试通过 更多有关「C语言的记事本程序」的疑问请扫码关注微信公开课+小程序!