1)分别求出数组中所有3的倍数之和以及5的倍数之和。形参n给了数组中数据的个数,利用指针three返回3的倍数之和,利用指针five返回5的倍数之和。例如:数组中的值依次为:1,5,9,2,3,15,11,6,10;则利用指针three返回3的倍数之和33;利用指针five返回5的倍数之和30。请在下面空白处完善这一函数的功能,并且调试运行出结果。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define N 20
void fun(int* a, int n, int* three, int* five)
{
int i;
*three = 0;
*five = 0;
for (i = 0;i<9; i++)
if (a[i] % 3 == 0)
*three += a[i];
for (i = 0;i<9 ;i++)
if (a[i] % 5 == 0)
*five += a[i];
}
void main()
{
int a[N] = { 1,5,9,2,3,15,11,6,10 }, i, n = 9, three, five;
printf("The original data is:\n");
for (i = 0; i < n; i++)
printf("%5d", *(a + i));
printf("\n\n");
fun(a, n, &three, &five);
printf("3的倍数之和:%d\n", three);
printf("5的倍数之和:%d\n", five);
}
2)从键盘输入一个字符串,实现利用字符指针将字符串的字符顺序逆置并输出。(例如输入abcdef,输出fedcba)。请编写相应的程序代码,并调试运行出正确结果。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
void reverse(char* left, char* right)
{
while (left < right)
{
char tmp = 0;
tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
int main()
{
char arr[100] ;
printf("请输入一个字符串\n");
gets_s(arr);
int len = strlen(arr);
reverse(arr, arr + len - 1);
printf("%s\n", arr);
return 0;
}
输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写3个函数:(1)求最小数、最大数的位置;(2)进行对换处理;(3)主函数。
void found(int* a)
{
void change(int* min, int* max, int* a);
int* min, * max, * p;
max = min = a;
for (p = a + 1; p < a + 10; p++)
if (*p > *max) max = p;
for (p = a + 1; p < a + 10; p++)
if (*p < *min) min = p;
change(min, max,a);
}
void change(int* min,int * max,int *a)
{
int t;
t = a[9];
a[9] = *max;
*max = t;
t = a[0];
a[0] = *min;
*min = t;
}