CC++学习总结笔记.docx
- 文档编号:28730070
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:280
- 大小:1,001.44KB
CC++学习总结笔记.docx
《CC++学习总结笔记.docx》由会员分享,可在线阅读,更多相关《CC++学习总结笔记.docx(280页珍藏版)》请在冰豆网上搜索。
CC++学习总结笔记
#include
#defineN20
main()
{
chars[N][N],i,j,k,m;
if(N%2==0)
m=N/2;
else
m=N/2+1;
for(k=0;k for(i=k;i for(j=k;j if(i==k||i==N-k-1||j==k||j==N-k-1) s[i][j]='A'+k; for(i=0;i { for(j=0;j printf("%c",s[i][j]); printf("\n"); } } 求负数平均数: #include main() { inta[7]={1,-2,9,-4,-7,2,0},i,k=0;floats=0.0; for(i=0;i<7;i++) printf("%d",a[i]); printf("\n"); for(i=0;a[i]! =0;i++) if(a[i]<0) {s+=a[i];k++;} printf("%6.4f",s/k); } 小写改大写 #include main() { inti;chara[20]; gets(a); for(i=0;a[i]! ='\0';i++) if(a[i]>='a'&&a[i]<='z') a[i]=a[i]-32; puts(a); } 第13套题(必须是main函数在上面,fun函数段再下面,要不然会出错) #include longfun(inta,intn) {inti;longs,t=0; for(i=0;i t=t*10+a; s=t; for(i=1;i { t=t/10; s=s-t; } returns; } main() { inta,n; scanf("%d%d",&a,&n); printf("a=%d,n=%d",a,n); printf("\n"); printf("%ld\n",fun(a,n));/*必须是ld,不能是l*/ } 解法二(不调用子函数) #include main() { inta,n,i;longs,t=0; scanf("%d%d",&a,&n); printf("a=%d,n=%d",a,n); printf("\n"); for(i=0;i t=t*10+a; s=t; for(i=1;i { t=t/10; s=s-t; } printf("%ld\n",s); } 第18套 #include #include main() { doublex0,x1=0.0; do { x0=x1; x1=cos(x0); }while(fabs(x0-x1)>=1e-6); printf("root=%f\n",x1); } 注意区别,后者为正确结果 第30套——删除前导*号 解法一(调用子函数) #include voidfun(char*a) { char*p=a,*s; while(*p=='*') p++; for(s=p;*s! ='\0';s++) *a++=*s; *a='\0'; } main() { chara[80];/*此处不能定义为*a*/ gets(a); fun(a);/*此处不得直接写成puts(fun(a));必须得分两步写*/ puts(a); } 解法二(未调用子函数) #include #include main() { inti,k=0;chars[20],*p,*r; gets(s); p=s; while(*p=='*') p++; for(r=p;*r! ='\0';r++) s[k++]=*r; s[k]='\0'; puts(s); } 循环左移 #include #include main() { inti,j,n,m;chara[20],t; gets(a); n=strlen(a);/*要用到strlen函数的话就要用到字符串库函数*/ scanf("%d",&m); for(i=0;i {t=a[0]; for(j=0;j a[j]=a[j+1]; a[n-1]=t; } puts(a); } 注意必须是先输入字符串数组,再输入m值 二维矩阵转置: #include #include #defineM3/*这一句是在main函数之前*/ main() { inta[M][M]={{1,2,2},{4,1,6},{1,3,2}},b[M][M],i,j,k; printf("beforemotivated: \n"); for(i=0;i {for(j=0;j printf("%d",a[i][j]); printf("\n");/*注意大花括号的位置,以及printf(“\n”);这一句的位置,每一行结尾转行*/ } for(i=0;i for(j=0;j b[i][j]=a[i][j]+a[j][i]; printf("aftermotivated: \n"); for(i=0;i {for(j=0;j printf("%d",b[i][j]); printf("\n"); } } #include #include main() { inti,n,k=0;chars[20],*p; gets(s); n=strlen(s); p=s; for(i=0;i if(p[i]%2==0||i%2! =0) s[k++]=p[i]; s[k]='\0'; puts(s); } 删除字符串中某些字符: 解法一 #include #include main() { inti,n,k=0;chars[20],*p; gets(s); n=strlen(s); p=s; for(i=0;i {if(p[i]%2! =0&&i%2==0); else {s[k++]=p[i]; s[k]='\0'; } } puts(s); } 解法二(主要是红色字体部分内容不同) #include #include main() { inti,n,k=0;chars[20],*p; gets(s); n=strlen(s); p=s; for(i=0;i {if(p[i]%2==0||i%2! =0) s[k++]=p[i]; s[k]='\0'; } puts(s); } 数组前m位输出 #include main() { ints[7]={1,2,3,4,5,6,7},i,m; for(i=0;i<7;i++) printf("%d",s[i]); printf("\n"); scanf("%d",&m); for(i=0;i printf("%d",s[i]); printf("\n"); } 求1-1/2+1/3-1/4+···求前m项的和 #include main() { inti,m,fg=1;doubles=0.0,s1; scanf("%d",&m); for(i=1;i<=m;i++) { s1=i*fg; fg=fg*(-1); s+=1.0/s1; } printf("%2.4f\n",s);/*2.4前面的数字2代表包括总位数,前面的数字只要不超过6就能得到正确结果,后面的数字4代表小数点后的位数,即保留几位小数,此处与printf("%.4f\n",s);效果一样*/ } 注意这个结果不是顶行输出的,与8.4前面的数字8有关 判断几组数据的大小 #include #include main() { inti,a,b,n; scanf("%d",&n); for(i=0;i { scanf("%d%d",&a,&b); if(a>b)printf("Text%d: >\n",i+1); if(a <\n",i+1); if(a==b)printf("Text%d: =\n",i+1); } } 第一套选择题 解法一(答案) #include #include main() { inti=2,fg=1;doubles=0.0,s1=0.75,t; while(s1>1e-3) { s=s+fg*s1; t=2*i; s1=(t+1)/(t*t); fg=fg*(-1); i++; } printf("theresultis: %f\n",s); } 解法二(为什么有这种差别呢? 求解答) #include #include main() { inti=1,fg=1;doubles=0.0,s1,t; do { t=2*i; s1=(t+1)/(t*t); s=s+fg*s1; fg=fg*(-1); i++; } while(s1>1e-3); printf("theresultis: %f\n",s); } 解法三(带子函数段) #include #include doublefun(doublee) { inti=1,fg=1;doubles=0.0,s1,t; do { t=2*i; s1=(t+1)/(t*t); s=s+fg*s1; fg=fg*(-1); i++; } while(s1>e); returns; } main() { doublee; scanf("%le",&e);/*此处红色字体%le不能写成%f,这里scanf函数与printf函数使用规则不同,scanf函数读取double型数据是用%le,printf函数显示double型数据是用%f,注意区别*/ printf("%f\n",fun(e)); } 【实现十进制到二进制的转换】: #include main() { intk=0,i;longt,s1;charp[20],ch; scanf("%ld",&t); do { s1=t%2; t=t/2; p[k++]=s1+'0'; } while(t>0); p[k]='\0'; for(i=0;i { ch=p[i]; p[i]=p[k-1-i]; p[k-1-i]=ch; } puts(p); } 【二进制到十进制的转换】: #include #include main() { inti,j,n,k;longt=0;chars[20]; gets(s); n=strlen(s); for(i=0;i { k=1; for(j=1;j<=n-1-i;j++) k=k*2; t=t+k*(s[i]-'0'); } printf("%ld\n",t); } 【实现16进制到10进制的转换】: #include #include main() { inti,j,n,k;longt=0;chars[20]; gets(s); n=strlen(s); for(i=0;i { k=1; for(j=1;j<=n-1-i;j++) k=k*16; if(s[i]>='0'&&s[i]<='9') t=t+k*(s[i]-'0'); if(s[i]>='A'&&s[i]<='G') t=t+k*(s[i]-55);/*例如16进制中的’A’代表10进制中的10,而字符’A’对应的ASCII值为65,其他的’B’…一直到’F’都可以依此类推*/ } printf("%ld\n",t); } 【实现10进制到16进制的转换】: #include #include main() { intk=0,i;longt,s1;charp[20],ch; scanf("%ld",&t); do { s1=t%16; t=t/16; if(s1>=1&&s1<=9) p[k++]=s1+'0'; if(s1>=10&&s1<=15) p[k++]=s1+55; } while(t>0); p[k]='\0'; for(i=0;i { ch=p[i]; p[i]=p[k-1-i]; p[k-1-i]=ch; } puts(p); } 【2进制转化为8进制】: 思路: 2进制→10进制→8进制 #include #include main() { inti,j,n,k,m=0;longt=0,s1;chars[20],p[20],ch; gets(s); n=strlen(s); for(i=0;i { k=1; for(j=1;j<=n-1-i;j++) k=k*2;/*蓝色字体2如果变为8,则可以实现8进制到10进制的转换*/ t=t+k*(s[i]-'0'); } printf("%ld\n",t); do { s1=t%8;/*这两句顺序不能颠倒,否则会导致结果错误,即必须是先求余,后求商如果是先求商后求余的话,即按照"t=t/8;s1=t%8"的顺序执行,后一句中s1=t%8中的t已经改变*/ t=t/8; p[m++]=s1+'0';/*m用于统计二进制数的位数,在此二进制数是作为字符串的形式输出的*/ } while(t>0); p[m]='\0'; for(i=0;i { ch=p[i]; p[i]=p[m-1-i]; p[m-1-i]=ch; } puts(p); } 【2进制转化为16进制】: 思路与2进制转化为8进制相似 #include #include main() { inti,j,n,k,m=0;longt=0,s1;chars[20],p[20],ch; gets(s); n=strlen(s); for(i=0;i { k=1; for(j=1;j<=n-1-i;j++) k=k*2;/*蓝色字体2如果变为8,则可以实现8进制到10进制的转换*/ t=t+k*(s[i]-'0'); } printf("%ld\n",t); do { s1=t%16;/*这两句顺序不能颠倒,否则会导致结果错误,即必须是先求余,后求商如果是先求商后求余的话,即按照"t=t/16;s1=t%16"的顺序执行,后一句中s1=t%16中的t已经改变*/ t=t/16; if(s1>=1&&s1<=9) p[m++]=s1+'0'; if(s1>=10&&s1<=15) p[m++]=s1+55;/*m用于统计二进制数的位数,在此二进制数是作为字符串的形式输出的*/ } while(t>0); p[m]='\0'; for(i=0;i { ch=p[i]; p[i]=p[m-1-i]; p[m-1-i]=ch; } puts(p); } 【从母字符串中查找子字符串的个数】: 解法一 #include #include main() { inti,j,k=0,n1,n2;chars[100],p[100],q[100]; gets(s); gets(p); n1=strlen(s); n2=strlen(p); for(i=0;i { for(j=0;j q[j]=s[i+j];/*动态保存字符串数组q,以便与子字符串p比较*/ q[n2]='\0'; if(strcmp(q,p)==0) k++; } printf("%d\n",k); } 解法二(注意首先定义字符串s,p的长度要足够长,如定义为100。 若定义为20,当从输入设备输入的字符串的长度超过20的时候,会出现错误) #include #include main() { inti,j,k=0,tag,n1,n2;chars[100],p[100]; gets(s); gets(p); n1=strlen(s); n2=strlen(p); for(i=0;i { tag=1; for(j=0;j if(p[j]! =s[i+j]) tag=0; if(tag==1)k++; } printf("%d\n",k); } 【自己研究的小课题】 #include #include voidfun1(chars1[100]) { char*s=s1,*p; while(*s=='*') s++; for(p=s;*p! ='\0';p++) *s1++=*p; *s1='\0'; } voidfun2(chars2[100]) { intk=0;char*s=s2,*p; while(*s! ='\0') s++; s--; while(*s=='*') s--; *(s+1)='\0'; } main() { inti;chars1[100],s2[100]; printf("Beforetransfered(s1): "); gets(s1); printf("Beforetransfered(s2): "); gets(s2); fun1(s1); fun2(s2); printf("Aftertransfered(s1): "); puts(s1); printf("Aftertransfered(s2): "); puts(s2); printf("Afterlinked(s1+s2): "); puts(strcat(s1,s2)); } 【自己研究小课题】 将Excel中的列标变换为10进制数: AAA→703 #include #include main() { inti,j,n;longs1=0,k;chars[100]; gets(s); n=strlen(s); for(i=0;i {k=1; for(j=1;j<=n-1-i;j++) k=k*26; s1=s1+(s[i]-64)*k; } printf("%ld\n",s1); } 703→AAA(当输入的数字为26的倍数时,会出现错误,其他的某些情况也会出现错误,有待进一步考察) #include #include main() { intk=0,i;longt,s,s1;charp[20],ch; scanf("%ld",&t); do { s1=t%26; t=t/26; p[k++]=s1+64; } while(t>0); p[k]='\0'; for(i=0;i { ch=p[i]; p[i]=p[k-1-i]; p[k-1-i]=ch; } puts(p); } 求最大公约数: (1也可以是最大公约数,而且注意运行程序时最好切换输入法为英文输入法,要不然会出现死循环) #include #include main() { inta,b,i,k=0,s[100]; printf("请输入两个正整数: "); scanf("%d,%d",&a,&b); while(a<=0||b<=0) { printf("请重新输入两个正整数: "); scanf("%d,%d",&a,&b); } for(i=1;i<=a&&i<=b;i++) if(a%i==0&&b%i==0) s[k++]=i; printf("最大公约数: %d\n",s[k-1]);/*该数组最后一个元素必为最大公约数*/ } 求最小公倍数: #include #include
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CC 学习 总结 笔记