1)下面程序的功能是分别求出数组中所有3的倍数之和以及所有5的倍数之和。形参n给了数组中数据的个数,利用指针three返回3的倍数之和,利用指针five返回5的倍数之和。例如:数组中的值依次为:1,5,9,2,3,15,11,6,10;则利用指针three返回3的倍数之和33;利用指针five返回5的倍数之和30。请在下面空白处完善这一函数的功能,并且调试运行出结果。
完善函数前
#include <stdio.h>
#define N 20
void fun(int* a, int n, int* three, int* five)
{
}
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);
}
完善后
#include <stdio.h>
#define N 20
void fun(int* a, int n, int* three, int* five)
{
int sum = 0;
int x=0, y=0;
for (int j = 0; j < n; j++)
{
if (*(a + j) % 3 == 0)
{
x += *(a + j);
}
if (*(a + j) % 5 == 0)
{
y += *(a + j);
}
}
*three = x; *five = y;
}
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)。请编写相应的程序代码,并调试运行出正确结果。
#include <stdio.h>
#include<string.h>
void fun(char *ch,int sz)
{
int left = 0;
int right = sz - 1;
char tmp;
for (left = 0; left <=right; left++, right--)
{
tmp = ch[right];
ch[right] = ch[left];
ch[left] = tmp;
}
}
int main()
{
char ch[100];
printf("请输入一个字符串:\n");
gets_s(ch);
int sz = strlen(ch);
fun(ch, sz);
printf("%s",ch);
}
输出结果
PS(若不使用字符指针)
#include <stdio.h>
#include<string.h>
int main()
{
char ch[100];
printf("请输入一个字符串:\n");
gets_s(ch);
int left = 0;//左下标
int right = strlen(ch) - 1;//右下标
while (left <= right)
{
char tmp = ch[left];
ch[left] = ch[right];
ch[right] = tmp;
left++;
right--;
}
printf("%s", ch);
}
输出结果