(数组及数组元素地址)
【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】请写出符合以下要求的定义语句。
- 定义一个整型数 i
- 定义一个指向整型数的指针 p
- 定义一个指向整型指针的指针 k
- 定义一个有 3 个整型数的数组 a
- 定义一个有 3 个整型指针的数组 b
- 定义一个指向有 3 个整型元素的数组的指针 q
- 定义一个指向函数的指针 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);
}