二级培训C讲义wang9程序.doc_第1页
二级培训C讲义wang9程序.doc_第2页
二级培训C讲义wang9程序.doc_第3页
二级培训C讲义wang9程序.doc_第4页
二级培训C讲义wang9程序.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

二级考试C培训讲义第A章 程序讲解例10:计算器模拟main() char operator=+; float num,answer=0; while(operator!=) scanf(%f,&num); switch (operator) case +:answer=answer+num; printf(+%f=%fn,num,answer); break; case -:answer=answer-num; printf(-%f=%fn,num,answer); break; case *:answer=answer*num; printf(*%f=%fn,num,answer); break; case /:if(num4 | i%cn,get,put); /* 策略 */void hanoi(int n,char source,char help,char target) if(n=1) move(source,target); else hanoi(n-1,source,target,help); move(source,target); hanoi(n-1,help,source,target); 例3、矩阵相乘分解问题,如何计算cij,图示乘法规律,引入循环变量kmain()int a23=1,2,3,4,5,6; int b32=1,2,3,4,5,6; int c22, i,j,k; for(i=0;i2,i+) for(j=0;j2,j+) cij=0; for(k=0;j3,k+) cij+=aik*bkj; gets(字符数组名) 返回值:该数组的地址(一般无用) 与scanf()的操作差别 puts(字符数组名) 返回值:无意义 i=0; while(si!=0) putchar(si); i+; strcpy(目标,源数组名) 返回值:目标数组的地址 数组之间不可能直接赋值 strcpy(s1,s2) s1 10,调用strcpy可能破坏s2中数据。 strcat(主数组名,子数组名) 返回值:主数组的地址 如主数组空间不够大,数据的改动涉及到数组之外,破坏是不可估计的。 strcmp(数组1名,数组2名) 返回值:数组1的元素依次减数组2的元素。 0 数组1大于数组2, 0 数组1等于数组2 strlen(数组名) 从数组始地址开始计数,直至遇到0 字符串长度不包括0 其正确性依赖于数据是否规范。 i=0; while(si!=0) i+; strupr(数组名)转变数组元素为大写字符,返回值:数组地址 strlwr(数组名)转变数组元素为小写字符,返回值:数组地址例2、狼追兔子,兔子躲在环形分布的10洞中的哪几个洞安全?(强盗杀人质,数学家如何求生)分析起始情况 step=1; current=0;循环操作 cavecurrent=1;step+;current+=step;终止条件 step=1 & current=0循环条件 !(step=1 & current=0)循环结构 用do.while 不用while或for #define MAXLEN 10main()int caveMAXLEN; int i,current,step; for (i=0;i=MAXLEN-1;i+) cavei=0; step=1; current=0; do cavecurrent=1;step+;current+=step; current%=10; step%=10; while(current!=0 | step!=1); for(i=0;i=MAXLEN-1;i+) if(cavei=0) printf(%d,i); 例3:求所有满足如下条件的三位数,它除以11的商等于它的各位数字的平方和。例如550,除以11为50,5x5+5x5+0x0=50,打印所有满足条件的三位数。#include main()int i,j,n,s; for(i=110;i0)BBBB:s=s+(n%10)*(n%10);例18、一元二次方程求解(用项目文件)/* AA.prj */a1.ca2.c/* A1.c */#include stdio.h#include math.hextern void sub1(float a,float b,float c);extern void sub2(float a,float b,float c);extern void sub3(float a,float b,float c);main() float a,b,c,x; scanf(%f,%f,%f,&a,&b,&c); x=b*b-4*a*c; if(x0) sub1(a,b,c); if(x=0) sub2(a,b,c); if(x0) x1=sub1(a,b,c); x2=sub1(a,b,c); printf(%f,%fn,x1,x2); .float sub1(float a,float b,float c) static int i=1; if(i=1) i+; return( (-b+sqrt(b*b-4*a*c)/(2*a) ); else return( (-b-sqrt(b*b-4*a*c)/(2*a) );例17、矩阵倒置void rotate();main() int a44=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16; int i,j; for(i=0;i4;i+) for(j=0;j4;j+) printf(%2d ,aij); printf(n); rotate(a); for(i=0;i4;i+) for(j=0;j4;j+) printf(%2d ,aij); printf(n); void rotate(int a4) int i,j,temp; for(i=0;i4;i+) for(j=i+1;j4;j+) temp=aij; aij=aji; aji=temp; 例15、求数组的鞍点#define ROW 3#define COL 4main() int i,j,k,max,max_j,min,min_i; int aROWCOL=1,2,3,4,5,6,7,8,9,10,11,12; for(i=0;iROW;i+) /* 求第i行的最大值max,及其列下标max_j */ max_j=0; max=aimax_j; for(j=1;jmax) max=aij; max_j=j; /* 求第max_j列的最小值min,及其行下标min_i */ min_i=0; min=amin_imax_j; for(k=0;kROW;k+)if(akmax_jmin) min=akmax_j; min_i=k; if(min_i=i) printf(%d,%d:%dn,i,max_j,max); else printf(%d:NO POINTn,i); 结果:0,3:41:NO POINT2:NO POINT例14、在有序的字符串中插入一个字符#include stdio.h#include string.hmain() char str80,c; /* 将c插入在第一个比它大的stri位置中 原stri及其后元素后移 */ int len,i,j; gets(str); len=strlen(str); c=getchar(); for(i=0; strii; j-) strj=strj-1; /* stri.strlen-1 =stri+1.strlen 若i为len,循环不执行 */ stri=c; strlen+1=0; puts(str);例13、P97,例6.8 题目稍作改动 将一个字符串中所有单词的首字符改为大写:i am wq -I Am Wq#include stdio.h#include ctype.h#define YES 1#define NO 0main() int i,inword; char string80,c; inword=NO; gets(string); for(i=0;(c=stringi)!=0;i+) if(c= |c=t) inword=NO; else if(inword=NO) if(islower(stringi) stringi-=32; inword=YES; puts(string);例12、折半查找查字典 引出变量low、 high、 mid xmid 与 待查数t的比较 =0,0,0#include string.h#define MAX 10#define TRUE 1#define FALSE 0main() char xMAX20=00,111,2,33,44,55,66,777,88,99; char temp20=44; int low=0,high=MAX-1,mid; int found=FALSE; while(low=high) & (!found) mid=(low+high)/2; if(strcmp(temp,xmid)0) low=mid+1; if(found) printf(%dn,mid); else printf(NO FOUNDn);例11:找出关键字在文件中出现的次数 #include stdio.h #define MAX 30 #define NKEYS 3 struct key char *keyword; int count; keylistNKEYS=do,0,while,0,for,0; FILE *fp;main() int i; char wordMAX; fp=fopen(1.1,r); while( (getword(word)!=EOF) if(i=find(word,keylist,NKEYS)=0) keylisti.count+; fclose(fp); for(i=0;i0) printf(%s:%dn,keylisti.keyword,keylisti.count); int getword(char *word) char *p; if(feof(fp) return(EOF); p=word; while( (*p=fgetc(fp)= |*p=n) & !feof(fp) ); if(feof(fp) return(EOF); while( (*+p=fgetc(fp)!= &*p!=n & !feof(fp) ); *p=0; return(1); int find(char *word,struct key *keylist,int n) int i; for(i=0;ikeyword)=0) return(i); return(-1); 例9:用递归实现打印正负整数 #include stdio.h main() printd(-12345); printd(int n) int i; if(n0) putchar(-); n=-n; if(i=n/10)!=0) printd(i); putchar(n%10+0); 例8:用递归实现字符串的倒置、顺置 #include string.h void reverse(char s); int i; char s210=; main() char s1=abcdef; i=0; reverse(s1); puts(s2); void reverse(char s) if(strlen(s)=1)s2i+=s0; else reverse(s+1); s2i+=s0; 例7:一维数组的应用。找出一个字符串中的字母对的出现次数 #include stdio.h main()

温馨提示

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

评论

0/150

提交评论