C语言集训-郑露平-第三次作业

182 阅读3分钟

一、运算符:

​ 算术运算符:+ - * / %(取余数,运算对象必须为整数)

​ 关系运算符:< > <= >= !=(不等) ==(相等)

​ 逻辑运算符:!(非) &&(与) ||(或)

​ 自增【自减】

​ 前自增——i++(先加一后赋值)

​ 后自增——++i(先赋值后加一)

​ 三目运算符

​ A?B:C

​ 等价于

​ if(A)

​ B;

​ else

​ C;

逗号表达式

​ 格式:

​ (a,b,c)

​ 功能:

​ 从左到右执行

​ 最终表达式的值是最后一项的值

C语言对真假的处理

​ 非零为真,0为假

​ 赋值运算符:= += -= *= /=

​ 优先级别:算术>关系>逻辑>赋值

二、流程控制:

1、什么是流程控制?

程序代码执行的顺序

2、流程控制的分类:

顺序执行
选择执行

定义:有选择的去执行某些代码

分类:

​ If

1、if最简单的用法:

​ 表达式为真,即执行语句;表达式为假,不执行语句

2、选择if的范围问题:

​ if(表达式)

​ 语句一

​ 语句二

if只能控制语句一执不执行,而无法控制语句二。换句话说语句二一定执行

​ if(表达式)

​ {语句一

​ 语句二

​ }

if能控制语句一和语句二

3、if else....if else的用法

格式:

​ if(1)

​ A

​ else if(2)

​ B

​ else if(3)

​ C

​ else

​ D

4、if举例——求分数的等级

如图image-20211123231617363

5、互换两个数字

代码如下

#include <stdio.h>
   int main(void)
{ int a=3;
  int b=5;
  int t;
	 t=a;
	 a=b;
	 b=t;
	   printf("a=%d b=%d",a,b);
	  
    return 0;
}   
6、对任意三个数字进行排序

代码如下

#include <stdio.h>
   int main(void)
{ int a,b,c,t;
    printf("请输入三个整数,中间用空格隔开\n");
    scanf("%d %d %d",&a,&b,&c);
       if(a<b)
       {t=a;
	    a=b;
	    b=t;
	   }
	   if(a<c)
	   {t=a;
	    a=c;
	    c=t;
	   }
	    if(b<c)
	    {t=b;
	     b=c;
	     c=t;
	    }
    printf("%d %d %d\n",a,b,c);
    return 0;
}   
7、if的常见问题

if空语句问题:

​ if()后面不能加“;”,加了就视为空语句

if else语句问题:

​ if(表达式1)

​ 语句1;

​ else if(表达式2)

​ 语句2;

​ else if(表达式3)

​ 语句3;

​ else(表达式4)

​ 语句4;

【 若其中表达式1和表达式2都成立,只执行语句1,不执行语句2.】

​ switch(后面再学)

循环执行

定义:某些代码会被重复执行

分类:for

​ while

​ do...while

​ break和continue

为什么要用for循环?

​ 用for循环计算累加

#include <stdio.h>
int main(void)
   {   int i;
       int sum=0;
    for(i=1;i<=4;++i)
	   sum=sum+i;
	   printf("sum=%d\n",sum);   
   	
   	return 0;
   }
for和if的嵌入式使用

​ 求0-100中能被三整除的数之和

#include <stdio.h>
int main(void)
   {  int i;
      int sum=0;
    for(i=3;i<=100;++i)
	{ if(i%3==0)
	    sum=sum+i; 
	  }  
      printf("sum=%d\n",sum);
   	return 0;
   }
强制类型转换

格式:(数据类型)(表达式)

​ **功能:**把表达式的值强制转化为前面所执行的数据类型

​ 例如:

​ (int)(4.5)=4

​ (float)(5)=5.000000

浮点数存错所带来的问题

​ float和double都不能保证可以精准的储存一个小数,所以循环中更新的变量不能定义成浮点型

多层for循环嵌套使用

​ 值得注意的是if只能控制一个语句,所以要用整体思想来理解语句

示例

#include <stdio.h>
int main(void)
   {   int i,j;
     for(i=0;i<3;++i)
        for(j=2;j<5;j++)
            printf("haha\n");
            printf("xixi\n");

   return 0; 
   }
while循环
1、执行顺序

​ 格式:

​ while(表达式)

​ 语句:

2、while和for的比较

​ for循环

#include <stdio.h>
   int main(void)
   {int sum=0;
   	int i;
   	   for(i=1;i<101;++i)
   	     sum=sum+i;
   	printf("%d\n",sum) ;
   	
   	
   	return 0;
   }

​ while循环

