C语言集训-李明航-第四次作业

145 阅读3分钟

课堂笔记

数组

1.为什么需要数组:

  • 为了解决大量同类型数据的存储和使用问题
  • 为了模拟现实世界

简单的使用(一维数组):

QQ截图20211130161536.png

2:数组的分类

一维数组:定义:
  • 为n个变量连续分配储存空间

  • 所有变量数据类型必须相同

  • 所有变量所占的字节大小必须相同

  • 有关一维数组的操作 初始化

  • 完全初始化

  • int a[5] = {12345};
    
  • 不完全初始化,未被初始化的元素自动为零

  • int a[5] = {123};
    
  • 不初始化,所有元素都是垃圾值

  • int a[5]
  • 清零

  • int a[5] = {0};
    
  • 错误写法:

  • int a[5];

  • a[5] = {1,2,3,4,5};

  • 只有在定义数组的同时才可以整体赋值,其他的时候都是错的

  • int a[5] = {1,2,3,4,5};

  • a[5] = 100;没有a[5]这个元素最大到4

  • int a[5] = {1,2,3,4,5};

  • int b[5];可以把a中的数组全部的值赋给b数组

  • 错误的写法;b = a;

  • 正确的写法;

  • for(i = 0;i < 5;++i)

  • b[i] = a[i];

二维数组:int a[3][4];
  • 可以理解为一共12个元素被看成三行四列来看待
  • a[i][j]可以看为第i+1行 第j+1列
多维数组:
  • 不存在多维数组,因为内存是线性一维的
  • 每个数组可以当作每个元素的n-1维数组的一维数组

*函数(c语言的第二个重点)

为什么需要函数:避免了重复性操作,有利于程序的模块化 什么叫做函数:逻辑上能够完成特定功能的独立代码代码块。物理上能够接受数据,能够对接受的数据处理,能够将数据处理的结果返回。总结;函数是为了解决大量类似的问题设计的,函数也已当成是一个黑匣子。 如何定义函数:函数的返回值 函数的名字(函数的形参列表) { 函数的执行体 }

  1. 函数的定义的本质是详细描述函数之所以能够实现某个特定功能的具体方法
  2. return 表达式;的含义:终止被调函数,像主函数返回表达式的值,不向被调函数返回任何值。break是用来终止循环和switch的,return只能用来终止函数,不想被调函数返回任何值。
  3. 函数返回值的类型也称之为函数的类型,因为如果函数名前的返回值类型和函数执行体的return表达式;中表达式的类型的不同的话,则最终函数的返回值的类型以
  4. 函数的分类:
  • 有参函数和无参函数
  • 有返回值函数和无返回值函数
  • 库函数和用户自定函数
  • 值传递函数和地址传递函数
  • 普通函数和主函数
  1. 注意的问题:库函数的声明是通过include 个数相同 位置一一对应 数据类型必须互相兼容
  2. 常用的系统函数:

2000题代码

#include<string.h>
int main()
{
 char a,b,c;
 while(scanf("%c %c %c",&a,&b,&c)!=EOF)
    {
  getchar();
  char t;
  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("%c %c %c\n",a,b,c);
 }
}

2001题自己理解的代码

#include <math.h>

int main(void)
{
    double x1, x2, y1, y2 ;
    double distance;
    scanf("%lf %lf %lf %lf",&x1,&x2,&y1,&y2);
    distance = sqrt((x2-x1)*(x2-x1)-(y2-y1)*(y2-y1));
    printf("%.2lf",distance);
    return 0;
}

正确代码;

#include <math.h>

int main(){
 double x1,y1,x2,y2;
 double distance = 0;
 while(scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2)!=EOF)
    {
  distance = sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
  printf("%.2lf\n",distance);
 }
 return 0;
}

错误点EOF在文本末端表示结束

2002题自己理解的代码

#define PI 3.1415927

int main(void)
{
    double r;
    double v;
    scanf("%lf",r);
    v = 4 * PI * r * r * r / 3;
    printf("%lf",v);
    return 0;
}

正确的代码:

#define PI 3.1415927

int main(void)
{
    double r;
    double v;
    while(scanf("%lf",r)!=EOF)
    {
    v = 4 * PI * r * r * r / 3.0;
    printf("%.3lf\n",v);
    }
    return 0;
}

错误点scanf要加while实现重复输入 2003题自己的代码


int main()
{
 double x;
    scanf("%lf", &x);
    if(x >= 0)
    {
        x == x;
    }
    else
    {
        x == -x;
    }
    printf("%lf/n",x);

 return 0;
}

正确代码


int main()
{
 double x;
 while ((scanf("%lf", &x))!= EOF)
  printf("%.2f\n", (x > 0) ? x : -x);
 return 0;
}

2004题自己的代码


int main()
{
 int score;
 scanf("%d",&score)
    if(score >= 90 && score <= 100)
 printf("A\n");
    else if(score >= 80 && score <= 89)
 printf("B\n");
 else if(score >= 70 && score <= 79)
 printf("C\n");
    else if(score >= 60 && score <= 69)
 printf("D\n");
 else if(score >= 0 && score <= 59)
 printf("E\n");
 else 
 printf("Score is error!\n");
  

 return 0;
}

答案:


int main()
{
 int score;
 while(scanf("%d",&score)!=EOF)
    {
  if(score >= 90 && score <= 100)
        {
   printf("A\n");
  }else if(score >= 80 && score <= 89)
        {
   printf("B\n");
  }else if(score >= 70 && score <= 79)
        {
   printf("C\n");
  }else if(score >= 60 && score <= 69)
        {
   printf("D\n");
  }else if(score >= 0 && score <= 59)
        {
   printf("E\n");
  }else 
        {
   printf("Score is error!\n");
  }
 }
 return 0;
}   

2005正确答案:


int main(){
 int day[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
 int year,month,date;
 int num = 0;
 while(scanf("%d/%d/%d",&year,&month,&date)!=EOF){
  num = 0;
  if((year % 400 == 0) || ((year % 100 != 0) && (year % 4 == 0))){
   day[1] = 29;
  }else{
   day[1] = 28;
  }
  for(int i = 0;i < month - 1;i++){
  }
  num += date;
  printf("%d\n",num);
 }
 return 0;
}

没有做出来,自己的思想太简单了,一个月按照三十天算的 2006正确答案:


int main()
{
 int n,a,result;
 while(scanf("%d",&n)!=EOF)
    {
  result = 1;
  while(n--)
        {
   scanf("%d",&a);
   if(a % 2 != 0)
    result *= a;
  }
  printf("%d\n",result);
 }
 return 0;
}

没啥思路啊擦按照答案码的

2007自己理解


int main()
{
    int a,b,c;
    int s;
    int c;
    while(scanf("%d%d%d",a,b,c)!=EOF)
    s = a*b*c;
    c = 2*a*b + 2*b*c + 2*a*c;
    printf("%d",s);
    printf("%d",c);
 return 0;
}

正确答案


int main(){
 int m,n;
 int x,y;
 while(scanf("%d%d",&m,&n)!=EOF)
    {
  x = 0;y = 0;
  if(m > n)
        {
   int temp = m;
   m = n;
   n = temp;
  }
  for(int i = m;i <= n;i++)
        {
   if(i % 2 == 0)
            {
    x += i*i;
   }else
            {
    y += i*i*i;
   }
  }
  printf("%d %d\n",x,y);
 }
 return 0;
}