第五次C程序设计实验报告

目标:
1.拾遗补缺;
2.了解C语言及其语句的更多细节.
任务1提示:在C语言中,多个表达式可以用逗号分开,其中用逗号分开的表达式的值分别结算,但整个表达式的值是最后一个表达式的值。
例如,
int b=2,c=7,d=5;
a1=(++b,c--,d+3);
a2=++b;c--,d+3;
对于第二行代码,有三个表达式,用逗号分开,所以最终的值应该是最后一个表达式的值,也就是d+3,为8,所以a1=8。
对于第三行代码,那么也是有三个表达式,这时的三个表达式为a2=++b、c--、d+3,(这是因为赋值运算符比逗号运算符优先级高)所以最终表达式的值虽然也为8,但a2=4。
注意:逗号运算的结合性是从左至右,完毕之后整个表达式的值是最后一个表达式的值。
任务1:分析下面的例子,给出z和w的计算值、说明为什么?

例子:


分别是2,11,因为有()且有“,”分开,所以对z的赋值是最后一个与语句“x++”,又因为“++”在“x”前,所以是先赋值x再加1。对w,是在程序运行完z后,此时,x=2+1=3,运行w时,先运行w中的“x++”此时x=4,最后再运行“x+7”,所以最后w=4+7=11。,

------------------------------------任务分割线------------------------------------
任务2提示:除了if...else外,C语言还提供了另一种用于多分支选择的switch语句, 其一般形式为:
 switch(表达式){ 
         case常量表达式1:  语句1;
         case常量表达式2:  语句2;
         … 
         case常量表达式n:  语句n;
         default:语句n+1;
 } 
其语义是:计算表达式的值。 并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时, 即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。

任务2:自行设计一个程序,程序须运用switch语句。要求有一定技术含量!

#include<stdio.h>
#include<math.h>
#define PI 3.14159265358979
void main()
{
	int a,b,c;
	double d,e;
	char g;
	printf("这是一个计算三角函数的程序\n");
	do{
        printf("三角函数按1,反三角按2\n");
	scanf_s("%d",&a);
        if(a==1)
          {printf("请输入度数:\n");
	   scanf_s("%lf",&d);
	   printf("正弦按1,余弦按2,正切按3\n");
           scanf_s("%d",&b);
	   switch(b){
	   case 1:printf("计算值是%lf\n",sin(d*PI/180));break;
           case 2:printf("计算值是%lf\n",cos(d*PI/180));break;
           case 3:printf("计算值是%lf\n",tan(d*PI/180));break;
	   default:printf("错误\n");}}
       if(a==2)
	  {printf("请输入值");   
           scanf_s("%lf",&e);
           printf("反正弦按1,反余弦按2,反正切按3\n");
	   scanf_s("%d",&c);
	   switch(c){
	   case 1:printf("度数是%lf\n",asin(e)*180/PI);break;
           case 2:printf("度数是%lf\n",acos(e)*180/PI);break;
           case 3:printf("度数是%lf\n",atan(e)*180/PI);break;
	   default:printf("错误");}}
	printf("继续 Y/y,结束N/n  ");
	getchar();g=getchar();}while(g=='Y'||g=='y');
	printf("\n");
}


------------------------------------任务分割线------------------------------------
任务3提示: 在前边已经介绍过用break语句可以使流程跳出switch结构,继续执行switch语句下面的一个语句。实际上,break语句还可以用于循环体内(for、while、do..while)。其作用是结束整个循环过程,不再判断执行循环的条件是否成立。为了控制循环过程,C语言中还提供了continue语句来控制程序的流程转向,其作用是结束本次循环,即不再执行continue语句之后的循环部分,转入下一次循环。
两种语句的主要区别是:break语句结束整个循环过程,不再判断循环的条件;而continue语句则是结束本次循环,而不是终止整个循环的执行。
注意:但当break出现在循环体中个的switch语句内时,其作用只是跳出该switch语句,并不能终止循环的执行。

任务3:  自行设计一个程序,程序须运用break和continue语句。要求有一定技术含量!..

#include<stdio.h>
#include<math.h>
double t1(double x,double y,double z)
 {    double X1=(-y+sqrt(pow(y,2)-4*x*z))/(2*x);return X1;}
double t2(double x,double y,double z)
 {    double X2=(-y-sqrt(pow(y,2)-4*x*z))/(2*x);return X2;}
void main()
{
     double a,b,c;
     int i,x=0;
     printf("求解一元二次函数根的程序\n");
     printf("请输入计算次数:");
     scanf_s("%d",&i);
     while(x<=i)
     {    printf("依次输入二次项,一次项系数及常数像:\n");
          scanf_s("%lf,%lf,%lf",&a,&b,&c);
          if(pow(b,2)<4*a*c&&a!=0)   continue;
          if(pow(b,2)==4*a*c&&a!=0) 
               printf("唯一解是:X=%lf",t1(a,b,c));
          if(pow(b,2)>4*a*c&&a!=0) 
               printf("有两解分别是:X1=%lf,X2=%lf",t1(a,b,c),t2(a,b,c));
          if(a==0)    break;
          x++;
     }
}          


------------------------------------任务分割线-----------------------------------

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值