C程序设计实验报告_第1页
C程序设计实验报告_第2页
C程序设计实验报告_第3页
C程序设计实验报告_第4页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

安微建筑工业学院现代教育技术中心实验报告课程名称: c程序设计指导教师: 专业: 班级: 姓名: 学号: 200至200 学年第 学期

实验ーC程序运行环境、数据类型、运算符和表达式实验地点:第机房 实验时间: 年月日1.掌握TurboC集成环境的进入与退出、TurboC集成环境各种窗口的切换,了解TurboC集成环境的设置。2.掌握C语言源程序的建立、编辑、修改、保存及编译和运行等操作。3.掌握C语言数据类型,熟悉如何定义ー个整型、字符型和实型变量,掌握对这些变量赋值等使用的方法,知道输出时格式字符的使用。4.学会使用C语言的基本运算符(主要是算术运算符、赋值运算符)及其表达式,特别是自加运算符(++)和自减运算符(-)的使用。5.掌握C语言源程序的结构特点与书写规范。1.根据题目要求,进行各种程序测试与验证,并记录结果。2.第5题按照题H的要求编写出程序。3.对每个程序认真进行语法检查与逻辑检查。4.上机调试程序。按各个程序输入计算机,并进行编译和连接,如果在编译、连接中有错误信息,则要根据这些信息找到程序中的错误所在,然后修改程序,直至正确。5.详细记录数据的输入、输岀信息,按要求写出实验报告。1.开机;进入TurboC集成工作环境,了解TurboC集成工作环境及其菜单的使用,输入如实下C语言源程序,并以exl.C存盘。验#include<stdio.h>main()内(容printf(MThisisCprogram!");/・输出字符串/)与编译、连接、运行该程序,并按Alt+F5查看运行结果。过运行结果是:程注意:要熟悉Turboc2.0的编译、连接、运行、保存、装载文件的命令及其快捷键2.输入并调试以下程序,查看运行结果(由此结果可以了解到在实验用的微型机上,几种数结据类型所占的字节数)。main()果(printf("char\t%dbytes\n",sizeof(char));printf("short\t%dbytes\n",sizeof(short)); 运行结果是:分printf("int\t%dbytes\n",sizeof(int));析printf("long\t%dbytes\n",sizeof(long));printf("float\t%dbytes\n",sizeof(float));printf("double\t%dbytes\n",sizeof(double));)

3.输入并调试以下程序:main(){inti,j,m,n;i=8y=10;m=++i;n=j++;实验printf("%d,%d,%d,%d",i,j,m,n);)分别作以下改动后再运行,并观察比较运行结果:内容与过①将第4行改为:m=i++;n=++j;运行结果是:②程序改为:程main(){inti,j;ヽi=8;j=10;结printf("%d,%d”,i++,j++);)果运行结果是:>分析③在②的基础上,将printf语句改为:printf(n%d,%d,%d,%d';i,j4++,j++);运行结果是:④將printf语句改为:printf("%d,%d,%d,%d”,i,j,++i,++j);运行结果是:4.试分析下面程序的运行结果,并回答下面的问题。#include<stdio.h>main(){inti=3,k;printf(M%d,%d\nM,(i++)+(i++)+(i++),i);i=3;printf("%d,%d\n",i,++i+(++i)+(++i));i=3;k=(i++)+(i++)+(i++);printf("%d,%d\n",k,i);)运行结果是:在该题中,若把程序中所有(i++)及(++i)的括号去掉,则编译过程及运行结果有无变化?答:过程ヽ结果25.编程ヽ结果main(){floata,b,c;intx;a=365;b=7;c=a/b;x=(int)a%(int)b;printf("%.2f, %d\n”,c,x);

实验内容与过程ヽ结果分析教师评阅成绩: 教师签名:年月日

实验二最简单的C程序设计实验地点:第机房 实验时间: 年月日1.掌握C语言中赋值表达式和赋值语句的使用。2.正确理解、选择输入格式字符所控制的数据对象、数据输入(输出)形式和方法。3.掌握输出函数printf()和putchar。的用法,能正确使用各种输出格式。4.掌握输入函数scanf()和getchar()的用法,能正确使用各种输入格式。1.根据题目要求,进行各种程序测试与验证,并记录结果。5两题按照题目的要求编写出程序。.对每个程序认真进行语法检查与逻辑检查。.上机调试程序。按各个程序输入计算机,并进行编译和连接,如果在编译、连接中有错误信息,则要根据这些信息找到程序中的错误所在,然后修改程序,直至正确。.详细记录数据的输入、输出信息,按要求写出实验报告。实1.输入并运行以下程序:#include<stdio.h>验main(){inta;内floatb,c;scanfC%2d%3f%*2d%4f",&a,&b,&c);容printf("\na=%d,b=%f,c=%f\n",a,b,c);}与运行时从健盘上输入9876543210/则程序运行结果是:过程ヽ结2.输入并运行以下程序:#include<stdio.h>main(){intc;chard;c=66;d=,B,;putchar(c);putchar(d);putchar(B);putchar(66);果ヽ)分程序运行结果是:析将以上程序作如下修改:

①将程序中两个赋值语句改写:c=65;d=A;②将程序最后两个字符输出函数改写:putchar('A');putchar(65);则程序运行结果是:3.输入并运行以下程序:#include<stdio.h>实voidmain(){inta=-l;longb=-1;floatf=123.456;charc-a*;验printf(,,a=%d,a=%o,a=%x,a=%u\n,',a,a,a,a);printf("b=%ld,b=%lo,b=%lx,b=%lu\n",b,b,b,b);内printf(,'f=%f,f=%7.2f,f=%-7.2f\nf=%e,f=%g\n,',f,f,f,f,f);printf(Mc=%c,c=%3c,c=%-3c,c=%d,c=%c\n',,c,c,c,'a,,65);容printf(Ms1=%s,s2=%7.3s,s3=%-7.3s\n,V,12345"JABCD”J123450);)与程序运行结果是:ヽ4.编程,要求从键盘输入数据,使整型变量a=10,b=8;字符型变量cl='A;c2=,a':实型变量结x=3.1,y=64.54o并按规定格式输出变量的值。要求输出格式如ド:inta=10,b=8果charcl=A,c2=afloatx=3.1,y=64.545.编程,要求从键盘输入ー个字符,算出它的左邻字符和右邻字符,并按ASCII码值,从分大到小输出3个字符及其对应的ASCI!码值。析/*4.・/main(){inta,b;charcl,c2;floatx,y;scanf("刎%d",&a,&b);scanf("%c%c",&cl,&c2);scanf("%f%f”,&x,&y);printf("inta=%d,b=%d\n",a,b);printf("charcl=%c,c2=%c\n",cl,c2);实验内容与过程实验内容与过程printf(Afloatx=%.1f,y=%.2f”,x,y);/*5.・/^include"stdio.h"main(){charcl,c2,c3;c2=getchar();cl=c2-l;c3=c2+l;printf(*%c,%d;%c,%d;%c,%d\n*,c3,c3,c2,c2,cl,cl);实验内容与过程ヽ结果ヽ分析教师评成绩: 教师签名:阅年月日

实验三选择结构程序设计实验地点:第机房 实验时间: 年月日实验目的.掌握C语言表示逻辑量的方法(以〇代表"假”,非〇代表“真")。.学会正确使用关系运算符、逻辑运算符及关系表达式、逻辑表达式。.熟练掌握各种if语句和switch语句的语法结构和语句功能。.结合程序,掌握选择结构程序设计的一般方法,能够用多种方法编写同一程序。实验要求1.根据题目要求,进行各种程序测试与验证,并记录结果。4、5三题按照题目的要求编写出程序。.对毎个程序认真进行语法检査与逻辑检査。.上机调试程序。将各程序输入计算机,并进行编译和连接,如果在编译、连接中有错误信息,则要根据这些信息找到程序中的错误所在,然后修改程序,直至正确。.详细记录数据的输入、输出信息,按要求写出实验报告。验内容与过程ヽL输入并调试以下程序:(1)#include<stdio.h>main(){inta,b;printf(HEnteraninteger:");scanf("%d",&a);b=l;if(++a<0)b=-l;elseif(a==O)b=O;printf("a=%d,b=%d\n",a,b);)运行时,若从键盘上输入ー1/则程序运行结果是:结果ヽ分析(2)#include<stdio.h>main(){intal=l0,a2=20,a3=30;charch;ch=getchar();switch(ch){case'A*:a1++;a2++;break;default:a3++;caseB:a2++;a3++;)

printf("%d,%d,%d\n",al,a2,a3);)若从键盘上输入:BACZ则程序运行结果是:实验内容2.程序填空(完善程序)。以下程序的功能是:从键盘输入三个整型数据,对这三个数据进行从小到大排序,并输出排序后的数据。请在下划线处填上适当的内容,以完成该程序的功能。#include<stdio.h>main(){intx,y,z,i;scanf("%d,%d,%d",&x,&y,&z);if( ){i=x;x=y;y=i;}与过程ヽif( ){i=x;x=z;z=i;}if( ){i=y;y=z;z=i;}printf("%d,%d,%d\n",x,y,z);)3.给出ー个百分制成绩,要求输出成绩等级A、B、C、D、E。90分以上为A,80〜89分为B,70〜79分为C,60〜69分为D,60分以下为E。要求:用键盘输入百分制成绩,并判断输入数据的合理性,对于不合理的数据给出错误信息。用switch语句编写该程序。结果4.编程,计算下列分段函数值:2x-e2 (x>0)y=\3x2-2 (x<0)分析75 (x=0)5.给出ー个小于1000正整数,编程求该数是几位数,并按逆序打印出各位上的数字。例如原数为321,则输出123。/*3.*/^include"stdio.h"main()(intscore;printf(*PleaseInputscore:");scanf("/a,&score);if(score>100score<=0){printf<InputError'n");

