zoukankan      html  css  js  c++  java
  • C语言程序设计笔记6数组

    C语言程序设计-笔记6-数组

    例7-1  输出所有大于平均值的数。输入n个整数(1 ),计算这些数的平均值,再输出所有大于平均值的数。

    #include<stdio.h>

    int main(void)

    {

          int i,n;

          double average,sum;

          int a[10];

         

          printf("Enter n:");

          scanf("%d",&n);

          if(n>=1&&n<=10)

          {

               printf("Enter %d integers:",n);

               for(i=0;i<n;i++)

               {

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

               }

               sum=0;

               for(i=0;i<n;i++)

               {

                     sum=sum+a[i];

               }

               average=sum/n;

               printf("average = %.2f\n",average);

               for(i=0;i<n;i++)

               {

                     if(a[i]>average)

                     {

                          printf("%d",a[i]);

                          printf(" ");

                     }

                    

               }

               printf("\n");

              

          }

          else

          {

               printf("Invalid value.\n");

          }

         

          return 0;

    }

    例7-2  利用数组计算斐波那契数列。利用数组计算斐波那契数列的前n个数( ),即1,1,2,3,5,8,。。。,并按每行打印5个数的格式输出,如果最后一行的输出少于5个数,也需要换行。

    #include<stdio.h>

    #define MAX 46

    int main(void)

    {

          int i,n;

          int fib[MAX]={1,1};

         

          printf("Enter n:");

          scanf("%d",&n);

          if(n>=1&&n<=46)

          {

               for(i=2;i<n;i++)

               {

                     fib[i]=fib[i-1]+fib[i-2];

               }

               for(i=0;i<n;i++)

               {

                     printf("%6d",fib[i]);

                     if((i+1)%5==0)

                     {

                          printf("\n");

                     }

               }

               if(n%5!=0)

               {

                     printf("\n");

               }   

          }

          else

               {

                     printf("Invalid Value.\n");

               }

         

          return 0;

    }

    例7-3  查找满足条件的所有整数—顺序查找发。输入正整数n(1 <=n<=10)和整数x,再输入n个整数并存入数组a中,然后在数组a中查找给定的x。如果数组a中的元素与x的值相同,输出所有满足条件的元素的下标(下标从0开始);如果没有找到,输出“Not Found”.

    #include<stdio.h>

    #define MAXN 10

    int main(void)

    {

          int i,flag,n,x;

          int a[MAXN];

         

          printf("Enter n,x:");

          scanf("%d%d",&n,&x);

          printf("Enter %d integers:",n);

          for(i=0;i<n;i++)

          {

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

          }

          flag=0;

          for(i=0;i<n;i++)

          {

               if(a[i]==x)

               {

                     printf("Index is %d\n",i);

                     flag=1;

               }

          }

          if(flag==0)

          {

               printf("Not Found.\n");

          }

         

          return 0;

    }

    例7-4  输入一个正整数n(1<=n<=10),再输入n个整数,将它们存入数组a中。

    1)     求最小值及其下标。输出最小值和它所对应的最小下标。

    2)     交换最小值。将最小值与第一个数交换,输出交换后的n个数。

    #include<stdio.h>

    #define MAXN 10

    int main(void)

    {

          int i,index,n;

          int a[MAXN];

         

          printf("Enter n:");

          scanf("%d",&n);

          printf("Enter %d integers:",n);

          for(i=0;i<n;i++)

          {

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

          }

          index=0;

          for(i=1;i<n;i++)

          {

               if(a[i]<a[index])

               {

                     index=i;

               }

          }

          printf("min is %d\t sub is %d\n",a[index],index);

          int temp;

          temp=a[index];

          a[index]=a[0];

          a[0]=temp;

          for(i=0;i<n;i++)

          {

               printf("%d ",a[i]);

          }

          return 0;

    }

    例7-5  选择法排序。输入一个正整数n(1-10),再输入n个整数,用选择法将它们从小到大排序后输出。

    #include<stdio.h>

    #define MAXN 10

    int main(void)

    {

          int i,index,k,n,temp;

          int a[MAXN];

         

          printf("Enter n:");

          scanf("%d",&n);

          printf("Enter %d integers:",n);

          for(i=0;i<n;i++)

          {

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

          }

          for(k=0;k<n-1;k++)

          {

               index=k;

               for(i=k+1;i<n;i++)

               {

                     if(a[i]<a[index])

                     {

                          index=i;

                     }

               }

               temp=a[index];

               a[index]=a[k];

               a[k]=temp;

          }

          printf("After sorted:");

          for(i=0;i<n;i++)

          {

               printf("%d ",a[i]);

          }

          printf("\n");

         

          return 0;

    }

    例7-6   调查电视节目受欢迎程度。某电视台要调查观众对该台8个栏目(设相应栏目编号为1-8)的受欢迎情况,共调查了n(1<=n<=1000)位观众。现要求编写程序,输入每一位观众的投票情况(每位观众只能选择一个最喜欢的栏目投票),统计输出各栏目的得票情况。

    #include<stdio.h>

    #define MAXN 8

    int main(void)

    {

          int i,n,response;

          int count[MAXN+1];

         

          printf("Enter n:");

          scanf("%d",&n);

          for(i=1;i<=MAXN;i++)

          {

               count[i]=0;

          }

          for(i=1;i<=n;i++)

          {

               printf("Enter your response:");

               scanf("%d",&response);

               if(response>=1&&response<=MAXN)

               {

                     count[response]++;

               }

               else

               {

                     printf("Invalid:%d\n",response);

               }

          }

          printf("result:\n");

          for(i=1;i<=MAXN;i++)

          {

               if(count[i]!=0)

               {

                     printf("%4d%4d\n",i,count[i]);

               }

          }

         

          return 0;

    }

    例7-7  二分查找法。设已有一个n(1 )个元素的整型数组a,且按值从小到大有序排列。输入一个整数x,然后在数组中查找x,如果找到,输出相应的下标,否则,输出“Not  Found”。

    #include<stdio.h>

    int main(void)

    {

          int low,high,mid,n=10,x;

          int a[10]={1,2,3,4,5,6,7,8,9,10};

         

          printf("Enter x:");

          scanf("%d",&x);

          low=0;

          high=n-1;

          while(low<=high)

          {

               mid=(low+high)/2;

               if(x==a[mid])

               {

                     break;

               }

               else if(x<a[mid])

               {

                     high=mid-1;

               }

               else

               {

                     low=mid+1;

               }

          }

          if(low<=high)

          {

               printf("Index is %d\n",mid);

          }

          else

          {

               printf("Not Found\n");

          }

         

          return 0;

    }

    例7-8  求矩阵的最大值。输入两个正整数m和n( ),再输入1个mxn的矩阵,找出最大值以及它的行下标和列下标。假设最大值唯一。

    #include<stdio.h>

    #define MAXM 6

    #define MAXN 6

    int main(void)

    {

          int col,i,j,m,n,row;

          int a[MAXM][MAXN];

         

          printf("Enter m,n:");

          scanf("%d%d",&m,&n);

          printf("Enter %d integers:\n",m*n);

          for(i=0;i<m;i++)

          {

               for(j=0;j<n;j++)

               {

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

               }

          }

          row=col=0;

          for(i=0;i<m;i++)

          {

               for(j=0;j<n;j++)

               {

                     if(a[i][j]>a[row][col])

                     {

                          row=i;

                          col=j;

                     }

               }

          }

          printf("max=a[%d][%d]=%d\n",row,col,a[row][col]);

         

          return 0;

    }

    例7-9  方阵转置。输入一个正整数n( ),根据下式生成一个nxn的方阵,即将该方阵转置(行列互换)后输出。

    a[i][j]=i*n+j+1  (0 ,0 )

    #include<stdio.h>

    #define MAXN 6

    int main(void)

    {

          int i,j,n,temp;

          int a[MAXN][MAXN];

         

          printf("Enter n:");

          scanf("%d",&n);

          for(i=0;i<n;i++)

          {

               for(j=0;j<n;j++)

               {

                     a[i][j]=i*n+j+1;

               }

          }

          for(i=0;i<n;i++)

          {

               for(j=0;j<n;j++)

               {

                     if(i<=j)             //上三角

                     {

                          temp=a[i][j];

                          a[i][j]=a[j][i];

                          a[j][i]=temp;

                     }

               }

          }

          for(i=0;i<n;i++)

          {

               for(j=0;j<n;j++)

               {

                     printf("%4d",a[i][j]);

               }

               printf("\n");

          }

         

          return 0;

    }

    例7-10  计算天数。定义函数day_of_year(year,month,day),计算并返回年year,月month和日day对应的是该年的第几天。

    #include<stdio.h>

    int day_of_year(int year,int month,int day)

    {

          int k,leap;

          int tab[2][13]={

                                {

                                      0,31,28,31,30,31,30,31,31,30,31,30,31

                                },

                                {

                                      0,31,29,31,30,31,30,31,31,30,31,30,31

                                }

                                };

          leap=(year%4==0&&year%100!=0||year%400==0);

          for(k=1;k<month;k++)                 

          {

               day=day+tab[leap][k];

          }

         

          return day;

    }

    int main(void)

    {

          int year,month,day;

          int n;

          printf("Enter yyyy-mm-dd:");

          scanf("%d%d%d",&year,&month,&day);

          n=day_of_year(year,month,day);

          printf("%d\n",n);

         

          return 0;

    }

    例7-11  判断回文字符串。输入一个以回车符为结束标志的字符串(少于80个字符),判断该字符串是否为回文。回文就是字符串中心对称,如“noon”、“radar”、是回文,“reader”不是回文。

    #include<stdio.h>

    #define MAXLINE 80

    int main(void)

    {

          int i,k;

          char line[MAXLINE];

         

          printf("Enter a string:");

          k=0;

          while((line[k]=getchar())!='\n')

          {

               k++;

          }

          line[k]='\0';

         

          i=0;

          k=k-1;

          while(i<k)

          {

               if(line[i]!=line[k])

               {

                     break;

               }

               i++;

               k--;

          }

          if(i>=k)

          {

               printf("It is a palindrome\n");

          }

          else

          {

               printf("It is not a palindrome\n");

          }

         

          return 0;

    }

    例7-12  凯撒密码。为了防止信息被别人轻易窃取,需要把电码明文通过加密方式变换成密文。输入一个以回车符为结束标志的字符串(少于80个字符),再输入一个正整数offset,用凯撒密码将其加密后输出。凯撒密码是一种简单的替换加密技术,将明文中的所有字母都在字母表上向后偏移offset位后被替换成密文。例如,当偏移量offset是2时,表示所有的字母被向后移动2位后的字母替换,即所有的字母A将被替换成C,字母B将变为D。。。。字母X变成Z,字母Y则变为A,字母Z变为B。

    #include<stdio.h>

    #define MAXLINE 80

    #define M 26               //字母数量

    int main(void)

    {

          int i,offset;

          char str[MAXLINE];

         

          printf("Enter a string:");

          i=0;

          while((str[i]=getchar())!='\n')

          {

               i++;

          }

          str[i]='\0';

          printf("Enter offset:");

          scanf("%d",&offset);

          if(offset>=M)

          {

               offset=offset%M;

          }

         

          for(i=0;str[i]!='\0';i++)

          {

               if(str[i]>='A'&&str[i]<='Z')

               {

                     if((str[i]-'A'+offset)<M)

                     {

                          str[i]=str[i]+offset; 

                     }   

              

                     else

                     {

                          str[i]=str[i]-(M-offset);

                     }

               }

               else if(str[i]>='a'&&str[i]<='z')

               {

                     if((str[i]-'a'+offset)<M)

                     {

                          str[i]=str[i]+offset;

                     }

                     else

                     {

                          str[i]=str[i]-(M-offset);

                     }

               }

    }

    printf("After being encrypted:");

    for(i=0;str[i]!='\0';i++)

    {

          putchar(str[i]);

    }

    printf("\n");

    return 0;

    }

    例7-13  字符转换。输入一个以回车符为结束标志的字符串(少于10个字符),提取其中所有数字字符(‘0’。。。‘9’),将其转换为一个十进制整数输出。

    #include<stdio.h>

    #define MAXLINE 10

    int main(void)

    {

          int i,number;

          char str[MAXLINE];

         

          printf("Enter a string:");

          i=0;

          while((str[i]=getchar())!='\n')

          {

               i++;

          }

          str[i]='\0';

         

          number=0;

          for(i=0;str[i]!='\0';i++)

          {

               if(str[i]>='0'&&str[i]<='9')

               {

                     number=number*10+str[i]-'0';

               }

          }

          printf("digit=%d\n",number);

         

          return 0;

    }

    例7-14  十六进制字符串转换成十进制非负整数。输入一个以‘#’为结束标志的字符串(少于10个字符),滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,输出该字符串并将其转换为十进制数后输出。

    #include<stdio.h>

    #define MAXLINE 80

    int main(void)

    {

          int i,k,number;

          char hexad[MAXLINE],str[MAXLINE];

         

          printf("Enter a string:");

          i=0;

          while((str[i]=getchar())!='#')

          {

               i++;

          }

          str[i]='\0';

          i=0;

          k=0;

          while(str[i]!='\0')

          {

               if((str[i]>='0'&&str[i]<='9')||(str[i]>='A'&&str[i]<='F')||(str[i]>='a'&&

                     str[i]<='f'))

               {

                     hexad[k]=str[i];

                     k++;

               }

               i++;

          }

          hexad[k]='\0';

         

          printf("New string:");

          for(i=0;hexad[i]!='\0';i++)

          {

               putchar(hexad[i]);

          }

          printf("\n");

         

          number=0;

          for(i=0;hexad[i]!='\0';i++)

          {

               if(hexad[i]>='0'&& hexad[i]<='9')

               {

                     number=number*16+hexad[i]-'0';

               }

               else if(hexad[i]>='A'&&hexad[i]<='F')

               {

                     number=number*16+hexad[i]-'A'+10;

               }

               else if(hexad[i]>='a'&&hexad[i]<='f')

               {

                     number=number*16+hexad[i]-'a'+10;

               }

          }

          printf("Number=%d\n",number);

         

          return 0;

    }

    参考资料

    C语言程序设计/何钦铭,颜晖主编.---4版.---北京:高等教育出版社,2020.9

  • 相关阅读:
    实现进制转化伪代码
    XOR算法
    最大公约数算法
    To be a hacker
    20191310《信息安全专业导论》第四周学习总结
    浪潮之巅阅读感想
    20191310 李烨龙 《信息安全导论》第二周学习
    git安装心得
    计算机概论阅读
    学业优秀者经验展示
  • 原文地址:https://www.cnblogs.com/halflife/p/15545095.html
Copyright © 2011-2022 走看看