C语言集训-黄锐辉-第四次作业

168 阅读3分钟

理论部分

数组

为什么要数组

为了解决大量数据的存储与使用问题

为了模拟现实世界

#include <stdio.h>
int main (void)
{
    int a[5]  = {1, 2, 3, 4, 5};
    //a是数组的名字,5表示数组元素个数,并且5个元素分别用a[0] a[1] a[2] a[3] a[4]表示

    int i = 0;
    while (i<5)
    {
        printf("%d\n", a[i]);
        ++i;
    }
    return 0;
}

数组的分类

一维数组

怎样定义一维数组

  • 为n个变量连续分配储存空间
  • 所有的变量数据类型必须相同
  • 所有变量所占字节大小必须相等

例子

int a[5];

有关一维数组的操作:

初始化

完全初始化

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

不完全初始化 未被初始化的为0

​ int a[5] = {1,2,3}

不初始化 所有元素都是垃圾值

​ int a[5]

清零

​ int a[5] = {0}

错误写法

int a[5];

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

只有在定义数组的同时才可以整体赋值

其他情况下整体赋值是错误的

a[4]表示的下标表示的位置

如果要把a数组的值全部赋给b数组

错误的写法

​ b = a

正确

​ for (i = ; i < 5 ; ++i)

​ b[i] = a [i]

#include <stdio.h>//数组前后调换
int main (void)
{
    int a[6] ={1 ,2 ,3 ,4 ,5 ,6};
    int i,j;
    int t;

    i = 0;
    j = 5;
    while (i<j)
    {
        t = a[i];
        a[i] = a[j];
        a[j] = t;
        
        i = i + 1;
        j = j - 1;
    }
    for ( i = 0; i <= 5; i++)
    {
        printf ("%d\n", a[i]);
    }
    return 0;
    
}

一维数组名不代表数组中的所有元素

代表的是数组第一个元素的地址

二维数组

int a[3] [4]

总共是12个元素,可以当作三行四列看待

12个元素的名字依次是

a[0] [0] a[0] [1] a[0] [2] a[0] [3]

a[1] [0] a[1] [1] a[1] [2] a[1] [3]

a[2] [0] a[2] [1] a[2] [2] a[2] [3]

a[i] [j] 表示第i + 1行 第j + 1列

初始化

int a [3] [4] = {1,2,3,4,5,6,7,8,9,10,11,12}。

也可以

int a [3] [4] = {

​ { 1, 2, 3, 4},

​ {5, 6, 7, 8},//记得打逗号

​ {9,10,11,12}

​ }

#include <stdio.h>
int main (void)
{
    int a[3] [4] = {
        {1,2,3,4},
        {5,6,7,8},
        {9,10,11,12}
    };
    int i,j;

    for ( i = 0 ; i<3 ;++i)
    {
        for ( j = 0; j < 4; ++j)
        {
            printf("%-5d",a[i][j]);//-d表示左对齐-几d是空多少字符
        }
        printf ("\n");
    }
    return 0;

}
多维数组

不存在多维数组

函数

为什么需要函数

解决大量同类型的问题

避免重复性操作,有利于程序的模块化

#include <stdio.h>

void max (int i, int j)
 //max是函数的名字,i和j是形式参数,简称形参,void表示函数没有返回值
{
    if (i>j)
    {
        printf("%d\n");
    }
    else
    {
        printf ("%d\n");
    }
    
}
int main(void)
{
    int a, b, c, d, e, f;
    a = -1 , b = 2 , c = 4 , d = 9 , e = -5 , f = 100 ;
    
    max(a,b);
    return 0;
}

什么叫函数

逻辑上:能够完成特定功能的独立的代码块

物理上:能够接受数据

​ 能够对接受的数据进行处理

​ 将结果返回

是个工具,为解决大量类似问题而设计

#include <stdio.h>

int f(void)//void表示该函数不能接受数据  int表示函数返回值是int类型的
{
    return 10; //向主调函数返回10
}

int main (void)
{
    int j = 88;

    j = f ();
    printf ("%d\n",j);

    return 0;
}