#include <stdio.h>
   int main(void)
   {int sum=0;
   	int i;
   	 i=1;
   	 while(i<101)
   	{
		 sum=sum+i;
   	  ++i;}
   	printf("%d\n",sum) ;
   	
   	
   	return 0;
   }

3、do while和while与for的比较

do...while

​ 格式:do

​ {...

​ }while(表达式)

​ 作用:

​ 主要用于人机交互

​ **注意:**do...while并不等价于while也不等价于for

4、用do...while实现一元二次方程的求解
#include <stdio.h>
#include <math.h>
   int main(void)
   {   double a,b,c;
       double delta;
       double x1,x2;
       do{
          printf("请输入\n");
          printf("a=\n");
          scanf(" %lf", &a);
          printf("b=\n");
          scanf(" %lf", &b);
          printf("c=\n");
          scanf(" %lf", &c);
      delta=b*b-4*a*c;
	      if(delta>0)
		  {x1=(-b+sqrt(delta))/2*a;
		   x2=(-b-sqrt(delta))/2*a;
		     printf("x1=%lf x2=%lf\n",x1,x2);
			  }    
		else if(delta=0)
		{x1=(-b+sqrt(delta))/2*a;
		 x2=x1;
		      printf("x1=x2=%lf\n",x1);
			  }	  
		else(delta<0)
		 ;printf("无解!\n");
	}
	   while(1);
   	return 0;
   }

switch的基本用法

​ 电梯模型举例

#include<stdio.h>
int main()
{int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(a>b>c)
printf("%d\n",a);
if(b>a>c)
printf("%d\n",b);
else
printf("%d\n",c);
	
	return 0;
}
switch语句

​ switch(表达式)

{ case常量表达式1:语句1;

case常量表达式2:语句2;

...

case常量表达式n:语句n;

default :语句n+1;

}

break和continue的区别
break

​ break如果用于循环是用来终止循环

​ break如果用于switch,则是用于终止switch

​ break不能直接用于if,除非if属于循环内部的一个子句

​ 例如:

​ for(i=0;i<3;++i)

​ { if(3>2)

​ break;

​ printf("haha\n") /永远不会输出

​ }

​ break只能终止距离他最近的循环

​ 在多个switch嵌套使用中break只能终止距离他最近的switch

continue

​ 用于跳过本次循环余下的语句,转去判断是否需要执行下次循环

课后习题

5.10

​ 第七题:SOS4 4.00

​ 第十三题:--x,m=n%k,p=q/(b-a),x=(a+b)/(c*d)

5.11

​ 第三题:

#include <stdio.h>
 int main(void)
 { int a;
  int b,c;
  printf("请输入你想转化的天数\n");
  scanf("%d",&a);
      b=a/7;
      c=a%7;
  printf("%d周 %d天\n",b,c);    
      
 
 	
 	
 	
 	return 0;
 }

​ 第八题:

#include <stdio.h>
 int main(void)
 { int first,second;
 printf("请输入你想输入的数据\n");
 scanf("%d",&second);
 printf("输入数据\n");
scanf("%d",&first);
   while(first>0)
   {printf("%d %% %d is %d\n",first,second,(first%second));
   printf("enter next number for first operand(<= to quit):");
   	scanf("%d",&first);
   }
   printf("结束\n");
 	return 0;
 }

6.16

第五题:

#include <stdio.h>
 int main(void)
 { int i,j,num;
    char c;
    printf("请输入字符\n");
    scanf("%c",&c);
    char ch='A';
    num=c-'A'+1;
    for(i=1;i<=num;i++)
    {    for(j=0;j<num-1;j++)
         printf(" ");
         for(ch='A';j<num;j++)
         printf("%c",ch++);    	
         for(j=1,ch-=2;j<i;j++,ch--)
		 printf("%c",ch);    	
    	printf("\n");
	}
 	return 0;
 }


第十二题:

#include <stdio.h>
 int main(void)
 { int i,sum;
 for(i=0;i<101;++i)
 sum=1+i;
  printf("%d\n",sum);
 	return 0;
 }

第十八题:

#include <stdio.h>
int main(void)
{int rabnud;
 int week;
while(rabnud<150)
{

printf("在%d周,rabund有%d个朋友\n",week,rabnud);
  rabnud=2*(rabnud-week++);
};
printf("结束!\n");
	
	return 0;
}
7.11

第二题、 a、number>=90&&number<100

​ b、ch!=q||k

​ c、number>1&&number<9&&!=5

​ d、number<1&&number>9

第十题、

若ch为'\n',打印step1;若ch为'b',则终止循环;若ch为'c',终止当前循环;若ch为'h',打印step3;若为其他,打印step2,step3.