读书人

C语言题(关于数组的)求解能做几题

发布时间: 2012-05-01 12:48:58 作者: rapoo

C语言题(关于数组的),求解,能做几题就做几题。。。
1.【问题描述】

从键盘输入一个正整数(无符号长整型),将该正整数中的每位数字重新排列,分别组成一个最大数和一个最小数并依次输出,两数间用空格分隔。
【输入形式】

从键盘输入一个无符号长整型整数。
【输出形式】

输出最大数和最小数,两数间用空格分隔,最小数左端的0不应输出。

【样例输入】

47091

【样例输出】

97410 1479
2.
【问题描述】

从键盘输入10个整数,输出这10个数中仅出现一次的数。如果没有这样的数,则输出:None。
【输入形式】

从键盘输入10个整数。
【输出形式】

按出现的次序,输出该10个数中仅出现一次的数。如没有这样的数,则输出:None。

【样例输入】

-12 36 72 36 87 99 87 87 -12 -35

【样例输出】

72 99 -35
【样例输入】

-12 36 72 36 87 99 72 87 -12 99
3.
【问题描述】

编程,输入10个互不相等的正整数存入一维整型数组a中,要求对这10个数作相应的处理并按示例格式依次输出下列结果:
⑴ 最大值和最小值及其所在位置下标;
⑵ 平均值(保留1位小数);
⑶ 大于并最接近平均值的数及其所在位置下标;
⑷ 小于平均值的数的个数。
⑸ 10个数按从小到大的顺序排列。
【输入形式】

从键盘输入10个互不相等的正整数存入一维整型数组a中。
【输出形式】

按样例格式依次输出以下各行:
⑴ 最大值和最小值及其所在位置下标;
⑵ 平均值(保留1位小数);
⑶ 大于并最接近平均值的数及其所在位置下标;
⑷ 小于平均值的数的个数;
⑸ 10个数按从小到大的顺序排列。
【样例输入】

50 60 70 80 90 95 85 75 65 55

【样例输出】

Maximum: a[5]=95
Minimum: a[0]=50
Average: 72.5
Closest to: a[7]=75
Less than: 5
Sort: 50 55 60 65 70 75 80 85 90 95
4.
【问题描述】编程,从键盘按行输入4行5列的二维整型数组a的各元,且各元的值都互不相等,先找到并输出数组a中值最大的元素,输出格式为:a[下标1][下标2]=该数值。然后将数组a中值最大的元素所在的行和列分别与最后一行和最后一列互相交换,再按行输出数组a的各元。
【输入形式】
【输出形式】
【样例输入】

56 78 36 4 19

44 95 72 85 67

-3 32 29 21 47

88 7 66 53 40

【样例输出】

a[1][1]=95

56 19 36 4 78

88 40 66 53 7

-3 47 29 21 32

44 67 72 85 95
6.
【问题描述】编程序,依次从键盘输入一个字符串和不大于该字符串长度的正整数n,将该字符串尾部(右边)的n个字符按原顺序移到该字符串的头部(左边),然后输出处理后的该字符串。
【输入形式】
【输出形式】
【样例输入】

shjFfdui#$ AG&fjk*28(ruiXK@

10

【样例输出

