C语言程序设计实验课程实验上机.docx_第1页
C语言程序设计实验课程实验上机.docx_第2页
C语言程序设计实验课程实验上机.docx_第3页
C语言程序设计实验课程实验上机.docx_第4页
C语言程序设计实验课程实验上机.docx_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

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

文档简介

课 程 实 验 报 告课程名称: C语言程序设计 专业班级: 信息安全 学 号: 姓 名: 指导教师: 报告日期: 2014年6月16日 计算机科学与技术学院目录实验概述3第一次实验41.1实验目的41.2 实验内容4课本作业4Word作业51.3 实验小结9第二次实验102.1 实验目的102.2实验内容10课本作业10Word作业132.3实验小结15第三次实验153.1 实验目的153.2 实验内容16课本作业16Word 作业193.3实验小结22第四次实验224.1实验目的224.2实验内容22课本实验22Word作业234.3实验小结26第五次实验265.1实验目的265.2 实验内容26课本实验26Word作业295.1实验小结32第六次实验336.1 实验目的336.2实验内容33课本实验33Word作业556.3实验小结64实验总结64 实验概述 语言是程序设计的工具,而学习语言的目的就是要能够进行程序设计。因此,要更具深度的扎扎实实打好C语言基础,能够熟练掌握编译工具:同时更加突出程序设计,培养学生用C语言编译解决本专业基础性,底层性,系统性问题的能力。 C语言是目前全球范围内流行和使用最为广泛的一种语言,选C语言作为程序设计的语言工具无疑是最合适的。但是,学习C语言的根本目的是希望能够以C语言为工具进行程序设计。用C编程实现计算机的解题算法或解题任务。因此,我们在学习C语言的同时,应该同时学好程序设计。通过C语言的学习使自己打下良好的基础,通过上机编程了解和掌握经典算法和数据结构,并能够用C编程解决实际问题,尤其是本专业的,底层的,系统地基础性问题。我们通过课本知识打好C语言基础,通过程序设计及编程巩固知识,更好的理解C语言的基本语法和语义,学好用好C,同时具备语言成分,编译系统,标准库函数的设计实现问题。本次上机除基本数据类型,数组,结构,联合字段外等构造类型外,突出介绍了各类指针,指针与数组的关系,类型表达式,复杂类型等难度较高的数据类型。不回避难点,让学生掌握克服难点的方法,打下坚实的语言基础。上机实验题目加强了如C的字符串库函数设计,简单宏替换的实现,模拟串进位的任意超常数据的加法运算,以函数指针为成员的结构设计等内容,即用C编程解决本专业的基础性问题的程序设计能力,为培养学生今后写底层程序,系统程序奠定扎实基础。同时上机实验通过类型说明符的优先级和结合性类型表达式推倒解释各种复杂声明,培养学生的抽象思维能力,形式化的分析推理能力,以及精确的理解C语言的语义语法的能力。 第一次实验1.1实验目的 (1)熟练掌握各种运算符的运算功能,操作数的类型,运算结果的类型及运算过程中的类型转换,C语言特有的运算符,如位运算符,问号运算符,逗号运算符等。熟记运算符的优先级和结合性。 (2)掌握个体, getchar,putchar,scanf,printf 函数的用法。 (3)掌握简单C程序的编写方法。1.2 实验内容课本作业(一) 编写一个程序,输入字符C,如果c是大写字母,则将c转化成小写字母,否则c的值不变,最后输出c.#includeint main(void)char c;printf(input a char pleasen);c=getchar();c=c91?c-A+a:c;putchar(c);return 0; (二)编写一个程序,输入无符号短整数x,m,n(0=m=15,1=n=16-m),取出x从第m位开始向左的n位(m从右至左的编号为015),并使其左端(第15位)靠齐。#includeint main(void)int x,m,n,h;printf(input x,m,n please,0=m=15,1=n=0&m=1&n=16-m) h=x16-(m+n+1);printf(h=%dn,h);else printf(errorn);(三)IP地址通常是4个用句点分割的小整数(即点分十进制),如32.15.1.102。这些地址机器中用无符号长整形表示。编写一个程序,以机器存储的方式读入一个互联网IP地址,对其进行译码,然后用常见的句点分割的四部分的形式输出。#includeint main(void) int x,i,t=0; printf(input x pleasen);scanf(%d,&x);for(i=0;i3;i+) t=x&(08; printf(%d.,t); t=x&(08); printf(%dn,t); return 0;Word作业(一) 设计一个程序,在字符模式下,以某个字符拼出“王”汉字图形,显示输出。#includevoid main(void) printf(1111111111111n); printf( 111 n);printf( 111 n);printf(1111111111111n);printf( 111 n);printf( 111 n);printf(1111111111111n);return 0;(二) 输入一个华氏温度,要求输出摄氏温度。公式为c=5/9*(f-32)。#includeint main(void) float fahr;printf(input a fahr pleasen); scanf(%f,&fahr);printf(%f:%fn,fahr,(5.0/9)*(fahr-32); return 0;(三) 设计3种算法,完成交换整型两个变量值的程序。#includeint main(void)int x,y,t;printf(input x,y pleasen);scanf(%d%d,&x,&y);t=x;x=y;y=t;printf(x=%d y=%d,x,y);return 0;#includeint main(void)int x,y;scanf(%d%d,&x,&y);printf(x=%d y=%d,y,x); return 0;#includeint main(void)int x,y,t; printf(input x,y pleasen);scanf(%d%d,&x,&y); t=x+y;x=t-x;y=t-y;printf(x=%d y=%d,x,y);return 0;4. 设计一个程序,完成如下功能:输出一个三位数,将它反向输出。如输入127,输出721。#includeint main(void)int x,y;printf(input a number (100=x1000)n); scanf(%d,&x); y=x%100/10*10+x/100+x%10*100;printf(%dn,y);return 0;5. 设计2种完成计算MAXx,y,z的程序。#includeint main(void)int x,y,z;printf(input x,y,z pleasen);scanf(%d%d%d,&x,&y,&z); x=y?printf(%dn,x=z?x:z):printf(%dn,y=z?y:z);return 0;#includeint main(void) int i,x,y; printf(input three numbersn);scanf(%d,&x);for(i=0;ix) x=y;printf(%dn,x);return 0;6. 设计一个程序,完成计算3个数的居中数。#includeint main(void)int x,y,z;printf(input three numbers pleasen);scanf(%d%d%d,&x,&y,&z);printf(%dn,x=y?(y=z?y:(x=z?z:x):(x=z?x:(yz?z:y);return 0;7. 设计计算一元二次方程的根的程序。#include#includeint main(void)float a,b,c,t,x1,x2;printf(ax*x+x*b+c=0,input a,b,cn);scanf(%f%f%f,&a,&b,&c);t=b*b-4*a*c;if(a=0) printf(errorn);if(t=0) printf(x1=%fnx2=%fn,(-b+sqrt(t)/(2*a),(-b-sqrt(t)/(2*a);if(t0) printf(x1=%f+%finx2=%f-%fin,-b/(2*a),sqrt(-t)/(2*a),-b/(2*a),sqrt(-t)/(2*a);return 0; 8. 根据任意三角形的面积公式(海伦公式):S = p (p-a)( p-b)( p-c ), 其中,p=(a+b+c)/2, a.b.c为三角形三边,设计一个程序计算任意三角形的面积。#include#includeint main(void)float a,b,c,p,s; printf(input a,b,cn); scanf(%f%f%f,&a,&b,&c); p=(a+b+c)*0.5; s=sqrt(p*(p-a)*(p-b)*(p-c); printf(s=%fn,s);return 0;1.3 实验小结(1)学会了用位运算,同时明白了可困扰我很久的getchar与get区别。(2)学会了用数学思想解决问题以简化问题。(3)整形转化成浮点形时,注意先转化小数形式。 第二次实验2.1 实验目的(1)掌握复合语句,if语句,switch语句的使用,熟练掌握for,while,do-while三种基本循环控制语句的使用,掌握重复循环技术,了解转移语句与标号语句。(2)熟练运用for,while,do-while语句来编程。(3)练习转移语句和标号语句的使用 。(4)使用集成开发环境中的调试功能:单步执行,设置断点,观察变量值。 2.2实验内容课本作业(一)假设工资税金按以下方式计算:x1000元,不收取税金;1000=x2000,收取5%的税金;2000=x3000,收取10%的税金;3000=x5000,收取25%的税金。编写一个程序,输入工资金额,输出应收取税金额度,要求分别用if语句和switch语句实现。#includeint main(void)int y;printf(input your salary pleasen);scanf(%d,&y); if(y0)printf(“errorn”);if(y1000&y2000&y3000&y4000&y5000) printf(%fn,y*0.25);return 0;#includeint main(void) int y;printf(input y pleasen);scanf(%d,&y);if(y5000)switch(int)(y/1000)case 0:printf(0n);break;case 1:printf(%fn,y*0.05);break;case 2:printf(%fn,y*0.1);break;case 3:printf(%fn,y*0.15);break;case 4:printf(%fn,y*0.2);break;else printf(%fn,y*0.25);return 0;(二)编写一个程序,将输入的一行字符复制到输出,复制过程中将一个以上的空格字符用一个空格代替。#includeint main(void)char s1000,c1000;int i,j=0,t=0;printf(input a text end of 0 pleasen);gets(s); for(j=0;sj!=0;j+); for(i=0;ij;i+) if(si!=32|si=32&si+1!=32) ct=si; t+; ct=0; puts(c);return 0;(四) 编写一个程序,打印如下的杨辉三角。 0 1 1 1 2 11 3 3 1.说明:本程序中为了打印出金字塔效果,要注意空格的数目。一位数之间是三个空格,两位数之间是2个空格,三位数之间是一位空格。#includeint C(int n,int m);void main(void)int t=10,n=0,m,i;for(;t0;t-)i=t;for(;i0;i-) printf( );for(m=0;m=n;m+)if(C(n,m)10) printf(%d ,C(n,m); if(C(n,m)9) printf(%d ,C(n,m); if(C(n,m)99) printf(%d ,C(n,m);n+;printf(nn);int C(int n,int m) int R;if(m=0|m=n) R=1; else R=C(n-1,m-1)+C(n-1,m);return R;(四)编写一个程序,将用户输入的任意正整数逆转。#includeint main(void) int x,t; printf(input x pleasen); scanf(%d,&x); while(x10) t=x%10; printf(%d,t); x=x/10; printf(%dn,x);return 0;Word作业9. 设计一个计算个人所得税的程序(已作)10. 计算两个自然数的最大公约数和最小公倍数。#includeint main (void)int a,b,i;printf(Input a,b pleasen);scanf(%d%d,&a,&b);if(ab)i=b;elsei=a;while(b%i!=0 | a%i!=0) i=i-1; printf(the greatest comman factor=%dn,i); printf(the lowest common multiple=%dn,(a*b)/i); return 0;11. 输入一个数n(2),判定n是否为素数。#includeint main(void)int x,i;printf(Input x pleasen);scanf(%d,&x);if(x=1) printf(non);elsei=x-1; while(x%i!=0)i=i-1;if(i=1)printf(yesn);else printf(non);return 0; 12. 输出2100范围内的所有素数。要求:不使用子函数。#include void main(void)int x=2,i;for(;x=100;x+)i=x-1; while(x%i!=0) i=i-1; if(i=1) printf(x=%d ,x);if(x%10=9)printf(n);13. 输出九九乘法口诀表#includeint main (void)int x,y;for (x=1;x=9;x+)for(y=1;y=x;y+) printf(%d*%d=%d ,x,y,x*y);printf(n); return 0;了12.3实验小结(1)学会了运用while,for等循环语句。(2)学会了运用switch,if等条件语句。(3)学会 第三次实验3.1 实验目的(1)熟练和掌握函数的定义声明,函数调用与参数传递的方法,以及函数返回值的定义和返回值的使用。(2)熟悉和掌握不同储存类型变量的使用。(3)熟悉多文件编译技术。(4)学会用算法思想解决数学问题。(5)熟练运用循环方法,break等跳出循环。3.2 实验内容课本作业(一) 编写一个程序,让用户输入两个整数,计算两个整数的最大公约数并且输出之。要求用地柜的方法是先求最大公约数,同时以单步执行该程序,观察其递归过程。#includeint dg(int a,int b);int main(void)int a,b;printf(enter two numbers pleasen); scanf(%d%d,&a,&b);dg(a,b);printf(%dn,dg(a,b);return 0;int dg(int a,int b)int r;r=a%b;if(r=0) return b;else printf(b=%d r=%dn,b,r);return dg(b,r); 解题思路:用辗转相处法求解最大公约数,用递归方法得出结果。引用前声明函数。(二) 编写一个程序,验证歌德巴赫猜想:一个大于等于四的偶数都是两个素数之和。#includevoid main(void) int i,x,a,b,t;printf(input an even number pleasen ); scanf(%d,&b); x=2; for(;x=4 is the sum of two primes.10=3+712=5+7.20=3+17#include#define BEGIN 10#define END 20void main(void) int i,x,a,b=BEGIN/2,t;printf(GOLDBACHSCONJECTURE:n); for(;b=END/2;b+) x=2; for(;x=END/2;x+) i=x-1; for(;x%i!=0;) i-; if(i=1) t=2*b-x; a=t-1; if(a!=0) for(;t%a!=0;) a-; if(a=1) printf(%d=%d+%dn,2*b,x,t); break; Word 作业14. 求n个数的最大值、最小值和平均值。要求:不使用数组。#includeint main(void)float max,min,sum,ave,x;int n,i=1;printf(input n pleasen);scanf(%d,&n); printf(Input n numbers pleasen); scanf(%f,&x); sum=max=min=x;ave=0;for(;imax) max=x;else if(minx)min=x;printf(sum=%f,max=%f,min=%f,ave=%fn,sum,max,min,sum*1.0/n);return 0;解题思路:首先输入n决定循环次数。在输入的过程中把输入的每隔数和前一次的结果比较最终可以得出最大和最小值。把每次输入的值相加可得和。给最大和最小值及和出之赋为第一个输入的数,避免出现错误。15. 依据下列格里高利公式,计算圆周率。要求最后一项10-6。#includeint main(void)int i;long float pi,sum1=0,sum2=0;for(i=1;1.0/(4*i-1)1.0e-6;i+)sum1+=1.0/(4*i-3);sum2+=1.0/(4*i-1);pi=4*(sum1-sum2);printf(pi=%6fn,pi);return 0;16. 完全数是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和恰好等于它本身。试求出11000范围内的所有完全数。#includeint main(void)int x,t=0,n=1;for(;n=1;x-) if(n%x=0) t+=x; if(t=n) printf(n=%dn,n);return 0;17. 水仙花数是指一个 3 位数,它的每个位上的数字的 3 次幂之和等于它本身。例如:13 + 53 + 33 = 153。试求出所有的水仙花数。#includeint main (void) int n=100,s1,s2,s3; for(;n=999;n+) s1=(n%10)*(n%10)*(n%10); s2=(n/100)*(n/100)*(n/100); s3=(n/10)%10)*(n/10)%10)*(n/10)%10); if(n=s1+s2+s3) printf(n=%dn,n); return 0;18. 一个的数,其七进制和九进制均为3位数,且3位数的数字正好相反。试求出这个数。#includeint main(void)int s1,s2,s3,h1,h2,h3,i=81;for(;i=342;i+)s1=i/49;s2=(i/7)%7;s3=i%7;h1=i/81;h2=i%9;h3=(i/9)%9;if(s1=h3&s2=h2&s3=h1) printf(i=%dn,i);return 0;19. 求解1313的尾数三位是多少。#includeint main (void)int i=1,n=13,s=13;for(;i=n;i+) s=(s*13)%1000;printf(s=%dn,s);return 0;20. 求解100!尾数有多少个0。#includeint main(void)int i=1,n=100,s=1,t=0;for(i=1;i=100;i+) s=s*i;for(;s%10=0;t+) s=s/10; s=s%1000;printf(t=%dn,t);return 0;3.3实验小结(1)编程时应注意避免溢出,做第20题时,没注意到,s累乘时溢出。(2)学会用break跳出循环。(3)给字母赋值时应注意所赋初值会不会造成错误结果。如第14题如果初值为0可能出错。 第四次实验4.1实验目的(1)掌握文件包含,宏定义,挑件编译,assert 宏的使用。(2)练习带参数的宏定义,条件编译的使用。(3)练习assert宏的使用。(4)使用集成开发环境中的调试功能:单步执行,设置端点,观察变量值。4.2实验内容课本实验(一) 已知三角形的面积是area=sqrt(s*(s-a)*(s-b)*(s-c),其中s=(a+b+c)/2,a,b,c为三角形三边。定义两个带参数的宏,一个用来求s,另一个用来求area,试编写一个程序,用带参数的宏来计算三角形的面积。#include#include#define s (a+b+c)*0.5)#define area sqrt(s*(s-a)*(s-b)*(s-c)int main(void)float a,b,c;printf(input a,b,c pleasen);scanf(%f%f%f,&a,&b,&c);printf(s=%f area=%fn,s,area);return 0;(2)使用条件编译的方法编写一程序,其功能要求是,输入一段电报文字,可以任选两种输出:一为原文输出;二为变换字母的大小写,其他字符不变。用#define命令控制是否大小写。#include#define CHANGEint main(void) int i=0;char a30;printf(enter text pleasen);gets(a); #ifdef CHANGE for(i=0;ai!=0;i+)putchar(ai96?ai-a+A:ai); #else for(i=0;ai!=0;i+) putchar(ai); #endifreturn 0;Word作业21. 斐波那契数列F0=0,F1=1,Fn=Fn-1+Fn-2(n=2,nN*),求Fn。#includeint F(int n);void main(void) int n;printf(input n pleasen);scanf(%d,&n);printf(%dn,F(n);int F(int n)int R;if(n=0) R=0;if(n=1) R=1;if(n1) R=F(n-1)+F(n-2);return R;22. 计算多项式的值anxn+ an-1xn-1+ an-2xn-2+a3x3+ a2x2+ a1x1+ a0#include#define x 2int s(int a,int n);void main(void)int b,n,a100 ;printf(input the number n pleasen);scanf(%d,&n); printf(input a0. an pleasen);for(b=0;bn+1;b+) scanf(%d,&ab);printf(%dn,s(a,n,x); int s(int a,int n) int h,t=1,i=1; if(n0) printf(errorn); if(n=0) h=a0; else do t=t*x; i+; while(in); h=s(&an-1,n-1)+t*an; return h;23. 设计一个计算两个x和y的最大值函数max(x,y),并利用该函数实现求n个数的最大值。#includeint max(int x,int y);void main(void)int x,y;printf(input x,y pleasen);scanf(%d%d,&x,&y);printf(%dn,max(x,y);int max(int x,int y) int R;if(x=y) R=x;else R=y;return R;24. 设计一个判断x是否是素数的函数prime(x),并利用该函数实现输出2100范围内的所有素数#includeint prime(int x);int n=2;void main(void)doprime(n);n+;while(n=200);int prime(int x)int k,limit;if(n=2)printf( %d ,n);return 1;if(!(n%2) return 0;limit=n/2;for(k=3;k=limit;k+=2)if(!(n%k) return 0;printf(%d ,n);return 1;4.3实验小结(1)掌握文件包含,宏定义,挑件编译,assert 宏的使用。(2)练习带参数的宏定义,条件编译的使用。(3)练习assert宏的使用。(4)使用集成开发环境中的调试功能:单步执行,设置端点,观察变量值。 第五次实验5.1实验目的(1)熟悉和掌握C图形库的使用。(2)学会建立库的基本方法。(3)学会使用标准库中的随机数函数。(4)掌握数组的说明,初始化和使用(5)掌握一维数组作为函数参数时实参和形参的用法(6)掌握字符串处理函数的设计,包括串操作及数字串与数之间转换函数的算法。(7)掌握基于二分法策略的二分查找算法和选择排序算法的思想,以及相关算法的实现。5.2 实验内容课本实验(一) 编写一个程序,从键盘读取数据,对一个3*4矩阵进行赋值,求其转置矩阵,然后输出原矩阵和转置矩阵.#includeint main(void) int i=0,j=0;int a34,b43;for(i=0;i3;i+)for(j=0;j4;j+)scanf(%d,&aij);for(i=0;i3;i+)for(j=0;j4;j+)bji=aij;for(i=0;i3;i+)for(j=0;j4;j+) printf(%d ,aij);printf(n); for(j=0;j4;j+)for(i=0;i3;i+)printf(%d ,bji);printf(n); return 0;(二) 编写一个程序,其功能要求是:输入一个整数,将它在内存中二进制表示的每一位转化成对应的数字字符,存放在一个字符数组中,然后输出该整数的二进制表示。#includeint main(void)int x,y;char a16;printf(input a number pleasen);scanf(%d,&x); for(y=0;y16;y+)if(x&(01; for(y=15;y=0;y-) printf(%c,ay); printf(n); return 0;(三) 编写一个程序,其功能要求是:输入n个学生的姓名和c语言课程的成绩,将成绩按从高到低的次序排序,姓名同时做出调整,输出排序后同学的姓名和c语言成绩。然后,输入一个c语言课程成绩值,用二分法查找进行搜索。如果查找到有该成绩,输出该成绩同学的姓名和c语言成绩;否则输出“not found”#includevoid bubble_sort(int a, char c10,int n);int main(void) int i,n,a100,j,s,t;char c10010;printf(input n plesaen);scanf(%d,&n);t=n/2;printf(input the name and the C scores of the students pleasen);for(i=0;in;i+) for(j=0;j10;j+)scanf(%c,&cij); scanf(%d,&ai); bubble_sort(a,c,n);printf(input a score pleasen);scanf(%d,&s);for(i=0;i5;i+)if(s=at) for(j=0;jat) t=(t+n)/2;if(sat) t=t/2; if(t=0&at!=s|t=n-1&at!=s) printf(not foundn); return 0;void bubble_sort(int a,char c10,int n) int i,j,t,k; char q10010; for(i=0;in-1;i+) for(j=0;jaj+1) t=aj,aj=aj+1,aj+1=t; for(i=0;i10;i+) qji=cji; cji=cj+1i; cj+1i=qji; for(k=0;kn;k+) for(i=0;i10;i+) printf(%c,cki); printf(:); printf(%dn,ak);Word作业25. 设计一个实现多个功能(如,N个数求最大数和一元二次方程求根等等)的演示系统。#includeint main(void) char A,m,r;printf(input your aim:the max input m or the root input r please n); scanf(%c,&A); if(A=m) puts(if n1n2 max=n1n); puts(else max=n2n);

温馨提示

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

评论

0/150

提交评论