C语言程序设计-实验信息.doc_第1页
C语言程序设计-实验信息.doc_第2页
C语言程序设计-实验信息.doc_第3页
C语言程序设计-实验信息.doc_第4页
C语言程序设计-实验信息.doc_第5页
已阅读5页,还剩104页未读 继续免费阅读

下载本文档

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

文档简介

此文档收集于网络,如有侵权,请联系网站删除课 程 实 验 报 告课程名称: C语言程序设计 专业班级: 信息安全1302班 学 号: 姓 名: 指导教师: 报告日期: 2014年6月16日 计算机科学与技术学院目录1.实验概述32 第一次实验43 第二次实验194 第三次实验386 第四次实验707 第五次实验888 第六次实验1159 第七次实验14210 实验总结152参考文献1531.实验概述C语言是一种程序设计语言,它既有高级语言的特点也有汇编语言的特点,是C+,C#,JAVA script的基础。因为他高效、灵活、功能丰富、表达力强和较高的可移植性等特点,在程序员中备受青睐,成为最近25年来使用最广泛的编程语言。C语言简洁紧凑,灵活方便。虽然一共才有32个关键字,9中控制语句,但是实现了将高级语言的基本结和低级语言的实用性结合在一起。而且涵盖丰富的运算符,如赋值,强制类型转换等,使表达式更灵活多变。包含整型,实型,字符型,数组,指针,结构体,共用体等。可实现复杂的数据结构的运算。C语言也有不足之处。第一,数据封装性不还,使得数据在安全性上有很大缺憾。第二,语法限制不严格,对变量类型约束不严格,影响程序的安全性。如,不检查数组下标是否越界。但是瑕不掩疵,C语言仍是一门生动的艺术,值得我们深入探究。而本门课程就是将C语言的语法和课程设计结合,在掌握语法规则的基础上,不断加深对于程序设计的理解。掌握语法并不是目的,最终运用C语言去解决问题才是我们应该从这门课程中学会的。本程序设计报告共分为七次上机实验,总共包括?次小实验,涵盖表达式和标准输入输出,流程控制,函数与程序结构,预编译处理,数组,指针和文件实验。不当之处,烦请指正。2 第一次实验2.1.1实验目的实验名称 熟悉C语言程序的开发环境(1)熟悉code:blocks等C语言程序的开发环境;(2)掌握C程序的编辑,编译,链接和运行方法;(3)通过运行简单的C程序,学会在集成开发环境中调试程序的方法。2.1.2 实验内容A试验任务(一)输入2个源程序,然后进行编译、链接、运行以及调试程序的方法,使程序最终输出正确的结果。1) 源程序1说明:以下程序可以实现输入三角形三遍a,b,c的值,计算并输出三角形面积。面积公式为 Area=其中s为三角形半周长。源程序1:#include #include int main(void)float a,b,c,s,t;printf(“Input three edge of the trianglen”);scanf(“%f%f%f”,&a,&b,&c);s=(a+b+c)/2;t=s*(s-a)*(s-b)*(s-c);area=sqrt(t);printf(“area=%dn”,area);return 0;2) 源程序2说明:输入十个整数输出十个数的累加和。源程序2:#include#define N 5;int sum(int x,int n);int main (void) int i,aN,total; printf(Input %d integers please!n,N); for(i=0;iN;i+) scanf(%d,&ai); total=sum(a,N); printf(The sum is %d n,total); return 0;int sum(int x,int n) int i,s; for(s=0,i=0;in;i+); s+=xi; return s;B实验过程及结果(一)源代码1:1)创建工程;2)键入源代码,编译;3)根据提示,检查语法错误,发现没有定义area,修改后,编译;4)定义为float,输出为%d,导致warning,更改输出为%f,编译;5)运行程序正常数据异常数据故更改后源代码为#include #include int main(void)float a,b,c,s,t,area;printf(Input three edge of the trianglen);scanf(%f%f%f,&a,&b,&c);s=(a+b+c)/2;t=s*(s-a)*(s-b)*(s-c);area=sqrt(t);printf(area=%fn,area);return 0;链接 源代码2:1)创建工程,键入源代码,编译;2)根据提示,修改语法错误,编译:3) 运行程序发现在输入5个数字后程序便运行了,修改预编译为#define N 10,在此运行源代码修改为#include #define N 10int sum(int x,int n);int main(void) int i,aN,total; printf(Input %d inegers please!n,N); for(i=0;iN;i+); scanf(%d,&ai); total=sum(a,N); printf(The sum is %dn,total); return 0;int sum(int x,int n) int i,s; for (s=0,i=0;in;i+) s+=xi; return s;链接2.1.3 实验小结(1)熟悉了code:blocks等C语言程序的开发环境;(2)掌握了C程序的编辑,编译,链接和运行方法;(3)通过运行简单的C程序,学会了在集成开发环境中调试程序的方法;(4)提升来了关注细节的能力和加强了耐心;(5)为接下来的难度较高实验的编辑,调试打下了基础。2.2.1实验目的实验名称 表达式和标准输入输出实验(1)熟练掌握各种运算符的运算功能,操作数的类型,运算结果的类型及运算过程中的类型转换,重点是C语言特有的运算符,例如位运算符,都好运算符等,熟记运算符的优先性和结核性;(2)掌握getchar,putchar和printf函数的用法;(3)掌握简单C程序(顺序结构程序)的编写方法。2.2.2实验内容A实验任务(一)给出一个简单的C元语言程序实例,用以完成以下工作:(1)输入华氏温度f,将它转换成摄氏温度C后输出;(2)输入圆的半径r,计算并输出圆的面积s;(3)输入短整数k,p,将k的高字节作为结果的低字节,p的高字节作为结果的高字节,拼出一个新的整数,完成后输出;以上例子程序中存在若干语法和逻辑错误,要求参照对实验进行调试修改,是指能够正确完成指定任务。程序代码:#include#define PI 3.14159; int f; short p,k; double c,r,s; /*for task 1*/ printf(Input Fahrenheit:); scanf(“%d”,f); c=5/9*(f-32); printf(“n%d(F)=%.2f(C)nn”,f,c); /*for task 2*/ printf(input the radius r:); scanf(%f,&r); s=PI*r*r; printf(nThe acreage is %.2fnn,&s); /*for task 3*/ printf(input hex int k,p:); scanf(%x%x,&k,&p); newint=(p&0xff00)|(k&0xff00)8; printf(new int =%xnn,newint);(二)编写一个程序,输入字符c,如果c是大写字母,则将其转换为小写,否则c值不变,最后输出c。(三)编写一个程序,输入无符号短整数x,m,n(0m15,1n16-m),取出x从第m位向左的n位(m从右至左编号015),并使其向左端(第十五位)靠齐。(四)IP地址通常是4个用句点分隔的小整数,如32.55.1.102.这些地址在机器中用无符号长整形表示。编写一个程序,以机器存储的形式读入一个互联网的IP地址,对其译码,然后用常见的句点分隔的四部分的形式输出。例如: 整型676879571的二进制表示是00101000 01011000 01011100 11010011.按照8位一组可表示为40 88 92 211。由于CPU处理数据的差异,它的顺序是颠倒的,所以最终格式为211.92.88.40。B实验过程及结果(一).(1)创建工程,键入程序,编译;(2)按提示,重新定义int newint,更改数据类型,输入输出对应的格式和类型,编译;(3)运行程序一般数据特殊数据故源代码修改为:#include#define PI 3.14159int main() int f; unsigned int newint,p,k; double c,r,s; /*for task 1*/ printf(Input Fahrenheit:); scanf(%d,&f); c=5.0/9*(f-32); printf(n%d(F)=%.2f(C)nn,f,c); /*for task 2*/ printf(input the radius r:); scanf(%lf,&r); s=PI*r*r; printf(nThe acreage is %.2fnn,s); /*for task 3*/ printf(input hex int k,p:); scanf(%d%d,&k,&p); newint=(p&0xff00)|(k&0xff00)8); printf(new int =%xnn,newint); return 0;链接 (二)(1)在草稿纸上写出算法和表达式;(2)创建工程,键入程序,编译;#includeint main() char c; printf(Please input a character:n); c=getchar(); if(c=A)&(c=Z) c=c-A+a; else putchar(c); return 0;提示if语句块内有错,对常数进行赋值运算;更改为c=c-A+a;再次编译(3)运行程序;发现运行结果不正确,调试发现条件永真,修改为#includeint main() int c; printf(Please input a character:n); c=getchar(); if(c=A)&(c=Z) putchar(c-A+a); else putchar(c); return 0;编译完成后,运行:链接(三)(1)在草稿纸上写出算法和表达式;(2)键入源代码,#includeint main() unsigned int x,m,n,ans; printf(Please input x,m,n(0=m=15,1=n=0)&(m=1)&(n=(16-m) ans=(x(16-m-n)&(0xffff(16-m-n); printf(%d,ans); return 0;编译:(3)运行程序(四)(1)思考算法和写出重要表达式;(2)创建工程,键入源代码,编译源代码如下#includeint main() unsigned int m; short a,b,c,d; printf(Please input an ip:n); scanf(%d,&m); a=(m24)&0x000000ff; b=(m24)&0x000000ff; c=(m24)&0x000000ff; d=m&0x000000ff; printf(ip is %d.%d.%d.%d,d,c,b,a); return 0;(3)运行程序错误,检查源代码,发现位运算用错,更改为#includeint main() unsigned long m; short a,b,c,d; printf(Please input an ip:n); scanf(%u,&m); a=(m24)&0x00ff; b=(m16)&0x00ff; c=(m8)&0x00ff; d=m&0x00ff; printf(ip is %d.%d.%d.%d,d,c,b,a); return 0;再次编译运行。go2.2.3实验小结(1)熟悉了各种运算符的运算功能,能自行使用调试功能找出程序逻辑错误之处;(2)掌握了标准输入输出函数getchar,putchar,printf,scanf等。(3)掌握了C语言中最基础的顺序流程的程序的书写;(4)学会了抽象化文字问题,用数学方法和语言解决。3 第二次实验3.1.1 实验目的实验名称 流程控制实验(1)掌握复合语句,if语句,switch语句的使用,熟悉掌握for,while,do-while三种基本的循环控制语句的使用,掌握重复循环技术,了解转移语句与标号语句;(2)熟练运用for,while,do-while语句来编写程序;(3)联系转移语句与标号语句的使用;(4)使用集成开发环境下的调试功能:单步执行、设置断点、观察变量值;实验名称 函数与程序结构实验(5)熟悉和掌握函数的定义、声明,函数的调用与参数的传递方法,以及函数返回值类型的定义和返回值使用;(6)熟悉和掌握不同存储类型变量的使用;(7)熟悉多文件编译技术。3.1.2 实验内容A实验任务(一)编写并上机调试运行能实现以下功能的程序:假设工资税金按以下方法计算:x1000元,不收取税金;1000x2000,收取5%的税金;2000x3000,收取10%的税金;3000x4000,收取15%的税金;4000x5000,收取20%的税金;x5000,收取25%的税金。编写一个程序,输入工资金额,输出应收取税金额度,要求分别用if语句和switch语句来实现。(二)编写一个程序,将输入的一行字符复制到输出,复制过程中将一个以上的空格字符用一个空格代替。(三)编写一个程序,打印如下的杨辉三角。11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 11 6 15 20 15 6 11 7 21 35 35 21 7 11 8 28 56 70 56 28 8 11 9 36 84 126 126 84 36 9 1每个数据值可以由组合计算(表示第i行第j列位置的值),而的计算如下:=1(i=0,1,2,) =*(i-j+1)/j(j=0,1,2,)说明:本程序中为了打印出金字塔的效果,要注意空格的数目。一位数之间是三个空格,两位数之间有2个空格,3位数之间只有一个空格,程序编制过程中要注意区分 。(四)编写一个程序,将用户输入的任意正整数逆转。例如,输入1234,输出 4321。(五)编写一个程序,让用户输入两个整数,计算两个数的最大公约数并输出之。要求用递归函数实现求最大公约数,同时以单步方式执行该程序,观察其递归过程。(六)编写一个程序,验证哥德巴赫猜想:一个大于等于4的偶数都是两个素数之和。(七)编写一个程序,证明对于在符号常量BEGIN和END之间的偶数这一猜想成立。例如BEGIN为10,END为20,则程序的输出应为:GOLDBATCHS CONJECTURE:Every even number n=4 is the sum of two picture.10=3+712=5+720=3+17B实验过程和结果(一)(1)构思算法和表达式;(2)创建工程,键入表达式,编译;利用if语句源代码:#includeint main(void)int x;float a;printf(Please input your income:n);scanf(%d,&x); if(x=1000)&(x=2000)&(x=3000)&(x=4000)&(x5000)a=x*0.25;printf(tax:%fn,a);return 0;运行程序go利用switch语句源代码:#includeint main(void)int x;float a;printf(Please input your income:n);scanf(%d,&x); switch(x/1000) case 0:a=0;break; case 1:a=x*0.05;break; case 2:a=x*0.10;break; case 3:a=x*0.15;break; case 4:a=x*0.2;break; default:a=x*0.25;break; printf(tax=%f,a);return 0;编译:运行程序go(二)(1)设计算法(2)键入程序,编译源代码#include #include int main() int a=0; char b; printf(Please input sentences:n); while(b=getchar()!=EOF) if(b= )&(!a) putchar(b); a=1; else if(b!= ) putchar(b); a=0; return 0;go(3)运行程序(三)(1)设计算法;(2)键入源代码,编译;#include #include int F(int i,int j) if(j=0) return 1; else return F(i,j-1)*(i-j+1)/j; int main() int x=0,y=0,k=21; for(;x=9;x+) printf(%*d,F(x,y); y+; k - =2; for(;y=x;y+) printf(%4d,F(x,y); y=0; printf(n); return 0;(4)运行程序go(四)(1)设计算法;(2)键入源代码,编译;#include #include #include int main() int num,m,i,a,newnum; printf(Please input the digit of number:n); scanf(%d,&m); printf(Please input the number:n); scanf(%d,&num); newnum=0; for(i=1;num=10;i+) a=num%10; num=num/10; newnum=newnum+a*pow(10,m-i); printf(%d,newnum); return 0;(3)运行程序程序含有逻辑错误,开始调试;循环语句条件写错,更改后#include #include #include int main() int num,m,i,a,newnum; printf(Please input the digit of number:n); scanf(%d,&m); printf(Please input the number:n); scanf(%d,&num); newnum=0; for(i=1;num!=0;i+) a=num%10; num=num/10; newnum=newnum+a*(int)pow(10,m-i); printf(%d,newnum); return 0;编译运行程序go(五)(1)设计算法;(2)键入源程序,编译#include #include #include int main() int i,a,b,c,j; printf(Please input 2 interges:n); scanf(%d,%d,&a,&b); if(ba) c=a,a=b,b=c; for(i=b;i=1;i=i-) if(b%i)&(a%i)=0) printf(%dn,i); else printf(None!n); for(j=a;j=a*b;j=j+) if(j%a)&(j%b) printf(%dn,j); return 0; (3)修改好运行程序,发现死循环调试程序后更改为#include int gys(int x ,int y) if(x%y=0)return y; else return gys(y,x%y);int main() int x,y,n; printf(please input xn); scanf(%d,&x); printf(please input yn); scanf(%d,&y); n=gys(x,y); printf(x和y的最大公约数是:%d,n); return 0;Go编译运行程序单步执行:执行完毕后:结果与预计相符,程序正确运行。(六)(1)设计算法;(2)键入源代码,编译#includevoid main()int x,y,z,i,j; for(x=4;x100;x+) for(y=1;yx;y+) for(i=2;iy;i+) if(y%i=0) break; if(i=y) z=x-y; for(j=2;j=z;j+) if(z%j=0) break; if(j=z) printf(%d=%d+%dt,x,y,z); printf(n);提示说明main函数出口参数有错,更改后源代码为#includeint main()int x,y,z,i,j; for(x=4;x100;x+) for(y=1;yx;y+) for(i=2;iy;i+) if(y%i=0) break; if(i=y) z=x-y; for(j=2;j=z;j+) if(z%j=0) break; if(j=z) printf(%d=%d+%dt,x,y,z); printf(n); return 0;GO再次编译程序运行程序正常运行,说明哥德巴赫假说正确。(七)(1)设计算法;(2)键入源代码,编译#include #define BEGIN 10#define END 20#include int main()int a,b,c,d; for(a=BEGIN;a=END;a+=2) for(b=3;b=a/2;b+=2) for(c=2;csqrt(b) d=a-b; else continue; for(c=2;csqrt(d) printf(%d=%d+%dn,a,b,d); return 0;(3)运行程序go3.1.3 实验小结(1)本次实验使我熟练掌握了符合语句,if语句,switch语句是的使用,熟悉了for,while,do-while三种基本的循环控制语句的使用,掌握了重复循环技术,了解了转移语句与标号语句;(2)实习了开发环境中的调试功能:单步执行,设置断点,观察变量值;(3)熟悉了函数的定义,生命,函数的调用和参数的传递,以及函数返回至类型的定义和返回值使用;(4)了解了不同存储类型变量的使用;(5)学会了小组合作,交流想法,从他人的算法中提炼精华,弥补自己算法不足之处;(6)培养了耐心和细心的良好编程品质。4 第三次实验4.11 实验目的实验名称 编译预处理实验(1)掌握文件包含,宏定义,条件编译,assert宏的调用;(2)联系带参数的宏定义,条件编译的使用;(3)联系assert宏的使用;(4)使用集成开发环境中的调试功能:单步执行,设置断点,观察变量值;实验名称 数组实验(5)掌握数组的说明;(6)掌握一维数组作为函数参数时实参和形参的用法;(7)掌握字符串处理函数的设计,包括串操作函数及数字串与数之间转换函数的实现算法;(8)掌握基于分治策略的二分法查找算法和选择排序算法的思想,以及相关算法的实现。4.1.2实验内容A实验任务(一)#define DIF a-b#define SWAP(a,b) a=b,b=aint main() int b,t; printf(input two integers a, b:); scanf(%d,%d,&a,&b); printf(nSUM=%dn the difference between square of b is : %d,SUM,SUM*DIF); SWAP(a,b); Printf(nNow a=%d,b=%dn,a=b); return 0;(二)源程序修改替换下面是用函数实现求两个数中最大数,计算两数和的源程序。在这个源程序中存在若干逻辑和语法错误,要求:(1) 对这个例子的源程序进行调试修改,使之能够完成正确的任务。(2) 用带参数的宏替换函数max,实现求最大数的功能。void main(void) int a,b,c; float d,e; printf(Enter three intergers:);scanf(%d,%d,%d,&a,&b,&c);printf(nthe max of them is %dn,max(a,b,c);printf(Enter two floating point numbers:); scanf(%f,%f,&d,&e); printf(nthe sum of them is %fn,sum(d,e); return 0;int max(int x,int y,int z) int t; if(xy) t=x; else t=y; if(tz) t=z; return t;float sum(float x,float y) return x+y;(三)跟踪调试程序下面程序的功能是利用R计算圆的面积是s,以及面积s的整数部分。现要求:(1) 修改程序,使程序编译通过能够运行(2) 单步执行。进入函数decimal-fraction时,watches窗口中x为何值?在返回main时,watches窗口中i为何值?(3) 排除错误,使程序能够正确求出面积s值的整数部分,不会输出错误信息asseration failed。#define Rint main() float r,s; int s_integer=0; printf(input a number: ); scanf(%f,&r); #ifdef R s=3.14159*r*r; printf(area of round is : %fn,s); s_integer=integer_fraction(s); printf(the integer fraction of area is %dn,s_integer); assert(s-s_integer)1.0); #endif return 0;int integer_fraction(float x) int i=x; return i;编写并上机调试运行能实现以下功能的程序:(四)已知三角形的面积area=s(s-a)(s-b)(s-c),其中s=(a+b+c)/2,a,b,c为三角形的三边。定义两个带参数的宏,一个用来求s,另一个用来求area,试编写一程序,用带参数的宏来计算三角形的面积。(五)使用条件编译方法编译一个程序,其功能要求是,输入一行电报文字,可以任选两种输出,一为原文输出;二为换字母大小输出写(如小写a变成大写A,大写D变成小写d),其他字符串不变,用#define命令控制是否变换字母的大小写。用#define命令控制是否变换字母的大小写。例如,#define CHANGE 1,则输出变换后的文字,若#define CHANGE 0,则原文输出。(六)源程序改错源程序#includeint main() int a10=27,13,5,32,23,3,17,43,55,39; void sort(int,int); int i; sort(a0,10); for(i=0;i10;i+) printf(%6d,ai); printf(n); return 0;void sort(int b,int n) int i,j,t; for(i=0;in-1;i+) for(j=0;jn-1-i;j+) if(bjbj+1) t=bi,bj=bj+1,bj+1=t;(七)源程序修改替换#include#define M 10#define N 3int main() int aM,bM; int i,j,k; for(i=0;i1;i-) for(k=1;ki-1) j=0; bM-i=j? ; if(j) for(k=-j;ki-1;k+) ; for(i=0;iM-1;i+) printf(%6d ,bi); printf(%6dn,a0); return 0;(八)跟踪调试程序#includevoid strncat(char,char,int);int main() char a50=the adopted symbol is ,b27=abcdefghijklmnopqrstuvwxyz; strncat(a,b,4); printf(%sn,a); return 0;void strncat(char s,char t,int n) int i=0,j; while(si+); for(j=0;jn&tj;) si+=tj+; si=0;(九)辨析一个程序,从键盘读取数据,对一个3x4矩阵进行赋值,求其转置矩阵,然后输出原矩阵和转置矩阵。(十)编写一个程序,其功能要求是:输入一个整数,将它在内存中二进制表示的每一位转换为对应的数学自负,存放到一个字符数组中,然后输出该整数的二进制表示。(十一)编写一个程序,其功能要求是:输入n个学会僧的姓名和C语言课程的成绩,将成绩按从高到低的次序排列,姓名同时作相应调整,输出排序后学生的姓名和C语言课程的成绩。然后,输入一个C语言课程成绩值,用二分法查找进行搜索。如果查找到有该成绩,输出该同学的姓名和C语言课程的成绩;否则,输出提示“not found!”。B实验过程与结果(一)键入源代码,编译根据提示修改源代码为#include#define SUM (a+b)#define DIF (a-b)#define SWAP(a,b) t=b;b=a;a=tint main() int a,b,t; printf(input two integers a, b:); scanf(%d%d,&a,&b); printf(nSUM=%dn the difference between square of b is : %d,SUM,SUM*DIF); SWAP(a,b); printf(nNow a=%d,b=%dn,a,b); return 0;再次编译,无错误与警告运行程序go(二)键入源代码,编译根据提示修改源代码为#includeint max(int,int,int);float sum(float,float);int main() int a,b,c; float d,e; printf(Enter three intergers:); scanf(%d%d%d,&a,&b,&c); printf(nthe max of them is %dn,max(a,b,c); printf(Enter two floating point numbers:); scanf(%f%f,&d,&e); printf(nthe sum of them is %fn,sum(d,e); return 0;int max(int x,int y,int z) int t; if(xy) t=x; else t=y; if(tz) t=z; return t;float sum(float x,float y) return x+y;再次编译,发现没有错误与警告,运行程序go带参数的宏替换函数max源代码如下#include#define MAX(a,b,c) if(ab) t=a; else t=b; if(tc) t=cfloat sum(float,float);int main() int a,b,c

温馨提示

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

评论

0/150

提交评论