C语言集训-----吴嘉乐---第三次作业

168 阅读4分钟

笔记

视频笔记

什么是流程控制

int main(void)
{
  int i,j;
   printf("请输入i,j的值:(中间以空格隔开);
  scanf("%d%d",&i,&j);
  printf("i=%d,j=%d\n",i,j);
  return 0;
}

流程为什么非常重要

  • 流程控制学完了,其他语言就不需要学流程控制了
  • 可以把任意复杂的问题解决掉
  • 和其他语言思想一样 if简单的用法
int main(void)
{
  if(1>3)
    printf("AAA");
   printf("BBB");

  return 0;
}

if的范围用法

    • if默认只能控制语句1的,无法控制语句2的执行与不执行,如果想控制多个语句的执行与不执行,需要用大括号括起来 ifelse的用法
  • 后缀不能错
int main(void)
{
  int i,j;
  scanf("%d%d",&i,&j);
  if(i>j)
    printf("%d",i);
  if(j>i)
    printf("%d",j);

  return 0;
}
int main(void)
{
  int i,j;
  scanf("%d%d",&i,&j);
  if(i>j)
    printf("%d",i);
  if(j>i)
    printf("%d",j);

  return 0;
}
int main(void)
{
  float score;
  printf("输出你的考试成绩:");
  scanf("%f",&score);
  if(score>100)
      printf("你这是做梦!\n");
     else if(score>=90)
        printf("优秀!\n");
     else if(score>=80)
        printf("良好!\n");
     else if(score>=60)
        printf("及格\n");
     else printf("不及格\n")

  return 0;
}

互换两个数字

int   main(void)
{
  int i=3;
  int j=5,t;
   t=i;
   i=j;
   j=t;
   printf("i=%d,j=%d",i,j);
  return 0;
}

对任意三个数排序

int   main(void)
{
  int a,b,c,t;
  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",a,b,c);
  return 0;
}

学习C语言常见的误区

  • 判断一个数为素数
  • 判断一个数为回文数
  • 编程实现一个十进制数字的二进制形式
  • 求一个数字的每位奇数的数字取出来组合出来形成一个新数字
  • 求一个数字的倒数形式
看懂程序的三步
  1. 流程
  2. 每个语句的功能
  3. 试数
  • 尝试自己去编程解决它,大部分人自己都无法解决如果解决不了,就看答案
  • 关键把答案看懂,需要话很多时间,也是我们学习的重点
  • 看懂后尝试自己去修改程序,并且知道修改后程序不同结果的不同含义,调试错误
  • 如果程序无法理解,就背会它 空语句的问题

if常见问题分析

123.png

  • if后面加分号,执行空语句,if,else就会出现错误

100.png

  • 即使表达式1,2都正确,也只会执行表达式1
    • if没有包括的范围,程序不会输出结果,但逻辑上有漏洞
  • else后面不能加表达式,或者在加个if才对
  • 一个分号一个语句
  • else后面加表达式加分号,这样写语法上没有错误,但逻辑上有错误 循环的定义
  • 某些代码的循环执行 为什么需要循环
int   main(void)
{
  int i;
  int sum=0;
  for(i=1;i<=4;++i)
  {
      sum=sum+i;
      printf("sum=%d\n",sum);
  }
  return 0;
}

int   main(void)
{
  int i;
  int sum=0;
  for(i=3;i<=10;++i)
  {
      if(i%3==0)
      sum=sum+i;
      printf("sum=%d\n",sum);
  }
  return 0;
}

强制类型转换

int   main(void)
{
  int i;
  float  sum=0;
  for(i=1;i<=100;++i)
  {
      
      sum=sum+(float)(1/i);
  }
      printf("sum=%f\n",sum);
  
  return 0;
}

浮点数存错所带来的问题

  • 浮点数存的都是近似值
  • 如果X减去一个很小的数的绝对值小于一个很小的数,就可以判断X的值近似为零
  • 循环中更新的变量不能定义为一个浮点型,因为浮点型不能够准确存储

for循环四个习题讲解

int   main(void)
{
  int i;
  int sum=0;
  int cnt=0;
  float avg;
  for(i=1;i<=101;++i)
  {
      if(i%2==1)
      {sum+=i;
      ++cnt;
      }

  }
  avg =1.0*sum/cnt;
  printf("sum=%d\n",sum);
  printf("cnt=%d\n",cnt);
  printf("avg=%d\n",avg);
  return 0;
}

进制

  • 几进制就是逢几进几
  • 十进制的3981和十六进制的F8D本质上都是同一个数 自增自减
int main()
{
   int i,j ,k,m;
   i=j=3;
   k=++i;
   m=j++;
   printf("i=%d,j=%d,k=%d,m=%d",i,j,k,m);
    return 0;
}

三目运算符

int main()
{
   int i,j ,k,m;
   for(i=1;i<=4;i++)
    for(m=1;m<4;m++)
        printf("哈哈\n");
    printf("嘿嘿\n");

    return 0;
}
int main()
{
   int i,j ,k,m;
   for(i=1;i<=4;i++)
    printf("1111\n");
    for(m=1;m<4;m++)
   {
       printf("333\n");
    printf("222\n");

   }

    return 0;
}
  • while和for循环可以相互转换,但for循环的逻辑性更强,更不容易出错
int main()
{
    int val,m;
   int sum=0;
   printf("请输入你需要判断的数字:");
   scanf("%d",&val);
   while(m)
   {
       sum=sum*10+m/10;
       m/10;

   }
   if(sum==val)
    printf("Yes!\n");
   else
    printf("No!\n");
    return 0;
}
int main()
{
    int n,m;
   int f1=1,f2=2;
   printf("请输入你需要判断的数字:");
   scanf("%d",&n);
 if(1==n)
 {
     f3=1
 }
 else if(2==n)
 {
     f3=2;
 }
   else
   {
       for(i=3;i<=n;++i)
       {
           f3=f1+f2;
           f1=f2;
           f2=f3;
       }
   }
   printf("%d",f3);
    return 0;
}

什么时候用for,while

dowhile循环一定会至少执行一次 [较长的一段代码](Ubuntu Pastebin) break的用法

  • break用于循环是种植循环
  • break用于switch是为了终止
  • break不能直接用于if,除非if属于循环内部的一个语句
#include<math.h>
int main()
{
    int x=1,y=0,a=0,b=0;
    switch(x)
    {
    case 1:
        switch(y)
        {
        case 0:
            a++;
            break;
        case 1:
            b++;
            break;
        }
        break;
        case 2:
            a++;
            b++;
            break;

    }
    return 0;
}

continue

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

书本笔记

第五章

  1. C语言标准数学库提供pow()函数用于指数运算
  2. 用于存储值得数据存储区域统称为数据对象
  3. 单独使用递增运算符,使用那种形式都没关系
  4. 只有圆括号括起来的才比递增和递减运算级别高
  5. 大多数语句都是由表达式构成的
  6. 每个表达是都有一个值
  7. 语句是C程序的基本构建块
  8. 语句可以改变值或调用值
  9. 副作用是对数据对象或文件的修改

第六章

  1. 伪代码是一种简单的句子表示程序思路的方法,它与计算机语言的形式相对应
  2. while循环是使用入口条件的有条件循环
  3. while循环经常以来测试表达式作比较,这样的表达式被称为关系表达式
  4. 在C语言中一直用int类型的变量表示真假值
  5. 关系与算符比赋值运算符的优先级高
  6. 当循环涉及初始化和更新变量是用for循环比较合适
  7. 数组可以作为存储多个相关项的便利方式
  8. 函数将计算表达式的值,并返回该值

第七章

  • C提供条件表达式作为表达if else语句的一种便捷方式,该表达时使用?:条件运算符
  • continue和break语句以根据循环体中的测试结果来忽略一部分循环内容,甚至结束内容

作业

  • 第七题输出结果为:sos:4 4.00

2.png 第十三题 x-=1; m=n%k; p=(q/b)-a; x=(a+b)/(c*d); 第三题


int main()
{
    int a,b,c;
     printf("请输入天数:");
     scanf("%d",&a);
     b=a/7;
     c=a%7;
     printf("%d周%d天",b,c);

    return 0;
}

第八题


int main()
{
	int a, b;
	printf("This program computes moduli.\n");
	printf("Enter an integer to serve as the second operand: ");
	scanf("%d", &b);
	printf("Now enter the first operand: ");
	scanf("%d", &a);
	while (a > 0)
	{
		printf("%d %% %d is %d\n",a, b,a % b); 

		printf("Enter next number for first operand (<= 0 to quit): ");
		scanf("%d", &a); 
	}

	return 0;
}
  • 第五题和第12题不会做,看答案看懂了,然后又对着答案敲了一遍

int main(void)
{
	 int number = 150;
	 int friends=5,week=0;
	while (friends < number)
	{
		printf("%d,%d\n", week, friends);
		week++;
		friends-= week;
		friends*= 2;
	}
	return 0;
}

第二题

  1. number>=90&&number<100
  2. ch!=q||k
  3. number>=1&&number<=9&&nu7mber!=5
  4. number<1||number>9

第十题

int main(void)
{
	char ch;
	while((ch=getchar())!='#')
	{
	    if(ch!='\n')
            ;//执行空语句
        printf("Step 1\n");
        if(ch!='c')
            ;//执行空语句
        else if(ch=='b')
            break;
        else if(ch=='h')
            printf("Step 3\n");
        printf("Step 2\n");
	}
	printf("Done\n");
 return 0;
}

注册截图

10000.png