C语言实验手册_第1页
C语言实验手册_第2页
C语言实验手册_第3页
C语言实验手册_第4页
已阅读5页,还剩114页未读 继续免费阅读

下载本文档

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

文档简介

ZTE中兴软件技术中兴软件技术南昌培训中心C语言程序设计学习手册学号: 姓名: 班级: 老师: TOC\o"1-5"\h\z\o"CurrentDocument"第二讲:数据类型 8\o"CurrentDocument"第三讲:控制结构(一) 12\o"CurrentDocument"第四讲:控制结构(二) 17\o"CurrentDocument"第五讲:运算符和表达式 22\o"CurrentDocument"第七讲:数组 32\o"CurrentDocument"第ハ讲:字符串 38\o"CurrentDocument"第九讲:变量类别与编译预处理 43\o"CurrentDocument"第十讲:指针(一) 51\o"CurrentDocument"第Hー讲:指针(二) 55\o"CurrentDocument"第十二讲:指针(三) 60\o"CurrentDocument"第十三讲:指针(四) 66\o"CurrentDocument"第十四讲:结构体、共用体和枚举类型 71\o"CurrentDocument"第十五讲:数据结构及算法(链表) 76\o"CurrentDocument"第十六讲:数据结构及算法(对列、堆栈) 81\o"CurrentDocument"第十七讲:Windows程序设计初步 85\o"CurrentDocument"第十八讲:基于WindowsGDI的图形程序设计 90\o"CurrentDocument"第二十讲:Windows菜单和对话框 97\o"CurrentDocument"第二十一讲:Windows通用控件 101\o"CurrentDocument"第十七讲:文件处理 105引言本课程的教学目的在于使学生通过学习C程序设计的基本语言知识(数据类型、控制结构、语法规则等)和基本编程技术(程序分析、算法与编程、常用程序模块等),对面向过程的高级语言程序设计技术有比较完整的理解,并形成程序设计的初步能力,能自己分析问题,按模块化程序设计的要求,编写结构完整、具有一定难度的控制和出错处理功能、由多个功能模块组合形成的小型程序。第一讲:概述ー、学习目标:了解C语言的简史、特点理解C语言程序的基本结构熟练应用printfO、scanf()函数的使用规则、转义符二、学习重点:C语言程序的基本结构printf、scanf函数的使用三、学习难点:printf、scanf函数的使用四、课堂笔记:五、上机试验:.写出最简单的C语言程序——Hello,World!第一步、打开VC++6.0的集成环境中,点击菜单栏中文件菜单再选择新建一项,弹出如下对话框第二步:点击对话框文件选项,并选中“C++SourceFile”ー项,如图:第三步:在右边文件框内键如本程序的文件名称“Hello.c”,并可在下边目录文本框内,点击旁边带有省略号的按扭来选择文件存放的位置,最后点击确定按扭。弹出如下界面:ュ創天中文VC++[He»o.c]我开eq® enca!音实整手sjv30…I 语音曇村.创天中:stvc++n…4喫。个5!るス33文行第四步:在右边的编辑器中键入以下代码:#include<stdio.h>voidmain()(printf(*'Helloworld!");)第五步:点击菜单栏中编译菜单中编译Hello.cー项,对该文件进行编译。第六步:点击菜单栏中编译菜单中构件Hello.exeー项或在键盘上按F7,对该文件进行连接。第七步:点击菜单栏屮编译菜单中执行Hello.exe一项或在键盘上同时按住Ctrl+F5,执行该文件,并观察结果。a.将main改为Main(注意大小写),再看看程序是否还能运行?b.去掉printf函数后面的分号,程序还可以运行吗?c,将#includevstdio.h>这句话去掉看是否能运行?.把上述程序改成以下代码#include<stdio.h>voidmain()printfC'hello,M);printf("woiicT);}观察以上代码的运行结果是否会显示在同一行?.转义字符的使用下列语句的运行结果:primf("I'mastudent\t!you\are\teacher.\n^^);printf(4t\thisisa\book\n^^);primf("a\baskel\ba小b\b");primf("\x64\078\087”);printf(u\872n);printfCヤ872”);printf(4tSomeNum:%%d%c,\081;B');.已知三角形边长求面积#include<stdio.h>#include<math.h> 头文件math.h中含函数sqrt()的定义・/voidmain(){doublea,b,c,s,area;a=3;b=4;c=5;s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c)); /・函数sqrt()用于求一个数的平方・/printf(n%4.If,%4.1f,%4.If,areais%4.2f\n,',a,b,c,area);.键入以下代码#include<stdio.h>voidmain()printfCThisprintsacharacter,%c\nanumber,%d\nafloating\point,123,456.789);观察输出结果。(提示:printf()函数占了两行,在第一行末尾使用了一个反斜杠(ヽ)指出字符串将延续到下一行,因此编译器将把这两行代码视为一行)六、作业:.printf和scanf函数的详细使用方式答案:.写出C语言程序的开发过程答案:.写出语句scanf(44yy-mm-dd=%d-%d-%d”,&year,&month,&date);从键盘上的输入形式。答案:.指出下列程序的错误并改正。®#include<stdio.h>voidmain();doubledbPi,dbRjdbArea;dbPi=3.14159;dbR=10;dbArea=dbR*dbR*dbPi;dbL=2*dbR*dbPi;printfCk\nate=%d,cir=%f\n,dbArea,dbL);(2)#include<stdio.h>voidmain()(intnA;printf(\npleaseintputaintegrate:);$canf("%d”,nA);if(nA>0)printf(44nA>0\nM);elseprinlf("nAv=O\n”)5.用C语言编写ー个程序,实现如下菜单样式:MenuInputthestudents'namesandscoresSearchscoresofsomestudentsModifyscoresofsomestudentsListallstudents'scoresQuitthesystemPleaseinputyourchoise(1-5):选做题:.编写ー个程序,从键盘上输入华氏温度,屏幕显示对应的摄氏温度。华氏温度和摄氏温度转换公式为:c=(f-32)/1.8

