【c语言】指针习题

发布于:2025-04-13 ⋅ 阅读:(99) ⋅ 点赞:(0)

练习一:使用指针打印数组内容

#include <stdio.h>
void print(int* p, int sz) {
	int i = 0;
	for (i = 0; i < sz; i++) {
		printf("%d ", *p++);
		//printf("%d ", *(p + i));
	}
}
int main() {
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	print(arr, sz);
	return 0;
}

练习二:在小端机器中,下面代码输出的结果是

#include <stdio.h>
int main()
{
    int a = 0x11223344;
    char *pc = (char*)&a;
    *pc = 0;
    printf("%x\n", a);
    return 0;
}
//注意:以%x格式打印的是八进制数,没有0x
//打印0x:
//printf("%#x\n",a);
//printf("0x%x\n",a);

 练习三:下面哪个是指针数组:

注意:

指针数组:

int* arr[10];——>数组arr[10],存储的类型是int*

数组指针:

int (*arr)[10]——>先定义了指针*arr,int和[10]表示指针arr指向含有n个int类型的数组

练习四:写一个函数,可以逆序一个字符串的内容。长度为 1≦len(s)≦10000

注意:逆序字符串的内容,不是逆序打印

#include <stdio.h>
#include <string.h>
int main() {
	char arr[10001] = { 0 };
	gets(arr);
	char* left = arr;
	char* right = arr + strlen(arr) - 1;
	while (left < right) {
		char tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
	printf("%s\n", arr);
	return 0;
}

练习五:用C语言在屏幕上输出以下图案:

(找规律,推而广之)

#include <stdio.h>
int main() {
	int line = 0;
	scanf("%d", &line);
	//上
	int i = 0;
	for (i = 0; i < line; i++) {//注意每一个循环的判断条件
		//打印一行
		//打印空格
		int j = 0;
		for (j = 0; j < line - 1 - i; j++) {
			printf(" ");
		}
		//打印*
		for (j = 0; j < 2 * i + 1; j++) {
			printf("*");
		}
		printf("\n");
	}
	//下
	for (i = 0; i < line - 1; i++) {
		//打印空格
		int j = 0;
		for (j = 0; j <= i; j++) {
			printf(" ");
		}
		//打印*
		for (j = 0; j < 2 * (line - 1 - i) - 1; j++) {
			printf("*");
		}
		printf("\n");
	}
	return 0;
}

练习六:打印水仙花数

求出0~100000之间的所有“水仙花数”并输出。

“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=1^3+5^3+3^3,则153是一个“水仙花数”。

三位的自幂数称为水仙花数,这里的水仙花数概念更加广泛

#include <stdio.h>
#include <math.h>
//打印水仙花数
int main() {
	for (int i = 0; i <= 100000; i++) {
		//判断自幂数
		//求出i的位数
		int n = 1;
		int tmp = i;
		while (tmp /= 10) {//注意
			n++;
		}
		//求出i的每一位的n次方之和
		tmp = i;
		int sum = 0;
		while (tmp) {//注意循环条件,保证每一位都参与运算
			sum += (int)pow(tmp % 10, n);
			tmp /= 10;
		}
		if (i == sum)
			printf("%d ", i);
	}
	return 0;
}

 练习七:求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字,

例如:2+22+222+2222+22222

#include <stdio.h>
int main() {
	int a = 0;
	int n = 0;
	scanf("%d %d", &a, &n);
	int i = 0;
	int k = 0;
	int sum = 0;
	for (i = 0; i < n; i++) {
		k = k * 10 + a;
		sum += k;
	}
	printf("%d\n", sum);
	return 0;
}

 


网站公告

今日签到

点亮在社区的每一天
去签到