前言
博主在几年前的C语言后中,结合自身学习情况和学习感悟在当时的一个寒假做了两份C语言学习的经验总结,分别为 《C语言学习基本框架》 和 《C语言学习基础程序》,
现在把它们分享出来,供大家交流学习,如果能给初学C语言的小伙伴们提供一些帮助也是不错的,想当初我也是从C语言的折磨中走出来的,吼吼吼!
一、常见练习题
1. 计算1!+2!+n!
思路:运用两层for循环,一层进行阶乘计算,一层进行加法运算.
#include
int main()
{
int n,i,j,k=1,s=0;
printf("请输入项数:\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
k=1;
for(j=1;j<=i;j++)
{
k=k*j;
}
s=s+k;
}
printf("结果=%d\n",s);
return 0; }
2. 计算斐波那列数列第n项
思路:先对项数进行判断,分为两部分计算,第二部分运用递归的思想.
#include
int main()
{
int n,i,f,f1=1,f2=1;
printf("请输入项数:\n");
scanf("%d",&n);
if(n<=2)
f=1;
else
for(i=3;i<=n;i++)
{
f=f1+f2;
f1=f2;
f2=f;
}
printf("结果=%d\n",f);
return 0;
}
3. 爱因斯坦阶梯问题
思路:通过while循环判断,不断增加倍数,直至循环结束.
#include
int main()
{
int x=7,i=1;
while(!((x%2==1)&&(x%3==2)&&(x%5==4)&&(x%6==5)))
{
i++;
x=7*i;
}
printf("%d\t",x);
return 0;
}
4. 求勾股数
思路:通过三层for循环依次递增,再运用if语句进行判断.
#include
int main()
{
int x,y,z,k=0;
for(x=1;x<100;x++)
{
for(y=1;y<100;y++)
{
for(z=1;z<100;z++)
{
if(x*x+y*y==z*z&&x<y&&y<z)< p=""></y&&y<z)<>
printf("x=%dy=%dz=%d\n",x,y,z),k++;
}
}
}
printf("%d\n",k);
return 0;
}
5. 百钱百鸡问题
思路:通过三层for循环将鸡翁,鸡母,鸡雏依次递增,在运用if语句进行两个条件合并判断.
#include
int main()
{
int x,y,z;
for(x=1;x<=20;x++)
{
for(y=1;y<=33;y++)
{
for(z=1;z<=100;z++)
{
if(15*x+9*y+z==300&&x+y+z==100)
printf("公鸡:%d母鸡:%d鸡雏:%d\n",x,y,z);
}
}
}
return 0;
}
6. 编写函数,一趟循环,找出数组的最大元素和最小元素
思路:以a[0]为比较元素,与数组其他元素依次判断,如果大于则记录max,如果小于则记录min.
#include<stdio.h>
void max_min(int p[]);
int main()
{
int a[10],i;
printf("input 10 integers:\n");
for(i=0;i<10;++i)
scanf("%d",&a[i]);
max_min(a);
return 0;
}
void max_min(int p[])
{
int i,max=0,min=0;
for (i=0;i<10;i++)
{
if(p[max]<p[i])
max=i;
if(p[min]>p[i])
min=i;
}
printf("最大值=%d\t最小值=%d\n",p[max],p[min]);
}
7. 编写函数,倒排数组元素
思路:将数组元素分为前后两个部分,然后两个部分头尾对应函数依次交换. 解法:
#include <stdio.h>
void RevertToSelf(int p[],int n);
int main()
{
int a[6],i;
printf("input 6 integers:\n");
for (i=0;i<6;i++)
{
scanf("%d",&a[i]);
}
printf("倒排后:\n");
RevertToSelf(a,