C语言培训- 数组初阶;指针初阶

(数组及数组元素地址)
【1】假如有如下定义:int a[3][5]; 完成如下要求:

  • 用1种方法表示 a[2][3] 的地址。
  • 用2种完全等价的方法表示 a[2][0] 的地址。
  • 用3种完全等价的方法表示 a[0][0] 的地址。

①&a[2][3];

②&a[2][0];a[2];

③&a[0][0];a[0];*a;

【2】请写出符合以下要求的定义语句。

  1. 定义一个整型数 i    
  2. 定义一个指向整型数的指针 p
  3. 定义一个指向整型指针的指针 k
  4. 定义一个有 3 个整型数的数组 a
  5. 定义一个有 3 个整型指针的数组 b
  6. 定义一个指向有 3 个整型元素的数组的指针 q
  7. 定义一个指向函数的指针 r,该函数有一个整型参数并返回一个整型

1.int i;

2.int *p;

3.int *(*k);

4.int  a[3];

5.int * b[3];

6.int  (*q)[3];

7.int  (*r)(int)

(数组下标运算、指针运算)
【3】分析下面的程序的执行结果。

#include <stdio.h>
int main(void)
{
    int a[] = {1, 2, 3, 4};
    int i, *p;
    for(i=0, p=a; i<4; i++, p++)
    {
        printf("%d %d\n", a[i], *p);
    }
    return 0;
}

 

 

 为 1 0

(数组基本操作)
【5】编写一个函数,接收三个类型相同的整型数组 a、b 和 c,将 a 和 b 的各个元素的值相加,存放到数组 c 中。

#include<stdio.h>

int main()
{
    int c[5] ;
    int a[5] = {1,2,3,4,5}; 
    int b[5] = {5,4,3,2,1};

    for(int i = 0; i < 5; i++)
    {
        c[i] = a[i] + b[i];
        printf("%d\t",c[i]);
    }
    return 0;
 
}

 (数组基本操作)
【6】编写一个程序,不使用格式控制符 %x 的情况下,将十进制数转换为十六进制。

#include<stdio.h>

int main()
{
    int in, out, i = 0;
    char a[20] = {0};
    printf("请输入一个数:");

    while(1)
    {
        int ret = scanf("%d", &in);
        if (ret == 1 && getchar()=='\n')
            break;
        else 
            printf("请正确输入:\n");
        while(getchar() != '\n');
    }


    if (in < 0)
    {
        in = (-in);
        printf("该数正确的十六进制为:%#x\n", in);
        printf("我的该数的十六进制为-0x");
    }
    else
    {
        printf("该数正确的十六进制为:%#x\n", in);
        printf("我的该数的十六进制为0x");
    }
    

    while(in > 0)
    {
        out = in % 16;
        in = in / 16;
        switch (out)
        {
        case 0 ... 9:
            a[i] = out + '0';
            break;
        case 10 ... 15:
            a[i] = 'a' + out - 10 ;
            break;
        }
        i++;
    }
    for (int  k = i; k >= 0; k--)
        printf("%c", a[k]);
    return 0;
}

 

(数组基本操作、指针基本操作)
【7】假设有如下声明:

1.5.8是对的

2.不可对数组名赋值

3.不可对数组赋值

4.a[3]越界

6.不可以对数组赋值

7类型不匹配

 

(数组参数变换、sizeof用法)
【8】分析下述代码,指出其不正确的地方。

#include <stdio.h>
#include <limits.h>
#include <ctype.h>

void upper_case(char str[])
{
    int step = 'a' - 'A';
    for(int i = 0; i<sizeof(str)/sizeof(str[0]); i++)
    {
        if(islower(str[i]))
            str[i] -= step;
    }
}
int main(void)
{
    char str[] = "abcdefghijklnmopqrstuvwxyz";
    printf("原数组:%s\n", str);
    upper_case(str);
    printf("转换后:%s\n", str);
}
#include <stdio.h>
#include <limits.h>
#include <ctype.h>

char str[] = "abcdefghijklnmopqrstuvwxyz";
void upper_case()
{
    int step = 'a' - 'A';
    for(int i = 0; i<sizeof(str)/sizeof(str[0]); i++)
    {
        if(islower(str[i]))
            str[i] -= step;
    }
}
int main(void)
{  
    
    printf("原数组:%s\n", str);
    upper_case();
    printf("转换后:%s\n", str);
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值