C语言集训-李珍-第三次作业

103 阅读4分钟

课堂笔记

主要内容

1.运算符 算数运算符 关系运算符 逻辑运算符 赋值运算符 自增自减 三目运算符 运算符优先级 注:遇到优先级问题时,为提高代码可读性,尽量使用括号,不要写出有歧义的代码。 一行代码不要出现多个自增自减符号,这会被视作垃圾代码. 2.流程控制 if else语句 for语句 while语句 switch语句 do while语句 break与continue区别 

细节分析

运算符 算术运算符:%(取余数) 关系运算符:> >= < <= !=(不等于) ==(等于) 逻辑运算符:!(非) &(并且) ||(或) 赋值运算符:= += *= /= -= 优先级别:算术>关系>逻辑>赋值

C语言对真假的处理 非零是真 零是真 真是1表示 假是0表示 &&左边的表达式为假,右边的表达式肯定不会执行 ||左边的表达式为真,右边的表达式肯定不会 流程控制 控制程序代码执行的顺序 流程控制的分类 定义:某些代码可能执行,也可能不执行,有选择的执行某些代码

1.1f最简单的用法
  格式:if(表达式)
             语句
  功能:如果表达式为真,执行语句如果表达式为假,语句不执行
2.1f的范围问题
      if(表达式)
  语句A;
  语句B
  解释:f默认只能控制语句A的执行或不执行
  f无法控制语旬B的执行或不执行
  或者讲:语句B一定会执行
      if默认只能控制一个语句的执行或不执行
      如果想控制多个语句的执行或不执行就必须把这些语句用沿括起来

3.1f..else1f.else...的用法格式
    if(1)
      A;
    else if (2)
      B;
    else if (3)
      C;
    else
      D;
    
