栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言基础练习题——指针<七>

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言基础练习题——指针<七>

二维数组中的指针含义:

表示形式含义
a二维数组名,指向一维数组a[0],即0行首地址
a[0],*(a+0),*a0行0列元素地址
a+1,&a[1]1行首地址
a[1],*(a+1)1行0列元素a[1][0]的地址
a[1]+2,*(a+1)+2,&a[1][2]1行2列元素a[1][2]的地址
(a[1]+2) ,(*(a+1)+2),a[1][2]1行2列元素a[1][2]的值

1.将字符串a复制给字符串b.

//方法一:
#define _CRT_SECURE_NO_WARNINGS
#include 

void main() {
	void copy(char a[], char b[]);
	char a[] = "I am a teacher.";
	char b[] = "You are a student.";
	printf("String a = %snString b = %sn",a,b);
	copy(a, b);
	printf("copy string a to string b:n");
	printf("String a = %snString b = %s",a,b);
}
void copy(char a[],char b[]) {
	int i = 0;
	while (a[i]!='') {
		b[i] = a[i];
		i++;
	}
}
//方法二:
#define _CRT_SECURE_NO_WARNINGS
#include 

void main() {
	void copy(char a[], char b[]);
	char a[] = "I am a teacher.";
	char b[] = "You are a student.";
	char *pointer_a, *pointer_b;
	pointer_a = a;
	pointer_b = b;
	printf("String a = %snString b = %sn",a,b);
	copy(pointer_a, pointer_b);
	printf("copy string a to string b:n");
	printf("String a = %snString b = %s", pointer_a, pointer_b);
}
void copy(char *pointer_a,char *pointer_b) {
	int i = 0;
	while (*(pointer_a+i) !='') {
		*(pointer_b + i) = *(pointer_a + i);
		i++;
	}
}

2.有若干个学生的成绩(每个学生有4门课程),要求在用户输入学生序号后,能输出该生的全部成绩.

#define _CRT_SECURE_NO_WARNINGS
#include 

void main() {
	double *select(double(*pointer)[4], int stuId);
	double stu[][4] = { {78.0,88.5,99.0,100.0},{66.0,74.0,83.5,89.0},{56.0,73.0,81.0,33.0},{100.0,100.0,100.0,100.0} };
	int stuId;
	printf("请输入要查找学生成绩的序号:n");
	scanf("%d",&stuId);
	printf("输出第%d个序号的学生成绩:n",stuId);
	double *p = select(stu, stuId);
	for (int i = 0; i < 4;i++) {
		printf("%5.2ft", *(p + i));
	}
}
double *select(double (*pointer)[4],int stuId) {
	double *score;
	score = *(pointer + stuId);
	return score;
}

3.写一个函数,求一个字符串的长度.在main函数中输入字符串,并输出其长度.

#define _CRT_SECURE_NO_WARNINGS
#include 

void main() {
	int len(char *pointer);
	char str[50];
	char *pointer;
	printf("输入一个字符串:n");
	scanf("%s", &str);
	pointer = str;
	printf("这段字符串的长度为%d.", len(pointer));
}
int len(char *pointer) {
	int i = 0;
	while (*(pointer+i)!='') {
		i++;
	}
	return i;
}

4.有一字符串a,内容为"My name is Li jilin",另一字符串b,内容为"Mr. Zhang Haoling is very happy".写一函数,将字符串b中从第5个到第17个字符(即"Zhang Haoling")复制到字符串a中,取代字符串a中第12个字符以后的字符(即"Li jilin").输出新字符串a.

#define _CRT_SECURE_NO_WARNINGS
#include 
#include 

void main() {
	char copy(char *pointer_a, char *pointer_b);
	char str_a[50] = "My name is Li jilin";
	char str_b[50] = "Mr. Zhang Haoling is very happy";
	char *pointer_a, *pointer_b;
	pointer_a = str_a;
	pointer_b = str_b;
	copy(pointer_a, pointer_b);
	printf("输出新字符串a:n%s", pointer_a);
}
char copy(char *pointer_a,char *pointer_b) {
	int m_a = 11;//a字符串被替换的起点下标
	int n1_b = 4, n2_b = 16;//b字符串被替换的起点和终点下标
	while (n1_b<=n2_b) {
		*(pointer_a + m_a) = *(pointer_b + n1_b);
		n1_b++;
		m_a++;
	}
	*(pointer_a + m_a) = '';
}

5.输入一行字符,找出其中大写字母、小写字母、空格、数字以及其他字符各有多少.

#define _CRT_SECURE_NO_WARNINGS
#include 
#include 

