5.代码C语言程序设计

7.11

给定一个从小到大有序的整数序列,将其保存至数组。另外输入一个整数,将其插入至这个数组中并保持数组有序。

#include<stdio.h>

int main()

{
    char a[50];
    int i,j,n,s,m;
    scanf("%d",&n);
    for (i=0;i<n;i++)
    {
        scanf("%d ",&a[i]);

    }
    scanf("%d",&m);
    for (i=0;i<n;i++)
    {
        if (m>a[i])
        {
            printf ("%d ",a[i]);

        }
        else {printf ("%d ",m);break;}

    }
    for (i=i;i<n;i++)
        printf ("%d ",a[i]);


}
 

7.12

将一个数组中的值按照原始顺序的逆序重新存放,并输出逆序后的数组。

#include<stdio.h>
void main()

{
    int n,i,j;
    char a[50];
    scanf("%d/n",&n);
    for(i=0;i<n;i++)
    {

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

    }
    for(i=n-1;i>=0;i--)
    {
        printf("%d ",a[i]);

    }


}
 

7.13

输出杨辉三角形的前n行。

#include<stdio.h>
void main()

{
    int i,n,j;
    char a[20][20];
    a[0][0]=1;a[1][0]=1;a[1][1]=1;
    scanf("%d",&n);
    for (i=0;i<n;i++)
    {
        a[i][0]=1;
    }
    printf("1\n1 1\n");
    for (i=2;i<n;i++)
    {
        printf("1 ");

        for(j=1;j<i;j++)
        {


            a[i][j]=a[i-1][j-1]+a[i-1][j];
            a[i][j+1]=1;
            printf("%d ",a[i][j]);
        }
        printf("1\n");

    }

}

7.14

找出一个二维数组中的所有鞍点,即该位置上的元素在该行中最大但是在该列中最小。需要注意有可能鞍点不存在,此时需要输出“NO”。

#include<stdio.h>
void main()
{
    int a[50][50];
    int i, j, b, n, q=0,m, l, k;
    scanf("%d%d", &n, &m);
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            scanf("%d", &a[i][j]);
        }
    }
    for (i = 0; i < n; i++)
    {
        b = a[i][0];
        for (j = 0; j < m; j++)
        {
            if (b < a[i][j])
            {
                b = a[i][j]; k = j;
            }
        }
        for (l = 0; l < n; l++)
        {
            if (b > a[l][k])
                break;

            if (l == n - 1)
            {
                printf("%d %d %d\n", b, i, k); q = 1;
            }
        }

    }if (q == 0)printf("NO");
}
 

7.15

给定15个按从小到大已经有序的整数,将其放在一个数组中。另外输入一个整数,要求使用折半查找法找出该数是数组中的第几个元素的值。如果该数不在数组中,则输出“NO”。

#include<stdio.h>
void main()
{
    int i, j,max, n,min, mid;
    int a[15];
    for(i=0;i<15;i++)
    {
        scanf("%d", &a[i]);
    }
    scanf("%d", &n);
    min = 0; max = 14;
    while(min<=max)
    {
        mid = (min + max) / 2;
        if (n > a[mid]) { min =mid + 1; }
        else if (n < a[mid]) { max = mid - 1; }
        else if (n == a[mid]) { printf("%d", mid); break;}
    }
    if (n != a[mid])printf("NO");}
 

7.16

给出一篇文章,共有3行文字,每行有最多80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数。

#include<stdio.h>
void main()
{
    char c,str1[80],str2[80],str3[80];
    int i,j,n,num1=0,num2=0,num5=0,num3=0,num4=0;
    gets(str1);gets(str2);gets(str3);
strcat(str1,str2);strcat(str1,str3);
    for(i=0;(c=str1[i])!='\0';i++)
    {
        if(c>='a'&&c<='z')
        {
            num1++;
        }
        else if(c>='A'&&c<='Z')
        {
            num2++;
        }
        else if(c==' ')
        {
            num3++;
        }
        else if(c>=0&&c<=9)
        {num4++;}
        else num5++;

    }

    printf("%d %d %d %d %d",num2,num1,num4,num3,num5);

}
 

7.17

输出如下图案:

* * * * *

 * * * * *

  * * * * *

   * * * * *

    * * * * *

请使用字符数组的方式完成本题。

#include<stdio.h>
void main()
{
    char str[]="* * * * *";
    int i,j;
    for(i=0;i<5;i++)
    {

    printf("%s",str);
    if(i<4)printf("\n");
    for(j=0;j<=i;j++)
    {
        printf(" ");
    }
    }
}
 

7.18

有一行电文,已经按照如下规则译成了密码:
A->Z a->z
B->Y b->y
C->X c->x
…  …
…  …
即第1个字母变换成第26个字母,第i个字母变换成第(26-i+1)个字母。非字母字符不变。给定一段密码,请将其译成原文并输出。

#include<stdio.h>
void main()
{
    char a[100],c;
    int i,j,n;
    gets(a);
    for(i=0;(a[i])!='\0';i++)
    {
        if(a[i]<='Z'&&a[i]>='A')
        {n=a[i]-64;
        c=91-n;
        printf("%c",c);}
        else if(a[i]<='z'&&a[i]>='a')
        {
            n=a[i]-96;
            c=123-n;
            printf("%c",c);
        }
        else{printf("%c",a[i]);}

    }
}
 

7.19

7.20

读入两个字符串s1和s2,比较这两个字符串。若s1>s2,输出一个正数;若s1=s2,输出0;若s1<s2,输出一个负数。输出的非零值应该是相比较的两个字符串第一个不相同位置的字符ASCII差值,例如”And”和”Aid”比较,根据第2个字符的比较结果,应输出5。
要求不要使用strcpy和strcmp函数。

#include<stdio.h>
void main()
{
    char s1[100],s2[100];
    int n,i,c,f,m;
    gets(s1);gets(s2);
    c=strlen(s1);f=strlen(s2);
    if(c>f)
     {
         for(i=0;(s2[i])!='\0';i++)
         {

             if(s1[i]!=s2[i])
             {
                 m=s1[i]-s2[i];
                 printf("%d",m);break;
             }
         }
     }
    else if(c<f)
    {
         for(i=0;(s1[i])!='\0';i++)
         {
             if(s1[i]!=s2[i])
             {
                 m=s1[i]-s2[i];
                 printf("%d",m);break;
             }
         }
     }
    else if(c==f)printf("0");

}
 

7.21

读入两个字符串s1和s2,将s2中的全部字符复制到字符数组s1中去。要求不使用strcpy函数,并保证字符串末尾的’\0’标识符同时被赋值。

#include<stdio.h>
void main()
{
    char s1[100],s2[100],c;
    int i,j,n;
    gets(s1);gets(s2);
    for(i=0;i<=strlen(s2);i++)
    {
        s1[i]=s2[i];
    }
    printf("%s",s1);


}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值