zoukankan      html  css  js  c++  java
  • C语言-指针、数组、结构体、分支、循环混合使用

    1、写一个程序,输出如下内容:

    1 //#############################################################
    2 //###  name      number     math       english    computer  ###
    3 //###  zhanghua ,9901,      80.5,      87.0,      80.0      ###
    4 //###  lina     ,9902,      70.0,      80.0,      90.0      ###
    5 //###  wanggang ,9903,      87.0,      76.0,      78.0      ###
    6 //#############################################################

    程序代码:

     1 struct score{
     2           char    *name;
     3           int     number;
     4           float   math;
     5           float   english;
     6           float   computer;
     7         };
     8 
     9     struct score sc[3] = {
    10                         {"zhanghua", 9901, 80.5, 87, 80},
    11                         {"lina",     9902, 70,   80, 90},
    12                         {"wanggang", 9903, 87,   76, 78},
    13                         };
    14     printf("name      number     math       english    computer
    ");
    15     
    16     for (int i=0; i<3; i++) {
    17         printf("%-9s,%d,%10.1f,%10.1f,%10.1f
    ",sc[i].name, sc[i].number,sc[i].math,sc[i].english,sc[i].computer);
    18     }

    回车后输出:

    1 name      number     math       english    computer
    2 zhanghua ,9901,      80.5,      87.0,      80.0
    3 lina     ,9902,      70.0,      80.0,      90.0
    4 wanggang ,9903,      87.0,      76.0,      78.0
    5 Program ended with exit code: 0

    2,计算2+4+6+8+。。。+100

    1     int sum = 0;
    2     for (int i=2; i<=100; i+=2) {
    3         sum+=i;
    4     }
    5     printf("2+4+6+8+...+100=%d.
    ",sum);

    回车后输出:

    1 2+4+6+8+...+100=2550.
    2 Program ended with exit code: 0

    3、计算1到100之间的奇数和与偶数和

     1     int jsum = 0;
     2     int osum = 1;
     3     
     4     for (int i=1 ;i<=100 ; i++) {
     5         if (i%2) {
     6             jsum+=i;
     7         }else{
     8             osum+=i;
     9         }
    10     }
    11     
    12     printf("jsum=%d,	osum=%d
    ", jsum, osum);

    回车后输出:

    1 jsum=2500,    osum=2551
    2 Program ended with exit code: 0

    4、求1到100的非素数之和

     1     int sum = 0;
     2     int j= 0 ;
     3     for (int i=1; i<=100; i++) {
     4         for (j=2; j<i; j++) {
     5             if (i%j==0) {
     6                 break;
     7             }
     8         }
     9         if (j!=i) {
    10             sum=sum+i;
    11             printf("%d	",i);
    12         }
    13     }
    14     printf("
    %d
    ",sum);

    回车后输出:

    1 jsum=2500,    osum=2551
    2 Program ended with exit code: 0

    5、调用子函数实现1到100的非素数和,其中子函数判断数字是否非素数,如果非素数,则返回

    主函数:

    1     int sum = 0;
    2     for (int i = 1 ; i<=100; i++) {
    3         sum += sushu(i);
    4     }
    5     printf("%d
    ", sum);

    子函数:

     1 int sushu(int n){
     2     int i;
     3     for (i=2; i<n; i++) {
     4         if (n%i==0) {
     5             break;
     6         }
     7     }
     8     if (n!=i) {
     9         return 0;
    10     }else{
    11         return n;
    12     }
    13 }

    输出:

    1 3990
    2 Program ended with exit code: 0

    6、有一个四位正整数,组成着四个正整数的四个数字各不相同,如果把它们的首尾互换,第二位与第三位数互换,组成一个新的四位数,原来四位数刚好是新四位数的4倍,求这样的四位数:

     1 int a = 0;
     2     int b = 0;
     3     for (int i=1; i<10; i++) {
     4         for (int j=0; j<10; j++) {
     5             for (int k=0; k<10; k++) {
     6                 for (int l=1; l<10; l++) {
     7                     a=1000*i+100*j+10*k+l;
     8                     b=1000*l+100*k+10*j+i;
     9                     if (a==4*b && i!=j &&j!=k && k!=l) {
    10                         printf("%d	",a);
    11                     }
    12                 }
    13             }
    14         }
    15     }
    16     printf("
    ");

    输出:

    1  8712
    2  Program ended with exit code: 0

    7、两个乒乓球队进行比赛,各处三个人,甲队为A,B,C三人,乙队为X,Y,Z三人,其中A不和X比,C不和X,Z比,请编程找出三对赛手的名单:

     1 //设A=1,B=2,C=3.
     2  
     3     int x,y,z;
     4     for (x=1; x<4; x++) {
     5         for (y=1; y<4; y++) {
     6             for (z=1; z<4; z++) {
     7                 if ((x+y+z)==6 && (x!=1) && (x!=3) && (z!=3) &&(x!=y) && (y!=z)) {
     8                     printf("x=%d	y=%d	z=%d", x, y, z);
     9                 }
    10             }
    11         }
    12     }

    输出:

    x=2    y=3    z=1
    Program ended with exit code: 0

    8、对一个3*3的二维数组进行转置,即行列互换

     1    int a[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
     2     int tmp = 0;
     3     
     4     for (int i=0; i<3; i++) {
     5         for (int j=i+1; j<3; j++) {
     6             tmp = a[i][j];
     7             a[i][j] = a[j][i];
     8             a[j][i] = tmp;
     9         }
    10     }
    11     
    12     for (int i=0; i<3; i++) {
    13         for (int j=0; j<3; j++) {
    14             printf("%d	",a[i][j]);
    15         }
    16         printf("
    ");
    17     }

    输出:

    1 1    4    7    
    2 2    5    8    
    3 3    6    9    
    4 Program ended with exit code: 0

    9、输入20个正整数,判断是否素数,如果是则排序。

    主函数:

     1 int a[20] = {0};
     2     int b[20] = {0};
     3     
     4     printf("请输入20个正整数
    ");
     5     
     6     for (int i=0; i<20; i++) {
     7         scanf("%d",&a[i]);
     8         b[i] = sushu(a[i]);
     9     }
    10 
    11     rank(b, 20);
    12     
    13     for (int i=0; i<20; i++) {
    14         if (b[i]>0) {
    15             printf("%d	",b[i]);
    16         }
    17     }
    18     
    19     printf("
    ");

    rank()子函数(使用选择法排序):

     1 void rank(int *p, int n){
     2     int max = 0;
     3     int tmp = 0;
     4     for (int i=0; i<n-1; i++) {
     5         max=i;
     6         for (int j=i+1; j<n;j++) {
     7             if (*(p+max)<*(p+j)) {
     8                 max = j;
     9             }
    10         }
    11         
    12         if (i!=max) {
    13             tmp = *(p+max);
    14             *(p+max) = *(p+i);
    15             *(p+i) = tmp;
    16         }
    17     }
    18 }

    10、输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三个函数:①输入10个数;②进行处理;③输出10个数。

    主函数:

    1     int a[10] = {0};
    2     printf("请输入十个数:
    ");
    3     inputnum(a);
    4     deal(a, 10);
    5     output(a, 10);

    输入、输出、处理子函数:

     1 // 输入十个数子函数
     2 void inputnum(int *a){
     3     
     4     for (int i=0;i<10 ; i++) {
     5          scanf("%d",&a[i]);
     6     }
     7     
     8 }
     9 
    10 // 处理函数:将其中最小的数与第一个数对换,把最大的数与最后一个数对换
    11 void deal(int *p, int n){
    12     int max=0,min=0;
    13     int tmp=0,i=0,j=0;
    14     max=i;
    15     for (i=0; i<n;i++) {
    16         if (*(p+max)<*(p+i)) {
    17             max=i;
    18         }
    19         
    20     }
    21         tmp = *(p+max);
    22         *(p+max) = *(p+0);
    23         *(p+0) = tmp;
    24 
    25     min=j;
    26     for (j=0; j<n;j++) {
    27         if (*(p+min)>*(p+j)) {
    28             min=j;
    29         }
    30     }
    31 
    32         tmp = *(p+min);
    33         *(p+min) = *(p+n-1);
    34         *(p+n-1) = tmp;
    35 }
    36 
    37 // 输出函数
    38 void output(int *p, int n){
    39     for (int i=0; i<n; i++) {
    40         printf("%d	",p[i]);
    41     }
    42     printf("
    ");
    43 }

    11、使用子函数对数列排序:

    主函数:

     1     int main() {
     2     
     3     int a[5] = {90, 50, 80, 70, 60,};
     4     
     5     rank(a,5);
     6    
     7     for (int i=0; i<5; i++) {
     8         printf("%d	", a[i]);
     9     }
    10     
    11     printf("
    ");
    12     
    13     return 0;
    14 }

    子函数:

     1 void rank(int * p, int n){
     2     
     3     int max = 0;
     4     int tmp = 0;
     5     
     6     for (int i=0; i<n-1; i++) {
     7         max=i;
     8         for (int j=i+1; j<n; j++) {
     9             if (*(p+max)<*(p+j)) {
    10                 max=j;
    11             }
    12         }
    13         if (i!=max) {
    14             tmp = *(p+i);
    15             *(p+i) = *(p+max);
    16             *(p+max) =tmp;
    17         }
    18     }
    19 }

     12、有n个学生,每个学生的数据包括学号(num),姓名(name[20]),性别(sex),年龄(age),

    三门课的成绩(score[3])。要求在main函数中输入这n个学生的数据,  然后调用一个函数count,在该函数中计算出每个学生的总分和平均分, 然后打印出所有各项数据(包括原有的和新求出的)。

     1     int i;
     2     float s0,s1,s2;
     3     
     4     struct student a[3];
     5     
     6     for(i=0;i<3;i++) {
     7         scanf("%d%s %c%d%f%f%f",&a[i].num, a[i].name, &a[i].sex,&a[i].age, &s0, &s1, &s2);
     8         a[i].score[0]=s0;a[i].score[1]=s1;a[i].score[2]=s2;
     9         printf("%d %s  %c %d %4.1f %4.1f %4.1f
    ",a[i].num,a[i].name, a[i].sex,a[i].age,a[i].score[0],a[i].score[1],a[i].score[2]);
    10     }
    11     count(a,3);
    12     printf("=============================================
    ");
    13     printf("NO name sex age score[0] score[1] score[2] total ave
    ");
    14     
    15     for(i=0;i<3;i++)
    16         printf("%d  %s  %c  %d  %5.1f  %5.1f %5.1f %5.1f %5.1f
    ", a[i].num,a[i].name,a[i].sex,a[i].age,a[i].score[0], a[i].score[1],a[i].score[2],a[i].total,a[i].ave);
    17     
    18     
    19     return 0;

    结构体定义:

     1 struct student
     2 {
     3     int num;
     4     char name[20];
     5     char sex;
     6     int  age;
     7     float score[3];
     8     float total;
     9     float ave;
    10 };

    count()子函数:

    1 void count(struct student * b,int n) {
    2     int i,j;
    3     for(i=0;i<n;i++) {
    4         for(j=0;j<3;j++)
    5             b[i].total+= b[i].score[j];
    6             b[i].ave=b[i].total/3;
    7             }
    8 }
  • 相关阅读:
    站立会议02(冲刺2)
    站立会议01(冲刺2)
    测试计划
    cnblogs.com用户体验
    对其他组所提建议的回复(第一阶段)
    对各个小组的评论和一些建议
    团队会议第十天
    团队绩效评估规划
    团队会议第九天
    每日scrum(1)
  • 原文地址:https://www.cnblogs.com/jiwangbujiu/p/5294607.html
Copyright © 2011-2022 走看看