void main() {
	void total(char *pointer_str, int len);
	char str[50];
	char *pointer_str;
	printf("请输入一行字符:n");
	gets(str);
	int len = strlen(str);
	pointer_str = str;
	total(pointer_str, len);
	return 0;
}
void total(char *pointer_str,int len) {
	int uppercase_Letter = 0, lowercase_Letters = 0, black = 0, number = 0, other = 0;
	for (int i = 0; i < len;i++) {
		if (*(pointer_str+i)>='A'&&*(pointer_str + i)<='Z') {
			uppercase_Letter++;
		}
		else if (*(pointer_str + i)>='a'&&*(pointer_str + i)<='z') {
			lowercase_Letters++;
		}
		else if (*(pointer_str + i) == ' ') {
			black++;
		}      
		else if (*(pointer_str + i)>='0' && *(pointer_str + i)<='9') {
			number++;
		}
		else {
			other++;
		}
	}
	printf("这行字符中有%d个大写字母,%d个小写字母,%d个空格,%d个数字,%d个其他字符.",uppercase_Letter,lowercase_Letters,black,number,other);
}

6.在主函数中输入10个等长的字符串,用另一函数对它们排序,然后在主函数输出这10个已排好序的字符串.

#define _CRT_SECURE_NO_WARNINGS
#include 
#include 

void main() {
	char arr(char (*pointer_str)[6]);
	char str[10][6];
	char (*pointer_str)[6];
	for (int i = 0; i < 10;i++) {
		printf("输入第%d个字符串:n",i+1);
		scanf("%s",&str[i]);
	}
	pointer_str = str;
	arr(pointer_str);
	printf("n");
	for (int i = 0; i < 10; i++) {
		printf("%sn",str[i]);
	}
}
char arr(char (*pointer_str)[6]) {
	char temp[6];
	char *p;
	p = temp;
	for (int i = 0; i < 10;i++) {
		for (int j = i + 1; j < 10;j++) {
			if (strcmp(pointer_str[i], pointer_str[j])>0) {
				strcpy(p,pointer_str[i]);
				strcpy(pointer_str[i],pointer_str[j]);
				strcpy(pointer_str[j], p);
			}
		}
	}
}

7.将n个数按输入时顺序的逆序排列,用函数实现.

#define _CRT_SECURE_NO_WARNINGS
#include 

void main() {
	void arr(int *pointer_num, int n);
	int num[20],n;
	int *pointer_num;
	printf("您想输入多少个整数?n");
	scanf("%d",&n);
	printf("请输入这些整数:n");
	for (int i = 0; i < n;i++) {
		scanf("%d", &num[i]);
	}
	pointer_num = num;
	arr(pointer_num, n);
	printf("逆序输出:n");
	for (int i = 0; i < n; i++) {
		printf("%d ",num[i]);
	}
}
void arr(int *pointer_num,int n) {
	int num2[20];
	int *pointer;
	pointer = num2;
	int mid = n / 2;
	for (int i = 0; i < mid;i++) {
		pointer = *(pointer_num + i);
		*(pointer_num + i) = *(pointer_num + n - i - 1);
		*(pointer_num + n - i - 1) = pointer;
	}
}

8.写一函数,将一个3X3的整型二维数组转置,即行列互换.

#define _CRT_SECURE_NO_WARNINGS
#include 

void main() {
	void swap(int *pointer);
	int num[3][3];
	int *pointer;
	printf("输入一个3X3的整型二维数组:n");
	for (int i = 0; i < 3;i++) {
		for (int j = 0; j < 3;j++) {
			scanf("%d", &num[i][j]);
		}
	}
	pointer = num;
	swap(pointer);
	printf("行列互换之后:n");
	for (int i = 0; i < 3; i++) {
		for (int j = 0; j < 3; j++) {
			printf("%d ", num[i][j]);
		}
		printf("n");
	}
}
void swap(int *pointer) {
	int temp;
	for (int i = 0; i < 3; i++) {
		for (int j = 0; j < i; j++) {
			temp = *(pointer + 3 * i + j);
			*(pointer + 3 * i + j) = *(pointer + 3 * j + i);
			*(pointer + 3 * j + i) = temp;
		}
	}
}

这里的*(pointer + 3 * j + i)表示第几个元素,从0开始算,下图中一共是8个元素

num[i][j]与num[j][i]互换,用指针的形式表示是第1个元素与第3个元素互换,第2个元素与第6个元素互换,第5个元素与第7个元素互换,即*(pointer + 3 * i + j) = *(pointer + 3 * j + i)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/664721.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号