已阅读5页,还剩35页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言程序设计实验教学大纲学时课程总:64 学分:4 实验学时:24 实验个数:9 实验学分: 1.5课程性质:必做 适用专业: 计算机科学技术、网络工程、软件工程、电子商务、教育技术教材及参考书:C语言程序设计与实践实验指导,谢满得 邵俊 编著,机械工业出版社,2014年1月 大纲执笔人:廖雪花 大纲审定人: 一、实验课的性质与任务C语言程序设计实验是面向计算机相关专业学生开设的C语言程序设计实验课,是配合C语言程序设计课程而开设的实践性教育环节。本课程的主要任务是让学生充分掌握C语言程序设计的基本概念、各种数据类型的使用技巧、模块化程序设计的方法等。C语言程序设计实验对课程中所涉及的知识进行验证,同时也是学生很好地学习课程的辅助手段。通过C语言上机实验的教学活动,使学生真正全面掌握C语言的基础知识,培养和提高学生的程序开发能力。二、实验课程目的与要求1实验目的通过实验课程的学习实践,加深学生对所学的基本概念、基础理论和知识的理解,熟悉使用Visual C+ 6.0集成环境进行C语言的编写、编译与调试。同时,通过项目开发全过程的全方位指导,从需求分析、算法设计到程序编写和过程调试,以项目实训的形式引导和帮助学生解决实际问题,提高学生解决具体问题的能力,以及培养学生用多函数、多文件组织程序的思维习惯,为今后的后继课程学习和实际工作打下良好基础。2实验要求(1)掌握C语言程序的基本格式,了解C程序的开发过程和C语言中的一些常用概念。(2)掌握常量和五种基本数据类型变量的使用。(3)掌握C表达式和运算符的正确使用,熟练掌握数据输入、输出函数。(4)掌握条件转移语句if-else和选择分支语句switch;掌握三种程序跳转的方法,即break语句、continue语句、return 语句。(5)掌握循环语句(for语句;do-while语句;while语句)的正确使用,认真体会应该如何组织循环。(6)掌握数组的定义、赋值,一维数组与二维数组的使用。(7)掌握函数的定义、函数的调用以及函数的类型说明。(8)掌握局部变量、全局变量的定义和使用。(9)掌握指针的基本概念以及数组与指针、指向指针的指针的基本用法。(10)掌握结构体变量的定义,引用结构体中成员的方法,应用结构数组解决实际问题;共用体的概念,引用共用体中成员的方法。(11)掌握链表的类型定义及其基本操作。(12)掌握文件的打开、读写及关闭,并能运用文件提高编程的效率。(13)理解项目式程序开发的过程。三、实验项目及内容提要C语言程序设计实验课程 (1107142019)序号实验项目编号实验名称学时必做选做学分数实验类型内容提要基本操作验证综合设计1实验一数据类型和表达式211、了解C语言中数据类型的意义。2、理解常用运算符的意义。3、掌握C语言表达式的运行规则2实验二分支结构程序设计21了解和掌握分支语句的使用,包括if语句的各种形式以及switch语句3实验三循环结构程序设计221、使用循环语句完成累乘、图像输出的程序编写。2、掌握较复杂结构程序的编写。3、掌握程序调试的方法4实验四数组程序设计42掌握一维和二维数组的使用技巧5实验五函数521、学习函数的编程思想,编写一个包括34个函数的程序。2、掌握函数中参数传递的两种方式和函数的相互调用6实验六指针321、用指针作为函数参数完成字符串的传递。2、掌握函数中参数传递的两种方式7实验七字符串与指针211、掌握用指针进行函数参数传递的方法。2、掌握指针数组和二维数组间的关系以及进行参数传递时的写法8实验八结构体211、掌握结构体的定义、数据输入方法。2、掌握结构体成员变量的两种访问方法。3、掌握编写程序完成单链表的建立和查询方法9实验九文件操作211、掌握文件的打开和关闭。2、精通文件的读写操作。3、了解文件的定位操作及文件的检测函数。4、掌握文件的应用四、实验内容安排:实验一 数据类型和表达式 实验( 验证性 实验 2学时)1、目的要求:(1)了解C语言中数据类型的意义。(2)理解常用运算符的意义。(3)掌握C语言表达式的运行规则。(4)编写实验报告。2、实验内容(参考实验指导书):(1)计算由键盘输入的任何两个双精度数据的平均值。#includemain()double a,b;printf(please input two real numbers:n);scanf(%lf%lf,&a,&b);printf(the twos average is: %.4lfn,(a+b)/2);(2)写一个输入7个数据的程序,把输入的数据代入a + b * (c d ) / e * f g 表达式进行运算。#includemain() float a,b,c,d,e,f,g,x; scanf(%f%f%f%f%f%f%f,&a,&b,&c,&d,&e,&f,&g); x=a + b * (c - d ) / e * f - g; printf(x=%.4fn,x);(3)编写一个C语言程序,测试下列各表达式: i, j i + 1 , j + 1 i+ , j+ +i , +j i+j#include main() int i=1,j=1; printf(%d %dn,i+1,j+1); printf(%d %dn,i+,j+); printf(%d %dn,+i,+j); printf(%dn,(i+)+(+j);(4)输入存款金额money,存期year和年利率rate,根据下列公式计算存款到期时的利息interest(税前),输出时保留2位小数。 interest = money(1+rate)year money#include#includemain() int year=2; float rate=0.1,money=1000; float interest; interest=money*pow(1+rate),year); printf(%10.2f,interest);(5)输入华氏温度,输出对应的摄氏温度。计算公式如下: c = 5 * ( f - 32) / 9 其中,c表示摄氏温度,f表示华氏温度。#include main()int c,f;scanf(%d,&f);c = 5 * ( f - 32) / 9;printf(%d,c);实验二 分支结构程序设计 实验( 验证性 实验 2学时)1、目的要求:(1)了解和掌握分支语句的使用,包括if语句的各种形式以及switch语句。(2)编写实验报告。2、实验内容(参考实验指导书):(1)编写一个程序完成输入一个整数,输出它的符号。#includemain() int i; scanf(%d,&i); if(i0) printf(+); else printf(-); (2)请编写居民应交水费,并提供各种测试数据。 居民应交水费y(元)与月用水量x(吨)的函数关系式如下: 0 x 15#include main()float x,y;scanf(%f,&x);if(x=0&x15)y=2.5*x-10.5;printf(%f,y);(3)请根据输入的学生成绩给出成绩等级的判断,判断规则如下: 如果输入的成绩大于等于90,则输出优秀; 如果输入的成绩小于90、大于等于80,则输出良好; 如果输入的成绩小于80、大于等于70,则输出中等; 如果输入的成绩小于70、大于等于60,则输出及格; 其他输出不及格。 #include main()int x;scanf(%d,&x); if (x=90) printf(优秀n); else if (x=80&x=70&x=60&x=0&x60)printf(不及格n);(4)运输公司对用户计算运费。路程(s)越远,每公里运费越低。标准如下: s = 250km 没有折扣 250km s 500km 2%折扣 500km s 1000km 5%折扣 1000km s 2000km 8%折扣 2000km s 3000km 10%折扣 3000km s 15%折扣 设每公里每吨货物的基本运费为p,货物重为w,距离为s,折扣为d,则总运费的计算公式为: f = p * w * s * ( 1 d ) 请编程实现:从键盘输入基本运费p,货物重w,距离s,计算输出用户最终需要支付的运费。#includemain()int c,s;float p,w,d,f;scanf(%f,%f,%d,&p,&w,&s);if(s=3000)c=12;elsec=s/250;switch(c)case 0:d=0;break;case 1:d=2;break;case 2:case 3:d=5;break;case 4:case 5:case 6:case 7:d=8;break;case 8:case 9:case 10:case 11:d=10;break;case 12:d=15;break;f=p*w*s*(1-d/100.0);printf(freight=%15.4fn,f);实验三 循环结构程序设计 实验( 验证性 综合性 实验 2学时)1、目的要求:(1)使用循环语句完成累乘、图像输出的程序编写。(2)掌握较复杂结构程序的编写。(3)掌握程序调试的方法。(4)编写实验报告。2、实验内容(参考实验指导书):(1)已知xyz + yzz = 532,其中x、y、z都是数字(09),编写一个程序求出x、y、z分别代表什么数字。#includemain() int x,y,z; for(x=1;x=9;x+) for(y=1;y=9;y+) for(z=1;z=9;z+) if(100*x+10*y+z+100*y+10*z+z=532) printf(%d %d %d,x,y,z); getchar(); (2)编写一个程序打印如下对称图形(行数由键盘输入19范围的值),例如下面是输入的数字4时的情形: 4444444 33333 222 1 222 33333 4444444#includemain() int i,j,k,n; printf(请输入一个数字n); scanf(%d,&n); i=n; for(i=0;i=n) k=2*n-2-i; for(j=0;jk;j+) printf( ); for(j=0;j2*(n-k)-1;j+) printf(%d,n-k); printf(n); getchar();(3)学校有近千名学生,在操场上排队,5人一行余2人,7人一行余3人,3人一行余1人,编写一个程序求该校的学生人数。#includemain() int i; for(i=900;i=1100;i+) if(i%5=2&i%7=3&i%3=1) printf(%dn,i); break; getchar(); (4)学校某班A、B、C、D四位同学中的一位做了好事不留名,表扬信来了之后,班主任问这四位是谁做了好事,四位回答如下: A说:不是我。 B说:是C。 C说:是D。 D说:他胡说。 已知三个人说的是真话,一个人说的是假话。请根据这些信息,找出做了好事的人。#includemain() int i,j,a,b,c,d; for(i=0;i=4;i+) for(j=0;j=4;j+) if(j=i) switch(j) case 0:a=1;b=0;c=0;d=0; break; case 1:a=0;b=1;c=0;d=0; break; case 2:a=0;b=0;c=1;d=0; break; case 3:a=0;b=0;c=0;d=1; break; default:break; if(a+b+c=1&b+c=1&c+d=1&b+c+d=1) printf(做好事的人是%cn,i+a); getchar(); 实验四 数组程序设计 实验( 验证性 综合性 实验 4学时)1、目的要求:(1)掌握一维和二维数组的使用技巧。(2)编写实验报告。2、实验内容(参考实验指导书):(1)从键盘输入一个长度为N(比如10)的整型数组,而后将数组中小于零的元素移动到数组的前端,大于零的元素移到数组的后端,等于零的元素留在数组中间。比如原来数组为:2 -5 -89 75 0 -89 0 93 48 0,经过处理后的数组为:-5 -89 -89 0 0 0 75 93 48 2。由于不要求数组有序,所以不允许用排序方法。提示:1)输入N个数据,构建数组。2)按照要求确定数据的位置,需要注意循环条件的确定、0数据元素往中间推的实现过程以及数组处理的方向。#include#include#define N 10main()int aN=2,-5,-89,75,0,-89,0,93,48,0;int i,t,j;for(i=0;iN;i+)printf(%4d,ai);printf(n);for(i=0;iN;i+)for(j=i+1;j0&aj0&aj=0)t=ai;ai=aj;aj=t;else if(ai=0&aj0)t=ai;ai=aj;aj=t;for(i=0;iN;i+)printf(%4d,ai);printf(n);(2)设数组a的定义如下:int a20 = 2,4,6,8,10,12,14,16; 已存入数组中的数据值已经按由小到大的顺序存放,现从键盘输入一个数据,把它插入到数组中,要求插入新数据以后,数组数据仍然保持有序。请编写一个程序实现上述功能。提示:1)定义整型数组并初始化。2)从键盘输入一个数据。3)将该数据插入到数组中,由于要保证插入的数组仍然有序,所以需要查找插入的位置。4)输出插入数据以后的数组。#includemain() int a9=2,4,6,8,10,12,14,16; int i,j,number; printf(原数组n); for(i=0;i=8;i+)/输出数组原有的元素 printf(%d ,ai); printf(n); printf(请输入一个数据n); scanf(%d,&number); i=0;/以下三行找到插入位置 while(ainumber&i=i;j-)/将插入点以后的元素顺序往后移一位 aj+1=aj; ai=number;/插入数据 printf(输出改变后的数组n); for(i=0;i=8;i+)/输出插入后仍有序的数组 printf(%d ,ai); (3)写一个3 x 5矩阵的转置程序,输出其原矩阵的值和转置以后的结果。提示:1)定义一个二维数组及相关变量。2)对二维数组赋值,可以由键盘输入,也可以通过其他方式赋值。3)输出转置前的二维数组。4)对二维数组中的值进行转置。5)输出转置后的二维数组中的值。#include#includemain()int i,j;int a35=1,2,3,4,5,6,7,8,9,1,2,3,4,5,0;for(i=0;i3;i+)for(j=0;j5;j+) printf(%dt,aij);printf(nn); printf(转置后的矩阵为n);for(i=0;i5;i+) for(j=0;j3;j+) printf(%dt,aji); printf(nn); (4)编程实现随机产生10个位于区间100 200互不相等的整数,并将其按降序排序和输出。#include#include#include#define random(x)(rand()%101+100)main() int i,j,k,n;/产生随机数 int a10; srand(int)time(0); for(i=0;i=9;i+) ai=random(200); printf(%d ,ai); printf(n); for(i=0;i=9;i+)/排序 k=i; for(j=i;j10;j+) if(akaj)k=j; n=ai; ai=ak; ak= n; printf(排序后的数组为n); for(i=0;i10;i+) printf(%d ,ai); printf(nn); 实验五 函数 实验( 验证性 综合性 实验 5学时)1、目的要求:(1)学习函数的编程思想,编写一个包括34个函数的程序。(2)掌握函数中参数传递的两种方式和函数的相互调用。(3)编写实验报告。2、实验内容(参考实验指导书):(1)写一个函数int digit( int n , int k ),它返回数n的从右向左的第k个十进数字值。例如,函数调用digit(1234,2)将返回值3。#includevoid digit(int n,int k);main() int x,y; printf(请输入一个数据n); scanf(%d%d,&x,&y); digit(x,y);void digit(int n,int k) int i,j,a,b; b=n%10; a=(n/10)%10; j=(n/100)%10; i=(n/1000)%10; n=1000*i+100*j+10*a+b; if(k=1) printf(%dn,b); else if(k=2) printf(%dn,a); else if(k=3) printf(%dn,j); else if(k=4) printf(%dn,i);(2)写一个函数int isprime(int n),当n是质数时,函数返回非零值;当n是合数时,函数返回零值。#include#includeint isprime(int n);main() int x; printf(请输入一个整数n); scanf(%d,&x); printf(%dn,isprime(x); int isprime(int n) int i=2;while(isqrt(n)if(n%i=0)return 0;i+;return 1;(3)写一个函数reverse( char s),将字符串s中的字符串倒序输出。试分别用递归和非递归两种形式编写。递归型:#include#includevoid res(char s,int len);void reverse(char b);void main()char a100;printf(请输入一串字符:n);gets(a);reverse(a);printf(n);void res(char s,int len)if(len=0)printf(%c,slen-1);len-;res(s,len);void reverse(char b)res(b,strlen(b);非递归型:#includevoid reverse(char s);void main()char s100;printf(请输入一串字符n);gets(s);reverse(s);printf(n);void reverse(char s)int j,i=0;doi+;while(si!=0);for(j=i-1;j=0;j-)printf(%c,sj);(4)写一个主函数输入测试数据(自己指定),并调用上述函数,检查函数功能的正确性。判断奇偶性:#includeint parity(int n);void main()int x;printf(please input a number:n);scanf(%d,&x);parity(x);int parity(int n)if(n%2=0)printf(evenn);elseprintf(oddn);return 0;(5)一个数如果从左到右和从右到左读,数字是相同的,则称这个数字为回文数,比如898、1221、15651都是回文数。求:既是回文数又是质数的5位十进制数有多少个?要求:回文判断和质数判断都需要通过子函数实现,输出的时候要求5个数字一行。#include #includeint hw(int n);int isprime(int n);void main()int i;int cnt=0;for(i=10000;i100000;i+)if(hw(i)if(isprime(i)=1)cnt+;printf(%dt,i);printf(n合计:%d个n,cnt);int isprime(int n) int i=2;while(i am,则x只可能在区间am + 1 , an若x max|midl)max-;found(s,max,min,l);elsemin+;found(s,max,min,l);getchar();int main()int a10,i,n;for(i=0;i10;i+)scanf(%d,&ai);scanf(%d,&n);found(a,9,0,n); 实验六 指针 实验( 验证性 综合性 实验 4学时)1、目的要求:(1)用指针作为函数参数完成字符串的传递。(2)掌握函数中参数传递的两种方式。(3)编写实验报告。2、实验内容(参考实验指导书):(1)编写一个函数char *delk( char *sp),把sp所指向的字符串中所有的“$”字符删除,并把处理后的字符串指针返回。#includevoid delk(char *s,char c) char s250; int i,j; for(i=0,j=0;si!=0;i+) if(si!=c) s2j=si; j+; s2j=0; for(i=0;s2i!=0;i+) si=s2i; si=0; int main() char str20,c;printf(请输入串字符n);gets(str);printf(请输入要删去的字符n);scanf(%c,&c); delk (str,c); puts(str);(2)写一个函数int find( char *s1, char *s2),函数find的功能是查找串s1中是否包含指定的词(s2指向),如果存在则返回第1次出现的位置,否则返回-1.约定串中的词由1个或1个以上的空格符分隔。#includeint find(char *s1,char *s2)int i=0,j=0;char *p=s2;for(;s1!=0;s1+,i+)if(*s1!=*s2)s2=p;j=0;if(*s1=*s2)j+;s2+;if(*s2=0)return i-j+2;return -1;void main()char s130,s210;printf(请输入一句话:n);gets(s1);printf(请输入一个词:n);gets(s2);printf(%dn,find(s1,s2);(3)编程实现将输入的十进制整数n通过函数DtoH转换为十六进制数,并将转换结果以字符形式输出。例如:输入十进制数79,将输出十六进制数4f。#includeint DtoH(int n,int a) int i=0; while(n!=0)int bit=n%16;ai=bit;i+;n=n/16; return i; int main() int x; printf(请输入一个十进制整数n); scanf(%d,&x); int a10=0; int nbits=DtoH(x,a); int i; printf(转换成十六进制后的数为n); for(i=nbits-1;i=0;i-)if(ai9)printf(%c,ai-10+A);elseprintf(%d,ai); printf(n);(4)定义函数void Merge(int a, int n, int b, int m),参数a、b为一维数组,数组中的数据为升序排列,n和m分别为它们的元素个数。函数的功能为:将数组a和b合并为一个数组,合并后的结果存放于数组a中,要求合并后的数组a仍旧为升序排列。请编程实现,并编写main函数对其测试。#includevoid Merge(int a,int n,int b,int m)int *p,*q,i,j,k;p=a; q=b;for(i=0;i0&*(p+i)*(p+i-1)*(p+i)=*q;q+;for(i=0;i10;i+)for(j=i+1;j*(p+j)k=*(p+i);*(p+i)=*(p+j);*(p+j)=k;main()int a10=2,3,5,7,9,b5=1,4,6,8,10;int i;Merge(a,10,b,5); for(i=0;i10;i+)printf(%3d,ai);实验七 字符串与指针 实验( 验证性 综合性 实验 2学时)1、目的要求:(1)掌握用指针进行函数参数传递的方法。(2)掌握指针数组和二维数组间的关系以及进行参数传递时的写法。(3)编写实验报告。2、实验内容(参考实验指导书):(1)编写一个书名排序程序,输入10个书名存入一个二维数组,用函数void sortstring( char *name , int n)实现它们的字典顺序。#include#includevoid sortstring(char *name,int n)char *p;int i,j;for(i=0;in-1;i+)for(j=i+1;j0)p=namei;namei=namej;namej=p; main()char *name=hello,world,start,end,then,first,follow,watch,see,hear;int a;sortstring(name,10); for(a=0;a10;a+)printf(%sn,namea);(2)编写函数void search( char *s1, char *s2, char *s3)。函数search()从已知的两个字符串s1与s2中找出它们都包含的最长的单词放入字符串s3,约定字符串中只有小写字母和空格字符,单词用1个或1个以上空格分隔。#include #include #include void search(char *s1, char *s2, char *s3) char *p; int word,i,m,n; char a20; p=s1; s30=0; while (*p!=0) word=0; for (i=0;pi!=0;i+) if (pi!= &word=0) word=1;m=i; else if (pi= &word=1) n=i;break; if (pi=0&word=1)n=i; if (word=1) strncpy(a,p+m,n-m); an-m=0; char *pfind; if ( (pfind=strstr(s2,a)!=NULL ) if ( *(pfind+strlen(a)= | *(pfind+strlen(a)=0 ) if (strlen(a)strlen(s3) strcpy(s3,a); p=p+n; else break; main() char *s1=Whats your name;char *s2=My name is 007; char s320; search(s1,s2,s3);printf(%sn,s3);(3)编写一个主函数,测试上述两个函数的正确性。(4)输入一个字符串,内有数字和非数字字符,例如: A123cdf 456.78cpc876.9er 849.1 将其中连续的数字作为一个实数,依次存放到一数组a中。例如123存放在a0,456.78存放在a2,依次类推,统计共有多少个数,并输出这些数。#includevoid f(char *sp,float b)char *p;floa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 IEC 60153-2:2025 EN Hollow metallic waveguides - Part 2: Relevant specifications for ordinary rectangular waveguides
- 【正版授权】 ISO/TS 8100-10:2025 EN Lifts for the transport of persons and goods - Part 10: Building Information Modelling
- 分包协议总包协议书
- 河南鹤壁市淇滨区招考事业单位专业技术人员易考易错模拟试题(共500题)试卷后附参考答案
- 教育部做好2025届全国普通高校毕业生就业创业工作易考易错模拟试题(共500题)试卷后附参考答案
- 广西壮族自治区事业单位联考招聘易考易错模拟试题(共500题)试卷后附参考答案
- 核对社保基数协议书
- 广州市天河区体育局2025年下半年招考合同制工作人员易考易错模拟试题(共500题)试卷后附参考答案
- 占用资质中标协议书
- 杀菌锅销售合同范本
- 2025年青少年航天知识竞赛真题卷及答案
- 2025年大学《传播学-传播研究方法》考试备考题库及答案解析
- 2025年压疮护理指南
- 按摩行业服务礼仪培训
- 预应力管桩施工培训
- DB62T 3130-2017 公路沥青路面碎石封层设计与施工技术规范
- 知道智慧网课《科技伦理》章节测试答案
- 机动车维修企业质量信誉考核档案
- 制造商授权函格式英文版
- 超市消防安全检查表
- 高建华用人文化
评论
0/150
提交评论