getcharO;getchar();return;实}switch(score/10)验{case10:case9:putchar(*A1);break;case8:putchar('B');break;内case7:putchar(*C1);break;case6:putchar('D');break;容default:putcharCE');)与}/*4.*/过^include"math,h"main()程{floatx,y;scanf("%f",&x);if(x>0)y=2*x-exp(2);ヽelseif(x<0)y=3*x*x-2;结elsey=sqrt(5);printfCx=%f,y=%f\n",x,y);果}/*5*/^include"stdio.h"ヽmain()分{inta,gw=0,sw=0,bw=0,bit;clrscr();析scanf("%d",&a);if(a>=1000||a<=0){printf("InputError\n");getchar(),getchar();return;}if(a>=100)bw=a/100,sw=a%100/10,gw二a%10,bit=3;elseif(a>=10)sw=a/10,gw=a%10,bit=2;elsegw二a,bit=l;a>=100?printf(^bit=%d,%d%d%d\n",bit,gw,sw,bw):a>=10?printf("bit=%d,%d%d\n",bit,gw,sw):printf("bit二%d, %d\n",bit,gw);}

实验内容与过程ヽ结果ヽ分析教师评阅成绩: 教师签名:年月日

实验四循环结构程序设计⑴实验地点:第机房 实验时间: 年月日实验目的.理解循环的概念,熟悉和掌握while语句,do-while语句和for语句实现循环的方法。.掌握穷举算法、迭代算法、递推算法等ー些常用算法的程序设计方法。.理解并掌握break语句和continue语句的语句功能。.能正确使用这些语句进行筒単程序设计。实验要求.根据题目要求,进行各种程序测试与验证,并记录结果。.3-6题按照题目的要求编写出程序,注意总结各题的编程思路。.上机调试程序。将各程序输入计算机,并进行编译和连接,如果在编译、连接中有错误信息,则要根据这些信息找到程序中的错误所在,然后修改程序,直至正确。.详细记录数据的输入、输出信息,按要求写出实验报告。实验内.输入并调试以下程序:#include<stdio.h>main(){inti=0;while(i++<3)printf(M%d\nM,i);} 运行结果是:容与过程ヽ结(2)#include<stdio.h>main(){inti;for(i=l;i<5;i++){if(i%2)printf(H*n);elsecontinue;printf("%”);)printf(M@");} 运行结果是:果ヽ分析2.程序填空(完善程序)。下面程序的功能是求1000以内的所有完全数,请填空(说明:ー个数如果恰好等于它的因子(自身除外)之和,则称该数为完全数,如6=1+2+3,则6是完全数)。请在下划线处填上适当的内容,以完成该程序的功能。#include<stdio.h>main(){inti,sum,k=2;

do{i=l;sum=0;do{if(k%i==O) i++;}while(i<=k/2);if(sum==k)printf("%d\n", );k++;实)while( ):验}内3.编程,找出1〜1000之间的全部“同构数’所谓“同构数”是指这样的数:它出现在它的平方数的右端。如:6的平方是36,6出现在36的右端,6就是一个同构数。容4.编程,输出由1,2,3,4四个数字组成的4位数,并统计其个数(不允许该4位数中有相与同的数字,例如:1111,1122,1212等都不是所求的数)。过5.编程,用公式n/4七1ー丄+丄ー丄+…求n的近似值,当某项绝对值小于时计算结束。357程6.输入两个正整数,编程求它们的最大公约数和最小公倍数。/*3*/ヽmain()结(longp,i,k;果for(i=1;i<l000;i++){p=i*i;k=p-i;ヽif(i<10&&k%10==0)printf(H%ld,%ld\nM,p,i);分elseif(i<100&&k%100==0)printf(M%ld,%ld\nn,p,i);elseif(i<1000&&k%1OOO==O)printf(H%ld,%ld\n”,p,i);析)}说明:i也必须定义为longint或main()(longp,i,k;for(i=l;i<1000;i++){P=i*i;

if(p%1O==illp%1OO==illp%1000=i)printf("%ld%ld",p,i);))说明:可以将if(p%10==illp%100==illp%1000==i)改写成if(p%1000=illp%10=illp%100=i)但不能改写成if((p-i)%10==0ll(p-i)%100==0ll(p-i)%1000==0)例如:75,75*75=5625不能满足第一个条件但能满足第二个条件。7*4/实main()验inti,j,k,1,p,total=0;clrscr();内for(i=l;i<=4;i++)for(j=l;j<=4;j++)容for(k=l;k<=4;k++)for(l=l;l〈=4;l++)与{p=(i!=j&&i!=k&&i!=l)&&(j!=k&&j!=!)&&(k!=l);if(p)过(if(total%6=0)printf('\n");程printf("z%d%d%d%d”,i,j,k,1),total++;)ヽ)printf("total=%d",total);结}/*5*/果mainO{floatpi=l,sign=l,term;longi=l;ヽterm=l./(2*i+l);分while(term>=le-6){sign=~sign;析pi+=sign*term;i++;term=l./(2*i+l);}printf("i=%ld,%e\n",i,term);pi・二4;printf("%f\n",pi);)

/*6*/main(){inta,b,r,gcd,ps,x,y;printf(*Inputa,b:\n");scanfC%d, &b);while(a<=0b<=0){printf(inputerrorretry\nscanf("%d,%d",&a,&b);实}x=a,y=b;验r=a%b;while(r!=0)内{a=b;b=r;容r=a%b;}与gcd=b;ps=x/gcd*y; /・应先除再乘例子625325*/过printf("a=%db=%d\n”,x,y);printf("gcd二%dps二%d\n,gcd,ps);程)或main()ヽ{longa,b,p,t;结printf("PleaseInputab:\n");scanf("%ld%ld",&a,&b);果if(a<b)t=a;elseLb;printf("a=%ld,b=%ld\n",a,b);p=a*b;while(a%t!=0b%t!=O)t—;分p=p/t;printf("highestcommondivisor=%-81d,leastcommonmultiple=%-81d\n”,t,p);析}验内容与过程结果分析实验内容与过程ヽ结果ヽ分析教师评阅成绩: 教师签名:年月日

实验五循环结构程序设计⑵实验地点:第机房 实验时间: 年月日1.理解循环的概念,熟悉和掌握while语句,do-while语句和for语句实现循环的方法。2.掌握穷举算法、迭代算法、递推算法等ー些常用算法的程序设计方法。3.理解并掌握break语句和continue语句的语句功能。4.能正确使用这些语句进行筒単程序设计。.根据题目要求,进行各种程序测试与验证,并记录结果。.3-6题按照题目的要求编写出程序,注意总结各题的编程思路。3.上机调试程序。将各程序输入计算机,并进行编译和连接,如果在编译、连接中有错误信息,则要根据这些信息找到程序中的错误所在,然后修改程序,直至正确。4.详细记录数据的输入、输出信息,按要求写出实验报告。实1.输入并调试以下程序:(1)main()验{inti,j;for(j=10;j<U;j++)内{for(i=9;i<j;i++)if(!(j%i))break;容if(i>=j-1)printf(*\n%d\n*,j);}与} 运行结果是:过(2)^include"stdio.h"main()程{intc;while((c=getchar())!=,\n*)switch(c-*2*)ヽ{case1:putchar(c+2);结case2:putchar(c+2);break;case3:putchar(c+1);果default:putchar(c+2);break;)putchar('\n');ヽ} 运行程序输入567/输出结果是:分(3)下面的程序段的循环部分最多可循环多少次,最少呢?析inti,x;for(i=0,x=0;i<=9&&x!=876;i++)

scanf&x);最多: 次 最少: 次2.程序填空(完善程序)。下面程序为计算满足下列不等式所需级数的最小项n及部分和sum:1+1/2+1/3+ +l/n>limit#include<stdio.h>实main(){intn=0;验floatsum, ;sum= ;内scanf(H%f,,&limit);do容{n+ ;sum+= n;与}while(sum<=limit);printf(Hn=%d\tsum=%f\nM,n,sum);过)程3.输入一行字符,编程统计并输出其中的大写英文字母和数字的个数。ヽ4.编程,打印以下图形:结****果***************分***析.编程,打印出1000以内的所有水仙花数(所谓水仙花数是指一个三位正整数,其各位数字的立方和等于该数本身,例如:407=4*4*4+0*0*0+7*7*7,则407是ー个水仙花数)。10.编程,求s=、〃!=1!+2!++10!“=1/*3*/ttinclude"stdio.h"实验内容与过程实验内容与过程结果分析mainO{charstr;intletter=O,digit=O;while((str二getchar())!='\n'){if(str>=,A'&&str<=,Z')letter++;elseif(str>二’〇’&&strくニ’9')digit++;)printf("letter=%-8d,digit=%-8d\n",letter,digit);/*4*/ttinclude"stdio.h/zmain(){charstrl二'',str2二'*';inti,j,k;clrscr();for(i=l;i<=5;i++){for(j=5-i;j>=l;j—)putchar(strl);for(j=l;j<=2*i-l;j++)putchar(str2);putchar('\n);)for(i=4;i>=l;iーー){for(j=5-i;j>=l;j)putchar(strl);for(j=l;j<=2*i-l;j++)putchar(str2);putchar('\n');}}说明:为了实现将图形放在屏幕的靠中位置显示,可将れバ尸5一七”二1ゴー)的5改为10或更大一些。/*5*/mainO{intx,bw,sw,gw;clrscr();for(x=100;xく=999;x++){bw=x/100;sw=x%100/10;gw=x%10;if(bw*bw*bw+sw*sw*sw+gw*gw*gw==x)printf(z%5d,%5d,%5d二%5d\n",bw*bw*bw,sw*sw*sw,gw*gw*gw,x);内容与过程内容与过程结果分或mainO{inti,j,k;clrscr();for(i=l;i<=9;i++)for(j=0;j<=9;j++)for(k=0;k<=9;k++)if(i*i*i+j*j*j+k*k*k==i*100+j*10+k)printf("%d%d%d”,i,j,k);/*6/mainO{longi,sum,j=l;for(i=l,sum=0;i<=10;i++){j=j*i;sum=sum+j;)printf("sum=%ld\n”,sum);)或mainO{longi,sum,j,k;for(i=l,sum=0;i<=10;i++){j=l;for(k=2;k<=i;k++)j*=k;sum=sum+j;)printf("sum=%ld\n",sum);验内容与过程结果分析实验内容与过程ヽ结果ヽ分析教师评阅成绩: 教师签名:年月日

实验六数组(1)实验地点:第机房实验时间: 年月日实验地点:第机房实验目的.理解数组的概念,掌握ー维数组和二维数组的定义、存储结构、赋值和输入输出的方法。.理解字符串的概念,掌握字符数组和字符串函数的使用。.掌握常用的与数组有关的算法,如排序、查找、求极值等。.能够用数组的方法,编写ー些简单程序。实验要求1.根据题目要求,先人工计算然后再进行程序测试与验证,并记录结果。2.4-7题按照题目的要求编写出程序,注意总结各题的编程思路。.上机调试程序。将各程序输入计算机,并进行编译和连接,如果在编译、连接中有错误信息,则要根据这些信息找到程序中的错误所在,然后修改程序,直至正确。.详细记录数据的输入、输出信息,按要求写出实验报告。实验内容与过程ヽ结果ヽ分析.输入并调试以下程序:#include<stdio.h>main(){inta[3],ij;for(i=0;i<=2;i++)a[iJ=O;for(i=0;i<=2;i++)for(j=0;j<2;j++)a[j]=a[i]+j;printf("%d,%d,%d\n",a[O],a[1],a[j-1]);} 运行结果是:#include<stdio.h>main(){inti,j,h,k,m;staticintx[3][3]={{3,7,1},{5,7,2},{4,9,1}};m=x[O][O];h=O;k=O;for(i=0;i<3;i++)for(j=0;j<3;j++)if(x[i]|j]<m){m=x[i]|j];h=i;k=j;}printf("%d,%d,%d\n",m,h,k);} 运行结果是:.程序填空(完善程序)。下面程序功能是将两个有序(由小到大排列)数组中的数据合并到ー个数组中,要求合并后的数组实验内容与过程实验内容与过程ヽ结果依然是由小到大顺序排列,最后输出排序后数组内容。数组中以数据。表示数据的结束。清在下划线处填上适当的内容,以完成该程序的功能。#include<stdio.h>main(){inta[10]={1,3,5,7,9,12,0);intb[10]={2,4,7,8,10,14,18,0);inti,j,k,c[20];i=j=k=0;while((a[i]!=0)&&(b[jJ!=0)){if(a[i]<bU]){c[k]=;i++;}else{c[k]=;j++;)if(a[i]==0)while(b[j]!=0)c[k++]=b[j++];if(b[j]=0)while(a[i]!=0)c[k++]=a[i++];c[k]=0;for(i=0;i<k;i++)printf(,,%4d,,,c[i]);.输入下面程序,说明程序的功能,并分析程序结果。#include<stdio.h>main(){inti,j;floatx[4][4],y[4][4],a;for(i=0;i<=3;i++)for(j=0;jv=3;j++){scanf(**%f,,&a);xli]|jj=a;}for(i=0;i<=3;i++){printf(M\nM);for(j=0;j<=3;j++)printf("%4.心[i皿);}printf(,'\nH);for(i=0;i<4;i++)for(j=0;j<4j++)y[j][i]=x[i][j];for(i=0;i<=3;i++){printf("\n");for(j=0;j<=3;j++)printf("%4.1f',y[i][j]);}该程序的功能是:。当输入 _3.1_4.1_5.1_6.1_7.1_8.1_9.1」.2一2.2一3.2一4.2一5.2一6.2一7.2/(其中一表示空格)运行结果是:.将某班N(N为符号常量)个同学的成绩(整型)放入数组s中,编程求该班的平均成绩(实型),并统计各分数段上的学生人数。分数段为:100分,90〜99分,80〜89分,70〜79分,60-69分,60分以下。.从键盘输入10个整数,编程将这些数按从大到小排序并输出。.从键盘输入10个有序整数(假设从小到大)放入数组a中,另输入ー个整数X。用折半查找方法,编程判断x是否在数组a中,若在则输出第一次出现x的位置,否则输出信息“no”。.从键盘上输入20个字符,编程统计并输出其中英文字母(不区分大小写)、数字字符(〇〜9)和空格的个数及所占的百分比。/*4*/^defineN10main(){ints[N],i,sum=O;intscopel0=0,scope9=0,scope8=0,scope7=0,scope6=0,scope0=0;floatave;for(i=0;i<N;i++){scanf&s[i]);sum+=s[i];switch(s[i]/10)casecasecasecasecase10:scopelO++;break;casecasecasecasecase10:scopelO++;break;9:scope9++;break;8:scope8++;break;7:scope7++;break;6:scope6++;break;default:scopeO++;}实)ave=(float)sum/N;printf("ave=%f\n”,ave);验printf(*scopel00=%-3d,scope90to99二%-3d,scope80to89=%-3d\n”,scopelO,scope9,score8);printf("scope70to79=%-3d,scope60to69=%-3d,scope0to59=%-3d\n",scope?,scope6,scoreO);内}/*5*/容ttdefineN10mainO与{inta[N],i,j,t,p;for(i=0;i<N;i++)过scanf("%d",&a[i]);for(i=0;i<N-l;i++)程{P=i;for(j=i+l;j<N;j++)if(a[p]<a[j])p=j;t=a[i],a[i]=a[p],a[p]=t;结}for(i=0;i<N;i++)果printf("%4d",a[i]);}/*6*/ヽttdefineN10分main(){inta[N],x,i,j,t,findニ〇;析intlow,top,mid;printf("Pleasinput%dnumber\n",N);for(i二〇;iくN;i++)scanf("%d",&a[i]);clrscr();for(i=0;i<N-l;i++){for(j=0;j<N-l-i;j++)if(a[j]>a[j+l])t=a[j],a[j]=a[j+l],a[j+l]=t;}printf("serachnumberis:");scanf("%d",&x);low二〇;top=NT;mid=(low+top)/2;实验内容与过程实验内容与过程ヽ结果ヽ分析while(low<=top){if(a[mid]==x){find=l;break;}elseif(a[mid]>x)top=mid-l;elselow=mid+l;mid=(low+top)/2;)if(find){for(i=0;i<N;i++)if(a[i]==x){printflposition二%d\n,i+1);break;})elseprintf(*Nofind\n");printf('\t\t\tdatalist...\nz");for(i=0;iくN;i++)printf("%4d*,a[i]);}/*7*/ttinclude"stdio.h"main(){charstr[21];inti;intletter=0,digit=0,space=0;clrscrO;gets(str);if(strlen(str)>20){printf("morethan20,error^);getchar();return;}while(strlen(str)!=20){puts(,zInputlessthan20letters,retry"");gets(str);}puts(str);i二〇;while(str[i]!=0)(if(str[i]>=,a*&&str[i]<=,z|||str[i]>=,A1&&str[i]<=,Z*)letter++;elseif(str[i]>=,0*&&str[i]くニ’9')digit++;elseif(str[i]==,')space++;i++;if(letter!=0)printf(*letterhas%doccupancy=%.2f%%\n*,实验内容与过程实验内容与过程letter,letter/20.*100);if(digit!=0)printf(,zdigithas%doccupancy=%.2f%%\n”,digit,digit/20.*100);if(space!=0)printf(,zspacehas%doccupancy=%.2f%%\n,x,space,space/20.*100);附:从键盘上输入20个字符,编程统计并输出其中各个英文字母(不区分大小写)、数字字符(。〜9)和空格的个数及所占的百分比。/・附:*/#include"stdio.h"main(){charstr[21];inti;intletter[26]={0},digit[10]={0},space=0;clrscr();gets(str);if(strlen(str)>20){printf(,zmorethan20,error");getchar();return;}while(strlen(str)!=20){puts(zzInputmorethanorlessthan20letters,retryzz);gets(str);}puts(str); i=0;while(str[i]!=0)if(str[i]>='a'&&str[i]<='z')letter[str[i]-'a']++;elseif(str[i]>=,A'&&str[i]<='Z')letter[str[i]-'A']++;elseif(str[i]>=,0'&&str[i]くニ’9')digit[str[i]-'0,]++;elseif(str|i」二'')space++;i++;

}for(i=0;i<26;i++)if(letter[i]!=O)printfCletter%chas%doccupancy=%.2f%%\n,z,i+'A',letter[i],letter[i]/20.*100);for(i=0;iく10;i++)if(digit[i]!=0)printf(*digit%dhas%doccupancy=%.2f%%\n”,i,digit[i],digit[i]/20.*100);if(space!=0)printf(*spacehas%doccupancy=%.2f%%\n"z,space,space/20.*100)}教师评阅成绩: 教师签名:年月日

实验七数组(2)实验地点:第机房实验时间: 年月日实验地点:第机房1.理解数组的概念,掌握ー维数组和二维数组的定义、存储结构、赋值和输入输出的方法。2.理解字符串的概念,掌握字符数组和字符串函数的使用。3.掌握常用的与数组有关的算法,如排序、查找、求极值等。4.能够用数组的方法,编写ー些简单程序。1.根据题目要求,先人工计算然后再进行程序测试与验证,并记录结果。2.4-7题按照题目的要求编写出程序,注意总结各题的编程思路。3.上机调试程序。将各程序输入计算机,并进行编译和连接,如果在编译、连接中有错误信息,则要根据这些信息找到程序中的错误所在,然后修改程序,直至正确。4.详细记录数据的输入、输出信息,按要求写出实验报告。实验L输入并调试以下程序:(1)voidmain(){chars[10]={ta,;b?cV0,,0,'d,};printf(M\n%D\nM,strlen(s));内)运行结果是(原始程序):容运行结果是(微调printf函数格式串):与(2)二维数组a的主对角线的值分别是:3,5,7,9,11»定义并初始化数组a的最简捷的语句是:过程(3)写出运行结果:main(){inti,b[6];for(i=l;i<6;i++)结{b[i]=6*(i-l+4*(i>3))%5;果printf("%2d",b[i]);}) 结果是:分析2.程序填空(完善程序)。下面程序功能是将一个整型数转化成二进制数,所得的二进制数的每一位放在ー维数组中,输出此二进制数。#include<stdio.h>

实验内容与过程ヽ结果ヽ分析main(){intb[16],x,k,r,i;scanf ;printf(*%6d=*,x);k=-l;do{r=x%2;b[ ]=r;x/= ;}while( );for(i=k; )printf(*%d*»b[i]);printf("\n");)3.输入下面程序,分析程序程序实现的功能。#defineMAX50main(){inta[MAX+l],k,x,i,n;scanf("%d",&n);for(i=l;i<=n;i++)scanf("%d”,&a[i]);scanf(“肌T,&k);scanf("刎",&x);if((k>0)&&(kく=n+1)){for(i=n;i>=k;i~)a[i+l]=a[i];a[k]=x;n=n+l;}for(i=l;i<=n;i++)printf("%3d",a[i]);printf("\n");)该程序的功能是: 〇当输入?_1_3_5_7_9_11_15_4_88/(其中一表示空格)运行该程序后,能在屏幕上输出:

.设数组s[7][12]={"HeFei”,"AnQing”,“FuYang”,“HuaiBei”,“WuHu","MaAnShan”,“HuaiLan”}存放省内部分城市的名称,编程实现按字典顺序重新排列城市名称在数组中的位置。.编程,将两个字符串连接起来(不用strcat函数)。实6.编程,打印杨辉三角的前8行的值:验111内1211331容14641与7.已知a[4][4]是ー个整型数组,编程求两条对角线上的最大元素及所在的位置过/*4选择法排序・/main()程{inti,j,p;charstr[12];chars[7][12]={"HeFei","AnQing","FuYang","HuaiBei","WuHu","MaAnShan","HuaiLan"};ヽclrscr();结for(i=0;i<6;i++){p=i;果for(j=i+l;j<7;j++)if(strcmp(s[p],s[j])>O)p=j;ヽif(p!=i)strcpy(str,s[i]),strcpy(s[i],s[p]),strcpy(s[p],str);i分Jfor(i=0;iく7;i++)puts(s[i]);析)/*5*/main(){charsi[80],s2[40];inti=0,j=0;gets(sl);gets(s2);while(sl[i]!=0)i++;while(s2[j]!=0)si[i++]=s2[j++];sl[i]='\O';puts(sl);1实J1*6行标从〇开始・/#defineN8验main(){intyan[N][N];内inti,j,k;clrscr();容for(i=O;i<N;i++){yan[i][0]=l;与yan[i][i]=l;}过for(i=2;i<N;i++)for(j=l;j<i;j++)程yan[i][j]=yan[i-l][j-l]+yan[i-l][j];for(i=0;i<N;i++){for(j=0;j<=i;j++)结printf(*%4d*,yan[i][j]);printf('\n");果}1*7*1>SdefineN4分main(){析inta[N][N];/*={{1,3,5,7},{4,8,9,12),{35,88,99,10},{126,78,99,55});inti,j,k,maxi,max_2,rowl,row2,col2;clrscr();for(i=0;i<N;i++)for(j=0;j<N;j++)scanf&a[i][j]);for(i=。;iCN;i++){printf('\n");for(j=0;j<N;j++)printf("%4d*,a[i][j]);}printf('\n");maxl=a[0][0],row1=0;内容与过结果ヽ分max_2=a[0]row2=0,col2=N-l;for(i=0;i<N;i++){if(a[i][i]>max_l)max_l=a[i][i],rowl=i;if(a[i][N-l-i]>max2)max_2=a[i][N-l-i],row2=i,col2=N-l-i;}printf(^max1二%-4d row=%dcol=%d\nz,,max.1,rowl,rowl);printf("max_2=%-4d row二%dcol二%d\n”,max_2,row2,col2);实验内容与过程ヽ结果ヽ分析教师评阅成绩: 教师签名:年月日

实验ハ函数实验地点:第机房 实验时间: 年月日实验目的.理解函数的概念,掌握c语言定义函数的方法。.掌握函数实参与形参的对应关系,以及数据的“传递”方式。.掌握函数的嵌套调用和递归调用的方法。.掌握全局变量和局部变量、动态变量和静态变量的概念及使用方法,能够用函数的方法编写ー些简单程序。.根据题目要求,进行各种程序测试与验证,并记录结果。.3~5题按照题目的要求编写出程序,注意总结各题的编程思路。.上机调试程序。将各程序输入计算机,并进行编译和连接,如果在编译、连接中有错误信息,则要根据这些信息找到程序中的错误所在,然后修改程序,直至正确。4.详细记录数据的输入、输出信息,按要求写出实验报告。实1.输入并调试以下程序:(1)#include<stdio.h>验内容func(inta,intb){intc;c=a+b;retumc;)main(){intx=3,y=6,z;与z=func((-x,y++,x+y),y);printf(,'x=%d,y=%d,z=%d\nM,x,y,z);过} 运行结果是:程(2)#include<stdio.h>main(){inta[]={2,4,6,8},i;ヽ结intx=0;for(i=0;i<4;i++){x=sub(a,x);printf(n%dn,x);)printf(M\nM);}sub(p,x)intp[],x;{staticintt=3;果分x=p[t];t-;retum(x);析} 运行结果是:

2.程序填空(完善程序)。季生素数是指两个相差为2的素数。例如:3和5,5和7,11和13等,下面程序功能是输出20对李生素数,请在下划线处填上适当的内容,以完成该程序的功能。其中函数isp的功能是判断整数a是否为素数。#include<stdio.h>main(){intk,n;实n=0;k=2;do验{if(isp(k)&& ){n=n+l;printf(n%d,%d\nH, );}内k=k+l;)容while(n<20);}与isp(inta){intt,j;过j=l;t=2;while((t<=a/2)&&j)程{if( )j=0;elset=t+1;ヽJReturn(j);结1果3.编写ー个判断素数的函数ifpo在主函数中调用该函数,求整型数组a[10]中有多少个素数。4.编程求两个整数的最大公约数和最小公倍数。要求:用ー个函数(funcl)求最大公约数,用分另ー函数(func2)根据求出的最大公约数求最小公倍数。两个整数在主函数中输入,并传送给函数fund,求出的最大公约数返回主函数,然后再与两个整数一起作为实参传递给函数析func2,求出最小公倍数,再返回到主函数输出最大公约数和最小公倍数。5.编写ー递归函数fac用来求阶乘t!。主函数调用该函数,求20!。/*3*/#include"math,h"main(){intifp(int);inta[10],s=0,i;/♦={5,8,9,13,21,4,2,29,57,97)*/

for(i=0;i<10;)scanf(*%d*,&a[i++]);for(i=0;i<10;i++)if(ifp(a[i]))s++;printf(,z\nThereare%dprimenumbers\n',s);}intifp(intx){intk,i;实k=sqrt(x);for(i=2;i<=k;i++)验if(x%i==0)break;if(i>k){printfぐ’%4d x);return1;}内elsereturn0;}容/*6*/与main(){inta,b,gcd,cmd;过printf("Inputab:\n");scanf("%d%d",&a,&b);程gcd=funcl(a,b);cmd=func2(gcd,a,b);ヽprintf("lowestcommonmultiple=%d,highestcommondivissor=%d\n",gcd,cmd);结intfund(intx,inty)果{intm;if(x<y)m=x,x=y,y=m;while(y!=0)ヽ{m=x%y;分x=y;y=m;析}returnx;}intfunc2(intgcd,intx,inty){returnx/gcd*y;}

实/*7*/main()阶乘HA.{doublefac(int);printf("%d!=%e\n”,20,fac(20));内}doublefac(intn)次{doublex;合if(n==l||n==0)x=l;片elsex=n*fac(n-l);returnx;过}程ヽ结果ヽ分析教师评成绩: 教师签名:阅年月日

实验九预处理僉金实验地点:第机房实验时间: 年月日实验地点:第机房实验目的.掌握宏定义的方法及宏替换的实质,注意区分宏定义与函数的不同之处。.掌握文件包含处理方法。.掌握条件编译的方法。实验要求.根据题目要求,进行各种程序测试与验证,并记录结果。.2-4题按照题目的要求编写出程序,注意总结各题的编程思路。.上机调试程序。将各程序输入计算机,并进行编译和连接,如果在编译、连接中有错误信息,则要根据这些信息找到程序中的错误所在,然后修改程序,直至正确。.详细记录数据的输入、输出信息,按要求写出实验报告。实验内容与过程ヽ结果ヽ分析L输入并调试以下程序:#include<stdio.h>#defineMIN(x,y)(x)<(y)?(x):(y)main(){inti,j,k;i=l;j=5;k=2*MIN(i+3,j-2);printf(M%d\nM,k);)运行结果是:(2)#definePR(x)printf(M%3dn,x)main(){intj,a[]={l,3,4,6,8,9,10),i=5;for(j=6;j>2;j-)switch(j){case3:PR(a[i++l);break;PR(a[-i]);default:1—;))运行结果是:

(3)#defineMult(i)t=t*(i)voidmainO{intx,s=0,t=l;for(x=0;x<4;x++){Mult(x+l)*x;s+=t;i实j}程序运行后,S的值是:验2.定义ー个带参数的宏,使两个参数的值互换。在主函数中输入两个数作为使用宏的实参,输出已交换后的两个值。内说明:在程序主函数中使用宏时只能用两个实参,如SWAP(a,b),不能用三个实参。容3.用条件编译方法实现以下功能:输入一行电报文字,可以任选两种输出,ー为原文输出;ー为将字母变成其下一字母(如宣与变成b'.・.N变成宣。其他字符不变)。用#define命令来控制是否要译成密码。例如:若#defineCHANGE1则输出密码。若#defineCHANGE。则不译成密码,按原码输出。过4.编程,通过使用带参数的宏定义从3个数中找出最大数。主函数完成数据输入、宏调用及程数据输出。编写的程序以ex91.C存盘。/*2*/ヽ#defineSWAP(a,b)t=a,a=b,b=t;结main(){intx,y,t;果printf("PleaseInputx,y:\nH);scanf(,'%d%d,,,&x,&y);SWAP(x,y);ヽprintf("x=%dy=%d\nn,x,y);分}/*3*/析#defineCHANGE1main(){charstr[8OJ;inti;gets(str);#ifCHANGEi=0;while(strli]!=,\O,){if(str[i]>=,a,&&str[i]<='z,llstr[i]>='A,&&str[i]<='Z')实验内容与实验内容与{str[i]=str[i]+l;if(str[i]='Z'+l)str[i]=,A,;elseif(str[i]==,z,+l)str[i]=,a,;)i++;)#endifputs(str);)/♦4*/#defineMAX(a,b)(a)>(b)?(a):(b)main(){floatx,y,z;printf("PleaseInputx,y,z:\n");scanf("%f%f%f;&x,&y,&z);printf("max=%f\n",MAX(MAX(x,y),z));

实验内容与过程ヽ结果ヽ分析教师评阅成绩: 教师签名:年月日

实验十实验十指针实验地点:第机房实验时间: 年月日实验地点:第机房实验目的.通过实验,进ー步掌握指针的概念,会定义和使用指针变量、.学会使用数组的指针和指向数组的指针变量。.学会使用字符串的指针和指向字符串的指针变量。.学会使用指向函数的指针变量。.了解指向指针的指针的概念及其使用方法。指针数组。实验要求1.根据题目要求,进行各种程序测试与验证,并记录结果。2.3、4两题按照题目的要求编写出程序,注意总结各题的编程思路。.上机调试程序。将各程序输入计算机,并进行编译和连接,如果在编译、连接中有错误信息,则要根据这些信息找到程序中的错误所在,然后修改程序,直至正确。.详细记录数据的输入、输出信息,按要求写出实验报告。实验内容与1.输入并调试以下程序:(l)#include<stdio.h>main(){charstrロ=”123456789abc",*p;p=&str[5];puts(p);}运行结果是:过程结果(2)#include<stdio.h>main(){int**p,*j,i=10;j=&i;p=&j;printf("%d,%d,%d\n*,**p,(*j)+l,i++);}运行结果是:分析(3)针对以下程序段,给出了四个选项。其中那一组是对数组在规定的范围内)voidmain(){inta[4][3]={0},(*p)[3],i,j;P=a;a元素的正确引用(设i,j均}A)a[i][j],a[i]+j,*(*(a+i)+j)

B)*(p+i)[j],p[i]+j,*(*(p+i)+j)C)*(p+i)[j],*(a+i)[j],*(p+i+j)D)p[i][j],*(p[i]+j),*(a[i]+j)结论是:实2.程序填空(完善程序)。验下面程序功能是用选择法对10个整数排序并输出。请在下划线处填上适当的内容,以完成该程序的功能。内main(){int*p,i,a[10];容for(i=0;i<10;i++)scanfp++);与sort(p,10);过for(p=a,i=0;i<10;i++){printf("刎",*p);p++;}程)sort(intx[],intn){inti,j,k,t;ヽfor(i=0;iくn-1;i++)结{k=i;for(j=i+l;j<n;j++)果if(x[j]>x[k])k=j;if(k!=i)ヽ{t=x[i]; ;x[k]=t;})分)3.编程实现字符串的排序(升序)。要求:析(1)用函数sortstr()编写排序过程。(2)在主函数中输入5个字符串,调用sortstr(),将字符串排序后输出。4.用指针的方法编写程序,完成如下函数的功能:(1)char*strcat(char*str1,char*str2) 把字符串str2接到strl后面,str1后面的‘、。’被取消,返回str!〇(2)intstrcmp(char*strl,char*str2) 比较两个字符串strl、str2o若strl>str2,返回正数1;strl=str2,返回〇;strl<str2,返回负数/*3(1)*/voidsortstr(char(*p)[30],intn){chartemp[30];inti,j,k;

for(i=0;i<n-l;i++){k=i;for(j=i+l;j<n;j++)if(strcmp(p[k],p[j])>0)k=j;实if(k!=i)strcpy(temp,p[i]),strcpy(p[i],p[k]),strcpy(p[k],temp);})验/♦3(2)*/main()内{chara[5][30]={"HuaiNan","BengPu","WuHu","HeFei","AnQing"};voidsortstr(char(*p)[],int);inti;clrscr();容sortstr(a,5);for(i=0;i<5;i++)与puts(a[i]);}过/♦4(1)*/char*strcat(char*strl,char*str2)程{inti=0,j=0:char*p=strl;while(strl[i]!=0)i++;ヽwhile(str2[j]!=0)strl[i++]=str2[j++];结strl[i]=‘、〇';returnp;果)main(){chara[80]/*="Anhui"*/,b[10]/・="Hefei"*/;char*p;分char*strcat(char*strl,char*str2);clrscr();gets(a);gets(b);析p二strcat(a,b);puts(p);)或char*strcat(char*strl,char*str2){char*p=strl,*pl=str2;while(*p!=0)p++;while(*pl!=0)*p++=*p1++;*p二、0';returnstrl;)main(){chara[80]/*="Anhui"*/,b[10]/*="Hefei"♦/;char*p;实char*strcat(char*strl,char*str2);clrscr();验内容与过程ヽ验内容与过程ヽ结果ヽ分析或intstrcmp(char*strl,char*str2){inti二。;while(*str1ニニ・str2&&*str1!二0&&*str2!=0)strl++,str2++;i二・strl-*str2;if(i>0)return1;elseif(i<0)return-1;elsereturn0;gets(a);gets(b);p=strcat(a,b);puts(p);}/*4(2)*/main(){char*a="Followme",*b="Followme";inti;intstrcmp(char*,char*);i=strcmp(a,b);printf("%d\n/z,i);intstrcmp(char*strl,char*str2){inti=0:while(l){i二・strl-*str2;if(i>0)return1;elseif(i<0)returnT;if(*strl==0II*str2==0)break;strl++,str2++;}i=*strl-*str2;if(i>0)return1;elseif(i<0)return-1;elsereturn0;教师评阅成绩:教师签名:实验十ー结构体、共用体、枚举实验地点:第机房 实验时间: 年月日1.掌握结构体类型变量的定义和使用。2.掌握结构体类型数组的概念和应用。3.掌握链表的概念,初步学会对链表进行操作。4.掌握联合的概念与使用。实验要.1.根据题目要求,进行各种程序测试与验证,并记录结果。2.2、3两题按照题目的要求编写出程序,注意总结各题的编程思路。3.上机调试程序。将各程序输入计算机,并进行编译和连接,如果在编译、连接中有错误信息,则要根据这些信息找到程序中的错误所在,然后修改程序,直至正确。4.详细记录数据的输入、输出信息,按要求写出实验报告。1.输入并调试以下程序:实(1)typedefunion{longx[2];验inty[4];charz[8];JMYTYPE;内MYTYPEthem;main()容(printf(,'%d\n",sizeof(them));与}运行结果是:过程(2)#include<stdio.h>main(){structdate{intyear,month,day;结}today;printf(M%d,%d\nH,sizeof(structdate),sizeof(today));果)运行结果是:⑶main(){enumteam{my,your=3,his,her=his+5};分printf(n%3d%3d%3d%d\nu,my,your,his,her);)析运行结果是:

(4)uniondata{intx[2];longb;chary[4];);main(){uniondatau;实scanf(n%x,%x,\&u.x[O],&u.x[1]);printf(Mx[O]=%d,x[l]=%d\n",u.x[O],u.x[l]);验printf(,,b=%ld\n,\u.b);printf(My[0]=%c,y[l]=%c,y[2]=%c\nw,u.y[0],u.y[l],u.y[2]);内)①程序运行时,若输入4241,3231/容则运行结果是:与②若将scanf语句改为:scanf("%lx",&u.b);,再运行程序时,输入314241/过则运行结果是:程(5)structwc{inta;int*b;}*p;inta[]={ll,16},b[]={31,36);>structwcx[2]={100,a,300,b};p=x;结根据以上定义,判断以下四个表达式中,使得指针p->b的值增1的表达式是(多选题):A)*++p->bB)*++((++p)->b)C)*p->b++D)(p++)->b果(6)根据右图所示的存储结构,将以下定义和赋值语句补充完整structaa p iddate{ id; data; | | |10|A分} ;p= malloc( );析 =10; ='A'.有5个学生,包括学生学号(字符型)、姓名(字符型)和3门课成绩(整型),编程完成下面的要求:(1)计算每个学生的总成绩、平均分,并输出。(2)将学生成绩按总分从高到低排序并输出,输出项有学生学号、姓名、3门课成绩及总分。.建立一个链表(包含5个结点),每个结点包括:学号、姓名、性别、年龄。输入一个姓名,如果链表中的结点有该姓名,则将此结点删去。实验内容与过程实验内容与过程结果分析/*2*/structstudent{charnum[8],name[8];intscor[3],total;floatav;}stu[5]={{"10","LI",99,60,32},{"11","Wang",75,77,67},{"12","Zhao",66,77,88),{"13","Ma",88,66,79},{"14","Qian",99,88,77}};voidsort(structstudent*,int);voidprint(structstudent*,int,int);voidtotal_a

温馨提示

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

评论

0/150

提交评论