.编程实现求三个数中的最大数。七、经验积累序号问题描述经验级别1ロロロ2ロロ口3ロロ口4ロロ口5ロロ口6ロロ口7ロロ口8ロロ口9ロロ口10ロロ口第二讲:数据类型ー、学习目标:理解数值数据的表示理解文字数据的表示理解C语言中数据类型的分类熟练应用变量的定义和赋值熟练应用表达式中数据类型的转换二、学习重点:C语言中数据类型的分类变量的定义和赋值表达式中数据类型的转换三、学习难点:表达式中数据类型的转换单个字符与字符串存储区别四、课堂笔记:五、上机试验:.仔细思考如下程序,试验以下三个问题:a.将shortint改为long,看看输出结果;b.将signedchar改为unsignedchar,看看输出结果:#include<stdio.h>voidmain()(shortintsX;signedcharcCh;sX=32767;cCh=127;printf(**X=%d,Ch=%d,,,sX,cCh);sX=sX+1; cCh=cCh+l;printfCtX=%d,cCh=%d,\sX,cCh);).变量的初始化方式intnA=096;charnB=,\028,;intnC=987654321;intnD=987654321LdoubledbE=123.456;intnX=nY,nY=6;在我们编写程序时,如果按以上方式编写,会出现什么问题?.从键盘输入ー个整数,以十进制、ハ进制、十六进制的形式输出:#include<stdio.h>voidmain()(intnA,nB,nC,nM,nN;nA=ll;nB=011;nC=0x11;nM=65;nN=97;printf("十进制11等于%d,ハ进制11等于%d,十六进制11等于%d,\n”,nA,nB,nC);printf("十进制ハ进制十六进制字符、n");printf(M65 %〇 %x %c,\n”,nM,nM,nM);printff97 %o %x %c,\n",nN,nN,nN);)4.强制类型转换:运行如下程序段的观察输出结果:charcM=100,cCh=,a,;intnA=5,nB=3;doubledbC=2.5,dbD;dbD=nB/2+(int)(nA/2.0+cM/,\062,+cCh*2)/2.0cCh=cCh+b/1.5;printf(*<dbD=%d,cCh=%c\n,\dbD,cCh);5.输入下列程序,用于输入ー个学生的姓名、学号、英语、数学、计算机成绩,输出学生姓名、学号和平均成绩。#include<stdio.h>voidmain()(charcName[31];/・数组cName[31]最多可以放30个字符或15个汉字・/intnEng,nMath,nComp,nNum;doubledbAver;printf(''Pleaseinputthestudent'sname:");scanf("%sn,cName);/・字符串用格式符“%s”,并且数组名cName前不需要取址符”&”*/printf("Pleaseinputthestudent'sID:");scanf("%d'\&cNum);printf("Pleaseinputscores(Englishmathcomputer):");scanf("%d%d%d",&nEng,&nMath,&nComp);dbAver=(nEng+nMath+nComp)/3.0;printf("thestudent'snamedis%s,hisIDis%d,hisaveragescoreis%.If\n",cName,cNum,dbAver);1六、作业:.请写出c语言中基本的数据类型已经它们在内存中所占的字节数。答案:.请问charcA=H与字符串"a”在内存中是否有区别?如有请写出它们的区别。答案:.请问在编程过程中什么时候用自动类型转换,什么时候用强制类型转换?答案:.编写输出字符。、9、A、Z、a、z的ASCH码的十进制、八进制和十六进制的表示形式的程序。.参考上机试验中例5编写一个程序,输入2个学生的姓名、学号、英语、数学、计算机成绩,输出这两个学生的姓名、学号和平均分。选做题:.编写ー个程序输出5!、I0!的结果七、经验积累序号问题描述经验级别1□ロロ2□□□3□□□4□ロロ5□□□6□□□7□□□8□□□9□□□10□□□第三讲:控制结构(一)ー、学习目标:了解程序设计的一般方法、结构化程序设计熟悉顺序结构、简单程序流程图的画法熟练应用if语句的使用规则以及相应的程序流程熟练应用switch语句的使用规则及相应的程序流程if语句的使用规则以及相应的程序流程switch语句的使用规则及相应的程序流程三、学习难点:if语句的嵌套的应用四、课堂笔记:五、上机试验:.求ax*x+bx+c=O方程的解。a、b、c由键盘输入,且b*b-4ac>0。#include<stdio.h>#include<math.h>voidmain()floatユb,c,p,xl,x2;scanf(ua=%f,b=%f,c=%f',&a,&b,&c);p=sqrt(b*b-4*a*c);xl=(-b+p)/(2*a);x2=(-b-p)/(2*a);printf(nxl=%6.2f,x2=%6.2f\n\xl,x2);).编写程序,输入ー个x,按照函数要求输出y值。#include<stdio.h>voidmain(){intx,y;scanf(',%dn,&x);if(x<0)y=-1;elseif(x==0)y=0;elsey=l;printf(ux=%d,y=%d\n",x,y);).仔细阅读如下程序段,编译运行:intnX=5,nY=3,nZ=2;if(nX>6)printf("******\n*);if(nY=3)printf('用#####\n");elseif(nZ<3)printf(“$$$$$$\n“);elseprintf(“%%%%%%\n");.阅读下列两个程序段,看看运行结果:a、intnX=0,nY=1;if(nX&&nY)printW"*********\n'');elseprintf("######\n");printf("nX=%d,nY=%d”,nX,nY);b、intnX=0,nY=1;if(nX++=0II++nY=2)printf("******\n");elseprintf("######\n^^);printfC'nX=%d,nY=%ザ,nX,nY);.先不编译,写出如下程序的运行结果:#include<stdio.h>voidmain()intnX=l,nY=2;switch(nX){case1:switch(nY){printf("aaaaaa\n");break;printf(ttbbbbbb\nM);break;)case2:switch(nY-l){printf(t4cccccc\n^^);break;printf("dddddd\n'');break;)default:printf(4tnX=%d\n,nY=%d",nX,nY);})一个字符,判断是数字、英文字符还是其它字符#include<stdio.h>voidmain()(charcCh;scanf("%c”,&cCh);/*在C中"并且"含义即"逻辑与“用"&&”表示,"或者"含义即"逻辑或"用"II"表示*/if(cCh>='0'&&cCh<='9,) /・等价与if(cCh>=48&&cCh<=57)*/printf("%cisadigit\n",cCh);elseif((cCh>='A'&&cCh<='Z')II(cCh>='a'&&cCh<='z,))/*等价与if((cCh>=65&&cCh<=90)ll(cCh>=97&&cCh<=122))*/printf(M%cisaletter\nu,cCh);elseprintf(M%canothercharacter.\n'\cCh);)六、作业:.请指出下列语句中else与谁匹配(nN、nA、nB、nZ都为整形)if(nN>0)if(nA>nB)nZ=nA;elsenZ=nB;答案:.考虑下面程序输出结果:voidmain()|intnX=100,nA=10,nB=20;intnTempl=5,nTemp2=0;if(nA<nB)if(nB!=15)if(inTemp1)nX=l;elseif(nTemp2)nX=10;printf("%d”,nX);)答案:.判断ax?+bx+c=0方程有几个解,如果有解则输出。系数a、b、c由键盘输入。.输入两数并判断其大小关系选做题:.编写ー个程序以统计各个数字、空白符及其他所有字符出现的次数。七、经验积累序号问题描述经验级别1ロロロ2ロロ口3ロロ口4ロロ口5□□□6□ロロ7□□□8□□□9□ロロ10□□□第四讲:控制结构(二)ー、学习目标:.理解while语句的使用规则和相应程序流程.理解do-while语句的使用规则和相应程序流程.理解for语句的使用规则和相应程序流程.熟练应用各种循环语句的组合使用.理解break、continue语句的使用特性以及应用范畴.了解goto语句的使用方法二、学习重点:各种循环语句的组合使用break、continue语句的使用特性三、学习难点:for语句的循环嵌套五、上机试验:.求1+2+ +100的结果。#include<stdio.h>voidmain()(intsum,counter;sum=0;counten=l;do(sum=sum+counter;counter=counter+l;}while(counter<=100);printfC*1+2+3+ +100=%d\nK,counter);).将下列程序段分别用C语言的for、while、d〇…whi加结构改写,使其能产生相同的运行结果:intnX=l;abc:printfC4######nX=%d\n,\nX);nX++;if(nX<5)gotoabc;.写出下列程序的输出结果:#include<stdio.h>voidmain(){intnX,nY;for(nY=0,nX=l;nX<4;nX++)(if(nY=2){nX-=nY;continue;}switch(nX){printf(*4x=%d'\nX);continue;printf("x+y=%d”,nX+nY);break;printf(4*x*y=%d,\nX*nY);continue;printf("x・y=%d”,nX-nY);break;)printf("y=%d”,++nY);))程序段的输出结果:intnX=l,nY=0;do{while(nX==0){printf("y=%d\n”,nY);nY++;if(nY>3)break;)printf("x=%d\n”,nX);if(nY==4)continue;nX--;}while(!nX);、空白符及其他字符出现的次数#include<stdio.h>voidmain()(intnCh,nl,nWhite,nNother;intnDigit[10];〃变量nDigit声明为有10个整形数构成的数组nWhite=nNother=0;for(nl=0;nl<10;4-+nl)

