版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C语言程序设计学习手册学号:_姓名:_班级:_老师:_第一讲:c语言概述2第二讲:数据的存储与运算8第三讲:控制结构(一)(顺序、选择结构设计)12第四讲:控制结构(二)(循环结构设计)16第五讲:数 组21第六讲:函 数26第六讲:指针(一)30第七讲:指针(二)35第八讲:指针(三)40第九讲:指针(四)45第十讲:使用结构体类型处理组合数据-用户自定义数据类型50第十一讲:文件处理55引言本课程的教学目的在于使学生通过学习C程序设计的基本语言知识(数据类型、控制结构、语法规则等)和基本编程技术(程序分析、算法与编程、常用程序模块等),对面向过程的高级语言程序设计技术有比较完整的理解,并形
2、成程序设计的初步能力,能自己分析问题,按模块化程序设计的要求,编写结构完整、具有一定难度的控制和出错处理功能、由多个功能模块组合形成的小型程序。第一讲:c语言概述一、学习目标:n 了解C语言的简史、特点n 熟悉C语言的开发过程n 理解C语言程序的基本结构 n 熟练应用printf()、scanf()函数的使用规则、转义符二、学习重点:n C语言程序的基本结构n printf、scanf函数的使用三、学习难点:printf、scanf函数的使用四、课堂笔记:_五、上机试验:1 写出最简单的C语言程序Hello,World!第一步、打开VC+6.0的集成环境中,点击菜单栏中文件菜单再选择新建一项,
3、弹出如下对话框第二步:点击对话框文件选项,并选中“C+ Source File”一项,如图:第三步:在右边文件框内键如本程序的文件名称“Hello.c”,并可在下边目录文本框内,点击旁边带有省略号的按扭来选择文件存放的位置,最后点击确定按扭。弹出如下界面:第四步:在右边的编辑器中键入以下代码:#include<stdio.h>void main()printf(“Hello world!”);第五步:点击菜单栏中编译菜单中编译Hello.c一项,对该文件进行编译。第六步:点击菜单栏中编译菜单中构件Hello.exe一项或在键盘上按F7,对该文件进行连接。第七步:点击菜单栏中编译菜单
4、中执行Hello.exe一项或在键盘上同时按住Ctrl+F5,执行该文件,并观察结果。a 将main改为Main(注意大小写),再看看程序是否还能运行?b 去掉printf函数后面的分号,程序还可以运行吗?c 将#include<stdio.h>这句话去掉看是否能运行?2 把上述程序改成以下代码#include<stdio.h>void main()printf(“hello, ”);printf(“world”);观察以上代码的运行结果是否会显示在同一行?3 转义字符的使用下列语句的运行结果:printf(“Im a studentt!you are teacher.
5、n”);printf(“this is a bookn”);printf(“a basketballbb”);printf(“x64078087”);printf(“872”);printf(“872”);printf(“Some Num: %d%c”,081,B);4. 已知三角形边长求面积#include <stdio.h> #include <math.h> /*头文件math.h中含函数sqrt()的定义*/ void main( ) double a,b,c,s,area; a=3; b=4; c=5; s=(a+b+c)/2; area=sqrt(s*(s-
6、a)*(s-b)*(s-c); /*函数sqrt()用于求一个数的平方*/ printf("%4.1f, %4.1f, %4.1f,area is %4.2fn",a,b,c,area); 5.键入以下代码#include<stdio.h>void main()printf(“This prints a character,%cn a number,%dna floatingpoint,%f”,z,123,456.789);观察输出结果。(提示:printf()函数占了两行,在第一行末尾使用了一个反斜杠()指出字符串将延续到下一行,因此编译器将把这两行代码视为一
7、行)六、作业:1 printf和scanf函数的详细使用方式答案:_2.写出C语言程序的开发过程答案:_3.写出语句scanf(“yy-mm-dd=%d - %d - %d”,&year,&month,&date);从键盘上的输入形式。答案:_4.指出下列程序的错误并改正。#include<stdio.h>void main();double dbPi , dbR ;dbArea;dbPi= 3.14159;dbR=10;dbArea=dbR* dbR* dbPi;dbL=2* dbR * dbPi;printf(“nate=%d,cir=%fn,dbAre
8、a,dbL);#include<stdio.h>void main()int nA;printf(nplease intput a integrate:);scanf(“%d”,nA);if(nA>0) printf(“nA>0n”);else printf(“nA<=0n”)5用C语言编写一个程序,实现如下菜单样式:Menu = 1. Input the students names and scores 2. Search scores of some students3. Modify scores of some students4. List
9、all students scores 5. Quit the system = Please input your choise (1-5): 必做题:6. 编写一个程序,从键盘上输入华氏温度,屏幕显示对应的摄氏温度。华氏温度和摄氏温度转换公式为: c=(f-32)/1.87.编程实现求三个数中的最大数。 七、经验积累序号问 题 描 述经验级别1o o o2o o o3o o o4o o o5o o o6o o o7o o o8o o o9o o o10o o o第二讲:数据的存储与运算一、学习目标:n 理解数值数据的表示n 理解文字数据的表示n 理解C语言中数据类型的分类n 熟练
10、应用变量的定义和赋值n 熟练应用表达式中数据类型的转换二、学习重点:n C语言中数据类型的分类n 变量的定义和赋值n 表达式中数据类型的转换三、学习难点:n 表达式中数据类型的转换n 单个字符与字符串存储区别四、课堂笔记:_五、上机试验:1.仔细思考如下程序,试验以下三个问题:a 将short int改为long,看看输出结果;b 将signed char改为unsigned char,看看输出结果;#include <stdio.h>void main()short int sX;signed char cCh;sX=32767; cCh=127;printf(“X=%d,Ch=
11、%d”,sX,cCh);sX=sX+1; cCh=cCh+1;printf(“X=%d,cCh=%d”,sX,cCh);2.变量的初始化方式int nA=096;char nB=028;int nC=987654321;int nD=987654321Ldouble dbE=123.456;int nX=nY, nY=6;在我们编写程序时,如果按以上方式编写,会出现什么问题?3.从键盘输入一个整数,以十进制、八进制、十六进制的形式输出:#include <stdio.h> void main( ) int nA,nB,nC,nM,nN;nA =11; nB =011; nC=0x1
12、1; nM=65; nN=97; printf("十进制11等于%d, 八进制11等于%d, 十六进制11等于%d,n", nA,nB,nC); printf("十进制 八进制 十六进制 字符n"); printf(" 65 %o %x %c,n",nM,nM,nM); printf(" 97 %o %x %c,n",nN,nN,nN); 4. 强制类型转换:运行如下程序段的观察输出结果: char cM=100,cCh=a;int nA=5,nB=3;double dbC=2.5,dbD;dbD = nB/2 +
13、 (int)(nA/2.0 + cM/062 +cCh*2) / 2.0cCh= cCh + b/1.5;printf(“dbD=%d,cCh=%cn”,dbD,cCh);5.输入下列程序,用于输入一个学生的姓名、学号、英语、数学、计算机成绩,输出学生姓名、学号和平均成绩。#include <stdio.h>void main( ) char cName31; /*数组cName31最多可以放30个字符或15个汉字*/ int nEng,nMath,nComp,nNum; double dbAver; printf("Please input the student
14、9;s name:"); scanf("%s",cName); /*字符串用格式符"%s",并且数组名cName前不需要取址符"&"*/ printf("Please input the student's ID:"); scanf("%d",&cNum); printf("Please input scores (English math computer):"); scanf("%d%d%d",&nEng,&a
15、mp;nMath,&nComp); dbAver=(nEng+nMath+nComp)/3.0; printf("the student's named is %s , his ID is %d ,his average score is %.1f n",cName,cNum,dbAver); 六、作业:1. 请写出C语言中基本的数据类型已经它们在内存中所占的字节数。答案:_2. 请问char cA=a与字符串”a”在内存中是否有区别?如有请写出它们的区别。答案:_3. 请问在编程过程中什么时候用自动类型转换,什么时候用强制类型转换?答案:_4. 编写输出字
16、符0、9、A、Z、a、z的ASCII码的十进制、八进制和十六进制的表示形式的程序。5. 参考上机试验中例5编写一个程序,输入2个学生的姓名、学号、英语、数学、计算机成绩,输出这两个学生的姓名、学号和平均分。选做题:6编写一个程序输出5!、10!的结果七、经验积累序号问 题 描 述经验级别1o o o2o o o3o o o4o o o5o o o6o o o7o o o8o o o9o o o10o o o第三讲:控制结构(一)(顺序、选择结构设计)一、学习目标:n 了解程序设计的一般方法、结构化程序设计n 熟悉顺序结构、简单程序流程图的画法n 熟练应用if语句的使用规则以及相应的程序流程n
17、熟练应用switch语句的使用规则及相应的程序流程二、学习重点:n if语句的使用规则以及相应的程序流程n switch语句的使用规则及相应的程序流程三、学习难点:n if语句的嵌套的应用四、课堂笔记:_五、上机试验:1. 求ax*x+bx+c=0方程的解。a、b、c由键盘输入,且b*b-4ac>0。#include <stdio.h> #include <math.h>void main() float a,b,c,p,x1,x2; scanf ("a=%f,b=%f,c=%f",&a,&b,&c); p=sqrt(b
18、*b-4*a*c); x1=(-b+p)/(2*a); x2=(-b-p)/(2*a); printf("x1=%6.2f, x2=%6.2fn",x1,x2); 2. 编写程序,输入一个x,按照函数要求输出y值。#include <stdio.h> void main() int x,y; scanf ("%d",&x); if (x<0) y= -1; else if (x=0) y=0; else y=1; printf("x=%d,y=%d n",x,y); 3仔细阅读如下程序段,编译运行:int n
19、X = 5, nY = 3, nZ = 2;if(nX> 6) printf(“*n”);if(nY = 3) printf(“#n”);else if(nZ<3) printf(“$n”);else printf(“%n”);4. 阅读下列两个程序段,看看运行结果:a、int nX = 0,nY = 1;if(nX && nY)printf(“*n”); else printf(“#n”);printf(“nX = %d, nY = %d”, nX,nY );b、 int nX = 0, nY = 1;if(nX+ = 0 | +nY = 2) printf(“*
20、n”);else printf(“#n”);printf(“nX = %d, nY = %d”, nX, nY);5. 先不编译,写出如下程序的运行结果:#include <stdio.h>void main()int nX = 1,nY = 2;switch(nX) case 1: switch(nY) case 1: printf(“aaaaaan”); break; case 2: printf(“bbbbbbn”); break; case 2: switch(nY-1) case 1: printf(“ccccccn”); break; case 2: printf(“d
21、dddddn”); break; default: printf(“nX = %dn, nY = %d”, nX, nY);6. 由键盘输入的一个字符,判断是数字、英文字符还是其它字符#include <stdio.h> void main( ) char cCh; scanf("%c",&cCh); /*在C中"并且"含义即"逻辑与"用"&&"表示,"或者"含义即"逻辑或"用"|"表示*/ if (cCh>=
22、39;0'&&cCh<='9') /*等价与if (cCh>=48&&cCh<=57)*/ printf("%c is a digitn",cCh); else if (cCh>='A'&&cCh<='Z') | (cCh>='a'&&cCh<='z') /*等价与if (cCh>=65&&cCh<=90)|(cCh>=97&&cCh
23、<=122)*/ printf("%c is a lettern",cCh); else printf(" %c an other character .n",cCh); 六、作业:1. 请指出下列语句中else与谁匹配(nN、nA、nB、nZ都为整形) if(nN>0) if(nA>nB) nZ=nA; else nZ=nB;答案:_2. 考虑下面程序输出结果: void main() int nX=100, nA=10,nB=20; int nTemp1=5,nTemp2=0; if(nA<nB) if(nB!=15) if(
24、!nTemp1) nX=1; else if(nTemp2) nX=10; printf(“%d”,nX); 答案:_3 判断ax2 bx c 0方程有几个解,如果有解则输出。系数a、b、c由键盘输入。4 输入两数并判断其大小关系选做题:5编写一个程序以统计各个数字、空白符及其他所有字符出现的次数。七、经验积累序号问 题 描 述经验级别1o o o2o o o3o o o4o o o5o o o6o o o7o o o8o o o9o o o10o o o第四讲:控制结构(二)(循环结构设计)一、学习目标:1. 理解while语句的使用规则和相应程序流程2. 理解do-while语句的使用规则
25、和相应程序流程3. 理解for语句的使用规则和相应程序流程4. 熟练应用各种循环语句的组合使用5. 理解break、continue语句的使用特性以及应用范畴6. 了解goto语句的使用方法二、学习重点:各种循环语句的组合使用break、continue语句的使用特性三、学习难点:for语句的循环嵌套四、课堂笔记:_五、上机试验:1. 求1+2+ +100的结果。#include <stdio.h> void main() int sum,counter; sum=0; counter=1; dosum=sum+counter; counter=counter+1; while (
26、counter<=100); printf("1+2+3+ .+100=%dn",counter); 2. 将下列程序段分别用C语言的for、while、dowhile结构改写,使其能产生相同的运行结果:int nX=1;abc: printf(“#nX=%dn”,nX); nX+; if(nX<5) goto abc;3. 写出下列程序的输出结果:#include <stdio.h>void main() int nX,nY; for(nY=0,nX=1;nX<4;nX+) if(nY=2) nX - = nY; continue; swit
27、ch(nX) case 1: printf(“x=%d”,nX); continue; case 2: printf(“x+y=%d”,nX+nY); break; case 3: printf(“x*y=%d”,nX*nY); continue; case 4: printf(“x-y=%d”,nX-nY); break;printf(“y=%d”,+nY);4. 上机写出如下程序段的输出结果:int nX = 1, nY = 0;dowhile(nX = 0) printf(“y = %dn”, nY); nY+;if(nY > 3) break;printf(“x = %dn”,n
28、X);if(nY = 4) continue; nX- -;while(!nX);5. 统计各个数字、空白符及其他字符出现的次数#include<stdio.h>void main() int nCh, nI, nWhite,nNother;int nDigit10; /变量nDigit声明为有10个整形数构成的数组nWhite= nNother=0;for(nI=0;nI<10;+nI)nDigitnI=0;while(nCh = getchar()!= EOF)if(nCh>=0&&nCh<=9) +nDigitnCh-0; else if (
29、nCh= = |nCh=n| nCh=t) +nWhite; else +nNother;printf(“Digits = ”);for(nI=0;nI<10;+nI)printf(“%d”,nDigiti);printf(“,white space=%d,other=%dn”,nWhite,nNother);6. 输出下列图形:1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2 3 4 5 6 1 2 3 4 5 6 7 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 9#include <stdio.h> void main() int m
30、,n; for (n=1;n<=9;n=n+1) for (m=1;m<=n;m=m+1) printf("%-4d",m); printf("n"); /*一行结束需要换行*/ 7. 输出3100的所有素数。#include <stdio.h> void main() int nNum,nI; for (nNum=3;nNum<=100;nNum=nNum+1) for (nI=2;nI<=nNum-1;nI=nI+1) if (nNum % nI=0) break; if (nI>=nNum) printf(
31、"%dt",nNum); 六、作业:1.请写出break语句和continue语句的区别。答案:_2.计算Fibonacci数列的前30项,并输出。3.求水仙花数。如果一个三位数的百位数、十位数和个位数的立方和等于这个数则该数为水仙花数。4.从键盘输入一个数,求出这个数的阶乘(10的阶乘即为10*9*8*2*1)5.设计程序,在屏幕上输出如下图形: *6.求输入的十个整数中正数的个数及其平均值7.设计程序,计算公式的值:1/1 + 2/(1+2) + 3/(1+2+3) + + 10/(1+2+3+10)七、经验积累序号问 题 描 述经验级别1o o o2o o o3o o
32、 o4o o o5o o o6o o o7o o o8o o o9o o o10o o o第五讲:数 组一、学习目标:n 熟悉一维数组的定义和初始化n 理解一维数组的存储方式n 熟悉一维数组的引用n 熟悉二维数组的定义和初始化n 理解二维数组的存储方式n 熟悉二维数组的引用n 熟练应用数组作为函数参数时的传参方式:数组元素作参数;数组名作参数二、学习重点:n 一维数组的定义和初始化n 二维数组的定义和初始化n 二维数组的存储方式n 函数参数时的传参方式:数组名作参数三、学习难点:二维数组的存储方式函数参数时的传参方式:数组名作参数四、课堂笔记:_五、上机试验:1. 将数字04放入一个整型数组,
33、并逆序输出数组。#include <stdio.h> void main() int i,a5; /*给数组中元素赋值*/ for (i=0;i<5;i+) ai=i; /*逆序输出数组中元素值*/ for (i=4;i>=0;i-) printf ("%3d",ai); printf("n"); 2. 输入10个整数,输出最大数。#include <stdio.h> void main() int i,array10,big; /*给数组中所有元素赋值 */ for(i=0;i<10;i+) scanf(&qu
34、ot;%d",&arrayi); /*找出数组中最大的元素 */ big=array0; for(i=0;i<10;i+) if(arrayi>big) big=arrayi; printf ("The biggest is %3dn",big); 3.求Fibonacci数列的前20项。#include <stdio.h> void main( ) int i , f20=1,1; /*给出Fibonacci数列的前2项*/ /*根据公式由Fibonacci数列前2项求出其余18项*/ for(i=2;i<20;i+) fi
35、=fi-1+fi-2; /*输出Fibonacci数列的前20项*/ for(i=0;i<20;i+) if (i%5=0) printf("n"); /*控制一行输出5个元素*/ printf("%10d",fi); 4. 已知一个一维数组a11中有10个数,求出其中前n个数的和。其中n由键盘输入。 #include <stdio.h> int sum(int nArray ,int n) int i,sum=0; for (i=0;i<n;i+) sum+=nArrayi; return sum; void main() in
36、t nNum, a10=1,2,3,4,5,6,7,8,9,10; scanf ("%d",&nNum); printf("%dn",sum(a,nNum); 5.二维数组中最大元素值及其行列号#include <stdio.h>void main() int a34=1,2,3,4, 9,8,7,6, -10,10,-5,2; int i,j,row=0,colum=0,max; max=a00; for(i=0;i<=2;i+) for(j=0;j<=3;j+) if(aij>max) max=aij; row=
37、i; colum=j; printf("max=%d,row=%d, colum=%dn",max,row,colum);六、上机作业:1如下代码有错吗?如果有错,错在哪里?如果正确,写出数组中所有元素的值:int a5=1,2,3,4,5,6;int b2+3=1,2,3;int c5= , , 3, 4;int d3,3=1,2,3,4,5,6,7,8,9;int e23=1,2,3;int f32=1,2,3;int g23= , ,2,1,0,0;答案:_2用如下程序段对数组进行赋值,行吗?为什么?int a5,b5,c5i;for(i=1;i<=5;i+)
38、ai=0;b=a;c=1,2,3,4,5;答案:_3使如下程序能实现数组Array中所有元素前后互换:#include <stdio.h>void main() int Array10=1,2,3,4,5,6,7,8,9,0; int n,t; for(n=0; n < ;n+) 答案:_4判断如下程序段是否合法,如果合法,则写出程序段运行后,数组a中元素的值:int a55=0,n;for(n=0;n<25;n+) a0n=n*2;答案:_5在一个程序总需要一个函数void fun(int target,int source,int nCount)来实现将数组sour
39、ce中的元素拷贝到数组target中,拷贝结果是使数组target中元素的顺序与source中相反:答案:_1. 编写程序,定义数组int a10,从键盘输入10个整数,分别使用冒泡法和选择法对数组排序,使数组中的元素从大到小排列。2. 已知一个二维数组int a53,里面的元素已经被初始化为大小不等的值。编写代码,对此二维数组行排序,排序结果是数组的第0行平均值最小,第4行平均值最大。3. 存在一个二维数组int a55,编写代码对数组a实现行和列的互换,即使行列号为i,j的元素和行列号为j,i的元素互换。选做题:4. 编写程序,实现矩阵乘法:提示:定义三个矩阵:int axy,byx,cx
40、x;,其中,x和y都是常量。c=a*b,乘法计算时有公式:cij=ai0*b0j + ai1*b1j + + aiy-1*by-1j。从键盘输入20个随机数到数组int a20中,不对数组排序,也不使用其它数组,编写代码使程序能输出数组中的最大元素、最小元素以及第二大元素、第二小元素。第六讲:函 数一、学习目标:n 了解函数的分类和执行过程n 理解函数定义的一般形式、函数的声明n 熟练应用函数调用的一般形式n 理解函数形参和实参的关系、函数的返回值n 理解函数的嵌套调用和递归调用二、学习重点:n 函数定义的一般形式、函数的声明n 函数调用的一般形式n 函数形参和实参的关系、函数的返回值三、学习
41、难点:函数的嵌套调用和递归调用四、课堂笔记:_五、上机试验:1 求两个数的阶乘之和。#include <stdio.h>/*文件包含编译预处理命令*/ long sum(int nNum1, int nNum2); /*函数类型说明*/ long factorial(int nN);void main() int nN1,nN2; long lSum;scanf("%d,%d",&nN1,&nN2); lSum=sum(nN1,nN2); /*函数调用*/printf("sum=%1d",lSum); long sum(int nNum1, int nNum2) /*函数定义*/ long lTemp1,lTemp2; lTemp1=factorial( nNum1); /*函数调用*/lTemp2=factorial(nNum2); return(lTemp1+ lTemp2); /*函数返回值*/*求阶乘*/long factorial(int nN) long lRtn=1; int nI; for(nI=1;nI<=n;nI+) lRtn*=nI; return(lRtn); 2 如下函数能完成主调函数传过来的三个数从大到小排序目的吗?为什么?void fun(int nNum1,i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东科学技术职业学院《医学生物化学》2023-2024学年第一学期期末试卷
- 广东金融学院《农业技术经济学》2023-2024学年第一学期期末试卷
- 广东环境保护工程职业学院《中学语文经典新诗解读》2023-2024学年第一学期期末试卷
- 广东行政职业学院《护理学基础实验(1)》2023-2024学年第一学期期末试卷
- 广东工贸职业技术学院《大数据原理与技术课程设计》2023-2024学年第一学期期末试卷
- 广东东软学院《儒学与传统文化》2023-2024学年第一学期期末试卷
- 广东创新科技职业学院《软件工程A》2023-2024学年第一学期期末试卷
- 《口腔护理岗前培训》课件
- 《流程图的排版规则》课件
- 公证书 仲裁文书
- 小学单位换算-体积
- 叉车自行检查记录表
- 湘教版七年级上册地理全册教案(共30课时)
- 2024新安全生产法知识考试题库及答案大全
- 专题5 书面表达-2023-2024学年译林版五年级上册英语期末专题复习
- 2024年中国科学技术大学创新班物理试题答案详解
- 江西省萍乡市2022-2023学年高一年级上册期末考试数学试题
- 《调水工程设计导则SL-T430-20XX-条文说明》
- 第二单元自测卷(试题)2023-2024学年统编版语文四年级下册
- 土方开挖过程中的文物保存方案
- 临时安全用电要求安全培训
评论
0/150
提交评论