C语言课程要点、典型例题及参考程序、课后练习题.doc

上传人:大张伟 文档编号:7194889 上传时间:2020-11-04 格式:DOC 页数:12 大小:43.51KB
返回 下载 相关 举报
C语言课程要点、典型例题及参考程序、课后练习题.doc_第1页
第1页 / 共12页
C语言课程要点、典型例题及参考程序、课后练习题.doc_第2页
第2页 / 共12页
C语言课程要点、典型例题及参考程序、课后练习题.doc_第3页
第3页 / 共12页
C语言课程要点、典型例题及参考程序、课后练习题.doc_第4页
第4页 / 共12页
C语言课程要点、典型例题及参考程序、课后练习题.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《C语言课程要点、典型例题及参考程序、课后练习题.doc》由会员分享,可在线阅读,更多相关《C语言课程要点、典型例题及参考程序、课后练习题.doc(12页珍藏版)》请在三一文库上搜索。

1、课程要点:1. 算法的概念,概念的特点。2. 结构化程序设计的三种标准控制结构。3. 常量、变量、算法运算符、关系运算符、逻辑运算符及相关各类表达式。4. 输入/输出的实现语句。5. 选择、循环结构实现语句。6. 数组(包括一维、二维)的使用。7. 结构体的应用。8. 指针及内存空间的动态分配。9. 函数的概念、分类,标准函数的使用注意事项。10. 自定义函数的定义及使用。11. 函数参数传递的两种不同方式。12. 变量的作用域及生存期。13. 文件的使用方法(四步走)。14. 字符串基本操作。典型例题:例:编一个程序,输入两个整数,分别求出其和、差、积、商、余数并输出。#include st

2、dio.h /*包含头文件,以实现下面的输入及输出*/void main() /*函数首部,下面为函数体*/*定义了七个变量,用来存放原始的两个数及和、差、积、商和余数*/int a,b,he,cha,ji,shang,yushu;printf(请输入两个整数:);/*输入原始的两个数,来源是键盘*/scanf(%d%d,&a,&b);/*计算和、差、积、商和余数并分别赋给五个变量*/he=a+b;cha=a-b;ji=a*b;shang=a/b;yushu=a%b;/*输出五个计算结果*/printf(和、差、积、商和余数分别为:%d %d %d %d %dn,he,cha,ji,shang

3、,yushu);例:任意从键盘输入一个三位正整数,要求先求出其逆置后的数,再输出原数与逆置数的和。如原数为123,则逆置数为321,和应该为444;原数为789,逆置数为987,和应该为1776。#include stdio.hvoid main()/定义变量int x,ge,shi,bai,newx,result;printf(请输入一个三位正整数:);scanf(%d,&x);ge=x%10;shi=x%100/10;bai=x/100;newx=ge*100+shi*10+bai*1;result=x+newx;/输出结果printf(结果为:%dn,result);例:解一元二次方程

4、#include #include /将数学运算类头文件包含进行以便使用其中的数学函数void main()double a,b,c,delta,x1,x2;printf(请输入三个系数:);scanf(%lf%lf%lf,&a,&b,&c);/double型数据的输入在VC6.0中要用%lfif(a=0)/一元一次方程if(b=0)if(c=0)printf(方程有任意解!n);else /c不等于0printf(方程不成立!n);else /b不等于0 /复合语句x1=-c/b;printf(此一元一次方程的根为:x=%fn,x1);else /a不等于0,一元二次方程delta=b*b-

