《《C语言学习知识程序设计》自学指导书.doc》由会员分享,可在线阅读,更多相关《《C语言学习知识程序设计》自学指导书.doc(28页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-*C语言程序设计自学指导书自学学时:64学时推荐教材:C语言程序设计 陈宝明等主编,人民邮电出版社,2009年1月第1版参考资料:1、C程序设计(第三版) 谭浩强主编,清华大学出版社出版社2、C语言程序设计教程 李明主编,上海交通大学出版社3、C语言程序设计教程 张基温主编,高等教育出版社4、C语言程序设计 何钦铭等主编,浙江科技出版社考核方式:平时作业30笔试(闭卷)70第一章 C语言概述一、本章自学内容及要求:1、了解C语言的发展及特点。2、理解和掌握C语言源程序书写规则。3、掌握C语言源程序在Turbo C、Visual C+或者C-Free环境中的上机步骤。二、重点与难点:本章重点在
2、于了解并掌握C语言程序的上机操作步骤,难点在于把握C语言源程序的结构和书写规则。三、学习方法指导:选择并熟悉一个C语言程序运行环境,掌握C语言程序的编辑、编译、连接和运行等步骤。四、典型例题介绍:1、C语言的程序由 一 个主函数和 若干 个子函数组成。程序的执行总是从 主 函数开始,不管它放在哪个位置。2、简述C语言程序的开发和运行步骤。答:C语言程序的开发和运行步骤包括编辑、编译、连接和运行等几个步骤,如下图所示。编辑startf.c编译语法错?f.obj连接、运行逻辑错?f.exeendSourceObjectExecutable有有无无五、复习思考题:教材C语言概述章节习题。第二章 C语
3、言程序设计基础一、本章自学内容及要求:1、熟悉C语言的3种基本数据类型(整型、实型、字符型)常量的表示和变量的定义与使用。2、掌握标准格式输入输出函数和字符输入输出函数的使用。3、了解各种常用运算符与表达式,掌握各类数据的混合运算规则。4、掌握赋值运算特点和复合赋值表达式等。(1)数据类型了解C语言的数据类型分类,掌握常用的3种基本数据类型整型、实型和字符型。(2)常量与变量a、常量与变量的概念b、3种基本数据类型常量的表示c、3种基本数据类型变量的定义与输入输出(3)运算符与表达式a、了解各种常用的运算符及运算特点,注意与数学中的运算区别b、掌握表达式的概念及其表达式的求值(4)数据运算注意
4、数据在运算过程中类型的转换。二、重点与难点:重点:3种基本数据类型常量和变量的使用,各种类型数据混合运算规则和常用运算符的运算特点。难点:各种类型数据的混合运算以及根据要求进行格式输入和输出。三、学习方法指导:通过上机实验,掌握C语言基本数据类型与运算以及格式输入输出函数的使用。四、典型例题介绍:1、若有以下类型说明语句: int a; char ch1; float b;则表达式 a+ch1-b的结果的类型是( D )。A. char B. int C. float D. double2、 下面正确的字符常量是( B )。 A. “x” B. y C. /” D. 3、 在C语言中,要求运算
5、对象或运算量必须是整型的运算符是( D )。 A. / B. * C. != D. % 4、 设a,b都是整型变量,为了使a=4,b=8。函数scanf(“a=%d,b=%d”,&a,&b)执行时,正确的数据输入是( C )。 A. a=4 b=8 B. a=4,8 C. a=4,b=8 D. a=b=4,8 5、设a,b都是整型变量,且a=5,b=10,则函数printf(“%d,%dn”,a+,+b)的输出结果是( B )。A. 5,10 B. 5,11 C. 6,10 D. 6,116、字符串常量是用一对 双引号 括起来的字符序列。7、设x是int型变量,且x=10,则表达式x*=3+4
6、的值是 70 ,表达式x/=x+x的值是 0 。8、下面程序的输出结果是什么?#include main()int i, j, m=0, n=0;i = 8;j = 10;m+= i+; n-=-j;printf(“i=%d,j=%d,m=%d,n=%d”, i, j, m, n);答:程序的输出结果是:i=9,j=9,m=8,n=-9五、复习思考题:教材程序设计基础章节习题。第三章 C语言程序控制结构一、本章自学内容及要求:1、了解利用一些基本要素(常量,变量,运算符,表达式等)构成程序的基本成份。2、掌握关系运算和逻辑运算的特点。3、利用if语句和switch语句进行选择结构程序的设计。4
7、、掌握循环结构的基本概念,利用3种循环语句进行循环结构程序设计。(1)算法及程序a、了解算法的概念b、掌握算法的流程图表示(2)三种基本结构a、了解结构化程序设计的特点b、掌握正确的逻辑表达方式c、熟练掌握if语句和switch语句的使用d、了解三种循环语句的特点,掌握用循环实现一些常用算法二、重点与难点:重点:逻辑表达式的组织;条件语句的格式和功能;循环语句的格式、功能以及特点。难点:算法的概念;建立正确逻辑思维能力,合理进行选择结构和循环结构程序设计。三、学习方法指导:复习相关的数学知识,通过习题和上机实验初步掌握C语言程序设计。四、典型例题介绍1、程序填空。编程计算1到100之间的奇数之
8、和及偶数之和。 #include main() int even_sum,odd_sum,j,i; even_sum = odd_sum =0 ; for(i=0;i=100;i+=2) even_sum +=i; _j=i+1_; odd_sum +=j; printf(sum of evens is %dn, even_sum); printf(sum of odds is %dn, odd_sum -101); 2、程序填空。从键盘上输入两个正整数x,y,求它们的最大公约数。例如:如果从键盘上输入24,36,程序的输出应为:最大公约数是 : 12。 #include main() int
9、 x,y,t,i; printf(Please enter two numbers:); scanf(%d,%d,&x,&y); if(x y) t = x; x = y; y = t; t = x % y; while( t!=0 ) x = y; y = t ; t = x % y; printf(最大公约数是: %d,_y_); 3、编程,统计1500之间能被2和3整除的数的个数。#include main() int count=0,i; for(i=1;i=500;i+) if(i%2=0&i%3=0) count+;printf( 符合要求的数有%d个。n,count);4、输入三
10、角形的三条边a、b、c,如果能构成一个三角形,则计算并输出三角形的周长和面积(结果保留两位小数);否则输出“无效的边长!”。 三角形面积计算公式为:area=,其中s=(a+b+c)/2。#include #include main() float a,b,c,s,area; printf(“Input a,b,c:”);scanf(“%f%f%f”,&a,&b,&c);if(a+bc&a+cb&b+ca)s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c);printf(“area=%.2fn”,area);elseprintf(“无效的边长!”);5、编写程序
11、,输入一个整数,求它的各位数字之和及位数。例如,34的各位数字之和是7,位数是2;-123的各位数字之和是6,位数是3。#include main()int x,m,n=0,s=0;printf( x= );scanf(%d,&x);if(x0)x=-x;dom=x%10; /* 求出该数的个位数 */s=s+m;n+;x=x/10;while(x!=0);printf( 位数是:%dn,n);printf( 各位数字之和是:%dn,s);6、使用格里高利公式求的近似值,精确到最后一项的绝对值小于10-6。 #include #include main( ) int s; float n, t
12、, pi; t=1; pi=0; n=1.0; s=1; while(fabs(t) = 1e-6)pi = pi+t; n = n+2; s = -s; t = s/n; pi=pi*4; printf(“pi=%10.6f n”, pi ); 7、中国古代数学史上著名的“百鸡问题”:鸡翁一,值钱五;鸡母一,值钱三,鸡雏三,值钱一。百钱买百鸡,问翁、母、雏各几何?#include main() int cock,hen,chicken; for(cock =0; cock =20; cock +) for(hen =0; hen =33; hen +) chicken =100- cock
13、- hen; if(5* cock +3* hen + chicken /3)=100&( chicken %3=0) printf(%5d%5d%5dn, cock, hen, chicken); 8、编程,求S=1!+3!+5!+11!。#include main() double p,s=0; int i,j; for(i=1;i=11;i=i+2) p=1; for(j=1;j=i;j+) /* 求i! */ p=p*j; s=s+p; printf(“ s=%.2f”,s);*9、编程,打印输出以下图形:#include main() int i,j,k; for(i=1;i=4-i
14、;j+) /* 输出第一个*号前的空格 */ printf( ); for(j=1;j=1;i-) /* 控制输出后3行*号 */ for(j=1;j=4-i;j+) printf( ); for(j=1;j=2*i-1;j+) printf(*); printf(n); 10、按如下形式打印九九乘法表的一部分。 1 * 1 = 1 2 * 1 = 2 2 * 2 = 4 3 * 1 = 3 3 * 2 = 6 3 * 3 = 9 4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16 #include main() int i,j,k; clrscr(); for
15、(i=1;i=4;i+) for(j=1;j=i;j+) printf(%3d *%3d =%3d,i,j,i*j); printf(n); 五、复习思考题:教材程序结构章节习题。第四章 数组一、本章自学内容及要求:1、掌握数组的概念,了解数组的特点。2、掌握一维数组的定义和引用,理解一些常用的算法,如排序、查找等。3、了解二维数组的定义和应用。4、理解字符型数组的意义和引用,熟悉常用的字符串函数。(1)数组的概念a、了解数组在程序设计中的作用b、理解数组的概念,把握其特点(2)一维数组a、了解一维数组的定义与初始化b、理解常用的排序、求最大(小)值等算法c、掌握利用循环语句访问一维数组元素的
16、方法(3)二维数组a、了解二维数组的定义与初始化b、理解二维数组表示矩阵进行的相关计算c、掌握利用二重循环语句访问二维数组元素的方法(4)字符数组a、了解字符、字符串和字符数组的联系与区别b、掌握字符数组的定义与初始化c、掌握常用的字符串处理函数的用法(5)数组应用举例a、熟悉数组应用的特点b、理解常用的算法,如排序、查找、求最大(小)值与统计等二、重点与难点:重点:数组的定义,赋初值以及数组与循环语句相结合进行的程序设计。难点:数组的存储形式,数组名的使用,尤其是字符数组的引用。三、学习方法指导:复习第三章内容,通过习题和上机实验,掌握数组与循环结构紧密结合的程序设计特点。四、典型例题介绍:
17、1、编程,用冒泡排序对10个整数进行降序排列。#include main( ) int a10; int i, j , t; /*输入10个整数到数组a中*/printf (Input 10 numbers:n); for(i=0;i10;i+) scanf(%d,&ai); printf (n); /*用冒泡排序法对数组a中的10个数进行降序排序*/for(i=1; i10; i+) for(j=0; j=9-i; j+) /* a0到a9-i范围内的数进行一趟冒泡排序 */ if(ajaj+1) t=aj; aj=aj+1;aj+1=t; /*依次输出排序后的10个整数*/printf (
18、 The sorted numbers are:n); for(i=0;i10;i+) printf(%d _ _,ai); 2、编程,用选择排序对10个整数进行升序排列。#include main( ) int a10; int i, j , p, temp; /*输入10个整数到数组a中*/printf (Input 10 numbers:n); for(i=0; i10; i+) scanf(%d, &ai);for(i=0; i9; i+)p=i; /* 从ai到a9范围内求最小元素的位置 */for(j=i+1; j10; j+)if(ajap)p=j;if(p!=i) /* 若最小
19、元素不是ai,则将其与ai交换 */ temp=ap;ap=ai;ai=temp; printf (The sorted numbers are:n); for(i=0; i10; i+) printf(%d _ _”,ai);3、已知10个学生的英语成绩,从键盘输入1个成绩,查找是否有此成绩。如果找到,则输出找到的位置,否则输出“not found”。#include main( ) int a10, x;int i;/*输入10个学生成绩到数组a中*/printf (Input 10 scores:n);for(i=0; i10; i+)scanf(%d, &ai);/*输入待查找的成绩到
20、变量x中*/printf (Input x:n);scanf(%d, &x);/*在查找表中顺序查找x*/for(i=0; i10; i+)if(ai= = x) break;/*输出查找结果*/if(i10)printf(%d is in %dn,x,i);elseprintf(not foundn);4、已知10个学生的高考总成绩,输出最高分。#include main( ) float score10, maxscore;int i;/*输入10个学生的高考总成绩到数组score中*/printf (Input 10 scores:n);for(i=0; i10; i+)scanf(%f
21、, &scorei);/*变量maxscore赋值为第一个学生的成绩*/maxscore=score0;/*求最高分*/for(i=1; imaxscore) maxscore=scorei;/*输出最高分*/printf(maxscore=%6.1fn,maxscore);5、输入20个学生的成绩,要求统计并输出优秀(大于等于85)、及格(6084)和不及格(小于60)的学生人数。#include main( )int mark20, g, p, f,i;g=p=f=0; printf(Enter scores:n);for(i=0; i20; i+)scanf (%d, &marki);
22、/*统计优秀、及格和不及格的学生人数*/for(i=0; i= 85) g+; else if (marki = 60) p+; else f+;/*输出统计结果*/printf(优秀人数:%dn, g);printf(及格人数:%dn, p);printf(不及格人数:%dn, f);6、从键盘任意输入一行字符(不超过80个),统计其中的英文字母、数字、空格以及其它字符的个数。#include main( )char string80;int letter, digit, blank, other, i;letter=digit=blank=other=0; /*输入一行字符*/printf
23、(Enter string:n);gets(string);/*按要求统计各类字符的个数*/for(i=0; stringi!= 0; i+)if(a=stringi& stringi= z|A=stringi& stringi= Z)letter+;else if(0=stringi& stringi= 9)digit+;else if(stringi= ) /*当前字符为空格*/blank+;elseother+;/*输出统计结果*/printf(英文字母个数:%dn, letter);printf(数字个数:%dn, digit);printf(空格个数:%dn, blank);prin
24、tf(其它字符个数:%dn, other);7、求一个5*5矩阵主对角线和副对角线元素总和。#include main( ) int i,j;int a55,sum=0;/*输入5*5矩阵*/printf(Input 25 numbers:n );for(i=0; i5; i+) for(j=0; j5; j+) scanf(%d, &aij);/*求主对角线和副对角线元素总和*/ for(i=0; i5; i+)sum+=aii+ ai4-i;/*输出求和结果*/printf(The sum is: );printf(%dn,sum-a22);8、输入一个以回车键结束的字符串(少于80个字符
25、),删除其中除英文字母和数字字符以外的其它字符。#include main()char str80;int i,k=0;printf(Input a string:n);gets(str);/*删除字符串中除英文字母和数字字符以外的字符*/for(i=0; stri!=0; i+)if(stri=a&stri=A&stri=0&stri=9)strk=stri; /* 保留字符串中的英文字母和数字字符 */k+;strk=0;printf(Output new string:n);puts(str);9、有3 4矩阵,求出其中最大元素所在的行号和列号。#include main( ) int
26、i, j, r=0,c=0, max; int a34 = 1,2,3,4, 9,8,4,6, -10,10,-5,2 ; max=a00;for(i=0;i=2;i+) for(j=0;jmax) max=aij;r=i;c=j;printf(“max=%d,row=%d, col=%dn”,max,r,c);10、打印以下的杨辉三角形(要求打印出10行)。 11 11 2 11 3 3 11 4 6 4 11 5 10105 1 #include main()int a1010,i,j;/*第0列及主对角线上的元素值均赋为1*/for(i=0; i10; i+)ai0=aii=1;/*计算
27、下三角阵中除第0列及主对角线上元素以外的其他元素的值*/for(i=2; i10; i+)for(j=1; ji; j+)aij=ai-1j-1+ai-1j;/*输出杨辉三角形*/for(i=0; i10; i+)for(j=0; j=i; j+)printf(%4d,aij);printf(n); 五、复习思考题:教材数组章节习题。第五章 函数一、本章自学内容及要求:1、理解函数的概念,了解模块化程序设计的特点。2、掌握函数定义的一般形式以及函数的调用。3、理解函数调用过程中参数传递的实质。4、明确变量的作用域与存储属性。(1)函数概述a、了解模块化程序设计的特点b、理解函数的概念(2)函数
28、定义的一般形式a、掌握函数定义的一般形式b、了解函数的声明方式(3)函数的参数传递方式a、理解形式参数和实际参数的概念b、了解普通变量作实参时值传递的方式c、了解数组元素作实参与数组名作实参的本质区别 (4)函数的调用a、掌握函数调用的方式b、了解函数调用的过程(5)函数的嵌套调用与递归调用 a、掌握函数的嵌套调用特点b、理解递归的特点c、了解函数的递归调用 (6)变量的作用域与存储类别 a、了解变量的作用域b、掌握局部变量与全局变量的特点c、了解变量的生存期d、掌握静态局部变量的特点二、重点与难点:重点:函数的定义和调用,变量的作用域与存储属性。难点:在函数调用过程中参数单向传值概念以及变量
29、的作用域与存储属性。三、学习方法指导:通过一定数量的习题和上机实验,掌握函数的定义和调用,学习进行模块化程序设计。通过运行程序及程序验证,掌握局部变量与全局变量的使用,并了解静态局部变量的存储属性。四、典型例题介绍:1、编写一个求圆面积的函数Area,该函数有一个形式参数r,类型为float,返回值类型也为float。在主函数中输入一个圆的半径,调用Area函数求出该圆的面积并输出。#include float Area(float r) float s; s=3.14*r*r; return s;main( ) float a,b; printf(请输入一个圆的半径:); scanf(%f,
30、&a); b=Area(a); printf(该圆的面积=%.2fn,b); /*保留2位小数*/2、输入x,计算并输出下列分段函数f(x)的值。可以调用数学库函数:平方根函数sqrt(),绝对值函数fabs()和幂函数pow()。 | 2x+5| x0 f(x)= (x+1)1/2 0=x= 2#include #include float f(float x);main( ) float x; printf(请输入一个数:); scanf(%f,&x); printf(y=%.2fn,f(x);float f(float x) float y; if (x0) y=fabs(2*x+5);
31、 else if (x2) y=sqrt(x+1); else y=pow(x+2,3) ; return y;3、编写一个函数power(x,n),求x的n次方,其中,x是实数,n为正整数。#include double power(double x,int n);void main(void) int x,n; printf(请输入2个数:); scanf(%f%d,&x,&n); printf(%f的%d次方=%fn,x,n,power(x,n);double power(double x,int n) int i; double s=1; for(i=1;i=n;i+) s=s*x;
32、return s;4、编写一个函数prime(int n),判断一个整数是否是素数,若是素数,函数值返回1,否则返回0。利用该函数找出100-200之间的所有素数。素数是只能被1和自身整除的正整数,2是最小的素数。#include #include int prime(int n);main( ) int i; for(i=100;i=200;i+) if (prime(i) printf(%d ,i);int prime(int n) int i; for(i=2;isqrt(n) return 1; else return 0;5、用递归法编写一个函数long fact(int n),求n
33、!的值。#include long fact(int n); main( ) int x; printf(请输入一个整形数:); scanf(%d,&x); printf(%d的阶乘为%ldn,x,fac(x);long fact(int n) long t; if(n=0|n=1) t=1; else t=n*fac(n-1); return t;6、分别利用递归法和数组法求Fibonacci数列的前40项,比较两种方法的运行效率。其中Fibonacci数列F(n)的定义为: F(0)=1,F(1)=1,F(n)=F(n-1)+F(n-2)。(1)用递归法求Fibonacci数列的前40项源
34、程序如下:#include long fib(int n);main( ) int i; for(i=1;i=40;i+) printf (%12ld,fib(i); if(i%5= =0) printf (n); long fib(int n) long f; if(n=1|n=2) f=1; else f=fib(n-1)+fib(n-2); return f;(2)用数组法求Fibonacci数列的前40项源程序如下:#include main() int i,f40=1,1;for(i=2;i40;i+) fi=fi-2+fi-1;for(i=0;i40;i+) printf (%12
35、d,fi); if(i+1)%5= =0) printf (n); 从运行结果来看,两种方法的结果是一样的,但是用递归的运行效率要慢的多。五、复习思考题:教材函数章节习题。第六章 指针一、本章自学内容及要求:1、理解指针与指针变量的基本概念。2、掌握各种数据类型指针的定义和引用。3、熟悉地址运算和指针运算的特点。(1)指针的概念a、掌握指针与指针变量的概念b、了解指针变量的特点(2)指针变量与变量a、掌握指针变量的定义b、了解指针变量的引用c、理解指针变量作函数参数的数据传递方式d、掌握用指针变量间接引用其所指向的变量(3)指针与数组a、了解指向数组的指针变量b、掌握用指针变量访问数组元素的方法c、进一步了解数组名作实参时函数调用的数据传递方式(4)指针与字符串a、了解指向字符串的指针变量的定义与引用b、明确字符型指针变量处理字符串与字符数组的区别(5)指针数组与指向指针的指针a、了解字符型指针数组的定义和引用b、了解指向指针的指针变量的定义和引用二、重点与难点:重点:各类指针变量的定义和引用。难点:指向数组的指针和指针数组的引用。 三、学习方法指导:结合第五章,通过上机实验,掌握指针变量的定义和引用;通过程序运行结果的比较,理解普通变量作实参与指针变量作实参的区别。四、典型例题介绍:1、输入3个整数,按从小到大的顺序输出。#includemain() int a,b
限制150内