*28(ruiXK@shjFfdui#$ AG&fjk

[解决办法]
第一道 菜鸟 写得比较繁琐

C/C++ code
#include <stdio.h>void main (){    unsigned long a;    int b[20]={0};    int i=0,j,k,t;    scanf("%d",&a);    while (a)    {        b[i]=a%10;        a/=10;        i++;    }    printf("\n");    for(j=0;j<i;j++)        for (k=0;k<i;k++)            if (b[k]<b[j])            {                t=b[j];                                b[j]=b[k];                b[k]=t;            }    for (j=0;j<i;j++)    {        printf("%d",b[j]);    }    printf("   ");    for (j=i-1;j>=0;j--)    {        if (b[j]==0)continue;        printf("%d",b[j]);    }    printf("\n");}
[解决办法]
C/C++ code
/*1.【问题描述】从键盘输入一个正整数(无符号长整型),将该正整数中的每位数字重新排列,分别组成一个最大数和一个最小数并依次输出,两数间用空格分隔。【输入形式】从键盘输入一个无符号长整型整数。【输出形式】输出最大数和最小数,两数间用空格分隔,最小数左端的0不应输出。【样例输入】47091【样例输出】97410 1479*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#define true 1#define false 0typedef unsigned int bool;typedef unsigned long ulong;//用最简单的冒泡排序,由小到大排序void sort(int *datas,int len){    int i,j,temp;    bool change = true;    for(i = len -1; i>0 && change; --i)    {        change = false;        for(j = 0;j<i; ++j)        {          if(datas[j] >datas [j+1])          {              temp = datas[j];              datas[j] = datas[j+1];              datas[j+1] = temp;              change = true;          }        }    }}int main(){    ulong data;    ulong max = 0,min = 0;    int *datas = NULL;    char chs[10];    int i,len;    printf("输入一个无符号长整型数: ");    scanf("%ul",&data);    _ultoa(data,chs,10);  //将ulong型转化为字符串     len = strlen(chs);    datas = (int*)malloc(sizeof(int) * len);  //动态分配内存    for(i = 0;chs[i] != '\0';++i)      datas[i] = chs[i] - 48;   //将字符转化为数字 存到int型数组中    //对数字内部数字进行排序    sort(datas,len);    for(i = 0;i<len;++i)        min += (datas[i] * (int)pow(10,len-1-i));//min=1479l  l表示是long型    for(i=len -1; i>=0;--i)        max += (datas[i] * (int)pow(10,i));  //max = 97410l    printf("max = %ul \n min= %ul\n",max,min);    system("pause");    return 0;} 


[解决办法]
#include<stdio.h>
void main()
{
int i, a[10],j, n,x, count=0;

for(i=0; i<10; i++)
scanf("%d",&a[i]);
for(i=0; i<10; i++)
{ x=0;
n=a[i];
for(j=0; j<10; j++)
if(n==a[j])
x++;
if(x==2)
{
count++;
}
}
if(count!=0)
printf("%d.\n",count/2);
else
printf("None\n");
getch();
}

这是第二题,楼主应该自己敲,程序不对了再来问,这样才哟提高, 谢谢
[解决办法]

C/C++ code
/*2. 【问题描述】从键盘输入10个整数,输出这10个数中仅出现一次的数。如果没有这样的数,则输出:None。【输入形式】从键盘输入10个整数。【输出形式】按出现的次序,输出该10个数中仅出现一次的数。如没有这样的数,则输出:None。【样例输入】-12 36 72 36 87 99 87 87 -12 -35【样例输出】72 99 -35*/#include <stdio.h>#include <stdlib.h>int main(){    int i,j;    int in = 0;    int count =0;    int *digits = (int*)malloc(sizeof(int) * 10);    int *times = (int*)malloc(sizeof(int) * 10);    int *once = (int*)malloc(sizeof(int) * 10);    if(!digits || !once || !times)    {        printf("内存分配错误!");        exit(1);    }    printf("输入10个整数\n");    for(i = 0; i<10;++i)        scanf("%d",digits+i);    //将第一个数字赋给once    once[0] = digits[0];    count++;    //提取出所有不重复的元素    for(i = 1;i < 10;++i)    {        in =0;   //假设初始时候不在        for(j = 0;j<count;++j)            if(digits[i] == once[j])            {                in = 1;  //该数字在once中                break;            }        if(!in)          once[count++] = digits[i];    }    //将出现的次数初始化为0    for(i = 0; i<10;++i)        times[i] = 0;    //记录每个数字出现的次数    for(i = 0;i<count;++i)        for(j= 0;j<10;++j)            if(once[i] == digits[j])                times[i]++;    //输出次数为1的数字    for(i=1;i<count;++i)        if(times[i] == 1)          printf("%d  ",once[i]);    printf("\n");    free(digits);    free(once);    free(times);    return 0;}
[解决办法]
C/C++ code
//1.【问题描述】////从键盘输入一个正整数(无符号长整型),将该正整数中的每位数字重新排列,分别组成一个最大数和一个最小数并依次输出,两数间////用空格分隔。//【输入形式】////从键盘输入一个无符号长整型整数。//【输出形式】////输出最大数和最小数,两数间用空格分隔,最小数左端的0不应输出。////【样例输入】////47091////【样例输出】////97410 1479#include <stdio.h>#include <string.h>#include <stdlib.h>void getNum(int *num, char *str, int n, int len, unsigned long *iMax, unsigned long *iMin){    int i;    if (n == len)    {        unsigned long t;        str[n] = '\0';        //printf("%s\n", str);        t = atol(str);        if (*iMax < t)            *iMax = t;        if (*iMin > t)            *iMin = t;    }    for (i = 0; i < 10; i++)    {        if (num[i])        {            str[n] = i + '0';            num[i]--;            getNum(num, str, n+1, len, iMax, iMin);            num[i]++;        }    }}int main(){    char str[20];    int num[10] = {0}, i;    int len;    unsigned long iMax = 0,                  iMin = -1000;    scanf("%s", str);    for (len = strlen(str), i = 0; i < len; i++)    {        num[str[i]-'0']++;    }    getNum(num, str, 0, len, &iMax, &iMin);    printf("%lu %lu\n", iMax, iMin);    return 0;}
[解决办法]
C/C++ code
//2. //【问题描述】////从键盘输入10个整数,输出这10个数中仅出现一次的数。如果没有这样的数,则输出:None。//【输入形式】////从键盘输入10个整数。//【输出形式】////按出现的次序,输出该10个数中仅出现一次的数。如没有这样的数,则输出:None。////【样例输入】////-12 36 72 36 87 99 87 87 -12 -35////【样例输出】////72 99 -35//【样例输入】////-12 36 72 36 87 99 72 87 -12 99#include <stdio.h>int main(){    int i, j;    int a[10], time[10] = {0};    int flag = 0;    for (i = 0; i < 10; i++)    {        scanf("%d", &a[i]);        for (j = 0; j < i; j++)        {            if (a[j] == a[i])            {                time[j] = 1;                time[i] = 1;                flag = 1;                break;            }        }    }    if (flag != 0)        for (i = 0; i < 10; i++)        {            if (time[i] == 0)                printf("%d  ", a[i]);        }    else        printf("None\n");    getchar();    return 0;} 


[解决办法]

C/C++ code
//3.//【问题描述】////编程,输入10个互不相等的正整数存入一维整型数组a中,要求对这10个数作相应的处理并按示例格式依次输出下列结果://⑴ 最大值和最小值及其所在位置下标;//⑵ 平均值(保留1位小数);//⑶ 大于并最接近平均值的数及其所在位置下标;//⑷ 小于平均值的数的个数。//⑸ 10个数按从小到大的顺序排列。//【输入形式】////从键盘输入10个互不相等的正整数存入一维整型数组a中。//【输出形式】////按样例格式依次输出以下各行://⑴ 最大值和最小值及其所在位置下标;//⑵ 平均值(保留1位小数);//⑶ 大于并最接近平均值的数及其所在位置下标;//⑷ 小于平均值的数的个数;//⑸ 10个数按从小到大的顺序排列。//【样例输入】////50 60 70 80 90 95 85 75 65 55////【样例输出】////Maximum: a[5]=95//Minimum: a[0]=50//Average: 72.5//Closest to: a[7]=75//Less than: 5//Sort: 50 55 60 65 70 75 80 85 90 95#include <stdio.h>void sort(int *a, int len){    int i, j, t;    for (i = 0; i < len; i++)        for (j = i+1; j < len; j++)        {            if (a[i] > a[j])            {                t = a[i];                a[i] = a[j];                a[j] = t;            }        }}int main(){    int a[10], sum = 0;    float aver,          close = 1000, t = 0;    int max, ax,        min, in,        less, cl;    int i;    for (i = 0; i < 10; i++)    {        scanf("%d", &a[i]);        sum += a[i];//总和    }    aver = (float)sum/10; // 平均    max = min = a[0];    ax = in = 0;    for (i = 0; i < 10; i++)    {        if (max < a[i]) //最大        {            max = a[i];            ax = i;        }        else if (min > a[i])//最小        {            min = a[i];            in = i;        }    }    printf("Maximum: a[%d]=%d\n", ax, a[ax]);    printf("Minimum: a[%d]=%d\n", in, a[in]);    printf("Average: %.1f\n", aver);    // 最接近    for (i = 0; i < 10; i++)    {        if (a[i] > aver)        {            t = a[i] - aver;            if (t < close)            {                close = t;                cl = i;            }        }    }    printf("Closest to: a[%d]=%d\n", cl, a[cl]);    sort(a, 10); // 排序    for (i = 0; i < 10; i++)// 小于平均值    {        if (a[i] > aver)        {            printf("Less than: %d\n", i);            break;        }    }    printf("Sort: ");    for (i = 0; i < 10; i++)// 输出        printf("%d ", a[i]);    return 0;}
[解决办法]
探讨
你输入数据试试看,我在DEV上的运行结果
输入一个长整数型:47091
max=973971
min=14751
跟题目的例子不符

读书人网 >C语言

热点推荐