个人C语言笔记

来源:互联网 发布:球球大作战java源代码 编辑:程序博客网 时间:2024/04/29 21:27

14 .输入10个整数,排序并输出排序后的数列。(一维数组的经典案例)

#include <stdio.h>

#include<stdlib.h>

main()

{

    int i, j, p, q, s, a[10];                /*输入的时候加上空格*/

    printf("\n请输入十个数字:\n");

    for (i = 0; i < 10; i++)                 /*for循环赋赋值*/

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

    for (i = 0; i < 10; i++)                 /*for循环用于排序,采用逐个比较的方法(注:外循环10次,内循环9次,一共循环90次!)*/

    {

         p = i; q = a[i];                     /*将元素a[i]的下标保存在变量p中,元素a[i]的数值保存在q中,然后进入内循环*/

         for (j = i + 1; j < 10; j++)         /*此语句意思是从第二项开始,前一项与后一项逐渐比较大小*/

         if (q < a[j])                        /*若成立,则大值将其下标送给p,数值送给q。*/

         {

             p = j; q = a[j];                 /*一次循环结束后(这里说的一次循环是指内循环进行了9次,已经找到最大数,而外循环只进行一次!),p的值即为最大元素的下标,q即为最大元素的数值,*/

         }

         if (i != p)                          /*若此时i≠p,说明p,q均不是进入内循环之前所赋的值 ,于是a[i]和a[j]交换,并输出a[i],此时a[i]已排序完;如果i=p,说明“if (q < a[j])”不成立,即q>=a[j],则不交换,直接输出a[i]*/

         {

             s = a[i];

             a[i] = a[p];

             a[p] = s;

         }

         printf("%d\t", a[i]);               /*注意这个printf仍在for语句里*/

    }

    system("pause");

}

 

15 .一个班有50个人,每个人有三门课的考试成绩。求全班分科的平均成绩和每个学生的总成绩。(二维数组的经典案例,以三名学生为例)

#include <stdio.h>

#include<stdlib.h>

#define N 4

main()

{

    int i, j, s = 0, v[3], a[N][4];/*a[N][4]用来存放每个人的成绩,v[3]存放各科平均成绩, a[N][4]可以表示4*N个数据*/

    printf("请输入学生成绩:\n");

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

    {

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

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

         a[i][3]=0;               /*初始化数组,这里是给a[i][3]赋值(必须放在这!!作用是给数组赋值时所有人的初始总分都为“0”!!!)*/

    }

    for (j = 0; j< 3; j++)        /*这里j范围限定为0-3,可以理解为a[N][4]虽然是N*4的矩阵,但是这里只取N*3的那部分。*/

    {

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

         {

             s = s + a[i][j];

             a[i][3] += a[i][j];

         }

         v[j] = s / N;

         s = 0;                  /*中间求和变量s清零,以便再循环*/

    }

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

         printf("编号:%d  总分%d\n", i + 1, a[i][3]);

    printf("第一门平均分:%d\n第二门平均分:%d\n第三门平均分:%d\n", v[0], v[1], v[2]);

    system("pause");

}

 

理解方法:相当于一个表格

 

科目1

科目2

科目3

总分

编号1

10

20

30

0

编号2

10

20

30

0

编号3

10

20

30

0

a[i][j]=a[编号1][科目1]=10

当外循环j=0时,内循环开始计算科目1的总成绩(循环50次计算一科),一共循环150次后,也计算出每一个的a[i][3](总分)了,并写入数字,最后挨个输出。错误!未定义书签。

 

16 .输入a,b两个整数,按先大后小的顺序输出a,b。(指针,不交换整形变量的值,而是交换指针变量的值)

#include<stdio.h>

#include<stdlib.h>

main()

{

    int *p1, *p2, *p, a, b;

    printf("请输入两个整数:");

    scanf_s("%d,%d", &a, &b);           /*输入方式与sanf保持一致,用逗号分隔,而不是空格*/

    p1 = &a;

    p2 = &b;

    if (a < b)

    {

         P1=&b;p2=&a;                      /*直接取地址赋值,更高效,实际a,b的值并未交换*/

    }

    printf("a=%d,b=%d\n", a, b);

    printf("最大值=%d,最小值=%d\n",*p1, *p2);

    system("pause");

}

0 0
原创粉丝点击