4.1f的常见问题解析
  if(表达式1)
  else if(表达式2)
  else if(表达式3
  else
  即便表达式12都成立,也只会执行A语句

  if(表达式1)
  else if(表达式2)
  else if(表达式3)
  这样写语法不会出错,但逻辑上有漏洞

  if(表达式1)
  else if(表达式2)
  else if(表达式3)
  else(表达式4)//第七行
  这样写是不对的,正确的写法是要么去掉(表达式4)要么在7行的else后面加if

for

定义:某些代码会被重复执行分类
1.格式: for(1;2;3)
2.执行的流程【重点】
  单个for循环的使用多个for循环的嵌套使用

while

1.格式:
  while(表达式)
  语句;
2.与for的相互比较
  for和while可以相互转换
  for(1;2;3)等价于while (2)
  但for的逻辑性更强,更不容易出错,推荐多使用for

break和 continue

break如果用于循环是用来终止循环,如果用于 switch,则是用于终止switch
break不能直接用于if,除非if属于循环内部的一个子句
例子:
     for(1=0;1<3;++1)
     {
         if(3>2)
         break;
         printf(“嘿嘿!n);/永远不会输出/
     }   
     在多层循环中, break只能终止最里面包裹它的那个循环

switch

1.格式:
  {
  case 常量表达式1:语句1case 常量表达式2:语句2defaultcase 常量表达式3:语句3;
  }
2.所有的case后面的常量表达式为便于描述我们姑且称之为标签
  且标签只能为枚举常量,数值常量,字符常量,常变量,宏变量中的一种。
  注意普通变量,枚举变量是不能作为标签使用的
3.switch后面的"表达式"允许是任何类型


重要程序

1.break用于多个for循环

# include<stdio.h>
int main(void)
{
  int i, j;
  for (i=0; i<3; ++i)
  {
      for (j=1; j<4; ++j)
         break;
      printf("同志们好!\n");
  }
  return 0;
}

QQ截图20211125225802.png

2.求1~100之间的奇数之和

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

3.if常见的错误分析

# include <stdio.h>
int main(void)
{
    if (3>2)
       printf("哈哈!\n");
    else
       printf("嘿嘿!\n"); 
    return 0;

}

QQ截图20211125231650.png

4.if...else...的用法

# include <stdio.h>
int main(void)
{
    double delta = -1;
    if (delta > 0)
       printf("有两个解!\n");
       printf("哈哈!\n");
    else if (delta == 0)
       printf("有一个唯一的解!\n");
    else
       printf("无解!\n");
    return 0;
}

QQ截图20211125232704.png

5.scanf的用法

# include <stdio.h>
int main(void)
{
    int i;
    char ch;
    scanf("%d", &i);
    printf("i = %d \n",i);
    scanf("%c",&ch);
    printf("ch =%c\n",ch);
    return 0;
}

QQ截图20211125233400.png

# include <stdio.h>
int main(void)
{
    int i=0, s=0;
    do
    {
       if(i%2)
       {
           i++;
           continue;
       }
       i++;
       s+=i;
    } while (i < 5);
    printf("%d\n",s);
    return 0;
}


QQ截图20211125234449.png

课后习题

注册杭电oj账号

QQ截图20211124220819.png 5.10第七题

     SOS:4 4.00

5.10第十三题

    a.x=x-1;
    b.m=n%k;
    c.p=q/b-a;
    d.(a+b)/(c*d);

5.11第三题

int main(void)
{
    int a, b, c;
    scanf("%d", &a);
    while( a > 0)
    {
        b = a / 7;
        c = a % 7;
        printf("%d days are %d weeks,%d days\n", a, b, c);
        scanf("%d", &a);
    }
    return 0;

QQ截图20211125001634.png 5.11第八题

#include <stdio.h>
int main (void)
{ 
    int a,c;
    const int b ;
    printf ("This program computers moduli.\n");
    printf ("Enter an integer to serve as the second_operand :");
    scanf("%d",&b);
    printf ("Now enter first_operand :");
    scanf("%d",&a);
    while (a > 0)
    {
        c = a % b;
        printf ("%d %% %d is %d\n", a, b, c);
        printf ("Enter next number for first_operand(<=0 to input):");
        scanf ("%d",a);
    }
    printf ("Done");
    return 0;
}

QQ截图20211125204650.png 6.16第五题 这一题我不会写参照答案

# include <stdio.h>
void print_spaces(unsigned int n);
int main(void)
{	
    char uppercase_letter;
    char c1, c2;	
    do 	
    {	
        printf("Enter an uppercase letter: ");		
        scanf(" %c", &uppercase_letter);	
    } while (uppercase_letter < 'A' || 'Z' < uppercase_letter);	
        for(c1 = 'A'; c1 <= uppercase_letter; c1++)
        {		
            print_spaces(uppercase_letter - c1);			
            for (c2 = 'A'; c2 < c1; c2++)		
            {			
                printf("%c", c2);		
            }				
             for (; 'A' <= c2; c2--)		
                {			
                     printf("%c", c2);		
                }			
                print_spaces(uppercase_letter - c1);		
                printf("\n");	
        }
        return 0;
}

void print_spaces(unsigned int n)
{
    for(int i = 0;i<n;i++)
    {
        printf(" ");
    }
}

QQ截图20211125211840.png 6.16第十二题 这道也不会

#include <stdio.h>
int main(void)
{	
    long int limit;
    float sign = 1.0f;	
    float series1 = 0, series2 = 0;
    printf("Enter a number of terms to sum: ");	
    scanf("%ld", &limit);	
    for (long int i = 1; i <= limit; i++)	
        {		
            series1 += 1.0f/i;		
            series2 += (1.0f/i) * sign;		
            sign = -sign;	
        }	
        printf("The %ldth partial sum for series 1 is: %.5f\n", limit, series1);	
        printf("The %ldth partial sum for series 2 is: %.5f\n", limit, series2);	
        return 0;
 }

QQ截图20211125214014.png 6.16第十八题 这题也不会

#include <stdio.h>
int main(void)
{	
    const int DUNBARS_NUMBER = 150;	
    int friends = 5, week = 0;	
    printf("Week | Friends\n");	
    printf("-----+--------\n");	
    while (friends < DUNBARS_NUMBER)	
    {		
        printf("%4d | %7d\n", week, friends);		
        week++;		friends -= week;		
        friends *= 2;	
    }	
        return 0;
}



QQ截图20211125215932.png

7.11第二题

a.number>=90 && number<100;
b.ch!=q||ch!=k;
c.number>=1 && number<=9 && number!=5;
d.!(number>=1 && number<9);


7.11第十题

# include <stdio.h>
int main(void)
{
    char ch;
    ch = getchar();
    if(ch !='\n')
    {
        printf("step1\n");
        if(ch !='c')
        {
            while((ch=getchar()) !='#')
            {
                if(ch !='b')
                   break;
                else if(ch=='h')
                   printf("step2\n");
                printf("step3\n");
            }
        }
    }
    printf("Done\n");
    return 0;
}