黑马程序员技术交流社区
标题: 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 |