黑马程序员技术交流社区

标题: C语言一些经典题目练习和答案讲解 [打印本页]

作者: 谢天成老师    时间: 2016-3-28 17:22
标题: C语言一些经典题目练习和答案讲解
本帖最后由 谢天成老师 于 2016-3-28 18:42 编辑

              C语言一些经典题目练习和答案讲解

以下是对C语言流程控制(if、while、for循环)以及数组、指针、函数等练习。这些题目对于这些重要的知识点的理解很有帮助,所以整理了下。
1. 求1~10之间的所有偶数和

2. 输出100-200之间不能被3整除的数。
3. 循环录入某学员这个学期的5门课成绩,计算平均分。
4. 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次 落地时,共经过多少米?第10次反弹多高?
附加题:
5. 分别打印出如下图案(2组)
­­
6.写一个函数swap,接收2个整型参数,功能是互换两个实参的值   
7.//1.用四种不同的方法来访问数组的元素(遍历、用指针)
  int a[] = {10,20,30,40,50};
8. 从字符数组a中,拷贝到数组b中
         /*
              char a[] ="Hello";
              char b[10];
       */
9.定义一个函数,求两个数的最大值,使用函数指针调用此函数。另使用指针函数输出“黑马程序员”。
10. 写出下列结果,请列出你的求解过程
int a[5] = {1,2,3,4,5};
int *ptr = (int *)(a+1);
printf("%d,%d", *(a+1), *(ptr-1));
11. 通过指针遍历一个10个元素的数组,数组任意定义。
12. 输入两个数,交换两个数值的位置(使用指针、不使用指针两种方式)。
13. 求下列数组中偶数之和及偶数的平均值。

14. 有6个人坐在一起,问第6个人有多少岁,他说比第5个人大3岁;
问第5个人有多少岁,他说比第4个人大3岁;问第4个人有多少岁,
他说比第3个人大3岁;问第3个人有多少岁,他说比第2个人大3岁;
问第2个人有多少岁,他说比第1个人大3岁;问最后个人,他说是15    岁,那么,第6个人多少岁?


答案讲解:

/*-----------------------------------------1-5答案----------------------------------------------*/   
int main()
{
                //1.求1~10之间的所有偶数和
                /*
                int i = 0;
                int sum = 0;
                for (i = 0;i <= 10 ;i++)
                {
                               if (i % 2 == 0) {
                                               sum += i;
                               }
                }


                printf("sum = %d\n",sum);
                */
                //2.输出100-200之间不能被3整除的数。
                /*
                for (int i = 100;i < 201 ;i++)
                {
                               if (i % 3 == 0) {
                                               continue;
                               }
                               printf("i = %d\n",i);
                }
                */


                //3. 循环录入某学员这个学期的5门课成绩,计算平均分。
                /*
                int score = 0;
                int sum = 0;
                float avg = 0;
                for (int i = 1;i <=5 ;i++)
                {
                               printf("请输入第%d科的成绩:\n",i);
                               scanf("%d",&score);
                               sum += score;
                }
                avg = sum /5.0;
                printf("avg = %f\n",avg);
                */
                //4. 一球从100米高度自由落下,每次落地后反跳回原高度的一半;
                //再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
                /*
                float height = 100;
                int i = 0;
                float sum = 0;
                for (i = 0;i < 10;i++)
                {

                               //sum += height * 2;
                               //height = height / 2;


                               sum += height * 1.5;
                               height /= 2.0;
                }

                printf("第10次落地共经过%.4f\n第10次反弹的高度为%.4f\n",sum - height,height);
                */
                //5.分别打印出如下图案(2组) 附加题
                /*
                int num,i,j,k;
                printf("请输入行数\n");
                scanf("%d",&num);
                for (i = 0;i<num;i++)
                {

                               for (j = 0;j < abs(num / 2 -i);j++);
                               {
                                               printf(" ");
                               }


                               for (k = 0;k < num - 2 * j;k++)
                               {
                                               printf("*");
                               }
                               printf("\n");
                }
                */

                /*
                for (int i = 0; i < 7 ;i ++)
                {
                               if (i < 4) {
                                               for (int j = 0; j <i * 2 + 1;j++)
                                               {
                                                              printf("*");
                                               }
                               }else {
                                               for (int j = (7 - i) *2 - 1 ;j > 0;j--)
                                               {
                                                              printf("*");
                                               }
                               }

                               printf("\n");
                }
                */

                for (int i = 0; i < 4 ;i++)
                {
                               for (int j = 3 - i;j > 0;j-- )
                               {
                                               printf("");
                               }

                               for (int k = 0 ;k < i * 2 + 1;k++)
                               {
                                               printf("*");
                               }
                               printf("\n");
                }

                for (int i = 3;i > 0;i--)
                {
                               for (int j = 4 - i;j > 0;j--)
                               {
                                               printf("");
                               }
                               for (int k = 0;k < i * 2 - 1;k++ )
                               {
                                               printf("*");
                               }
                               printf("\n");
                }


                return 0;
}

/*---------------------------------------6-14答案----------------------------------------------*/
//1.写一个函数swap,接收2个整型参数,功能是互换两个实参的值
//void swap(int *a,int *b)
//{
//    int temp = *b;//20
//    *b = *a;
//    *a = temp;
//}

