C语言数组,数组与指针,字符串与指针,函数与指针练习题目,初学的小伙伴可以拿去练习,附带代码,有错误的地方请指教,本人也是新手初学第10天;{:2_32:}
/*
1.定义一个长度为5的int数组.分别用while与for遍历打印每一个值.(且每种都用两种方式:1.用数组名.2.用指针).
2. 定义一个函数可以把任意一个整型数组的最小值取出来
3. 定义一个函数可以把任意一个整型数组的平均值取出来
4.定义一个字符串数组,并打印里面的每一个字符串.
5.已知一个int数组 int arr[4]={2,4,3,6};问:*(arr+1)与*(&arr+1)的值一样吗?
6.分别用数组的指针与数组元素的指针去遍历打印5题中数组里面的每一个值.
7.把int arr[4]={65,66,67,68};转换成一个字符数组char arrChar[4];
8.定义一个函数,把任意一个大写字母转换成小写字母.注:大写与小写相差32.如'a'=97 'A'=65;
9.在控制台上输入整数,创建一个长度为3的int数组,用数组的每一个元素的指针组成一个int指针数组,并通过这个int指针数组求int数组的最小值.
10.已知int a=4; int *p=&a; int **ps=&p; int ***pss=&ps; 用指针pss把a的值改成100;
11.定义一个函数的指针,并使用.
12.定义一个指针型函数.
*/
1.定义一个长度为5的int数组.分别用while与for遍历打印每一个值.(且每种都用两种方式:1.用数组名.2.用指针).
// 1.定义一个长度为5的int数组.分别用while与for遍历打印每一个值.
// (且每种都用两种方式:1.用数组名.2.用指针).
#include <stdio.h>
int main(){
//定义一个int数组,长度为5
int arr[5]={2,6,1,8,10};
//定义int型指针指向arr
int *p=arr;
//定义一个数组指针,指向数组st
int (*parr)[5]=&arr;
//定义一个整数用于while循环
int num=0;
//使用for循环遍历,各种形式
//1.利用数组下标
printf("\n\n第一次.使用for循环,利用数组下标进行遍历:\n");
for (int i=0; i<5; i++) {
printf("%d ",arr[i]);
}
printf("\n\n");
//2.利用指针加减对数组进行遍历
printf("第二次.使用for循环,利用元素指针进行遍历:\n");
for (int i=0; i<5; i++) {
printf("%d ",*(p+i));//其他方式 printf("%d ",p[i]);
}
printf("\n\n");
//3.利用数组指针进行遍历
printf("第三次.使用for循环,利用数组指针进行遍历:\n");
for (int i=0; i<5; i++) {
printf("%d ",(*parr)[i]);//其他方式printf("%d ",*((int *)(&arr)+i));
}
printf("\n\n");
//使用while循环进行遍历
//4.利用普通数组下标进行元素遍历
printf("第四次.使用while循环,利用数组下标进行遍历:\n");
while (num<sizeof(arr)/sizeof(int)) {
printf("%d ",arr[num]);
num++;
}
printf("\n\n");
//5.利用元素指针进行元素遍历
num=0;
printf("第五次.使用while循环,利用指针进行遍历:\n");
while (num<sizeof(arr)/sizeof(int)) {
printf("%d ",*(p+num));
num++;
}
printf("\n\n");
//5.利用数组指针进行元素遍历
num=0;
printf("第六次.使用while循环,利用数组指针进行遍历:\n");
while (num<sizeof(arr)/sizeof(int)) {
printf("%d ",(*parr)[num]);
num++;
}
printf("\n\n");
}
2.定义一个函数可以把任意一个整型数组的最小值取出来
//题目:
//2. 定义一个函数可以把任意一个整型数组的最小值取出来
#include <stdio.h>
int miniMum(int arr[6]);
void miniMum1(int *p1,int arr[6]);
int main(){
//定义一个int型数组
int arr[6]={6,2,8,10,13,66};
printf("数组arr中元素为:\n");
for (int i=0; i<6; i++) {
printf("%d ",arr[i]);
}
//定义一个数来接收最小值;
int num;
num=miniMum(arr);
//打印最小值
printf("\n普通方式--数组中最小数为:%d\n",num);
//定义一个指针来接收最小值
int *p=arr;
miniMum1(p,arr);
printf("指针方式--数组中最小数为:%d\n",*p);
return 0;
}
//定义一个函数用来输出数组最小值,
int miniMum(int arr[6]){
int num=arr[0];
for (int i=0; i<6; i++) {
num=num<arr[i]?num:arr[i];
}
return num;
}
//使用指针来找数组中最小值,无需返回值
void miniMum1(int *p1,int arr[6]){
*p1=arr[0];
for (int i=0; i<6; i++) {
if(*p1>arr[i]) *p1=arr[i];
}
}
3.定义一个函数可以把任意一个整型数组的平均值取出来
//3. 定义一个函数可以把任意一个整型数组的平均值取出来
#include <stdio.h>
double pingJun(int arr[6]);
void pingJun1(double *p1,int arr[6]);
int main(){
//定义一个int型数组
int arr[6]={6,2,8,10,13,66};
printf("数组arr中元素为:\n");
for (int i=0; i<6; i++) {
printf("%d ",arr[i]);
}
//定义一个数来接收平均值;
double num=0;;
num=pingJun(arr);
//打印平均值
printf("\n普通方式--数组平均值为:%.3f\n",num);
//定义一个指针来接收平均值
double num1=0;
double *p=&num1;
pingJun1(p,arr);
printf("指针方式--数组中平均值为:%.3f\n",*p);
return 0;
}
//1.定义一个函数用来输出数组平均值,
double pingJun(int arr[6]){
double num=0;
for (int i=0; i<6; i++) {
num+=arr[i];
}
return num/6;
}
//2.使用指针来找数组中平均值,无需返回值
void pingJun1(double *p1,int arr[6]){
for (int i=0; i<6; i++) {
*p1+=arr[i];
}
*p1=*p1/6;
}
4.定义一个字符串数组,并打印里面的每一个字符串.
//题目:
//4.定义一个字符串数组,并打印里面的每一个字符串.
#include <stdio.h>
int main(){
//定义一个字符串数组;
char ch[3][20]={"liuchuan","hello,word~","heima,leihao"};
//定义一个指针字符串数组
char *ch1[5]={"liuchuan","hello,word~","heima,leihao"};
//第一种方法,数组下标方法遍历字符串数组:
printf("使用数组下标打印每个字符方法进行字符串打印:\n");
for (int i=0; i<3; i++) {
for (int j=0; j<20; j++) {
printf("%c",ch[i][j]);
}
printf("\n");
}
//第二种方法,数组下标方法遍历字符串数组:for循环一次,%s打印
printf("使用数组下标方法进行字符串打印二:使用%s打印\n");
for (int j=0; j<3; j++) {
printf("%s\n",ch[j]);
}
return 0;
}
5.已知一个int数组 int arr[4]={2,4,3,6};问:*(arr+1)与*(&arr+1)的值一样吗?
/*
*(arr+1)与*(&arr+1)的值不一样
*(arr+1),arr表示数组元素首地址,+1 加int个字节,地址加4个字节,指向数组第二个元素地址,值为4
*(&arr+1),&arr取的时整个数组的地址,&arr值和arr是一样的, &arr+1 是加16个字节,地址移动16个字节
*/
|