如何定义函数

函数的返回值 函数的名字 (函数的形参列表 )

{

​ 函数的执行体

}

函数定义的本质是详细描述函数之所以能够实现某个特定功能的具体实现方法

return 表达式

函数的分类

注意的问题

函数返回值的类型也称为函数的类型,因为如果函数名前返回值的类型和函数执行体中的return表达式 中类型不同的话,则最终以函数前的返回值类型为准

形参和实参

个数相同 位置一一对应 数据类型必须相互兼容

如何在软件开发中合理的设计来解决实际问题
#include <stdio.h>
int main (void)
{
    int val;
    int i;

    scanf("%d",&val);
    for ( i = 2; i < val; ++i)
    {
        if (0 == val%i)
           break;
    }
    if (i == val)
    {
        printf ("yes\n");
    }
    else 
    {
        printf ("no\n");
    }
    return 0;
    
}//某个数是否为素数
# include <stdio.h>
bool IsPrime (int m)
{
    int i;

    for (i = 2 ; i <m ; ++i)
    {
    if (0 == m%i)
    break;
    }
    if ( i == m)
        return true;
    else
        return false;
}
int main (void)
{
    int val;
    int i;
    int j;

    scanf("%d",&val);
    for ( i = 2; i <= val; ++i)
    {
        if (IsPrime(i))
           printf("%d\n", i);
        
    }
    return 0;
}//某个数字之前有的素数输出

一个函数的功能尽量独立,单一

多学习

多模仿

常用的系统函数

double sqrt (double x);

求x的平方根

int abs (int x)

求函数的绝对值

double fabs (double x)

求函数的绝对值

代码部分

平方和与立方和

#include <stdio.h>
int main (void)
{
    int i;
    int x = 0;
    int y = 0;
    int t1;
    int t2;

    scanf("%d",&i);

    for (t1 = 1; t1 <= i ; ++t1)
    {
        if (t1%2 == 0)
        {
            x = t1*t1+ x;
        }
    }
    for ( t2 = 0; t2 <=  i;t2++)
    {
       if (t2%2 == 1)
       {
           y = t2*t2*t2+y;
       }
       
    }
    printf("%d %d",x ,y);
    return 0;
    
}

成绩判断

#include <stdio.h>
int main (void)
{
    int m ;
    scanf ("%d" , & m);
    while(scanf("%d",&m)!=EOF)
    {
    if (m >= 90 && m <=100)
        printf ("A\n");
    else if (m >= 80 && m < 90 )
        printf ("B\n");
    else if (m >= 70 && m < 80 )
        printf ("C\n");
    else if (m >= 60 && m < 70 )
        printf ("D\n");
    else if (m >= 0 && m < 60 )
        printf ("E\n");        
    else 
        printf ("Score is error!\n");
    }
    return 0;
}

求实数的绝对值

#include <stdio.h>
int main(void)
{
    float i;
    scanf("%f",&i);

    if (i < 0)
    {
        i = -i;
    }
    
    printf("%.2f\n",i);
    return 0;
    
}

ASCII码从小到大的顺序输出

#include <stdio.h>
int main (void)
{
    char a,b,c;
    scanf("%c%c%c",&a,&b,&c);
    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",a,b,c);
    return 0;
}

根据输入的半径值,计算球的体积。

#include <stdio.h>
int main (void)
{
    float r ;
    scanf ("%f",&r);
    float v;
    double pi = 3.1415927;

    v = 4.0/3.0 * pi * r * r * r;
    printf("%.3f",v);
    return 0;
    
}

两点间距离计算

#include <math.h>
#include <stdio.h>
int main (void)
{
    float x1,y1,x2,y2;
    scanf ("%f %f %f %f",&x1,&y1,&x2,&y2);
    float answer;
    
    answer = sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
    printf ("%.2f\n",answer);
    return 0;

}

代码都可以成功运行

求奇数的乘积不知如何用代码表达

但是重复输入多组数据还没搞明白

导致提交是错误的

准备明天去搞懂