nDigit[nI]=O;while((nCh=getchar())!=EOF)if(nCh>=,0,&&nCh<=,9,)++nDigit[nCh「〇'];elseif(nCh=="llnCh=An'llnCh==,\t')++nWhite;else++nNother;printf("Digits=");for(nl=0;nl<10;++nl)printf('\whitespace=%d,other=%d\n,\nWhite,nNother);6.输出下列图形:6.输出下列图形:#include<stdio.li>voidmain()#include<stdio.li>voidmain()(intm,n;for(n=l;n<=9;n=n+l){for(m=l;m<=n;m=m+1)printf(“%-4d”,m);printf(“ヽprintf(“ヽn");/*一行结束需要换行・/7.输出3~100的所有素数。#include<stdio.h>voidmain()(intnNum,nI;for(nNum=3;nNum<=100;nNum=nNum+l){for(nI=2;nI<=nNum-1;nl=nl+1)if(nNum%nI==0)break;if(nI>=nNum)printf(M%d\t",nNum);六、作业:.请写出break语句和continue语句的区别。答案:.计算Fibonacci数列的前30项,并输出。.求水仙花数。如果一个三位数的百位数、十位数和个位数的立方和等于这个数则该数为水仙花数。.从键盘输入ー个数,求出这个数的阶乘(10的阶乘即为10*9*8モ..*2*1).设计程序,在屏幕上输出如下图形:****.求输入的十个整数中正数的个数及其平均值.设计程序,计算公式的值:1/1+2/(1+2)+3/(1+2+3)+...+10/(1+2+3+...+10)七、经验积累序号问题描述经验级别1□ロロ2□□□3□□□4□□□5□□□6□□□7□□□8□ロロ9□□□10□□□第五讲:运算符和表达式学习目标:熟练应用各种算术运算符的优先级和结合性熟练应用各关系运算符的优先级和关系表达式值的判定熟练应用各逻辑运算符的优先级和逻辑表达式值的判定熟练应用赋值运算符的结合性和优先级熟练应用自增/减运算符的作用、自增/减运算的前置方式和后置方式的区别理解逗号表达式的作用及其值的计算了解C语言的常用运算符的优先级学习重点:算术运算符的优先级和结合性关系运算符的优先级和关系表达式值的判定逻辑运算符的优先级和逻辑表达式值的判定•学习难点:・自增/减运算符的作用、自增/减运算的前置方式和后置方式的区别四、课堂笔记:五、上机试验:.生成一个简单的密电码。输入一段英文,然后按照下列规律转换:英文字母变为其后的第5个字母,例如A变为F,B变为G,直到U变为Z后,V再变为A,以此类推直到Z变为E。非英文字母的字符不变。直到输入换行结束。此种方法可以生成最简单的密电码。ttinclude<stdio.h>voidmain(){charcCh;doscanf(*%c*,&cCh);if((cCh>=,a'&&cChく='z')I|(cCh>='A'&&cCh<='Z?))(cCh=cCh+5;if(cCh>,Z*&&cCh<='Z'+51IcCh>'z')cCh-=26;)printf("%c”,cCh);}while(cCh!=,\n);).输入两个正整数m和n,求它们的最大公约数算法:1)求m除n的余数!';2)若!'等于0,n为最大公约数;3)否则令m=n,n=r,回到第1步。#include<stdio.h>voidmain(){intnM,nN,nR;printf("PleaseinputTwonumbers:");scanf("%d%d",&nM,&nN);while(1){nR=nM%nN;if(nR==0)break;else(nM二nN;nN二nR;}printf("%disthegreastestcommondivisor\n",n);.上机运行观察下列程序段的运行结果:int=2,nY=3,nA=4,nB=5;if(++nX==nY-)(if(nX!=0IInY+=5)printf(44x=%d,y=%d\n”,nX,nY);elseprintf(t4a=%d,b=%d\n”,nA,nB);}else{if(nA-=4&&++nB)printf(44x=%d,y=%d\n”,nX,nY);elseif(nA++IInB-)printf(44a=%d,b=%d\n”,nA,nB);}printf("x=%d,y=%d,a=%d,b=%d\n",nX,nY,nA,nB);.自增运算符和自减运算符的演示示例。#include<stdio.h>voidmain()(intnA1,nA2,nA3,nA4,nB1,nB2,nB3,nB4;nAl=nA2=nA3=nA4=10;nBl=(nAl++)+(nAl++)+(nAl++);nB2=(++nA2)+(++nA2)+(++nA2);nB3=(nA3-)+(nA3-)+(nA3-);nB4=(-nA4)+(—nA4)+(—nA4);printf(na1=%d,a2=%d,b1=%d,b2=%d\n",nAl,nA2,nBl,nB2);printf("a3=%d,a4=%d,b3=%d,b4=%d\n",nA3,nA4,nB3,nB4);).统计1〜50之间不能被3整除的数的个数并输出这些数。#include<stdio.h>voidmain()(intn,s;for(n=1,s=0;n<=20;n=n+1){if(n%3==0)continue;printf("%d\t",n);s=s+l;)printf("\ntotal:%d\n",s);6.计算1-1/3+1/54/7+…直到最后ー项的绝对值小于le-6o#include<stdio.h>voidmain()(intn=l;floatx=l,t=l,s=0; /*x控制通项正负号,t为通项值・/while(t>=le-6){t=1.0/(2*n-l);s=s+x*t;x=(-l)*x;n=n+l;)printf(Hl-l/3+l/5-l/7+...=%f\nn,s);)六、作业:.计算出下面表达式的值:intnX=2,nY=4,nZ=5,nA=6,nB=7;(nX==3&&nY>4II!nZ==0)+(nA+nB)=(nY-nX>=nB-2)答案:.计算以下代码的循环的执行次数:intnX=-l;do{nX-}while(!++nX==0)答案:.如下表达式可以在C语言中运行吗?如果能,写出运算结果,不过不能,说说原因:intnX=1,nY=2,nZ=3;nX+=nX-=nX*=nX+=3;nY-=nY+=nY/=nY*=nY-2;nZ+=nZ-=nZ*2=nZ-1;答案:.写出如下程序段的运行结果:intnX=1,nY=2,nZ=3;nX+nY+nZ<=5?printf("Hello,Computer!\n"):nZ>=nX+nY?printf("Hello,Programmer!\n"):printfC4Hello,CLanguageprintf(nX==1?"%d####'n”:“%d$$$$\n”,(nZ-2,nY<3));printf(4*nX=%d,nY=%d,nZ=%d\n'\(nX<3),(nZ<6,nY=nX+nY,nY>3),(nZ*=4,--nZ,nZ=2),nX+nY+nZ);答案:5.从键盘输入一串二进制数(比如“。110101100100101”):将它转换成十进制输出;答案:.输入一个全部是字母的字符串,将其中的大写字母全部转化为小写字母,小写字母全部转化为大写字母;.从键盘输入ー个人的生日,再输入当前时间,计算这个人迄今为止活的天数;.在屏幕打印输出2000年一年当中所有天数为质数的日期(如2月6日是第37天,应该被输出);七、经验积累序号问题描述经验级别1□ロロ2ロロ口3ロロ口4ロロ口5ロロ口6ロロ口7ロロ口8ロロ口9ロロ口10ロロロ第六讲:函数ー、学习目标:了解函数的分类和执行过程理解函数定义的一般形式、函数的声明熟练应用函数调用的一般形式理解函数形参和实参的关系、函数的返回值理解函数的嵌套调用和递归调用二、学习重点:函数定义的一般形式、函数的声明函数调用的一般形式函数形参和实参的关系、函数的返回值三、学习难点:函数的嵌套调用和递归调用四、课堂笔记:1.求两个数的阶乘之和。#includevstdio.h〉/・文件包含编译预处理命令・/longsum(intnNuml,intnNum2);/・函数类型说明・/longfactorial(intnN);voidmain(){intnNl,nN2;longISum;scanf(,,%d,%d,,,&nNl,&nN2);lSum=sum(nNl,nN2);/・函数调用*/printf("sum=%1d",lSum);)longsum(intnNuml,intnNum2)/・函数定义・/(longITemplJTemp2;ITempl=factorial(nNuml);/*函数调用*/!Temp2=factorial(nNum2);return(lTempl+lTemp2);/・函数返回值・/}/・求阶乘・/longfactorial(intnN){longlRtn=l;intnl;for(nl=1;nl<=n;nl++)1Rtn*=nI;retum(lRln);).如下函数能完成主调函数传过来的三个数从大到小排序目的吗?为什么?voidfun(intnNuml,intnNum2,intnNum3){intnTemp;if(nNuml<nNum2)nTemp=nNuml,nNuml=nNum2,nNum2=tnTemp;if(nNum2<nNum3)nTemp=nNum2,nNum2=nNum3,nNum3=nTemp;if(nNuml<nNum3)nTemp=nNuml,nNuml=nNum3,nNum3=nTemp;)voidmain()(intnNuml,nNum2,nNum3;scanf("%d,%d,%d”,&nNuml,&nNum2,&nNum3);fun(nNuml,nNum2,nNum3);printf(**%d,%d,%d,\nNuml,nNum2,nNum3);).连续三次调用如下函数,输出结果如何?#include<stdio.h>voidfun(){staticintnS=6;intnX=3,nY=4;nS+=++nX;if(nS<10)nY+=6;elsenY-=6;nS+=nY/3;printf("x=%d,y=%d,s=%d\n”,nX,nY,nS);}.已知递归公式,输入x值,输出qn(x)的前10项值。TOC\o"1-5"\h\zr1 (n=0)qn(x)=Xx (n=l)I2*x*qn-i(x)-qn.2(x) (n>l)#include<stdio.h>doubleq(doubledbX,intnNum)(if(nNum==0)return1.0;elseif(nNum=l)returndbX;elsereturn(2*dbX*q(dbX,nNum-l)-q(dbX,nNum-2));voidmain()doubledbX;intnl;scanf(H%f;&dbX);for(nl=0;nl<10;nI++)printf(n%fM,q(dbX,nI));printf(M\n");)六、作业:1、谈谈函数声明和定义的区别:2、函数的声明都写在main函数后面行吗?写在main函数内部呢?3、函数调用进行参数传递时,如何区分传值与传地址?.写出如下程序输出结果:#inciude<stdio.h>intfun(intnX,intnY)(if(nX>nY)returnnX;returnnY;}voidmain(){intnX=2,nY=3;printf("result=%d\n”,fun(nX++,nY+=2));printf(itresult=%d\n,,,fun(nY+nX,nX=l));).编写ー个能打印1000以内所有水仙花数的函数(比如水仙花数153具有的性质为:1*1*1+5*5*5+3*3*3=153).编写ー个函数,向该函数传入ー个整数n,则该函数打印1+2+3+…+n的值.如下是斐波纳契数列的前几项:1,1,2,3,5,8,13….,编写函数,要求向该函数传入ー个整数n,函数返回数列第n项.编写函数,打印如下形式的杨辉三角:1111 2 13164110.使用递归算法编写计算1+2+3+….m的函数。七、经验积累序号问题描述经验级别1□ロロ2□□□3□ロロ4□ロロ5□□□6□□□7□□□8□□□9□□□10□□□第七讲:数组ー、学习目标:熟悉ー维数组的定义和初始化理解ー维数组的存储方式熟悉一维数组的引用熟悉二维数组的定义和初始化理解二维数组的存储方式熟悉二维数组的引用熟练应用数组作为函数参数时的传参方式:数组元素作参数;数组名作参数二、学习重点:ー维数组的定义和初始化二维数组的定义和初始化二维数组的存储方式函数参数时的传参方式:数组名作参数三、学习难点:二维数组的存储方式函数参数时的传参方式:数组名作参数四、课堂笔记:.将数字0ー4放入一个整型数组,并逆序输出数组。#include<stdio.h>voidmain(){inti,a[5];/・给数组中元素赋值・/for(i=0;i<5;i++)a[i]=i;/・逆序输出数组中元素值・/for(i=4;i>=0;i—)printf("%3dM,a[i]);printf(u\nH);).输入10个整数,输出最大数。#include<stdio.h>voidmain()(inti,array|10],big;/*给数组中所有元素赋值・/for(i=0;i<10;i++)scanf(H%d",&array[i]);/・找出数组中最大的元素・/big=array[O];for(i=0;i<10;i++)if(array[i]>big)big=array[i];printf(MThebiggestis%3d\n”,big);).求Fibonacci数列的前20项。#include<stdio.h>voidmain()(inti,f[20]={l,1};/・给出Fibonacci数列的前2项・//・根据公式由Fibonacci数列前2项求出其余18项・/for(i=2;i<20;i++)f[i]=f[i-l]+f[i-2];/・输出Fibonacci数列的前20项・/for(i=0;i<20;i-H-){if(i%5=0)printf("\n");/*控制一行输出5个元素・/printf("%10d",f[i]);}}.已知一个ー维数组a[ll]中有10个数,求出其中前n个数的和。其中n由键盘输入。ttinclude<stdio.h>intsum(intnArray[],intn)Iinti,sumニ〇;for(i二〇;iくn;i++)sum+=nArray[i];returnsum;}voidmain(){intnNum,a[10]={l,2,3,4,5,6,7,8,9,10};scanf("%d”,&nNum);printf[%d\n”,sum(a,nNum));).二维数组中最大元素值及其行列号#include<stdio.h>voidmain(){inta[3][4]={{1,2,3,4},(9,8,7,6),{-10,10,-5,2}};inti,j,row=0,colum二〇,max;max二a[〇][〇];for(i=0;i<=2;i++)for(j=0;j<=3;j++)if(a[i][j]>max)max=a[i][j];row=i;colum=j;}printf("max=%d,row二%d,\colum=%d\n",max,row,colum);六、上机作业:.如下代码有错吗?如果有错,错在哪里?如果正确,写出数组中所有元素的值:inta[5]={1,23,4,5,6);intb[2+3]={1,2,3};intc[5]={,,3,4);intd[3,3]={{l,2,3},{4,5,6),(7,8,9});inte[2][3]={{l},{2},{3}};intf[3][2]={1,2,3};intg[2][3]={{,,2},{l,0,0});答案:.用如下程序段对数组进行赋值,行吗?为什么?inta[5],b[5],c[5]i;for(i=l;i<=5;i++) a[i]=0;b=a;c={l,2,3,4,5};答案:.使如下程序能实现数组Array中所有元素前后互换:#include<stdio.h>voidmain(){intArray[10]={1,234,5,6,7,8,9,0};intn,t;for(n=0;n< ;n++){答案:.判断如下程序段是否合法,如果合法,则写出程序段运行后,数组a中元素的值:inta[5][5]={0},n;for(n=0;n<25;n++)a|0][n]=n*2;答案:.在・个程序总需要•个函数voidfun(inttarget[],intsource[],intnCount)来实现将数组source中的元素拷贝到数组target中,拷贝结果是使数组target中元素的顺序与source中相反:答案:.编写程序,定义数组inta[10],从键盘输入10个整数,分别使用冒泡法和选择法对数组排序,使数组中的元素从大到小排列。.已知一个二维数组inta[5][3],里面的元素已经被初始化为大小不等的值。编写代码,対此二维数组行排序,排序结果是数组的第。行平均值最小,第4行平均值最大。.存在一个二维数组inta[5][5],编写代码对数组a实现行和列的互换,即使行列号为ij的元素和行列号为j,i的元素互换。选做题:.编写程序,实现矩阵乘法:提示:定义三个矩阵:inta[x][y],b[y][x],c[x][x];,其中,x和y都是常量。c=a*b,乘法计算时有公式:c[i][j]=a[i][O]*b[O]|j]+a[i][l]*b[l]|j]+...+a[i][y-l]*b[y-l][j]o.从键盘输入20个随机数到数组inta[20]中,不对数组排序,也不使用其它数组,编写代码使程序能输出数组中的最大元素、最小元素以及第二大元素、第二小元素。第八讲:字符串ー、内容及目标:.掌握单个字符的输入输出函数:getchar()和purcharQ.理解C语言字符数组和字符串的区别和联系.掌握字符串的输入和输出函数:puts。和gets().熟练应用字符串操作函数:strlen()^strcpy。、strcat()>strcmp()>strlwr()^Ustrupr().理解二维字符串数组的初始化、输入输出二、学习重点:C语言字符数组和字符串的区别和联系字符串操作函数:strlen()>strcpyO^strcat()>strcmp()>strlwrQ和strupK)二维字符串数组的初始化、输入输出三、学习难点:二维字符串数组的初始化'输入输出四、课堂笔记:例1按照如下形式输出40行,要求每10行暂停,按回车键后继续。*******#include<stdio.h>voidmain()Iintrow,col;for(row=1;row<=40;row++){for(col=l;col<=i;col++)printf('*");printf('\n");if(row%10-0&&row!=40)Iprintf("请按回车键继续つ;getchar();})}例2函数putcharO的使用〇#include<stdio.h>voidmain()charc=charc=,A';intn='B';putchar(c);putchar(n);putchar('C');putchar('\x44');putchar('\n);/・输出字符型变量・//・输出整型变量・//・输出字符型常量・//・输出字符D*//・输出回车・/printf(/r%c%cC\x44\n*,c,n);}.从键盘输入三个学生姓名,并输出。#include<stdio.h>#include<string.h>voidmain(){charname[3][30];inti;for(i二〇;iく3;i++)gets(name[i]); /*name[i]是ー个ー维字符数组・/for(i=0;i<3;i++)printf("%s\n”,name[i]);}.输入英文月份单词,输出该单词代表的对应月的数字表现形式。#include<stdio.h>#include<string.h>/・查找字符串name是否在含有m个字符串的数组list中,如果存在返回值是它在数组中的下标,否则返回值为m*/intsearch(char1ist[][20],charname[],intm)inti;for(i=0;i<m;i++)if(strcmpdist[i],name)==O)break;returni;}voidmain(){charmonth_list[12][20]={"January","February",z,March","April”,“May","June","July","August",""September","October","November","December");charmonth[20];intn;gets(month);n=search(month_list,month,12);if(n<12)printf("%s表示%d月\n",month,n+1);elseprintf("查无此单词、n");).编写ー个函数string_compare()完成strcmp()的作用,并验证。#include<stdio.h>^include<string.h>intstringcompare(charstringl[],charstring2[]){inti=0;while(stringl[i]==string2[i]&&stringl[i]!二‘、〇')i++;returnstringl[i]-string2[i];}voidmain()Icharstrl[]="abc",str2[]="abc";printf("%d,%d\n",strcmp(strl,str2),string_compare(strl,str2));.如下定义方式合乎C语言语法吗?chara[5]={4a\,b,,,c\,d,;e,};charb[5]={t4abcdeM};charc[5]={"abcd'〇”};chard[]="abcde";chare[]="\Oabcde";总结:.写出如下程序段的输出结果:chara[]="abc\n\Odef\O";charb[5O]="abc\b\b\b";charc[20]="abc\0",d[10]="der;printf(44%d\n",strlen(a));printf(44%d\n",strlen(b));printf(strcat(c,d));总结:.如下语句能实现预期功能吗?charah[2O],bh[2O]=''abcd'',ch[2O]=''efgh'',dh="abcdefgh'';ahゴabcdefg”; 〃在ah中填充字符串printf(“%s”,++bh); 〃在屏幕打印“bed”printf("%s”,bh+ch);〃在屏幕打印abcdefghdh=dh-ch; 〃去掉dh后面一截总结:.函数对比:printf("%s") <=========>puts()scanf(44%sM) <=============>gets()这两组函数在字符串的输出输入各有什么优缺点?总结:.如下语句可能存在错误,如果有,指出并改正,如果没有,写出运行结果:charch[3][5]={{,a,;b,;c,;d,;e,},,'abcde'\',bcdeM};printf(44%s\n",ch[0]);printf(u%s\n,,,ch[l]);printf(**%s\n,,,ch[2]);总结:.编写程序,实现C语言库函数intstrlen(char口)、intstrcmp(char[],char[]):.编写程序,实现功能:将字符串b中指定个数的字符拷贝到字符串a的后面:.有字符串charch[k"abdfabcdface”;编写程序,从字符串ch中删除字符‘a,:.有两个字符串chara[30],b[10];分别存放有若干字符,编写ー个函数,验证字符串a中是否包含字符串b,.同上题,从字符串a中删除包含的字符串b(a中可能不止包含一次b)第九讲:变量类别与编译预处理ー、内容及目标:.掌握全局变量、局部变量的定义、特点.理解全局变量的应用.掌握C语言变量的各种存储类型:存储形式和使用注意事项.熟练应用不带参数和带参数宏定义.掌握文件包含的作用和使用方法二、学习重点全局变量、局部变量的定义、特点.C语言变量的各种存储类型宏定义的含义和作用.全局变量、局部变量的应用。宏定义的含义和作用.四、课堂笔记:五、上机试验:.使用静态变量输出1到20的阶乘。ttinclude<stdio.h>longf(n){staticlongs=l;s=s*n;returns;}voidmain(){inti;for(i=l;i<=10;i++)printf("%ld\t”,f(i));2使用auto定义变量的用法#include"stdio.h"voidmain()(inti,num;num=2;for(i二〇;iく3;i++)(printf(“ヽ40:Thenumequal%d\n”,num);num++;(autointnum=l;printf(“ヽ40:Theinternalblocknumequal%d\n,num);num++;)})external的使用用法。ttinclude"stdio.h"inta,b,c;voidadd()(inta;a=3;c=a+b;}voidmain()(a=b=4;add();printf("Thevalueofcisequalto%d\n”,c);)不带参数的宏#define命令#defineLAG>#defineSMA<#defineEQ==#include"stdio.h"voidmain()(inti=10;intj=20:if(iLAGj)printf(zz\40:%dlargerthan%di,j);elseif(iEQj)printf(^\40:%dequalto%d\n*,i,j);else(if(iSMAj)printf(*\40:%dsmallerthan%d\n”,i,j);elseprintf(*\40:Nosuchvalue.\n");)}}带参数宏#define命令#include"stdio.h"#defineTRUE1^defineFALSE0#defineSQ(x)(x)*(x)voidmain(){intnum;intagain=l;printf(*\40:Programwillstopifinputvaluelessthan50.\n");while(again){printf(,z\40:Pleaseinputnumber=>");scanf("%d”,&num);printfC"\40:Thesquareforthisnumberis%d\n”,SQ(num));if(num>=50)again=TRUE;elseagain=FALSE;))#if#ifdef和#ifndef的综合应用。#include"stdio.h"#defineMAX#defineMAXIMUM(x,y)(x>y)?x:y#defineMINIMUM(x,y)(x>y)?y:xvoidmain()(inta=10,b=20;#ifdefMAXprintf(z,\40:Thelargeroneis%d\n*,MAXIMUM(a,b));#elseprintf(*\40:Theloweroneis%d\n*,MINIMUM(a,b));#endifttifndefMINprintf(*\40:Theloweroneis%d\n*,MINIMUM(a,b));#elseprintf("\40:Thelargeroneis%d\n*,MAXIMUM(a,b));#endif#undefMAX#ifdefMAXprintf(*\40:Thelargeroneis%d\n*,MAXIMUM(a,b));#elseprintf(*\40:Theloweroneis%d\n*,MINIMUM(a,b));#endif#defineMIN#ifndefMINprintf(*\40:Theloweroneis%d\n*,MINIMUM(a,b));#elseprintfC/\40:Thelargeroneis%d\n*,MAXIMUM(a,b));#endif}^include的应用练习test,h文件如下:#defineLAG>#defineSMA<#defineEQ==#include"test.h"/・ー个新文件50.c,包含test,h*/#include<stdio.h>voidmain(){inti=10;intj=20;if(iLAGj)printf("\40:%dlargerthan%d\n”,i,j);elseif(iEQj)printf("ヽ40:%dequalto%d\n”,i,j);elseif(iSMAj)printf("\40:%dsmallerthan%d\n”,i,j);elseprintf(*\40:Nosuchvalue.\n");六作业:必做题:1.对于以下程序,写出程序输出结果:#include<stdio.h>intx;voidmain()(intx=5;printf(4tx=%d\n,\x);if(x>3){externintx;printf("x=%d\n”,x);}if(x<10){intx=4;printf("x=%d'n”,x);})总结:.找出并改正如下宏语句的错误#defineMYNAME“James”;#definevoid5#define3AB6#defineA+B5#include<stdio.h>;总结:.写出如下程序的运行结果:#include<stdio.h>#define AB “James”#define N 2#define M N+1#definePP(x,y)x*M+y*(y-M)voidmain(void)|printf("%d\n,\M*M);printf("%d\n”,PP(N,N*M));printf("Well!MynameisAB\n");)总结:.写出如下程序的运行结果:#include<stdio.h>#defineMvoidmain(void){intx;for(x=1;x>=0;x-){#ifx#ifdefMprintf(******\n,*);#endif#else#ifndefMMprimfr########\n");#elseprintf(“$$$$$$$$\n”);#endif#endif))总结:.在C盘根目录下面有两个文件a.txt和b.txt,文件内容为合法的C语言函数申明语句。有人想通过如下语句实现文件包含,正确吗?如果不正确,改正:#include"c:\\a.txl”#include<c:\b.txt>总结:.谈谈C语言条件编译和if…else…语句的区别;谈谈C语言参数宏和函数调用的区别:总结:.编写函数,来实现斐波纳契数列的任意ー项求值,要求函数不使用参数而使用全局变量。.使用参数宏来实现从两个数中挑选最大值和最小值。.不使用C语言关键字if…else...而使用条件宏来实现对三个数的排序.使用全局变量,编写程序实现通过调用ー个函数doublecalculate(doublex,doubley),可以得至リ两个数的和、差、积、商。附加题:.定义带参数的宏MAX(A,B)、MIN(A,B)、ABS(A)分别求两个数的最大值、最小值和一个数的绝对值。.定义宏名しeap一Year(year)和Isupper(a),判断year是否是闰年以及a是否是大写字母。.定义ー个宏,将大写字母变成小写。七、经验积累序号问题描述经验级别1□□□2□ロロ3□ロロ4□□□5□□□6□□□7□□□8□□□9□ロロ10□□□第十讲:指针(一)ー、内容及目标:.理解地址和指针的概念.掌握变量的直接引用方式和间接引用方式.熟练应用指针变量的定义和引用.熟练应用指针变量作函数参数时的传参方式二、学习重点地址和指针的概念指针变量的定义和引用指针变量作函数参数时的传参方式三、学习难点:指针变量的定义和引用指针变量作函数参数时的传参方式四、课堂笔记:五、上机试验:1.如下程序,如果第一个printf输出为0x00123456,那么其它的printf的输出?#include<stdio.h>voidmain(){inta[10]={l,2,3,4,5,6,7,8,9,0},*p,*q;p=a+2; q=a-2;prinlf("%#八n”,p); 〃第一个printf语句printf("%#x'n”,p・=q);q+=6; p+=q+2;printf(<<%#x,%#x,%d,%d,%d,%d\nM,p,q,*(p+2),*q+2,*p++,*-H-p);)2.通过两种方式引用变量#include<stdio.h>voidmain(){inta,b;int*p; /・定义指针变量p*/p=&b; /*将变量b的地址存放在变量p中・/a=3; /・直接引用变量a*/*p=5; /・间接引用变量b*/printf(ua=%d,b=%d\nn,a,b);}.指针变量运算符&和*的使用#include<stdio.h>voidmain()(inta,b;int*p,*q;a=3;b=5;p=&a;q=&b;printf("%d,%d\n”,*p,*q);.上机操作观察以下程序的输出结果?#include<stdio.h>intmain(){intx=99;int*pl,*p2;pl=&x;p2=pl;printf("valuesatplandp2:%d%d\n'\*pl,*p2);printf("addressespointedtobyplandp2:%p%p",pl,p2);).求一个学生5门课程的平均成绩。floataver(float*pa);voidmain(){floatsco[5],av,*sp;inti;sp=sco;printf(*\ninput5scores:\n*);for(i=0;i<5;i++)scanf("%f”,&sco[i]);av=aver(sp);printf("averagescoreis%5.2f*,av);)floataver(float*pa)(inti;floatav,s=0;for(i=0;i<5;i++)s=s+*pa++;av=s/5;returnav;六、上机作业:必做题:.写出如下程序的输出结果?#include<stdio.h>voidmain()(doublex=100.1,y;int*p;p=(int*)&x;y=*P;printf("the(incorrect)valueofxis:%f\y);}.判断程序是否有问题吗?#include<stdio.h>voidmain(){intx,*p;x=10;*p=x;printf(Mp=%d,,,*p);).如下程序是否有问题吗?#include<stdio.h>voidmain()(intx,*p;x=10;p=x;printf(',p=%d,,,*p);}.如下程序段能正常运行吗?registerintx;inty;int*pl,*p2,*p3;pl=&x;p2=&y; p3=&(x+y);printf("%d,%d,%d”,*pl,*p2,*p3);.编写函数voidxChange(int*,int*),实现对两个整数的交换。.从键盘输入三个整数,要求设三个指针变量pl,p2,p3,是pl指向三个数的最大者,p2指向次大者,p3指向最小者,然后按由大到小顺序输出三个数。.编写ー个程序,接受用户输入的一行字符,以回车键结束.分别统计其中的大写字母,小写字母,空格,数字和其他字符的个数。(使用getcharO,使用指针)

