• C语言成长学习题(十六)


    72.假设一维数组中存放互不相同的十个整数,要求根据输入的下标值,即可直接删除.

     1 #include <stdio.h>
     2 
     3 int mydel (int *a, int n, int k)
     4 {
     5     int i;
     6 
     7     for (i = k; i < n - 1; i++)
     8         *(a+i) = *(a+i+1);
     9     n--;
    10 
    11     return n;
    12 }
    13 
    14 void myout (int *a, int n)
    15 {
    16     while (n > 0)
    17     {
    18         printf("%4d", *a);
    19         a++,n--;
    20     }
    21     printf("
    ");
    22 }
    23 
    24 void main (void)
    25 {
    26     int n, k, a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    27     printf("Input data: ");
    28     scanf("%d", &k);
    29     printf("Before delete: ");
    30     myout(a, 10);
    31     n = mydel(a, 10, k);
    32     printf("After delete: ");
    33     myout(a, n);
    34 }
    View Code

    结果:

    Input data: 3

    Before delete:    1   2   3   4   5   6   7   8   9  10

    After delete:    1   2   3   5   6   7   8   9  10

    73.用选择法将10个数按由小到大的顺序进行排序.

     1 #include <stdio.h>
     2 
     3 void mysort (int *p, int n)
     4 {
     5     int i, j, k, t;
     6 
     7     for (i = 0; i < n - 1; i++)
     8     {
     9         k = i;
    10         for (j = k + 1; j < n; j++)
    11             if (*(p+k) > *(p+j))
    12                 k = j;
    13         t = *(p+i);
    14         *(p+i) = *(p+k);
    15         *(p+k) = t;
    16     }
    17 }
    18 
    19 void myout (int *p, int n)
    20 {
    21     while (n > 0)
    22     {
    23         printf("%4d", *p);
    24         p++,n--;
    25     }
    26     printf("
    ");
    27 }
    28 
    29 void main (void)
    30 {
    31     int a[10] = {10, 9, 8, 2, 5, 1, 7, 3, 4, 6};
    32 
    33     printf("Before sort: ");
    34     myout(a, 10);
    35     mysort(a, 10);
    36     printf("After sort: ");
    37     myout(a, 10);
    38 }
    View Code

    结果:

    Before sort:   10   9   8   2   5   1   7   3   4   6

    After sort:    1   2   3   4   5   6   7   8   9  10

    74.输入字符串,调用函数将字符倒置.

     1 #include <stdio.h>
     2 
     3 void myfun (char *p);
     4 
     5 void main (void)
     6 {
     7     char a[50];
     8     printf("Input data: ");
     9     gets(a);
    10     myfun(a);
    11     printf("After: ");
    12     puts(a);
    13 }
    14 
    15 void myfun(char *p)
    16 {
    17     char *q = p, t;
    18     while (*q != '')
    19         q++;
    20     q--;
    21     while (p < q)
    22     {
    23         t = *p;
    24         *p = *q;
    25         *q = t;
    26         p++;
    27         q--;
    28     }
    29 }
    View Code

    结果:

    Input data: qwertyuio

    After: oiuytrewq

    Mark:

      如果程序的开头加#include <string.h>,则可将程序段"while (*q != '') q++; q--;"简化成"q = strlen(p) - 1;".

    75.用递归的方法求斐波那契级数,n阶斐波那契级数的公式为:

     1 #include <stdio.h>
     2 
     3 long int myf (int n);
     4 
     5 void main (void)
     6 {
     7     int n;
     8     long int x;
     9 
    10     printf("Input data: ");
    11     scanf("%d", &n);
    12     if (n < 0)
    13         printf("Wrong!
    ");
    14     else
    15     {
    16         x = myf(n);
    17         printf("%d阶斐波那契级数的值为: %ld
    ", n, x);
    18     }
    19 }
    20 
    21 long int myf (int n)
    22 {
    23     long int x;
    24     if (n == 1 || n == 2)
    25         x = 1;
    26     else
    27         x = myf(n-1) + myf(n-2);
    28     return x;
    29 }
    View Code

    结果:

    Input data: 6

    6阶斐波那契级数的值为: 8

    76.假设有若干个字符串,它们分别由指针数组中的每一个元素(指针)指向.找出最小的字符串,并使指针数组的第一个元素指向它,而原来指向最小字符串的数组元素指向第一个字符串.

     1 #include <stdio.h>
     2 #include <string.h>
     3 
     4 void main (void)
     5 {
     6     int i, k;
     7     char *temp, *p[4];
     8 
     9     p[0] = "Zhang";
    10     p[1] = "Li";
    11     p[2] = "Chen";
    12     p[3] = "Wang";
    13     k = 0;
    14     for (i = 1; i < 4; i++)
    15         if (strcmp(p[i], p[k]) < 0)
    16             k = i;
    17     temp = p[0];
    18     p[0] = p[k];
    19     p[k] = temp;
    20     printf("最小的字符串为: %s
    ", p[0]);
    21 }
    View Code

    结果:

    最小的字符串为: Chen

    77.假设有若干个字符串,并指针数组中的每一个元素分别指向它们,将字符串按由小到大的顺序输出.

     1 #include <stdio.h>
     2 #include <string.h>
     3 
     4 void main (void)
     5 {
     6     int i, j;
     7     char *temp, *p[4];
     8 
     9     p[0] = "Zhang";
    10     p[1] = "Li";
    11     p[2] = "Chen";
    12     p[3] = "Wang";
    13     for (i = 0; i < 3; i++)
    14         for (j = 0; j < 3 - i; j++)
    15             if (strcmp(p[j], p[j+1]) > 0)
    16             {
    17                 temp = p[j];
    18                 p[j] = p[j+1];
    19                 p[j+1] = temp;
    20             }
    21 
    22     printf("按从小到大排序后的字符串顺序为: 
    ");
    23     for (i = 0; i < 4; i++)
    24         printf("%s
    ", p[i]);
    25 }
    View Code

    结果:

    按从小到大排序后的字符串顺序为:

    Chen

    Li

    Wang

    Zhang

    78.用register说明整型变量只是向系统申请,将变量的值保留在CPU的寄存器中.由于寄存器有限,系统不一定把用户申请的所有变量都保留在寄存器中,当CPU中没有足够的寄存器时,编译程序把认为不适合存放在寄存器中的变量,自动按auto变量处理.

      由于寄存器变量的值保留在CPU的寄存器中,其访问速度比普通变量快,因此对频繁使用的变量可用register进行说明.

    79.假设学生基本情况包括学号和多门课的成绩,计算某学生的平均成绩.

     1 #include <stdio.h>
     2 
     3 #define N 6
     4 
     5 struct ex
     6 {
     7     long num;
     8     float s[N];
     9 };
    10 
    11 void main (void)
    12 {
    13     struct ex wang, *p;
    14     float ave, sum = 0, x;
    15     int i;
    16 
    17     p = &wang;
    18     printf("Input number: ");
    19     scanf("%ld", &(p->num));
    20     printf("Input score: ");
    21     for (i = 0; i < N; i++)
    22     {
    23         scanf("%f", &x);
    24         p->s[i] = x;
    25     }
    26     printf("Number : %ld
    ", p->num);
    27     for (i = 0; i < N; i++)
    28     {
    29         sum = sum + p->s[i];
    30         printf("%8.1f", p->s[i]);
    31     }
    32     printf("
    ");
    33     ave = sum / N;
    34     printf("Average : %.1f
    ", ave);
    35 }
    View Code

    结果:

    Input number: 1000101

    Input score: 89.5 90.0 79.0

    Number: 1000101

         89.5     90.0     79.0

    Average: 86.2

    80.malloc函数可以根据其实参的值分配若干字节的存储区,并返回该存储区的地址,若系统不能提供足够的内存单元,函数将返回(NULL).

      在语句"p=(int *)malloc(2);"中,函数的参数表示向系统申请2个字节的内存空间,用来存放整型值.由于函数调用成功后将返回一个无类型的指针,因此在malloc函数名之前先通过强制转换运算(int *)将指针的基类型转换为int型,再讲其值赋给基类型为int型的指针变量p.

      sizeof(int)用来计算本系统int类型应占内存字节数.

      free函数释放的空间必须是经动态函数开辟的.

  • 相关阅读:
    CODING x 百果园 _ 水果零售龙头迈出 DevOps 体系建设第一步
    Nocalhost 亮相 CD Foundation 国内首届 Meetup,Keith Chan 将出席致辞
    做云原生时代标准化工具,实现高效云上研发工作流
    打造数字化软件工厂 —— 一站式 DevOps 平台全景解读
    WePack —— 助力企业渐进式 DevOps 转型
    CODING Compass —— 打造行云流水般的软件工厂
    Nocalhost —— 让云原生开发回归原始而又简单
    CODING 代码资产安全系列之 —— 构建全链路安全能力,守护代码资产安全
    Nocalhost:云原生开发新体验
    使用 Nocalhost 开发 Kubernetes 中的 APISIX Ingress Controller
  • 原文地址:https://www.cnblogs.com/zero-jh/p/5031290.html
Copyright © 2020-2023  润新知