/*---------------------------------------------*/
//4.定义一个函数,求两个数的最大值,使用函数指针调用此函数。另使用指针函数输出“黑马程序员”。
//指针函数
/*
char *getName()
{
return "黑马程序员";
}
//定义一个函数
int sum (int a,int b)
{
return a + b;
}

//定义一个函数,求两个数的最大值,使用函数指针调用此函数
double getMax(double a,double b)
{
return a > b ? a : b;
}
*/

/*---------------------------------------------*/
//  8.求下列数组中偶数之和及偶数的平均值。
/*
void getAvgArray(int array[],int count)
{
int sum = 0;
int t = 0;//偶数的个数
for (int i = 0; i < count ;i++)
{
int value = array;
if (value % 2 == 0) {
t++;
sum += value;
}
}

printf("所有偶数的和为:%d\n",sum);
double avg = sum / (double)t;
printf("所有偶数的平均值:%f\n",avg);
}
*/
/*---------------------------------------------*/

int main()
{
// 1.定义两个变量
//    int v1 = 10 ;
//    int v2 = 20 ;
//    swap(&v1,&v2);
//    printf("v1 = %d,v2 =%d\n",v1,v2);

/*---------------------------------------------*/

//    2.用四种不同的方法来访问数组的元素
    /*
     int a[] = {10,20,30,40,50};

     //定义个指针p
     int *p = a;

     //a[1] *(a + 1)
     for(int i = 0;i < 5;i++)
     {
     printf("1.a[%d] = %d\n",i,a);
     printf("2.a[%d] = %d\n",i,*(a +i));
     printf("3.a[%d] = %d\n",i,*(p +i));
     printf("4.a[%d] = %d\n",i,p);
     }
     */
/*---------------------------------------------*/
//    3.从字符数组a中,拷贝到数组b中
    /*
     char a[] = "Hello";
     char b[10];
     */
    char a[] = "Hello";
    char b[0];
    for (int i = 0;i < 6;i++)
    {
        b = a;
    }
    printf("a = %s\n",a);
    printf("b = %s\n",b);
/*---------------------------------------------*/
//    4.定义一个函数,求两个数的最大值,使用函数指针调用此函数。另使用指针函数输出“黑马程序员”。
    /*
     //指针函数
     char *name = getName();
     printf("name = %s\n",name);
     //函数指针
     int (*p)(int a,int b) = sum;
     int c = (*p)(3,4);
     printf("c = %d\n",c);
     //定义一个函数,求两个数的最大值,使用函数指针调用此函数
     double (*max)(double a,double b) = getMax;
     double d = (*max)(10.5,11);
     printf("d = %f\n",d);
     */
/*---------------------------------------------*/
    /*5. 写出下列结果,请列出你的求解过程
     int a[5] = {1,2,3,4,5};
     int *ptr = (int *)(a+1);
     printf("%d,%d", *(a+1),*(ptr-1));*/
    /*
     //定义一个长度为5的数组并初始化
     int a[5] = {1,2,3,4,5};
     //定义一个int的指针->a(数组中第一个元素的地址) + 1就是指向下一个地址
     //(int *)把获得的地址强制转换为int * 类型的指针变量
     int *ptr = (int *)(a+1);
     //a + 1 表示第二个元素的地址,*取该地址里面的值
     //ptr - 1 表示第一个元素的地址,*取该地址里面的值
     printf("%d,%d", *(a+1),*(ptr-1));
     */
/*---------------------------------------------*/
    // 6. 通过指针遍历一个10个元素的数组,数组任意定义。
//。
//     int a[10] = {1,2,3,4,5,6,7,8,9,0};
//     int *p = a;
//     for (int i = 0;i < 10;i++)
//     {
//     printf("a[%d] = %d\n",i,*(a+i));
//     }
/*---------------------------------------------*/
     //7. 输入两个数,交换两个数值的位置(使用指针、不使用指针两种方式)。
    /*
     int i = 10;
     int j = 20;
     //1.使用指针
     //exchange(&i,&j);
     //2.
     //int temp = i;
     //i = j;
     //j = temp;
     //3.
     i = i + j;
     j = i - j;
     i = i - j;
     printf("i = %d,j = %d\n",i,j);
     */
/*---------------------------------------------*/
    // 8.求下列数组中偶数之和及偶数的平均值
    //int array[] = {9, 11, 101, 55, 99, 7, 24,77, 1, 23, 83, 54, 12};
    //getAvgArray(array,13);
/*---------------------------------------------*/
    // 9.
    /*有6个人坐在一起,问第6个人有多少岁,他说比第5个人大3岁;
    问第5个人有多少岁,他说比第4个人大3岁;问第4个人有多少岁,
    他说比第3个人大3岁;问第3个人有多少岁,他说比第2个人大3岁;
    问第2个人有多少岁,他说比第1个人大3岁;问最后个人,他说是15    岁,那么,第6个人多少岁?
*/
    /*
     int a[6];
     a[0] = 15;
     for (int i = 0;i < 6;i++)
     {
     a[i+1] = a + 3;
     }
     printf("第六个人的年龄为:%d\n",a[5]);
     */
/*---------------------------------------------*/
//    学习. 用宏定义一年有多少秒(平年)
//     #define PING_YEAR 365 * 24 * 60 * 60
    return 0;
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2