c++语言入门acm培训资料.docx
- 文档编号:26963223
- 上传时间:2023-06-24
- 格式:DOCX
- 页数:30
- 大小:20.38KB
c++语言入门acm培训资料.docx
《c++语言入门acm培训资料.docx》由会员分享,可在线阅读,更多相关《c++语言入门acm培训资料.docx(30页珍藏版)》请在冰豆网上搜索。
c++语言入门acm培训资料
第三节
本堂课目标
a+b输入输出练习,比较复杂的题目练习,强化知识点,常见bug,纯c。
第一部分,知识点提要
1.C语言程序设计基础
任务:
熟悉程序设计语言、熟悉CodeBlocks、了解编码规范,学习解决问题的基本方法(查文档、书,XX,问人)。
具体内容包括:
基本输入输出(scanf,printf,格式控制符),顺序结构程序设计,数据类型,运算符及其优先级。
分支结构程序设计(if,case),循环语句(for,while,continue,break)。
数组,二维数组,字符串数组,RE错误,memset。
宏定义,指针简介,函数初步,结构体。
CodeBlocks工具实际编程和程序调试(观察变量、断点、中间结果输出)。
知识点大纲:
HDU8个a+b练习
HDU:
1089-1096
Hrbust:
1885-1892
模拟方式解决问题范式:
用函数模拟整数输入输出
思维题目
hrbust1164
程序设计中函数设计范式:
函数只干份内的事
常见bug
Re错误等
细化知识点
二维数组
输入输出格式
语法练习题目
第二部分,练习
重点讲解,
此代码摘自网络,
可能有同学看过类似的输入输出方式,这里简单讲几句,做为扫盲,暂时不需要学具体使用方法,不过要看得懂别人写的。
#include
usingnamespacestd;
intmain(){
intn,m,x,sum;
while(cin>>n){
while(n--){
cin>>m;
sum=0;
while(m--){
cin>>x;
sum+=x;
}
cout< if(n! =0)//注意n=0的时候 cout<<"\n"; } } return0; } 模拟的方式输入输出整数 #include boolEND=false; intscan_int(){ charc; while(c=getchar(),(c<'0'||c>'9')&&(c! ='-')){ if(c==EOF){ END=true; return0; } } boolflag=(c=='-'); if(flag)c=getchar(); intx=0; while(c>='0'&&c<='9'){ x=x*10+c-48; c=getchar(); } returnflag? -x: x; } chario[200]; inlinevoidprint_int(intn){ if(n<0){ putchar('-'); n=-n; } intk=0; do{ io[k++]=n%10+'0'; n/=10; }while(n); while(putchar(io[--k]),k); } intmain(){ intn; while(n=scan_int(),! END){ print_int(n+n); putchar('\n'); } } 1164ac代码 #include #include inta[1000006]; intmain() { intn; while(~scanf("%d",&n)) { n--; memset(a,0,sizeof(a)); intans=0; for(inti=0;i<=n;i++) { intb; scanf("%d",&b); if(! a[b]) { ans++; a[b]=1; } } printf("%d\n",ans); for(inti=0;i<=1000000;i++) { if(a[i]) { ans--; if(ans==0) { printf("%d\n",i); break; } else { printf("%d",i); } } } } return0; } 解决问题过程中,函数设计范式: #include intjisuan(inttime,intmiles){ if(miles>3){ if(5<=time&&time<23){ return14+(miles-3)*2.3; }elseif(23<=time&&time<=24||0<=time&&time<5){ return14+(miles-3)*2.3*1.2; } }elseif(0 return14; } return0; } inttest(inttime,intmiles){ if(miles>0&&0<=time&&time<24){ intnow=jisuan(time,miles); printf("%d------%d\n",time,now); returnnow; }else{ printf("wrong! ! \n"); return0; } } intmain(){ inttime1,time2,miles1,miles2; intsum=0; scanf("%d%d",&time1,&miles1); sum+=test(time1,miles1); scanf("%d%d",&time2,&miles2); sum+=test(time2,miles2); printf("sum=%d\n",sum); } 第三部分,正确的代码 // //#include // //intmain(){ // // //printf("helloworld\n");//输出字符串,注意\n表示换行 //printf("helloworld\n"); //return0; //} //基本数据类型 //#include //intmain(){ //inta=5; //doubled=2.3; //charc='g';//注意别忘记'' //longlongintll=222; // //printf("%d%lf%c%lld\n",a,d,c,ll);//占位符和变量名要一一对应 // // // //return0; //} //--------------------------- // //float: 精确到小数点后5-6位 // //double: 精确到小数点后15-16位 //#include //intmain(){ //inta; //doubled; //floatf; // //scanf("%d%lf%f",&a,&d,&f); //printf("--------------\n"); //注意下面两个输出虽然一样,但是建议第二种,double类型并未定义输出用lf输出, //只是有点编译器兼容,但是输入必须区分 //printf("%d%lf%f\n",a,d,f); //printf("%d%f%f\n",a,d,f);// // // // //return0; //} // //#include //intmain(){ //inta; //doubled; //floatf; //scanf("%d%lf%f",&a,&d,&f); //printf("%d%.0f%.3f\n",a,d,f);//怎么控制浮点型后面的小数点位数 // // // //return0; //} //#include //intmain(){ // //inta=4; //intb=2; //doubleaa=3.0; //doublebb=1.0; //整数/整数=整数浮点数/浮点数=浮点数 //printf("%d%lf\n",a/b,aa/bb); // // //return0; //} //#include //intmain(){ // //inta=4; //intb=2; //doubleaa=3.0; //doublebb=1.0; //整数/浮点数=浮点数浮点数/整数=浮点数 //printf("%f%f\n",a/aa,b/bb); // // //return0; //} //计算圆柱表面积 //#include //intmain(){//主函数 //constdoublepi=3.14; //doubles1,s2,s; //doubler,h; //scanf("%lf%lf",&r,&h); //s1=pi*r*r; //s2=2*pi*r*h; //s=2*s1+s2; //printf("%.3f\n",s); // // //return0; //} //float5-6 //double15-16 //codeblock//需要下载的软件 // //#include //intmain(){ // //intaa=25; //printf("%d\n",aa); //printf("%05d",aa);//如何在整数前加前导0,520--》025 // //} // //if分支判断语句 //inta=2; //inta,b; //scanf("%d%d",&a,&b); //if(a>b) //printf("%d",a); // // //elseif(a //printf("%d",b); // //elseif(a==b){ //printf("%d%d",a,b); //printf("%d%d",a,b); //} //else{ //printf(""); // //} // // // //return0; //} //&&||! 三个用法 //#include //intmain(){ //inta,b,c; //scanf("%d",&a); ////&&如果两边条件都成立那么为真 ////if(a>0&&b>0) ////printf("nihao\n"); ////||如果两边条件有一个成立那么为真 ////if(a>0||b>0) ////printf("nihao\n"); // ////! 如果条件为真就,加上! 条件变为假 //if(! (a>0)) //printf("nihap\n"); //} //switch语句用法,(去掉break怎么输出) //#include //intmain(){ //charc; //c='/'; //switch(c){ //case'+': //printf("%d\n",2+2); //break; //case'-': //printf("%d\n",2-2); //break; //case'*': //printf("%d\n",2*2); //break; //case'/': //printf("%d\n",2/2); //break; //default: //printf("nihao\n"); //break; // //} // //} //#include //intmain(){ //自增自减运算符 //inta1=5,a2=5,a3=5,a4=5; //printf("%d\n",++a1); //printf("%d\n",--a2); //printf("%d\n",a3++); //printf("%d\n",a3); //printf("%d\n",a4--); //printf("%d\n",a4); // //} //define的基本用法和意义(修改方便) //#include //#definepi3.14 //intmain(){ // // // //printf("%f\n",pi); // // //} //typedef的用途 //#include //typedeflonglongintll; //intmain(){ //lla=233333; //printf("%lld\n",a); // //} //getchar和putchar //#include //intmain(){ // //charc; //c=getchar(); //putchar(c); // //} 转义 \n \t "\ \\ \" 数据范围, //#include //intmain(){ //unsignedinta=4296;//注意我课上演示的int以及longlong在取到最大值输出什么,最大值+1后又输出什么 //printf("%u",a); //} while循环 //#include //intmain(){ //intnum=10; //while(num>0){//控制循环的条件 //printf("%d\n",num); //num--;//num=num-1; // //} // // //return0; // //} do-while和while 两个代码得到同一个结果,注意他们区别和联系 // //#include //intmain(){ //intnum=1; //while(num<=10){ //printf("%d\n",num); //num++; // //} //} //#include //intmain(){ //intnum=10; // //do{ // //printf("%d",num); //num--; //}while(num>0); //return0; //} // // continue用法 // //15/6=2...3模的含义,其实就是余数 //15%6==3 //13579 输出1-100的偶数 //#include //#include //#include //#include //usingnamespacestd; //intmain(){ //for(inti=1;i<=100;i++) //{ //if(i%2)//奇数 //continue;判断为奇数便不执行下面 //printf("%d",i); //} //return0; //} // ! EOF和~控制多组输入 //#include // //intmain(){ //inta,b; // //while(scanf("%d%d",&a,&b)! =EOF){ // // //printf("%d\n",a+b); // //} //return0; //} // // //#include // //intmain(){ //inta,b; // //while(~scanf("%d%d",&a,&b)){ // // //printf("%d\n",a+b); // //} //return0; //} 求1! +2! +.....+n! //#include // //intmain(){ //intn; //intsum=0; //while(scanf("%d",&n)! =EOF){ //intsum=0; // //for(inti=1;i<=n;i++){//此层循环为1! +2! +n! // //intcnt=1; //for(intj=1;j<=i;j++){//此层循环求i! //cnt=cnt*j; ////i! ==cnt //} // //sum=sum+cnt; // //} //sum=sum%100000//怎么取一个数的后六位 // // // // //} // //return0; // //} 对等关系 //inta //a=a+5; //a+=5; // //a=a-5; //a-=5; // //a=a*5; //a*=5; // //a=a/5; //a/=5; // //a=a%5; //a%=5; 一维数组 //#include // //intmain(){ //inta[10]; //for(inti=0;i<=9;i++){ //a[i]=i+1; // //} //for(inti=0;i<10;i++){ //printf("%d\n",a[i]); // //} // // // //} 二维数组 //#include // //intmain() //{ //inta[10][10]; //intcnt=1; // //for(inti=0;i<=9;i++){ //for(intj=0;j<=9;j++){ //a[i][j]=cnt; //cnt++; //} //} //for(inti=0;i<=9;i++){ // //for(intj=0;j<=9;j++){ //printf("%3d",a[i][j]); //} //puts("");//换行的另一种表示方法 // //} // // //} 字符串输入输出方式 //#include // //intmain(){ //charstr[10]; //scanf("%s",str);//注意%s没有& // / //printf("%s",str); // // // //} // 单个字符赋值,最后不要忘记加上\0才能一起输出 //#include // //intmain(){ //charstr[10]; // ////scanf("%s",str); // // // //str[0]='n'; //str[1]='i'; //str[2]='h'; //str[3]='a'; //str[4]='o'; //str[5]='\0';//注意 // //printf("%s",str); // ////hahah'\0'//字符串 // // //} // 字符串\0 //#include // //intmain(){ //charstr[5]; // //hahah //表面看长度为5,str可以存储 //但是实际上需要长度为6的数组hahah'\0'//字符串 //} memset //#include //#include //intmain(){ // // //inta[10];//a这段空间的首地址 //for(inti=0;i<10;i++){ //a[i]=10; //} // // //memset(a,0,sizeof(a));//sizeof释义看我课件的代码, // // //for(inti=0;i<10;i++){ //printf("%d",a[i]); //} // //} // memset字符赋值以字节方式,char类型为1个字节,可以 //#include //#include //intmain(){ // // //chara[10];//a这段空间的首地址 // // //memset(a,'1',sizeof(a)); // // //for(inti=0;i<10;i++){ //printf("%c",a[i]); //} // //} memset整数(反例,此种为错误赋值方式)整数为4个字节,不可以 //#include //#include //intmain(){ // // //inta[10];//a这段空间的首地址 // ////char1字节int4字节0x01010101 //memset(a,1,sizeof(a)); // // //for(inti=0;i<10;i++){ //printf("%d",a[i]); //} // //} strlen //#include //#include //intmain(){ //charstr[30]; //while(scanf("%s",str)! =EOF){ //intlen=strlen(str);//string.h //printf("%d",len); // //} //}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 语言 入门 acm 培训资料