版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上实验一 数据类型和表达式 实验(验证性 实验 2学时)一、目的要求:(1)了解C语言中数据类型的意义。(2)理解常用运算符的意义。(3)掌握C语言表达式的运行规则。(4)编写实验报告。二、实验内容(参考实验指导书):1、计算由键盘输入的任何两个双精度数据的平均值。(1)算法描述:将数据代入公式(a+b)/2,输出结果。(2)源代码及说明: #include main()double a,b;scanf(%lf %lf,&a,&b);printf(%lf,(a+b)/2); (3)测试数据:2 6 (4)运行结果:4.00000(5)问题及解决方法:问题:格式符使用“%
2、f ”,输出结果总是 0. 。 解决方法:格式符改为”%lf ”。2、 写一个输入7个数据的程序,把输入的数据代入a + b * (c d ) / e * f g 表达式进行运算。(1)算法描述:将数据代入公式a + b * (c d ) / e * f g,输出结果。(2)源代码及说明:#includemain()int a,b,c,d,e,f,g;scanf(%d %d %d %d %d %d %d,&a,&b,&c,&d,&e,&f,&g);printf(%d, a+b*(c-d)/e*f-g);(3)测试数据:1 2 3 4 5 6 7(4)运行结果:-6(5)问题及解决方法:无3、编
3、写一个C语言程序,测试下列各表达式:i, j i + 1 , j + 1i+ , j+i , +ji+j(1)算法描述:定义变量并将其分别代入各表达式中,输出结果。(2)源代码及说明:#includemain()int i=2,j=3;printf(%d %dn,i,j); printf(%d %dn,i+1,j+1); printf(%d %dn,i+,j+); i=2,j=3;printf(%d %dn,+i,+j); i=2,j=3; printf(%dn,(i+)+(+j); (3)测试数据:2 3(4)运行结果:2 3;3 4;2 3;3 4;6(5)问题及解决方法:问题:没有注意变
4、量的使用。解决方法:重新定义变量。4、输入存款金额money,存期year和年利率rate,根据下列公式计算存款到期时的利息interest(税前),输出时保留2位小数。interest = money(1+rate)year - money(1)算法描述:利用函数pow( ),将数据代入公式interest = money(1+rate)year - money输出结果。(2)源代码及说明:#include#include main()double money,rate,interest; int year=0; scanf(%lf %lf,&money,&rate); scanf(%d,&
5、year);interest=money*pow(1+rate, year)-money;printf(%.2lf,interest);(3)测试数据:100 0.1 2(4)运行结果:21.00(5)问题及解决方法:问题:求利率的多次幂解决方法:利用math 函数库里的pow( )函数5、输入华氏温度,输出对应的摄氏温度。计算公式如下:c = 5 * ( f - 32) / 9 其中,c表示摄氏温度,f表示华氏温度。(1)算法描述:将数据代入c = 5 * ( f - 32) / 9,输出结果。(2)源代码及说明:#includemain()double c,f;scanf(%lf,&f);
6、c=5*(f-32)/9;printf(摄氏温度为: %lf,c); (3)测试数据:90.0(4)运行结果:32.(5)问题及解决方法:无三、实验总结:1. 通过实验我清楚的知道了双精度型数据的格式说明符的使用。2. 学会使用pow( )函数。实验二 分支结构程序设计 实验(验证性 实验 2学时)一、目的要求:(1)了解和掌握分支语句的使用,包括if语句的各种形式以及switch语句。(2)编写实验报告。二、实验内容(参考实验指导书):1、编写一个程序完成输入一个整数,输出它的符号。(1)算法描述:if(i0) 输出“+”。 if(i0) 输出“-”。 if(i=0) 输出“0”。(2)源代
7、码及说明:#include main() int i;printf(请输入一个整数:n);scanf(%d,&i);if(i0)printf( + n); else if(i=0) printf(0n);else printf( - n);(3)测试数据:5 -6(4)运行结果:+ -(5)问题及解决方法:无2、请编写居民应交水费,并提供各种测试数据。 居民应交水费y(元)与月用水量x(吨)的函数关系式如下:0x 15(1)算法描述:if x f(x)=0;if 0=xf(x)=4x/3if x15 =f(x)=2.5x-10.5(2)源代码及说明:#includemain()float x,
8、y;scanf(%f,&x);if(x=0&x=90 输出优秀if 80=score90 输出良好if 70=score80 输出中等if 60=score70 输出及格else 输出不及格(2)源代码及说明:#includemain()int score ;scanf(%d,&score);if(score=0&score=100)switch(score/10)case 10:case 9:printf(优秀);break;case 8:printf(良好);break;case 7:printf(中等n);break; case 6:printf(及格n); break;case 5:c
9、ase 4:case 3:case 2:case 1:case 0:printf(不及格n);break;default:printf(你输入的成绩非法n)printf(你输入的成绩非法n);(3)测试数据:98 86 75 64 53 105 -22(4)运行结果:优秀 良好 中等 及格 不及格 输入不合法 输入不合法(5)问题及解决方法:问题:大于100的分数未给出明确结果 解决方法;在代码中加上对高于100分的限制4、运输公司对用户计算运费。路程(s)越远,每公里运费越低。标准如下:s = 250km没有折扣250km s 500km2%折扣500km s 1000km5%折扣1000k
10、m s 2000km8%折扣2000km s 3000km10%折扣3000km s15%折扣 设每公里每吨货物的基本运费为p,货物重为w,距离为s,折扣为d,则总运费的计算公式为:f = p * w * s * ( 1 d ) 请编程实现:从键盘输入基本运费p,货物重w,距离s,计算输出用户最终需要支付的运费。(1)算法描述:if(s=250&s=500&s=1000&s=2000&s3000) d=0.1else d=0.15然后再将数据代入公式money=p*w*s*(1-d),输出money。(2)源代码及说明:#includemain()double p,w,s,money,d;sc
11、anf(%lf %lf %lf,&p,&w,&s);if(s=250&s=500&s=1000&s=2000&s3000)d=0.1;else d=0.15;money=p*w*s*(1-d);printf(总运费为:%.2lf,money);(3)测试数据:10 2 230(4)运行结果:4600.00(5)问题及解决方法:无三、实验总结:掌握了if和switch分支语句的使用。实验三 循环结构程序设计 实验(验证性 综合性 实验 2学时)一、目的要求:(1)使用循环语句完成累乘、图像输出的程序编写。(2)掌握较复杂结构程序的编写。(3)掌握程序调试的方法。(4)编写实验报告。二、实验内容(
12、参考实验指导书):1、已知xyz + yzz = 532,其中x、y、z都是数字(09),编写一个程序求出x、y、z分别代表什么数字。(1)算法描述:for i=1到9 for j=1到9 for z=1到9 if满足xyz + yzz = 532 则输出x、y、z(2)源代码及说明:#includemain()int x,y,z;for(x=0;x=9;x+)for(y=0;y=9;y+)for(z=0;z0;i-)for(k=number;k=i;k-)printf( );for(j=0;ji*2-1;j+)printf(%d,i); for(i=2;i=i;k-) for(j=0;ji*
13、2-1;j+)printf(%d,i);(2)源代码及说明:#includemain()int number;int i,j,k;scanf(%d,&number);for(i=number;i0;i-)for(k=number;k=i;k-)printf( );for(j=0;ji*2-1;j+)printf(%d,i);printf(n);for(i=2;i=i;k-)printf( );for(j=0;ji*2-1;j+)printf(%d,i);printf(n);(3)测试数据:4(4)运行结果: 33333 222 1 222 33333 (5)问题及解决方法:无3、 学校有近千名
14、学生,在操场上排队,5人一行余2人,7人一行余3人,3人一行余1人,编写一个程序求该校的学生人数。(1)算法描述:for(x=1;x1000;x+)if满足x%5=2 & x%7=3 & x%3=1则输出x(2)源代码及说明:#includemain()int x;for(x=1;x1000;x+)if(x%5=2 & x%7=3 & x%3=1)printf(%dn,x);(3)测试数据:(4)运行结果:52 157 262 367 472 577 682 787 892 997(5)问题及解决方法:无4、学校某班A、B、C、D四位同学中的一位做了好事不留名,表扬信来了之后,班主任问这四位是
15、谁做了好事,四位回答如下:A说:不是我。B说:是C。C说:是D。D说:他胡说。 已知三个人说的是真话,一个人说的是假话。请根据这些信息,找出做了好事的人。(1)算法描述:for(x=A;x=D;x+)if(x!=A)+(x=C)+(x=D)+(x!=D)=3) 输出谁做了好事(2)源代码及说明:#includemain()char x;for(x=A;x=D;x+)if(x!=A)+(x=C)+(x=D)+(x!=D)=3)printf(%c做了 好事n,x);(3)测试数据:(4)运行结果:C做了好事(5)问题及解决方法:无三、实验总结:通过这几个实验基本掌握了循环的用法和循环嵌套的使用。实
16、验四 数组程序设计 实验(验证性 综合性 实验 4学时)一、目的要求:(1)掌握一维和二维数组的使用技巧。(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数据元素往中间推的
17、实现过程以及数组处理的方向。(1)算法描述:for(从第一个数到第十个数)for(从第i+个数到第十个数)首先判断前一个数是否大于零,再判断后一个数是与零之间的关系,如果不是等于零,则需交换位置。(2)源代码及说明:#includemain()int N,i,end=0;scanf(%d,&N);int aN;int bN;int j=0; int st =0;int m=N-1;for(i=0;iN;i+) scanf(%d,&ai);for(i=0;iN;i+)if(ai0)bm-=ai;end=m;for(i=st;iend;i+)bi=0;for(j=0;jN;j+)printf(%d
18、 ,bj);(3)测试数据:10 2 -5 -89 75 0 -89 0 93 48 0(4)运行结果:-5 -89 -89 0 0 0 75 93 48 2(5)问题及解决方法:问题:对大于0和小于0的数进行分类,再重新组合。 解决方法:重新定义一个数组,依次放入数据。2、设数组a的定义如下:int a20 = 2,4,6,8,10,12,14,16; 已存入数组中的数据值已经按由小到大的顺序存放,现从键盘输入一个数据,把它插入到数组中,要求插入新数据以后,数组数据仍然保持有序。请编写一个程序实现上述功能。提示:1)定义整型数组并初始化。2)从键盘输入一个数据。3)将该数据插入到数组中,由于
19、要保证插入的数组仍然有序,所以需要查找插入的位置。4)输出插入数据以后的数组。(1)算法描述:遍历数组找到插入数在数组中的位置 for( i=0;ix) break; j=i; 重新排列插入数后面的数 for(i=8;i=j;i-) ai+1=ai; aj=x; 最后输出插入数据后的数组(2)源代码及说明:#include main()int a20=2,4,6,8,10,12,14,16;int n,i,k;scanf(%d,&n);for(i=0;i8;i+)if(n=k;i-)ai+1=ai;ak=n;for(i=0;i9;i+)printf(%4d,ai);(3)测试数据:3(4)运行
20、结果:2 3 4 6 8 10 12 14 16 0 0 0 0 0 0 0 0 0 0 0(5)问题及解决方法:无3、写一个3 x 5矩阵的转置程序,输出其原矩阵的值和转置以后的结果。提示:1)定义一个二维数组及相关变量。2)对二维数组赋值,可以由键盘输入,也可以通过其他方式赋值。3)输出转置前的二维数组。4)对二维数组中的值进行转置。5)输出转置后的二维数组中的值。(1)算法描述:从键盘中输入数组 for(i=0;i3;i+) for(j=0;j5;j+) scanf(%d,&aij); 交换数组对应数值并输出 for(i=0;i5;i+) for(j=0;j3;j+) bij=aji;
21、printf(%d ,bij)(2)源代码及说明:#include main()int a35=1,2,3,4,5,1,2,3,4,5,1,2,3,4,5;int b53;int i,j;for(i=0;i5;i+)for(j=0;j3;j+)bij=aji;printf( %d,bij);printf(n);(3)测试数据:1 2 3 4 5 5 6 7 8 9 1 3 5 7 9(4)运行结果:1 5 1 2 6 3 3 7 5 4 8 7 5 9 9(5)问题及解决方法:无4、编程实现随机产生10个位于区间100 200互不相等的整数,并将其按降序排序和输出。(1)算法描述:产生随机数#
22、include#include#define random(x) (100+rand()%101)存入数组for(i=0;i=9;i+)ai=random(200);printf(%4d,ai);进行排序(选择)for(i=0;i=9;i+)for(j=i+1;j10;j+) if(aiaj) k=ai; ai=aj; aj=k;(2)源代码及说明:#include #include #include main() int x;int a10;int i,j,m = 1;int temp;srand(unsigned)time(NULL);while(1)for(i=0;i10;i+)x =1
23、00+ rand() % 101;for(j=0;ji;j+)if(aj = x)m = 0; if (m = 1)ai=x;elsei-;break;for(i=0;i10;i+)printf(%d ,ai);printf(n);printf(降序排列为:n);for(i=0;i9;i+)for(j=i+1;j10;j+)if(aiaj)temp=ai;ai=aj;aj=temp;for(i=0;i10;i+)printf(%d ,ai);(3)测试数据:137 114 155 107 146 173 160 166 172 186(4)运行结果:186 173 172 166 160 15
24、5 146 137 114 107(5)问题及解决方法:无三、实验总结:(1)熟练地掌握了选择排序和穷举算法的使用;(2)掌握了对二维数组的简单的使用。实验五 函数 实验(验证性 综合性 实验 5学时)一、目的要求:(1)学习函数的编程思想,编写一个包括34个函数的程序。(2)掌握函数中参数传递的两种方式和函数的相互调用。(3)编写实验报告。二、实验内容(参考实验指导书):1、写一个函数int digit( int n , int k ),它返回数n的从右向左的第k个十进数字值。例如,函数调用digit(1234,2)将返回值3。(1)算法描述:int digit( int n , int k
25、 ) for(i=0;ik;i+) d=n%10; n=n/10; return d;用scanf输入数,调用函数int digit输出结果(2)源代码及说明:#include int digit(int n,int k)int i;int m;for(i=0;ik;i+)m= n%10;n=n/10;return m;main()int x;x = digit(1234,2);printf(%dn,x);(3)测试数据:digit(1234,2)将返回值3(4)运行结果:3(5)问题及解决方法:无2、 写一个函数int isprime(int n),当n是质数时,函数返回非零值;当n是合数时
26、,函数返回零值。(1)算法描述:int isprime(int n)for(i=2;in;i+) if(n%i=0) return 0; else return 1; if(n=1) return 0(2)源代码及说明:#include int isprime(int n)int i;if(n=1)return 0;for(i=2;i=n-1;i+)if(n%i=0)return 0;return 1;main()int r;r = isprime(5);printf(%dn,r);r = isprime(8);printf(%dn,r);(3)测试数据:2 4(4)运行结果:1 0(5)问题
27、及解决方法:无3、 写一个函数reverse( char s),将字符串s中的字符串倒序输出。试分别用递归和非递归两种形式编写。(1)算法描述:递归:递归的出口:if(n=1)printf(%c ,s0);return ;递归的形式 printf(%c ,sn-1); sn-1=0; reverse(s); 非递归:利用倒序特点,进行交换for(i=0;in;i+)temp=si;si=sn-1-i;sn-1-i=temp;(2)源代码及说明:递归:void reverse( char s)int n;n=strlen(s);if(n=1)printf(%c ,s0);return ;prin
28、tf(%c ,sn-1);sn-1=0;reverse(s);非递归:void reverse( char s)int n;int i,j;char temp;n=strlen(s);if(n=1)printf(%c ,s0);return ;for(i=0;in;i+)temp=si;si=sn-1-i;sn-1-i=temp;for(i=0;in;i+)printf(%c ,si);(3)测试数据:(4)运行结果:(5)问题及解决方法:4、写一个主函数输入测试数据(自己指定),并调用上述函数,检查函数功能的正确性。(5)一个数如果从左到右和从右到左读,数字是相同的,则称这个数字为回文数,比
29、如898、1221、15651都是回文数。求:既是回文数又是质数的5位十进制数有多少个?要求:回文判断和质数判断都需要通过子函数实现,输出的时候要求5个数字一行。(1)算法描述:用递归和非递归写出函数reverse( char s)递归:递归的出口:if(n=1)printf(%c ,s0);return ;递归的形式 printf(%c ,sn-1); sn-1=0; reverse(s); 非递归:利用倒序特点,进行交换for(i=0;in;i+)temp=si;si=sn-1-i;sn-1-i=temp;写出主函数,调用函数reverse( char s)(2)源代码及说明:递归:#in
30、clude#include void reverse( char s)int n;n=strlen(s);if(n=1)printf(%c ,s0);return ;printf(%c ,sn-1);sn-1=0;reverse(s);int main()char text10=a,b,c,d,e,f,g,h,m,o;int i,n=10;for(i=0;in;i+)printf(%c ,texti);printf(n);printf(倒序为:n);reverse(text);非递归:#include#include void reverse( char s)int n;int i,j;cha
31、r temp;n=strlen(s);if(n=1)printf(%c ,s0);return ;for(i=0;in;i+)temp=si;si=sn-1-i;sn-1-i=temp;for(i=0;in;i+)printf(%c ,si);int main()char text10=a,b,c,d,e,f,g,h,m,o;int i,n=10;for(i=0;i am,则x只可能在区间am + 1 , an若x am,则x只可能在区间a1 , am - 1若x = am,则am即为查找的数,求解结束。从上面的分析发现,这个过程很适合用递归来实现。(1)算法描述:for(i=10000;i;
32、i+)if(hw(i)if(isprime(i)=1)cnt+;printf(n合计:%d个n,cnt);(2)源代码及说明:#include #includeint hw(int n);int isprime(int n);void main()int i;int cnt=0;for(i=10000;i;i+)if(hw(i)if(isprime(i)=1)cnt+;printf(n合计:%d个n,cnt);int isprime(int n) int i=2;while(i=sqrt(n)if(n%i=0)return 0;i+;return 1;int hw(int n)int m=0;
33、int t=n;while(t)m=m*10+t%10;t/=10;return m=n;(3)测试数据:(4)运行结果:93个(5)问题及解决方法:无三、实验总结:掌握了函数中参数传递的两种方式和函数的相互调用。实验六 指针 实验(验证性 综合性 实验 4学时)一、目的要求:(1)用指针作为函数参数完成字符串的传递。(2)掌握函数中参数传递的两种方式。(3)编写实验报告。二、实验内容(参考实验指导书):(1)编写一个函数char *delk( char *sp),把sp所指向的字符串中所有的“$”字符删除,并把处理后的字符串指针返回。(1)算法描述:char *b=$keidk$kd;cha
34、r *a=(char*)malloc(sizeof(b); delk(b,a);(2)源代码及说明:#include #include char *delk(char *sp,char *q)char *p=sp;while (*p!=0)if (*p!=$)*q=*p;q+;p+;main()char *b=$keidk$kd;char *a=(char*)malloc(sizeof(b); delk(b,a);printf(%sn,a);(3)测试数据:$abcd$efgh(4)运行结果:abcdefgh(5)问题及解决方法:无2、 写一个函数int find( char *s1, cha
35、r *s2),函数find的功能是查找串s1中是否包含指定的词(s2指向),如果存在则返回第1次出现的位置,否则返回-1.约定串中的词由1个或1个以上的空格符分隔。(1) 算法描述:char s1=abc bc cd ef;char s2=we;int a=find(s1,s2);(2)源代码及说明:#include #include int find(char *s1,char *s2)char *p=s1;char *q;int k=0;int r;while(*p!=0)while(*p= )p+;q=p;while(*q!=0&*q!= )q+;char c=*q;*q=0;r=str
36、cmp(p,s2);k=k+1;if(r=0)return k;p=q+1;if(r!=0)return -1;main()char s1=abc bc cd ef;char s2=we;int a=find(s1,s2);printf(%d,a);(3)测试数据:char s1=abc bc cd ef;char s2=ef;char s1=abc bc cd ef;char s2=”we”;(4)运行结果:3 -1(5)问题及解决方法:无3、 编程实现将输入的十进制整数n通过函数DtoH转换为十六进制数,并将转换结果以字符形式输出。例如:输入十进制数79,将输出十六进制数4f。(1)算法描
37、述:for(int i=len-1;i=0;i-)printf(%c,qi);(2)源代码及说明:#include char trans(int n)if(n=0;i-)printf(%c,qi);(3)测试数据:79(4)运行结果:4f(5)问题及解决方法:无4、 定义函数void Merge(int a, int n, int b, int m),参数a、b为一维数组,数组中的数据为升序排列,n和m分别为它们的元素个数。函数的功能为:将数组a和b合并为一个数组,合并后的结果存放于数组a中,要求合并后的数组a仍旧为升序排列。请编程实现,并编写main函数对其测试。(1)算法描述:for(i=0,j=0;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 抑郁症心理护理效果评估-洞察分析
- 移动支付安全风险-洞察分析
- 新材料对制造业升级影响研究-洞察分析
- 异常行为检测与分析-洞察分析
- 碳中和战略与能源转型-洞察分析
- 医疗卫生人才队伍建设-洞察分析
- 碳酸饮料行业品牌营销策略-洞察分析
- 土地开发与政策引导-洞察分析
- 文物保存技术发展趋势-洞察分析
- 关于重阳节的广播稿(8篇)
- 企业财务报表分析-以顺丰控股股份有限公司为例
- 2024年高考英语新课标1卷读后续写课件高考英语一轮复习作文专项
- 简单室内装修合同2024年
- 重庆江北国际机场有限公司招聘笔试题库2024
- PANTONE国际色卡CMYK色值对照表3
- 精神康复中的心理危机干预策略考核试卷
- 第11讲 地表形态与人类活动(高考一轮复习课件)
- 地下水动力学智慧树知到期末考试答案章节答案2024年长安大学
- 中国绿色算力发展研究报告(2024年)
- 产能合作共建协议书
- 2024年执业医师考试-中医师承及确有专长考核笔试考试历年高频考点试题摘选含答案
评论
0/150
提交评论