初试版本
存在的问题:数组内存大小固定,无法动态改变
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
/*
【程序18】
题目:求s = a + aa + aaa + aaaa + aa...a的值,其中a是一个数字。例如2 + 22 + 222 + 2222 + 22222(此时
共有5个数相加),几个数相加有键盘控制
*/
int main(void){
int all = 0, num = 0;
int count = 0;
int s = 0;
int number[10] = { 0 };
printf("几个数相加?什么数?\n");
scanf("%d %d", &all, &num);
for (count = 0; count < all; count++)
{
number[count] += num;
s += number[count];
number[count + 1] = number[count] * 10;
}
number[all] = '\0';
for (count = 0; count < (all - 1); count++)
{
printf("%d + ",number[count]);
}
printf("%d = %d\n", number[count], s);
return 0;
}
修改后
分配空间函数
int *get_number(int all){
int *temp_number = NULL;
//分配空间
temp_number = (int *)malloc((all + 1) * sizeof(int));
if (temp_number == NULL)
{
fprintf(stderr, "temp_number malloc err\n");
return NULL;
}
//初始化
memset(temp_number, 0, (all + 1) * sizeof(int));
return temp_number;
}
释放空间函数
//释放分配空间
void free_number(int *number){
if (number == NULL)
{
return;
}
free(number);
number = NULL;
return;
}
全部程序
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//给数组分配动态内存
int *get_number(int all){
int *temp_number = NULL;
//分配空间
temp_number = (int *)malloc((all + 1) * sizeof(int));
if (temp_number == NULL)
{
fprintf(stderr, "temp_number malloc err\n");
return NULL;
}
//初始化
memset(temp_number, 0, (all + 1) * sizeof(int));
return temp_number;
}
//释放分配空间
void free_number(int *number){
if (number == NULL)
{
return;
}
free(number);
number = NULL;
return;
}
int main(void){
int all = 0, num = 0;
int count = 0;
int s = 0;
int *number = NULL;
printf("几个数相加?什么数?\n");
scanf("%d %d", &all, &num);
number = get_number(all);
for (count = 0; count < all; count++)
{
number[count] += num;
s += number[count];
number[count + 1] = number[count] * 10;
}
number[all] = '\0';
for (count = 0; count < (all - 1); count++)
{
printf("%d + ", number[count]);
}
printf("%d = %d\n", number[count], s);
free_number(number);
return 0;
}