选择题:.使用指针,实现对ー个数组的首尾互换。.有一一数组有10个元素,要求输出其屮最大和最小的元素值。(使用指针)七、经验积累序号问题描述经验级别1ロロロ2ロロ口3ロロ口4ロロ口5ロロ口6ロロ口7ロロ口8ロロ口9ロロ口10ロロ口第十一讲:指针(二)ー、内容及目标:.掌握指向数组元素的指针变量的定义和引用.理解数组元素的两种引用方法.熟练应用数组名与指针变量作函数参数时的传参方式.掌握指向字符串的指针变量的定义和引用指向数组元素的指针变量的应用数组名与指针变量作函数参数时的传参方式指向字符串的指针变量的定义和引用字符串与指向字符串的指针变量作函数参数的传参方式三、学习难点:数组名与指针变量作函数参数时的传参方式字符串与指向字符串的指针变量作函数参数的传参方式四、课堂笔记:五、上机试验:.用指针法和下标法输出数组中的全部元素#include<stdio.h>voidmain()(int*p,i;inta|5|={1,2,3A5);p=a;for(i=0;i<5;i++)printf(M%d\tn,a[i]);printf(H\n");for(i=O;i<5;i++)printf(H%d\tM,*(p+i));).上机操作观察程序的输出结果。#include<stdio.h>voidmain()(intArray[10]={l,2,3,4,5,6,7,8,9,0);int*p,*q;inti;p=Array+2;q=Array;*P=q[5]; p+=2;*q=*(Array+2); *Array=*(Array+5);for(i=0;i<10;i++)printf(“%4d,”,*(Array+i));).写出如下程序的输出结果:#include<stdio.h>voidmain(){intArray[10]={1,2,3,4,5,6,7,8,9,0},*p;intx,y,m,n,a,b,i;p=Array+2;x=*p++; y=*++p;m=*(p++);n=*(++p)a=++*p; b=(*p)4-+;printfC4x=%d,y=%d,m=%d,n=%d,a=%d,b=%d\n,,,x,y,m,n,a,b);p=Array;while(p<Array+10)printf("%"4d”,*p++);).用下标法和指针法输出数组中的全部元素#include<stdio.h>int*p,i;inta[5]={1,2,3,4,5);p=a;for(i=0;iv5;i++)printf(n%d\tprintf("\n");for(i=0;i<5;i++)printf("%d\tH,*(p+i));).已知一个ー维数组a[10]中有10个数,求出第m个数到第n个数的和.其中m、n由键盘输入#include<stdio.h>intsum(int*q,intn)(inti,s=0;for(i=0;i<n;i++,q++)s+=*q;returns;)voidmain()(intm,n,a[10]={1,2,3,4,5,6,7,8,9,10};int*p;print*"Pleaseinputmandn(m<n<10):\nH);scanf(M%d,%dM,&m,&n);p=a+m-l;/・数组下标从0开始,所以第m个元素下标为m-1,地址为a+m・ドノprintf("%d\n",sum(p,n-m+l));/・若计算第3个到第5个数的和,实际计算的是第3、4、5共5-3+1个数的和・/)六、上机作业:必做题:.如下程序是否有问题吗?#include<stdio.h>#include<string.h>char*pl;chars[80];pl=“do{gets(s);while(*pl)primf("%c”,*pl++);}while(strcmp(s,Mdone,'));.输入数组,最大的与第一个元素交换,最小的与最后ー个元素交换,输出数组。.有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数..写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。.编写ー个程序,接受用户输入的一行字符,以回车

温馨提示

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

评论

0/150

提交评论