本帖最后由 谢天成老师 于 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; } |