C语言基础编程题9道——指针,数组,图形打印,水仙花数

这篇博客包含9道C语言基础编程题目,涉及指针遍历数组、字符串逆序、数字序列求和、水仙花数判断、菱形图案打印、汽水兑换问题、自定义strlen函数、strcpy函数模拟及数组奇偶数排序。通过这些题目,读者可以巩固C语言的基础知识和算法应用。
摘要由CSDN通过智能技术生成

C语言基础编程题9道——指针,数组,图形打印

1.写一个函数打印arr数组的内容,不使用数组下标,使用指针。
arr是一个整形一维数组。

#include<stdio.h>
void Print(int *p,int len){
	int i = 0;
	while (i != len){
		printf("%d ",*(p+i));
		i++;
	}
	printf("\n");
}
int main(){
	int num[] = {10,20,30,0,8,2,66,88,99};
	int len = sizeof(num) / sizeof(num[0]);
	Print(num,len);
	return 0;
}

2.写一个函数,可以逆序一个字符串的内容。

#include<stdio.h>
#include<string.h>
void IWord(char *str,int len){
	int start = 0, end = len - 1;
	while (start<end){
		char p = *(str + start);
		*(str + start) = *(str + end);
		*(str + end) = p;
		start++;
		end--;
	}
}
int main(){
	char arr[10000];
	scanf("%s",arr);
	int len = strlen(arr);
	IWord(arr,len);
	printf("%s\n",arr);
	return 0;
}

3.求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字。

#include<stdio.h>
int Sn(int *a){
	int sum = 0;
	for (int i = 0; i < 5;++i){
		sum += *(a + i);
	}
	return sum;
}
int main(){
	int a[] = {2,22,222,2222,22222};
	printf("%d\n",Sn(a));
	return 0;
}

4.求出0~100000之间的所有“水仙花数”并输出。
“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=13+53+3^3,则153是一个“水仙花数”。

#include<stdio.h>
#include<math.h>
void Water(){
	for (int i = 0; i <= 100000;++i){
		int num = 0;
		int n = i;
		int sum = 0;
		while (n){
			n = n / 10;
			num++;
		}
		n = i;
		while (n){
			sum = sum + (int)pow(n % 10, num);
			n = n / 10;
		}
		if (sum==i){
			printf("%d ",i);
		}
	}
	printf("\n");
}
int main(){
	Water();
	return 0;
}

5.打印菱形
用C语言在屏幕上输出以下图案:

#include<stdio.h>
void PrintLX1(int n){//正三角
	for (int i = 1; i <=n;++i){
		for (int j = 1; j <= n-i;++j){
			printf(" ");
		}
		for (int j = 1; j <= i;++j){
			printf("* ");
		}
		printf("\n");
	}
}
void PrintLX2(int n){//倒三角
	for (int i = 1; i <= n; ++i){
		for (int j = 1; j <= i; ++j){
			printf(" ");
		}
		for (int j = 1; j <= n - i; ++j){
			printf("* ");
		}
		printf("\n");
	}
}
int main(){
	PrintLX1(7);
	PrintLX2(7);
	return 0;
}

6.喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水(编程实现)。
(个人思路:两个空瓶子每换一瓶就相当于多了1块钱,只不过这一块钱就只能换水罢了)

#include<stdio.h>
int Drink(int Money){
	int num = 0;
	for (int i = Money; i >=0;--i){
		if (num%2==0){
			i++;//每换一瓶,相当于多一块钱
		}
		num++;
	}
	return num;
}
int main(){
	printf("%d\n",Drink(20));
	return 0;
}

7.模拟实现库函数strlen

#include<stdio.h>
int Mystrlen(char *p){
	if (*p=='\0'){
		return 0;
	}
	else{
		return 1 + Mystrlen(p+1);
	}
}
int main(){
	char str[50000];
	scanf("%s",str);
	printf("%d\n", Mystrlen(str));
	return 0;
}

8.模拟实现库函数strcpy

#include<stdio.h>
void Mystrcpy(char *str1,char *str2){
	for (int i = 0;;++i){
		*(str1 + i) = *(str2 + i);
		if (*(str2 + i) == '\0'){
			break;
		}
	}
}
int main(){
	char str1[50000];
	char str2[50000];
	scanf("%s", str2);
	Mystrcpy(str1,str2);
	printf("复制之后的str1为%s\n",str1);
	return 0;
}

9.题目:
输入一个整数数组,实现一个函数,
来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,
所有偶数位于数组的后半部分。

#include<stdio.h>
void Ec(int *num,int len){
	int nu[10000] = {0};
	int i, j=0;
	for (i = 0; i < len;++i){
		if (*(num+i)%2!=0){
			nu[j] = *(num+i);
			j++;
		}
	}
	for (i = 0; i < len; ++i){
		if (*(num + i) % 2 == 0){
			nu[j] = *(num + i);
			j++;
		}
	}
	for (i = 0; i < len; ++i){
		num[i] = nu[i];
	}
}
int main(){
	int num[] = { 1, 20, 3, 80, 5, 6, 7, 9, 0 };
	int len = sizeof(num) / sizeof(int);
	Ec(num,len);
	for (int i = 0; i < len;++i){
		printf("%d ",num[i]);
	}
	printf("\n");
	return 0;
}
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值