3.输入两个正整数 m 和n,求其最大公约数和最小公倍数
卡壳在算法;
4.输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
代码:
#include<stdio.h>
int main()
{
printf("请输入一段字符:\n");
int letter=0,space=0,num=0,other=0;
char c;
while((c=getchar())!='\n')
{
if(c>='a'&&c<='z'||c>='A'&&c<='Z')
{letter++;}
else if(c>='0'&&c<='9')
{num++;}
else if(c==' ')
{space++;}
else
{other++;}
}
printf("字母一共%d个\n空格一共%d个\n数字一共%d个\n其他符号一共%d个\n",letter,space,num,other);
return 0;
}
一开始结果有错,统计的其他字符数量比实际的多。这个时候写的是 if else else else else
后面改成了if /else if/else if/else if/else 就正常了
5.代码:
#include<stdio.h>
#include<math.h>
int main()
{
int a,n;
int temp=0;
int sum=0;
printf("请输入一个a的值:\n");
scanf("%d",&a);
printf("请输入一个n的值:\n");
scanf("%d",&n);
for(int i=0;i<n;i++)
{temp=10*temp+a;
sum=temp+sum;}
printf("sum2=%d\n",sum);
return 0;
}
算法卡了好久,没理解t=t*10+a;一直以为是t=10*i+a,感觉不对劲,又搞了 t=pow(10,i)+a,后面是vscode有点问题,也没有验证,反正t=t*10+a是对的。
代码:
1 #include<stdio.h>
2 int main()
3 {
4 int i;
5 int s=0,x=1;
6 for(i=1;i<=20;i++)
7 {
8 x=x*i;
9 s=x+s;
10 }
11 printf("sum=%d\n",s);
12 return 0;
13 }
结果:
一些问题:一开始忘记给sum,x赋初值,所以出来的结果都是随机的。
后面注释的是我本来想写个阶乘函数,然后在主函数调用,但是好像并不需要这么复杂,我也不会搞这个,就注释掉了。
还有一个注意的地方,double如果变成int,结果会从上面变成下面:
后面把double改成long int,结果也是正确的。注意相应要改成%ld
7.
代码:
1 #include<stdio.h>
2 int main()
3 {
4 double s1=0,s2=0,s3=0;
5 int i=1;
6 for(i=1;i<=100;i++)
7 {
8 s1=s1+i;
9 }
10 for(i=1;i<=50;i++)
11 {
12 s2=s2+i*i;
13 }
14 for(i=1;i<=10;i++)
15 {
16 s3=s3+1.0/i;
17 }
18 printf("%.5f\n",s1+s2+s3);
19 return 0;
20 }
21
结果:
可以看到上面的结果是47976.00000,下面的结果正确,因为把1/k改成了1.0/k;
8.盗版印刷错误,是153=1的三次方+5的三次方+3的三次方。我说怎么看不懂呢。
注意:12.3%10会报错,但是x/10%10,给x赋值123,结果会是2.我还不知道是为什么,但是问题不大。
代码:
1 #include<stdio.h>
2 int main()
3 {
4
5 for(int i=100;i<1000;i++)
6 {
7 int a,b,c;
8 a=i/100;
9 b=(i/10)%10;
10 c=i%10;
11 if(a*a*a+b*b*b+c*c*c==i)
12 printf("%d是水仙数\n",i);
13 }
14 return 0;
15 }
16
结果:
一些问题:在for循环里面,我定义了一个i,然后就是没有出现结果。
发现可以在for括号后面,定义i,很方便,for(int i=100;i<1000;i++)。
9.
代码:
#include<stdio.h>
int main()
{
int i, j, sum; /* i表示要判断的数,j表示因子,sum表示因子之和*/
for (i = 2; i <= 1000; i++)
{
sum = 1;
for (j = 2; j <= i / 2; j++)
if (i%j == 0) /* 判断i能否被j整除,能的话j即为因子 因子不包括自身 */
sum += j;
if (sum == i) /* 判断此数是否等于因子之和 */
{
printf("%d its factors are 1, ", i); /* 输出该数 */
for (j = 2; j <= i / 2; j++)
if (i%j == 0)printf("%d, ", j); /* 输出因子 */
printf("\n");
}
}
return 0;
}
结果:
10.
1 #include<stdio.h>
2 int main()
3 {
4 double a=2,b=1,sum=0,temp;
5 for(int i=1;i<=20;i++)
6 {
7 sum=a/b+sum;
8 temp=a;
9 a=a+b;
10 b=temp;
11 }
12 printf("%f",sum);
13 printf("\n");
14 return 0;
15 }
结果:
代码:
1 #include<stdio.h>
2 int main()
3 {
4 double total_m=100,total_sum=0.0;
5 for(int i=0;i<10;i++)
6 {
7 total_sum+=total_m;
8 total_m/=2;
9 total_sum+=total_m;
10 }
11 total_sum-=total_m;
12 printf("共经历%f米,弹起来%f米\n",total_sum,total_m);
13 return 0;
14 }
结果:
代码:
1 #include<stdio.h>
2 int main()
3 {
4 int sum=1;
5 for(int i=9;i>0;i--)
6 {
7 sum=(sum+1)*2;
8 }
9 printf("有%d个桃子\n",sum);
10 return 0;
11 }
12
结果:
13. while(fabs(x0-x1)>=le-5);
fabs求绝对值的函数,1e-5指10的五次方。
代码:
1 #include<stdio.h>
2 #include<math.h>
3 int main()
4 {
5 float a,x0,x1;
6 printf("输入正数:");
7 scanf("%f",&a);
8 x0=a/2;
9 x1=(x0+a/x0)/2;
10 do
11 {
12 x0=x1;
13 x1=(x0+a/x0)/2;
14 }
15 while(fabs(x0-x1)>=1e-5);
16 printf("[%f]的平方根为[%f]",a,x1);
17 return 0;
18 }
结果: