数组编程问题总结

1.键入字符串,统计字符数

#include<stdio.h>
main()
{
    char str[80];
    int i,cnt1=0,cnt2=0,cnt3=0,cnt4=0;
    gets(str);
    for(i=0; str[i]!='\0'; i++)
    {
        if(str[i]>='A'&&str[i]<='Z'||str[i]>='a'&&str[i]<='z') cnt1++;
        else if(str[i]==' ') cnt2++;
        else if(str[i]>='1'&&str[i]<='9') cnt3++;
        else cnt4++;
    }
    printf("%d %d %d %d",cnt1,cnt2,cnt3,cnt4);
}

输入字符串的题,也可以用指针做,上面是用数组做的。这个只需要stdio一个文件就行了。

注意的是这个:

 if(str[i]>='A'&&str[i]<='Z'||str[i]>='a'&&str[i]<='z') cnt1++;

这个当初&&写成||了,一直出不来。

2求极值

输入10个数,求极值

#include<stdio.h>
main()
{
    int a[10],i,t,min,max;
    for(i=0; i<10; i++)
        scanf("%d",&a[i]);
    min=max=a[0];
    for(i=0; i<10; i++)
    {
        if(min>a[i])
            min=a[i];
        if(max<a[i])
            max=a[i];
    }


    printf("%d %d",max,min);
}

输入的时候采用数组,scanf里面的地址别忘了加[ ]

 scanf("%d",&a[i]);

将min和max都定位在开始位置 

 min=max=a[0];

然后比较大小,注意大括号

3 排序问题

给出一组数据进行排序。

要知道,比较的时候就要有ij一起出现的意识

比较交换法:

a[0]和剩下的比较,选出最小的,然后a[1]再去比较,以此类推

#include<stdio.h>
main()
{
    int a[10],i,j,t;
    for(i=0; i<10; i++)
        scanf("%d",&a[i]);
    for(i=0; i<9; i++)
    {
        for(j=i+1; j<10; j++)
            if(a[i]>a[j])
            {
                t=a[i];
                a[i]=a[j];
                a[j]=t;
            }
    }
    for(i=0; i<10; i++)
        printf("%d ",a[i]);
            }

选择法比较:

#include<stdio.h>
main()
{
    int a[10],i,j,t,k;
    for(i=0; i<10; i++)
        scanf("%d",&a[i]);
    for(i=0; i<9; i++)
    {
        k=i;
        for(j=i+1; j<10; j++)
            if(a[k]>a[j])
                k=j;
        if(k!=i)//
        {
            t=a[i];
            a[i]=a[k];
            a[k]=t;
        }
    }
    for(i=0; i<10; i++)
        printf("%d ",a[i]);
}

冒泡法比较:和相邻的比较,将最大值沉下去

#include<stdio.h>
main()
{
    int a[10],i,j,t,k;
    for(i=0; i<10; i++)
        scanf("%d",&a[i]);
    for(i=0; i<9; i++)
        for(j=0; j<10-i; j++)
            if(a[j]>a[j+1])
        {
            t=a[j+1];
            a[j+1]=a[j];
            a[j]=t;
        }
    for(i=0; i<10; i++)
        printf("%d ",a[i]);
}

向已经排好序的数组中,插入一个数

void insert(int a[],int n,int x)//将整数x插入到原有n个元素的a数组中 
{ 
int i; 
for (i=n;i>0 && x<a[i-1];i--) 
a[i]=a[i-1]; //将所有大于x的元素向后移动一格,并且使i停留在x应该被插入的位置 
a[i]=x; 
}
#include <stdio.h>
int main()
{
    int a[6];
    int i,j,x;
    
    for(i = 0; i < 5; i++)
    scanf("%d",&a[i]);
    
    scanf("%d",&x);
    
    for(i = 0; i < 5; i++)
        if(a[i] > x)
            break;
    for(j = 5; j > i; j--)
    {
        a[j] = a[j-1];
    }
    a[i] = x;
    for(i = 0; i < 6; i++)
        printf("%d ",a[i]);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值