zoukankan      html  css  js  c++  java
  • C基础的练习集及测试答案(31-39)

    31、读懂以下程序,说明程序的功能
    #include<stdio.h>
    int main()
    {
    int m,n,r,m1,m2;
    printf("请输入2个正整数:");
    scanf("%d%d",&m1,&m2);
    m=m1;
    n=m2;
    do{
    r=m%n;
    m=n;
    n=r;
    }while(r!=0);
    printf("%d ",m);
    return 0;
    }

    //31、读懂以下程序,说明程序的功能
    #include<stdio.h>
    int main()
    {
        int m,n,r,m1,m2;
        printf("请输入2个正整数:");
        scanf("%d%d",&m1,&m2);
        m=m1;
        n=m2;
        do{
            r=m%n;
            m=n;
            n=r;
        }while(r!=0);
        printf("%d
    ",m);
        return 0;
    }


    32、一个数如果恰好等于它的所有的因子之和,则这个数就称为“完数”。例如6的因子有1、2、3,而1+2+3=6,因此6是一个完数。编程找出1000内所有的完数。

     1

      #if 0
      32、一个数如果恰好等于它的所有的因子之和,则这个数就称为“完数”。例如6的因子有1、2、3,而1+2+3=6,因此6是一个完数。
      编程找出1000内所有的完数。

      思路分级:
      一。遍历2-1000内的所有数。
      二。寻找每个数所有的公约数累加等于本身则为完数。
      #endif

     5 #include<stdio.h>
     6 int main(){
     7     
     8     int num=0;
     9     for(num=2;num<1000;num++){
    10         int sum=0;
    11         int i=1;
    12         for(i=1;i<=num/2;i++){
    13             if(num%i==0){
    14                 
    15                 sum+=i;
    16             }
    17         }
    18         if(num==sum){
    19             printf("%d:是一个完数
    ",sum);
    20         }
    21     }
    22     
    23     
    24     return 0;
    25 }


    33、(课堂)思考这个宏定义错在哪里
    #define S (r) PI*r*r//注意S与(r)之间有空格


    34、我们在头文件(.h文件)中,经常看到这样的内容
    #ifndef __H_INCLUDE__
    #define __H_INCLUDE__
    //头文件的实际内容
    #endif
    思考头文件的开头和结尾需要这样书写的原因。


    35、(课堂)运行以下程序
    int main()
    {
    char a,b;
    a = getchar();
    b = getchar();
    putchar(a);
    putchar(b);
    return 0;
    }
    运行程序,输入x回车y回车,会发现输出的并不是xy,而是
    x

    思考这是为什么。


    36、(课堂)使用数组存储斐波那契数列前40项,并输出

     1

      #if 0
      36、(课堂)使用数组存储斐波那契数列前40项,并输出

      解题思路:
      一。创建一个长度为40的数组。
      二。将第一第二个元素置为1;
      三。遍历数组 第N个元素的值为 元素(N-1)+元素(N-2);
      #endif

     2 #include<stdio.h>
     3 #include<stdlib.h>
     4 int *fibonacci(int len){
     5     int *p;
     6     int i;
     7     
     8     if(NULL==(p=(int *)malloc(sizeof(int)*len))){
     9         perror("cannot malloc");
    10         return NULL;    
    11     }
    12     p[0]=1;
    13     p[1]=1;
    14     for(i=2;i<len;i++){
    15         p[i]=p[i-1]+p[i-2];
    16         
    17     }
    18     return p;
    19 }
    20 void print(int p[],int len){
    21     int i;
    22     for(i=0;i<len;i++){
    23         printf("p[%d]=%d	",i+1,p[i]);
    24         
    25     }
    26     
    27 }
    28 
    29 
    30 int main(){
    31     int *fib;
    32     fib=fibonacci(40);
    33     
    34     print(fib,40);
    35     
    36     return 0;
    37 }

     


    37、(课堂)从键盘输入10个学生的成绩,如果遇到大于100或者小于0的成绩需要提示输入错误重新输入。之后计算10个学生的总成绩和平均成绩

      #if 0
      37、(课堂)从键盘输入10个学生的成绩,如果遇到大于100或者小于0的成绩需要提示输入错误重新输入。
      之后计算10个学生的总成绩和平均成绩

      解题思路:
      一。创建长度为十的数组表示学生成绩
      二。在输入时判断数值是否合法。
      三。遍历数组累加 求总成绩和平均成绩
      #endif

     3 #include<stdio.h>
     4 #include<stdlib.h>
     5 
     6 int *getmemory(int len){
     7     int *p;
     8     if(NULL==(p=(int *)malloc(sizeof(int)*len))){
     9         perror("cannot malloc");
    10         return NULL;
    11         
    12     }
    13     return p;
    14 }
    15 
    16 void my_scanf(int p[],int len){
    17     int i;
    18     
    19     for(i=0;i<len;i++){
    20         printf("请输入第%d个学生成绩:
    ",i+1);
    21         //scanf("%d",&p[i]);
    22         int grade=0;
    23         scanf("%d",&grade);
    24         if(grade<0||grade>100){
    25             printf("成绩区间为1至100");
    26             i--;
    27         }else{
    28             p[i]=grade;
    29         }
    30     }
    31     
    32 }
    33 
    34 
    35 void my_printf(int p[],int len){
    36     int i;
    37     
    38     for(i=0;i<len;i++){
    39         
    40         printf("第 %d个学生的成绩;%d",i+1,p[i]);
    41     }
    42     
    43 }
    44 
    45 int my_sum(int p[],int len){
    46     int i=0;
    47     int sum=0;
    48     
    49     for(i=0;i<len;i++){
    50         sum+=p[i];
    51         
    52     }
    53     return sum;
    54     
    55 }
    56 
    57 double my_ave(int p[],int len){
    58     double ave;
    59     
    60     ave=my_sum(p,len)/len;
    61     
    62     
    63     return ave;
    64     
    65 }
    66 
    67 int main(){
    68     int num;
    69     int *stu;
    70     
    71     printf("需要输入几个学生的成绩");
    72     scanf("%d",&num);
    73     stu=getmemory(num);//创建容器
    74     
    75     my_scanf(stu,num);//输入数据
    76     
    77     //my_printf(stu,num);//输出数据
    78     
    79     int sum=my_sum(stu,num);//求和
    80     printf("学生的总成绩:%d",sum);
    81     
    82     
    83     double ave=my_ave(stu,num);//求平均
    84     printf("学生的平均成绩:%lf",ave);
    85     
    86     return 0;
    87 }


    38、(课堂)冒泡排序
    从键盘输入10个各不相同的整数,存储在数组中,使用冒泡排序法将数组排序并输出
    冒泡排序:是一种简单的排序算法
    1)比较相邻的元素和其身后的元素。如果第一个比第二个大,就交换他们两个。
    2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。一次循环过后,最后的元素应该会是最大的数。
    3)针对所有的元素重复以上的步骤,除了最后一个。
    4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

     1 #if 0
     2 38、(课堂)冒泡排序
     3 从键盘输入10个各不相同的整数,存储在数组中,使用冒泡排序法将数组排序并输出
     4 冒泡排序:是一种简单的排序算法
     5 1)比较相邻的元素和其身后的元素。如果第一个比第二个大,就交换他们两个。
     6 2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。一次循环过后,最后的元素应该会是最大的数。
     7 3)针对所有的元素重复以上的步骤,除了最后一个。
     8 4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
     9 
    10 #endif
    11 #include<stdio.h>
    12 
    13 void my_scanf(int a[],int len){
    14     int i=0;
    15     for(i=0;i<len;i++){
    16         
    17         printf("请输入第 %d个元素",i+1);
    18         scanf("%d",&a[i]);
    19         
    20     }
    21     
    22 }
    23 void bubblesort(int a[],int len){
    24     int i,j;
    25     for(i=0;i<len-1;i++){
    26         
    27         for(j=0;j<len-1-i;j++){
    28             if(a[j]<a[j+1]){
    29                 a[j]^=a[j+1];
    30                 a[j+1]^=a[j];
    31                 a[j]^=a[j+1];
    32                 
    33             }
    34             
    35         }
    36     }
    37     
    38 }
    39 
    40 void my_printf(int a[],int len){
    41     int i=0;
    42     for(i=0;i<len;i++){
    43         printf("a[%d]=%d
    ",i+1,a[i]);
    44         
    45     }
    46     
    47 }
    48 int main(){
    49     int a[10]={0};
    50     my_scanf(a,10);
    51     
    52     bubblesort(a,10);
    53     
    54     my_printf(a,10);
    55     
    56     return 0;
    57 }


    39、(课堂)自定义一个3*4的矩阵,输出矩阵中值最大的元素,并输入其数组下标

     1

      #if 0
      39、(课堂)自定义一个3*4的矩阵,输出矩阵中值最大的元素,并输入其数组下标
      解题思路:
      一。构建一个3*4的矩阵,然后给矩阵内的每个元素赋值。
      二。创建三个变量分别存放最大值及其坐标
      三。遍历矩阵得到最大值及其坐标

      错误分析:
      应该定义一个结构体来存放最大值及其坐标
      #endif

     3 #include<stdio.h>
     4 #include<stdlib.h>
     5 
     6 void my_scanf(int (*a),int x,int y){
     7     int i=0,j=0;
     8     for(i=0;i<x;i++){
     9         for(j=0;j<y;j++){
    10             printf("请输入第 %d行%d 列的值:
    ",i+1,j+1);
    11             scanf("%d",&a[(i*(x+1)+j)]);
    12             
    13         }
    14         
    15     }
    16     
    17     for(i=0;i<x;i++){
    18         for(j=0;j<y;j++){
    19             printf("a[%d][%d]=%d	",i+1,j+1,a[(i*(x+1)+j)]);
    20             //printf("%d
    ",(i*(x+1)+j));
    21             
    22         }
    23         
    24     }
    25     
    26 }
    27 
    28 
    29 
    30 
    31 void max(int (*a),int x,int y){
    32     int num,i=0,j=0,sub_i=1,sub_j=1;
    33     num=a[0];
    34     for(i=0;i<x;i++){
    35         for(j=0;j<y;j++){
    36             if(num<a[(i*(x+1)+j)]){
    37                 num=a[(i*(x+1)+j)];
    38                 sub_i=i+1;
    39                 sub_j=j+1;
    40                 
    41                 
    42             }
    43             
    44         }
    45         
    46     }
    47     
    48     printf("
    max:a[%d][%d]=%d",sub_i,sub_j,num);
    49     
    50 }
    51 
    52 
    53 
    54 int main(){
    55     //printf("哈哈哈999
    ");
    56     int a[3][4]={0};
    57     //int (*a)=(int *)malloc(sizeof(int)*3*4);
    58     
    59     //int i=3,j=4;
    60     my_scanf(a,3,4);
    61     
    62     max(a,3,4);
    63     
    64     //free(a);
    65     //a=NULL;
    66     
    67     return 0;
    68 }

  • 相关阅读:
    两个不同于LR和jmeter的性能测试工具
    一个基于集成jenkins的测试平台
    sparkR原理
    Python 出现需要使用fPIC重新编译的问题
    eclipse中使用jython
    R中逻辑运算
    R语言的一些笔记
    Distributed R
    R语言和大数据
    Mysql command line
  • 原文地址:https://www.cnblogs.com/lanbofei/p/9445548.html
Copyright © 2011-2022 走看看