• 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函数释放的空间必须是经动态函数开辟的.

  • 相关阅读:
    python class属性
    获取安卓系统日志输出
    深入理解C#中的IDisposable接口(转)
    Mac开启自带的Apache服务器
    【转】《Unity Shader入门精要》冯乐乐著 书中彩图
    AssetDatabase的方法总结
    C# 读写XML文件的方法
    tkinter模块常用参数(python3)
    Unity在Project视图里面显示文件的拓展名
    Git忽略提交规则
  • 原文地址:https://www.cnblogs.com/zero-jh/p/5031290.html
Copyright © 2020-2023  润新知