5、4*a*c;if(delta0) /复合语句x1=(-b+sqrt(delta)/(2*a);x2=(-b-sqrt(delta)/(2*a);printf(一元二次方程有两个不相等的实根:x1=%f,x2=%fn,x1,x2);else /delta不大于0if(delta=0) /复合语句x1=-b/(2*a);printf(一元二次方程有两个相等的实根:x1=x2=%fn,x1);else /delta小于0printf(此一元二次方程无实根!n);例:输入一组数,按从大到小的顺序降序排序后输出。#include stdio.h#define N 8 /参加排序的数据总个数void ma

6、in()int aN+1,i,j;/定义的数组中包含N+1个元素,0号元素不存放有效数据/有效数据从1号开始存放以符合人们日常习惯printf(请输入%d个数:n,N);for(i=1;i=N;i+)/输入原始数据scanf(%d,&ai);printf(n排序前:n);/按原序输出for(i=1;i=N;i+)printf(%8d,ai);/下面的二重循环实现排序for(j=1;j=N-1;j+)for(i=j+1;i=N;i+)if(ajai)a0=aj;/利用空闲的0号元素实现交换aj=ai;ai=a0;printf(n排序后:n);/按排好序的结果输出for(i=1;i=N;i+)pr

7、intf(%8d,ai);printf(n);例:调用系统rand()函数产生若干个数,按从大到小的顺序降序排序后输出。#include stdio.h#include stdlib.h#include time.h /有关时间函数的头文件#define N 100 /参加排序的数据总个数void main()int aN+1,i,j;/定义的数组中包含N+1个元素,0号元素不存放有效数据/有效数据从1号开始存放以符合人们日常习惯srand(time(NULL);/利用秒数值初始化随机序列for(i=1;i=N;i+)/利用随机函数产生测试用原始数据ai=rand();printf(n排序前:

8、n);/按原序输出for(i=1;i=N;i+)printf(%8d,ai);/下面和二得循环实现排序for(j=1;j=N-1;j+)for(i=j+1;i=N;i+)if(ajai)a0=aj;/利用空闲的0号元素实现交换aj=ai;ai=a0;printf(n排序后:n);/按排好序的结果输出for(i=1;i=N;i+)printf(%8d,ai);printf(n);例:输入多个学生多门课程的成绩,分别求出每个学生的总成绩并按总成绩降序排序后输出完整的成绩表。#include stdio.h#include stdlib.h#define RENSHU 10 /人数#define K

9、ECHENG 4 /课程数void main()int aRENSHU+1KECHENG+1;/比课程数多定义一列,用于存放总分/多定义一行,数据从1号行开始存放,以便跟日常习惯一致int i,j,k;/以下程序用于按人(即按行)输入成绩printf(按行输入成绩(%d人,%d门课程):n,RENSHU,KECHENG);for(i=1;i=RENSHU;i+)printf(第%2d人:,i);for(j=0;jKECHENG;j+)scanf(%d,&aij);/以下程序用于计算各人总成绩for(i=1;i=RENSHU;i+)aiKECHENG=0;for(j=0;jKECHENG;j+)

10、aiKECHENG+=aij;/累加计算个人总成绩/以下程序按总成绩降序排序for(j=1;j=RENSHU-1;j+)for(i=j+1;i=RENSHU;i+)if(ajKECHENGaiKECHENG)/j行的总分小于i行总分/对j行和i行通过空闲的0行进行交换for(k=0;k=KECHENG;k+)/将j行各元素放入0行a0k=ajk;for(k=0;k=KECHENG;k+)/将i行各元素放入j行ajk=aik;for(k=0;k=KECHENG;k+)/将0行各元素放入j行aik=a0k;/以下程序用于输出成绩表printf(n 成绩表n);/输出表名printf(成绩1 成绩2

11、 成绩3 成绩4 总成绩n);for(i=1;i=RENSHU;i+)for(j=0;j=KECHENG;j+)printf(%6d,aij);printf(n);printf(n);system(pause);例:下表是中国部分城市名称列表(共137个城市名),请将其按字母表顺序排列生成一个有序表以方便查看:北京市,上海市,天津市,重庆市,香港特别行政区,澳门特别行政区,合肥市,毫州市,芜湖市,马鞍山市,池州市,黄山市,滁州市,安庆市,淮南市,淮北市,蚌埠市,巢湖市,宿州市,宣城市,六安市,阜阳市,铜陵市,明光市,天长市,宁国市,界首市,桐城市,福州市,厦门市,泉州市,漳州市,南平市,三明市

12、,龙岩市,莆田市,宁德市,建瓯市,武夷山市,长乐市,福清市,晋江市,南安市,福安市,龙海市,邵武市,石狮市,福鼎市,建阳市,漳平市,永安市,兰州市,白银市,武威市,金昌市,平凉市,张掖市,嘉峪关市,酒泉市,庆阳市,定西市,陇南市,天水市,玉门市,临夏市,合作市,敦煌市,甘南州,南宁市,贺州市,玉林市,桂林市,柳州市,梧州市,北海市,钦州市,百色市,防城港市,贵港市,河池市,崇左市,来宾市,东兴市,桂平市,北流市,岑溪市,合山市,凭祥市,宜州市,贵阳市,安顺市,遵义市,六盘水市,兴义市,都匀市,凯里市,毕节市,清镇市,铜仁市,赤水市,仁怀市,福泉市,海口市,三亚市,万宁市,文昌市,儋州市,琼海市

13、,东方市,五指山市,石家庄市,保定市,唐山市,邯郸市,邢台市,沧州市,衡水市,廊坊市,承德市,迁安市,鹿泉市,秦皇岛市,南宫市,任丘市,葉城市,辛集市,涿州市,定州市,晋州市,霸州市,黄骅市,遵化市,张家口市,沙河市,三河市,冀州市,武安市此例中每个城市名都由多个字符(一个汉字算作两个英文字符)组成,明显属于字符串类型,最直观方便的存储方案是用二维字符数组进行存放,一行一个城市名,多行(此例中行数应该为城市名称总个数)。程序如下:#include stdio.h#include string.h#define N 137void main()/多定义一行,有效数据从1号行开始存放,初始化时给0

14、号行赋空串char strN+115=,北京市,上海市,天津市,重庆市,香港特别行政区,澳门特别行政区,合肥市,毫州市,芜湖市,马鞍山市,池州市,黄山市,滁州市,安庆市,淮南市,淮北市,蚌埠市,巢湖市,宿州市,宣城市,六安市,阜阳市,铜陵市,明光市,天长市,宁国市,界首市,桐城市,福州市,厦门市,泉州市,漳州市,南平市,三明市,龙岩市,莆田市,宁德市,建瓯市,武夷山市,长乐市,福清市,晋江市,南安市,福安市,龙海市,邵武市,石狮市,福鼎市,建阳市,漳平市,永安市,兰州市,白银市,武威市,金昌市,平凉市,张掖市,嘉峪关市,酒泉市,庆阳市,定西市,陇南市,天水市,玉门市,临夏市,合作市,敦煌市,甘

15、南州,南宁市,贺州市,玉林市,桂林市,柳州市,梧州市,北海市,钦州市,百色市,防城港市,贵港市,河池市,崇左市,来宾市,东兴市,桂平市,北流市,岑溪市,合山市,凭祥市,宜州市,贵阳市,安顺市,遵义市,六盘水市,兴义市,都匀市,凯里市,毕节市,清镇市,铜仁市,赤水市,仁怀市,福泉市,海口市,三亚市,万宁市,文昌市,儋州市,琼海市,东方市,五指山市,石家庄市,保定市,唐山市,邯郸市,邢台市,沧州市,衡水市,廊坊市,承德市,迁安市,鹿泉市,秦皇岛市,南宫市,任丘市,葉城市,辛集市,涿州市,定州市,晋州市,霸州市,黄骅市,遵化市,张家口市,沙河市,三河市,冀州市,武安市;unsigned int i,

16、j;for(j=1;j=N-1;j+)for(i=j+1;i0)/j行与i行进行比较/利用0号行实现j行与i行的交换strcpy(str0,strj);strcpy(strj,stri);strcpy(stri,str0);printf(按字母顺序排列的结果如下:nn);for(i=1;i=N;i+)/序号3位,右对齐,不足3位补前导0;城市名16位,左对齐printf(%03d:%-16s,i,stri);/%-16s表示占16位,左对齐printf(n);例:编写程序利用C语言的随机函数rand产生一组(最多100000个)小于1000的随机数,先按产生的原顺序输出,再降序排序后输出,要求

17、在程序运行时先确定要产生的数的个数。#include #include #include #define N 10000void main()int i,j,n,*p;printf(n请输入要产生的数据的个数(1%d):,N);scanf(%d,&n);if(nN)printf(n输入的数值个数超出了要求的范围!n);elsep=(int *)malloc(n+1)*sizeof(int);/分配内存空间if(p=NULL)printf(n内存空间的分配不成功!n);elsesrand(unsigned)time(NULL);/用系统时间初始化随机函数for(i=1;i=n;i+)/用指针变量

18、名按下标法进行访问,也可用指针法访问pi=rand()%1000;printf(n按原序输出:n);for(i=1;i=n;i+)printf(%8d,pi);printf(n);for(j=1;j=2;i-)if(pipi-1)p0=pi;pi=pi-1;pi-1=p0;printf(n按降序输出:n);for(i=1;i=n;i+)printf(%8d,pi);printf(n);free(p);system(pause);例:编写程序,从键盘输入若干个数,降序排序后存入文件jieguo.txt中去,同时将结果在屏幕上显示。此例算法比较简单,主要涉及到文件的基本操作,直接给出程序如下:#i

19、nclude #include #define N 10void main()int aN+1,i,j;FILE *fp;/定义FILE(文件)类型指针变量printf(n请输入%d个待排序的数(整数):,N);for(i=1;i=N;i+) /输入原始数据scanf(%d,&ai);for(j=1;j=N-1;j+)for(i=j+1;i=N;i+)if(ajai)a0=aj; /利用空闲的0号元素实现交换aj=ai;ai=a0;printf(n排序如果如下:n);for(i=1;i=N;i+) /向屏幕输出排序结果printf(%6d,ai);fp=fopen(jieguo.txt,w);

20、 /以写方式打开文件if(fp=NULL) /打开文件不成功,提示用户失败信息printf(n文件建立失败,数据保存不成功!n);else /打开文件成功for(i=1;i=N;i+)fprintf(fp,%6d,ai);/向文件中输出排序结果fclose(fp); /文件使用完毕,关闭文件printf(n数据已存入文件jieguo.txt!n); /提示成功保存system(pause);例:编写程序,从文件jieguo.txt中读入所有数据,将其中的偶数全部挑选出来并存入文件oushu.txt中去。#include #include void main()int a,count=0;FIL

21、E *fp1,*fp2; /定义两个FILE(文件)类型指针变量fp1=fopen(jieguo.txt,r); /以读方式打开原始数据文件if(fp1=NULL) /打开文件不成功,提示用户失败信息printf(n文件无法打开,操作不能继续进行!n);else /打开文件成功fp2=fopen(oushuji.txt,w);/以写方式打开存放数据文件if(fp2=NULL) /打开文件不成功printf(n文件无法建立,数据不能保存!n);else /打开文件成功while(!feof(fp1) /数据未读取完fscanf(fp1,%d,&a);/读取一个数printf(%8d,a); /在

22、屏幕上显示if(a%2=0) /判断是否为偶数fprintf(fp2,%6d,a);/将偶数写入目标文件fclose(fp1); /文件使用完毕,关闭文件fclose(fp2); /文件使用完毕,关闭文件printf(n数据已存入文件oushu.txt!n);/提示成功保存system(pause);例:计算如下表达式的值并输出:M!+N!+(M-N)!#include /定义计算阶乘的自定义函数int jiecheng(int x)int i,s;s=1;for(i=1;i=0,N=0且M=N):);scanf(%d%d,&m,&n);if(n0)|(m0)|(mn)printf(n输入数据

23、有误!);else/调用函数jm=jiecheng(m);jn=jiecheng(n);jmn=jiecheng(m-n);sum=jm+jn+jmn;printf(%d!+%d!+%d!=%dn,m,n,m-n,sum);printf(n);例:参数的按值传送:#include void swap(int a, int b)/被调函数 int temp; temp=a; a=b; b=temp;void main()/主函数 int x= 7,y=11; printf(n交换前:); printf(x=%d,y=%d,x,y); swap(x,y);/进行函数调用 printf(n交换后:)

24、; printf(x=%d,y=%dn,x,y);例:参数的按地址传送:#include void swap(int *a, int *b)/被调函数 int temp; temp=*a; *a=*b; *b=temp;void main()/主函数 int x=7,y=11; printf(n交换前:); printf(x=%d,y=%d,x,y); swap(&x,&y);/进行函数调用 printf(n交换后:); printf(x=%d,y=%dn,x,y);函数递归调用,求n! :#include long factn(int n) long s; if(n=0) return(1)

25、; else s=n*factn(n-1); return(s); void main()long n; printf(n请输入一个不小于0的整数:); scanf(%d,&n); printf(n%d!=%dn,n,factn(n);课后练习题u 从键盘任意输入三个数,要求按从小到大的升序输出。u 输入一个年份,自动判断是平年还是闰年。u 编程从键盘输入20个数,要求输出其中最小的前5个。u 编程求以下不定方程组的所有正整数解:a+b+c+d=145a+2b+3c+4d=200u 编程从键盘输入一行文字,每行的长度最长为80个字符,分别统计出其中大写字母、小写字母、数字字符及其它字符的个数并输出。u 编程输出如下格式图形(要求将输出的行数由输入的值来控制,否则不得分):*

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1