c语言,组数游戏
我把一个复制到另一个里面
用被复制后的补零比较
最后比较出最大值
然后我不去零
直接输出另一个复制结构体里的补零前的数字行不
如果不行,请问我这个程序是怎样实现去零操作的
#include<stdio.h>//头文件
#include<unistd.h>
#include<string.h>
#define N 20//宏定义N等于20
int max = 0;//定义变量并初始化
void getnum();
void tuozhan();
void paixu(); /*函数的声明*/
void chuling();
void shuchu();
int n, tmp, m, i, j;//定义变量
struct
{
char data[20];
char ext_data[20];/*结构体*/
}Elem[N], ti;//定义结构体数组和变量
int main()//主函数以及函数的调用
{
printf(" ************************************\n");
printf(" 欢迎来到组数游戏 \n");
printf(" ************************************\n\n");
printf("请输入你需要输入的整数个数(小于20)\n");
getnum();
tuozhan();//函数的调用
paixu();
shuchu();
return 0;//返回值为零
}
void getnum()//获取数值以及求出最大位数
{
int i;
scanf("%d", &n);//获取整数个数
if (n > 20)
{
printf("你输入的数字大于20\n");
}
for (i = 0; i < n; i++)
{
printf("请输入第%d个整数\n", i + 1);
scanf("%s", Elem[i].data);
strcpy(Elem[i].ext_data, Elem[i].data);
tmp = strlen(Elem[i].data);
if (tmp > max)
{
max = tmp;
}
}
}
void tuozhan()//计算拓展数
{
for (i = 0; i < n; i++)
{
tmp = strlen(Elem[i].ext_data);//计算字符串的长度不含'\0'
/*利用for循环对Elem[i].ext_data[j]进行补零*/
for (j = tmp; j <= max; j++)
{
Elem[i].ext_data[j] = '0';
}
Elem[i].ext_data[max] = '\0';//给Elem[i].ext_data[j]增加字符串结束标志
}
}
void paixu()//对于Elem[i].ext_data[j]进行排序
{
/*利用冒泡排序*/
for (i = 0; i < n; i++)
{
for (j = 0; j < n - 1; j++)
{
if (strcmp(Elem[j].ext_data, Elem[j + 1].ext_data) < 0)//利用strcmp进行比较字符串一.小于字符串 二.返回负数
{
memcpy(&ti, &Elem[j], sizeof(ti));
memcpy(&Elem[j], &Elem[j + 1], sizeof(ti));/*利用内存复制函数进行交换利用字节数*/
memcpy(&Elem[j + 1], &ti, sizeof(ti));
}
}
}
}
void shuchu()
{
printf("输出的最大数为:");
for (i = 0; i < n; i++)
{
printf("%s", Elem[i].data);//利用for循环将Elem[i].data数据输出
}
printf("\n");
}
话说,组数游戏怎么玩的?
1.输入数字的大小,比如10;
2.输入10个数;
3.将这10个数位数对齐?
4.将对齐后的数排序?
5.遍历输出这10个数?全输出了,好像和输出最大值没什么关系
另:为什么不用数字,而要用字符串进行大小比较?
简单测试了一下,从输出结果来看,你这样做是可以的
只是由于你使用的是字符串形式进行结果的输出,如果需求是输出整数类型(如int)的结果,就比较麻烦了,还得把字符串连接在一起转化成整数