湖科大信计专业大一下C语言实验简单30题
1、有一分数序列:2/1 , 3/2, 5/3, 8/5 …求这个序列的前20项之和为。
A、31.660259 B、331.660259 C、332.660259 D、32.660259
//有一分数序列:2/1 , 3/2, 5/3, 8/5 …求这个序列的前20项之和为。
/* 解析:我们很容易观察到第一项分子为2,第一项分母为1
而从此开始,后一项的 分子 是前一项的(分子+分母),后一项的分母是前一项的分子。*/
#include<stdio.h>
int main()
{
//因为分数一般不是整数,所以我设为double类型
double a=2;//第一项分子的值
double b=1;//第一项分母的值
double sum=0;//题目要求求和值,所以我定义和值为sum,求和肯定要有最初的值,初始和值为0
double temp=0;//临时变量
for(int i=1;i<=20;i++)
{
//double temp=0;//临时变量
sum+=a/b;//i每变化一下sum就加一个(sum=sum+a/b)
temp=a;//先令临时变量=前一个分子
a+=b;//后一个分子=前一个分子加上前一个分母(a=a+b)
b=temp;//后一个分母等于前一个分子,而前一个分子是此时的临时变量
}
printf("%lf",sum);//double类型用lf
}
2、设某4位数的各位数字的平方和等于100,问:
1)共有多少个这种4位数;
2)最大的那个数。
A)47,9331 B) 47,9332 C)49,9331 D) 49,9332
//第二题
/*、设某4位数的各位数字的平方和等于100,问:
1)共有多少个这种4位数;
2)最大的那个数。
*/
/*四位数肯定是大于等于1000,小于等于9999的。 要计算各位数字的平方和,那就首先要知道每位数是多少 */
#include<stdio.h>
int main()
{
int number;//定义这个数是叫number
int a,b,c,d;//定义千位,百位,十位,个位;
int count=0;//记个数
for(number=1000;number<10000;number++)
{
//各个位数与number的等式关系要在for结构里面写,不能定义的时候就指明了
//每位数如何用数学语言来表示可以在脑袋里举出一个每位数都不相同的一个四位数为例子来想,例如1234
a=number/1000;
b=(number/100)%10;
c=(number%100)/10;
d=number%10;
if(a*a+b*b+c*c+d*d==100)//题目的限制是各个数字平方和为100,记得是==号
{
count++;//满足条件则计数增加
printf("%d ",number);//把所有的数字输出出来,自然就知道哪个数最大,一般通过循环求一系列数字都是从小到大排列或者从大到小
}
}
printf("\n");
printf("个数为%d\n",count);
}
3、输出2000内的素数个数并求所有素数之和(1除外)。
A、277049 303 B、277050 303
C、277049 302 D、277050 302
//输出2000内的素数个数并求所有素数之和(1除外)
/* 素数,只能被1和自己本身整除。 */
#include<stdio.h>
#include<math.h>
int main()
{
int i,j;//定义两个数,i从2开始增,为需要被判断是否是素数的那个数,j是帮助判断i的那个辅助数
int sum=0;//求总数和,求所有素数之和就需要求和,用sum更直观,自己后面看也看得更明白(要判断了是素数才加上)
int count=0;//求素数的个数,满足是素数的条件即加1
//2000以内,所以从2到2000
for(i=2;i<2000;i++)
{
for(j=2;j<2000;j++)
{
//i不动,j递增,当j=0后跳出for(j)
//也就是例如当i=7时,对j循环,j从2开始慢慢增加,满足if条件后则跳出了for(j),
if(i%j==0)
break;
}
//跳出for(j)后j的值小于i,则j是i的因子(例如i=9,j=3时,满足i%j==0,这样时j<i,所以i=9不是素数),也就是i不是素数;否则i是素数
if(j>=i)//为什么要写进j>=i,而不是j=i?其实j最多到i就已经满足了i%j==0这个条件,此时j是等于i的,我们可以写if为j>=i或者j==i,注意不是j=i
{
sum+=i;//满足了上述if条件的i是素数,则加到求和值里面
count++;//是素数则统计素数个数的count加1
}
}
printf("总数和是%d,个数是%d",sum,count);
}
4、四位正整数,末位是3且被7整除的数,问有多少个这种数的个数
A、127 B、128 C、129 D、130
//四位正整数,末位是3且被7整除的数,问有多少个这种数的个数
/*求个数必有计数count,设满足条件的数为num,四位数是大于等于1000,小于10000的*/
#include<stdio.h>
int main()
{
int num;
int count=0;//数个数
for(num=1000;num<10000;num++)
{
int end=num%10;//定义个位数字
if(end==3&&(num%7)==0)//利用&&并且符号,个位数为3,同时该数整除7,即num%7==0
{
count++;//满足条件即计数加1
}
}
printf("%d",count);
}
5、编程计算1!+2!+3!+……10!
A)4037911 B)4037912 C)4037913 D)4037914
//编程计算1!+2!+3!+……10!
//我把编程改了一下,求1!加到n!的和,n靠我自己输入
//考虑到循环时for(i=1;i<=10;i++)时i每次循环增加1,类似于下一个阶层值等于上一个阶乘值乘以变化的新数字
#include <stdio.h>
int main()
{
int a=1,i;
int sum=0;
int n;
scanf("%d",&n);
for (i=1;i<=n;i++)
{
//每次循环都是上一个数的阶乘乘以下一个数,把它们加起来就行了
a*=i;//比如开始是1!=1*1,然后2!=2*1!,然后3!=3*2!……(a=a*i)
sum=sum+a;//开始是(和1)=0+1!,然后是(和2)=和1+2!,然后是(和3)=和2+3!
}
printf("1!+2!+3!+...+%d!=%d\n",n,sum);
}
6、倒勾股数是满足下列公式:1/A2+1/B2=1/C2(设A>B>C)的一组(3个)整数(A,B,C),例如,(165,65,60)是倒勾股数,因为:1/1562+1/652=1/602,A,B,C之和小于100倒勾股数的有多少组?
A、1 B、2 C、3 D、4
/*倒勾股数是满足下列公式:1/A^2+1/B^2=1/C^2(设A>B>C)的一组(3个)整数(A,B,C),
例如,(156,65,60)是倒勾股数,因为:1/156^2+1/65^2=1/60^2,A,B,C之和小于100倒勾股数的有多少组?
*/
//A,B,C之和小于100
//题目有限制,A,B,C之和小于100,且A>B>C,我们采用多重循环嵌套的方式
#include<stdio.h>
int main()
{
int count=0;//记个数用的
for(int C=1;C<=100;C++)//C最小,所以我们确定C
{
for(int B=C+1;B<=100;B++)//B>C,所以B从C+1开始
{
for(int A=B+1;A<=100;A++)//A>B,所以A从B+1开始
{
if(1.0/(A*A)+1.0/(B*B)-1.0/(C*C)==0&&A+B+C<=100)//满足的公式,因为上面定义的A,B,C三个数都是整数,所以要想分数有意义,需要进行类型转化
// 转化的方法有很多,有将1/某个数 转化成 1.0/某个数,这样可以将整数型转化为浮点数型。还有一种就是前面定义int时改成float或者double
{
count++;
}
}
}
}
printf("A,B,C之和小于100的倒勾股数有 %d 组",count);
}
//我还是推荐你们写for循环的时候要带上花括号{},因为很多时候你们加加减减各种的修改有{}会很好用
7、其平方等于某两个正整数平方之和的正整数称为弦数。
例如,由于32+42=5^2 ,因此,5为弦数。求[121,300]之间:弦数的数目
A、97 B、98 C、79 D、179
/*其平方等于某两个正整数平方之和的正整数称为弦数。
例如,由于3^2+4^2=5^2 ,因此,5为弦数。求[121,300]之间:弦数的数目 */
#include <stdio.h>
int main()
{
int a,b,c;//类似于定义三角形的三条边
int temp=0;
int count=0;
for(c=121;c<=300;c++)//题目要求的c的范围
{
for(a=1;a<=c;a++)//a从1开始增,此时在该循环过程中c已经不变
{
for(b=c;b>=1;b--)//b从c开始减,此时在该循环过程中a,c都不变,目的是找合适的b
{
if(a*a+b*b==c*c)
{
printf("%d ",c);
count++;//求得满足条件等式的一组a,b,c,则个数增加一个
temp=1;//此时赋值temp值为1
break;//跳出b,目的是为了避免又重复计数c的值
}
}
if(temp==1)
{
break;
}
}
temp=0;//最后别忘了把temp变回0
}
printf("\n");
printf("个数为%d",count);
}
8、设一个非线性方程f(x)=0,求方程的根的牛顿迭代公式为:x(n+1)=x(n)-f(x(n))/f’(x(n))
请编程求方程f(x)=xsinx-1在[0,2]中的零点(精确到1E-5)。
A)1.114157 B)0.391021 C) 1.314729 D)-0.391021
/*设一个非线性方程f(x)=0,求方程的根的牛顿迭代公式为:x(n+1)=x(n)-f(x(n))/f'(x(n))
请编程求方程f(x)=xsinx-1在[0,2]中的零点(精确到1E-5)。*/
#include<stdio.h>
#include<math.h>
int main()
{
double x1=0,x2=2,fx1,fx2;//fx1为原函数,fx2为导函数
while(fabs(x2-x1)>1e-5)//当x2-x1的绝对值大于10的-5次方(fabs是math.h里面的函数,意思是绝对值)
//|x2-x1|<=1E-5时停止循环,这时就有零点了
{
x1=fabs(x1+x2)/2;//新的x1为x1+x2和的一半
fx1=x1*sin(x1)-1;//原函数
fx2=sin(x1)+x1*cos(x1);//导函数
x2=x1-fx1/fx2; //得到新的x2
}
printf("%.6lf\n",x2);
return 0;
}
9、编程计算1!+2!+3!+……11!
A) 43954713 B) 43954714 C) 43954715 D) 43954716
//编程计算1!+2!+3!+……11!
//直接看第五题
#include <stdio.h>
int main()
{
int a=1,i;
int sum=0;
for (i=1;i<12;i++)
{
//每次循环都是上一个数的阶乘乘以下一个数,把它们加起来就行了
a*=i;//比如开始是1!=1*1,然后2!=2*1!,然后3!=3*2!……
sum=sum+a;//开始是和1=0+1!,然后是和2=和1+2!,然后是和3=和2+3!
}
printf("1!+2!+3!+...+10!+11!=%d\n",sum);
}
10、若两素数之差为2,则称该两素数为双胞胎数,求出[2,300]之内有多少对双胞胎数。
A)16 B)17 C)18 D)19
//若两素数之差为2,则称该两素数为双胞胎数,求出[2,300]之内有多少对双胞胎数。
//由题目可知,要想判断双胞胎数,首先得判断是不是素数,如何判断素数,请参考前面第三题,记住步骤,第三题我写的很清楚
#include<stdio.h>
int main()
{
int x,a,b,count=0,i=2,j=2;
for(x=2;x<=300;x++)//循环被除数筛选素数
{
for(i=2;i<x;i++)//筛选素数
{
if(x%i==0)//非素数
break;
}
if(i==x)//x是素数。第三题那里我用的是i>=x;
{
a=i;//这个时候已经知道了i=x是素数
b=a+2;//令a+2辅助给b,也就是b=i+2
for(j=2;j<=b;j++)//筛选素数,这里我们就要判断b是不是素数了
{
if(b%j==0)//非素数
break;
}
if(j==b)
{
printf("%d\t%d\n",a,b);
count++;//如果b是素数的话,则对数增加1
}
}
}
printf("\n共%d对。",count);
}
11、求出[2,478]以内的所有素数之和
A)19580 B)15980 C)19850 D)15890
//求出[2,478]以内的所有素数之和
//参考第三题
#include<stdio.h>
#include<math.h>
int main()
{
int i,j;//定义两个数,i为被判断的数,j为辅助判断的数
int sum=0;//求总数和
int count=0;//求个数
for(i=2;i<478;i++)
{
for(j=2;j<478;j++)
{
//i不动,j递增,当j=0后跳出for(j)
if(i%j==0)
break;
}
//跳出for(j)后j的值小于i,则j是i的因子,也就是i不是素数;否则i是素数
if(j>=i)//也可以是j==i
{
sum+=i;
count++;
}
}
printf("总数和是%d,个数是%d",sum,count);
}
12、所谓"水仙花数"指一个三位数,其各位数字立方和等于该数本身。(例如:153是一"水仙花数",因为153=13+33+5^3)。编一程序,求出[100,999]中所有水仙花数的和。
A) 1301 B)1302 C)1303 D)1304
//我这个程序是把水仙花数是哪几个也打印出来了
//narcissistic_Number是水仙花数的意思,别被这个东西吓到了,我只是因为想写注释让你看的更清楚,所以查了英文
/*所谓"水仙花数"指一个三位数,其各位数字立方和等于该数本身。
(例如:153是一"水仙花数",因为153=1^3+3^3+5^3)。编一程序,求出[100,999]中所有水仙花数的和*/
#include<stdio.h>
int main()
{
int i,j,k,narcissistic_Number;//定义整型变量 ,水仙花,三位数,所以有百位,十位,个位
int sum=0;
printf("水仙花数是:\n");//提示语句
//我们这里要测试的100~999之间的水仙花数
for(narcissistic_Number=100;narcissistic_Number<=999;narcissistic_Number++)
{
i=narcissistic_Number/100;//百位数字
j=narcissistic_Number/10-i*10;//十位数字
k=narcissistic_Number%10;//个位数字
if(narcissistic_Number==i*i*i+j*j*j+k*k*k)//符合其各位数字立方和等于该数本身,最好写narcissistic_Number==i*i*i+j*j*j+k*k*k,而不是等号两边为止交换了的那种形式
{
printf("%d ",narcissistic_Number);//输出这个数
sum+=narcissistic_Number;
}
}
printf("\n");//换行
printf("其和为%d",sum);
return 0;//主函数返回值为0
}
13、回文数是指正读和反读都一样的数,如121等都是回文数,求[100,999]以内的所有回文数。
A) 50 B) 68 C) 80 D) 90
//回文数是指正读和反读都一样的数,如121等都是回文数,求[100,999]以内的所有回文数。
//分析可知100—————999内的回文数百位数和个位数相同
#include<stdio.h>
int main()
{
int number;//定义这个数字位number 这样是不是方便理解一些,比定义什么a,b,i,j这种单调的更好让人看懂,是不是呀,两位宝贝!!!
int count=0;//计数用
for(number=100;number<=999;number++)//遍历范围从100到999
{
if((number/100)==(number%10))//如果百位数字等于个位数字即满足条件,则计数增加一个
{
printf("%d ",number);
count++;
}
}
printf("\n");
printf("个数是%d",count);//打印个数
}
14、求[100,999]之间能被21整除的数的个数
A)40 B)41 C)42 D)43
//求[100,999]之间能被21整除的数的个数
//这个题最简单,我就不给思路了
#include<stdio.h>
int main()
{
int number;
int count;
for(number=100;number<=999;number++)
{
if(number%21==0)//能被21整除
{
count++;
}
}
printf("个数为%d",count);
}
15、一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下,
求它在10次落地时,共经过()米
A、199.609375 B、199.902344 C、199.804688 D、199.60378
/*一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下,
求它在10次落地时,共经过()米*/
//这是这个程序的答案,但是我认为第十五题那四个选项都不是答案,按老师说法1改成2应该选A
//分析一下下降100;反弹50,下降50;反弹25,下降25;反弹12.5,下降12.5;
//所以第一次落地后,每次落地都是两倍
#include<stdio.h>
int main()
{
float mi=100;//最开始的初始高度是100
int count;
float sum=100;//我定义的初始经过距离是100米
for(count=1;count<10;count++)//为什么定义是小于10呢?第一次落地前经过的100米已经算在了初始距离里面,那时已经是第一次落地了,还剩九次落地
{
mi=mi/2.0;//第一次反弹mi=100/2.0=50.0,第一次到地面到第二次到地面经过了(mi*2)
sum+=(mi*2);//所以sum加9次就有了十次落地的经过
}
printf("%f",sum);
}
//这题是三十题里面陷阱最多的一道题
//首先初始距离定义不对,你可能会得到b答案
/*其次mi=mi/2.0;
sum+=(mi*2);
这两个交换顺序或者for循环的次数不对你会得到C或者D的答案*/
//所以这一题的陷阱真的很大,最好多看一下我的这个解析,我是一步一步算出来的验证了的
16、由1,2,3,4,5组成的五位数(数字不重复),共有120个,由小到大排列,12345是第一个,54321是最后一个,问第99个数是几
A、51320 B、51327 C、51324 D、51326
/*由1,2,3,4,5组成的五位数(数字不重复),共有120个,由小到大排列,
12345是第一个,54321是最后一个,问第99个数是几 */
#include<stdio.h>
int main()
{
//5开头的数字有A(4,4)=24个
//4开头的数字有A(4,4)=24个
//3开头的数字有A(4,4)=24个
//2开头的数字有A(4,4)=24个
//1开头的数字有A(4,4)=24个
//1,2,3,4排完后已经排了24*4=96个
//所以第99个必然是5开头
//第99个第二位数必是1
//现在只剩234
//2,3,4,可以形成234,243,324,342,423,432
//所以第99个数是51324
int i,j,k,m,n;//分别是万位数字,千位数字,百位数字,十位数字,个位数字
int count=0;
for(i=1;i<=5;i++)//万位
{
for(j=1;j<=5;j++)//千位
{
for(k=1;k<=5;k++)//百位
{
for(m=1;m<=5;m++)//十位
{
for(n=1;n<=5;n++)//个位
{
if(i!=j&&i!=k&&i!=m&&i!=n&&j!=m&&j!=k&&j!=n&&k!=m&&k!=n&&m!=n)
//万位!=千位,万位!=百位,万位!=十位,万位!=个位,千位!=百位,千位!=十位,千位!=个位,百位!=十位,百位!=个位,十位!=个位
//有点类似于小学题目五个同学两两之间打电话有多少种情况
{
count++;
printf("第%d个数是%d\n",count,10000*i+1000*j+100*k+10*m+n);
}
}
}
}
}
}
}
//我之前就说了,按循环打印的遍历数字不是从小到大就是从大到小的排序方法,所以要求第99位数,通过计数为99时的输出就可以了
17、三位正整数,各位数字之和为14,求所有数之和
A、38462 B、38463 C、38464 D、38465
//三位正整数,各位数字之和为14,求所有数之和
#include<stdio.h>
int main()
{
int number;//定义题目中的三位数为number,不要随便定义,那样虽然可以用,但是你后面复习或者再看可能你自己都不清楚自己定义的是什么,丹宝贝懂了吗
int sum=0;//求和值并初始为0
for(number=100;number<=999;number++)//遍历100————999之间所有的三位数
{
int a=number/100;//百位数
int b=(number/10)%10;//十位数
int c=number%10;//个位数
if(a+b+c==14)//等于符号是==,不是=,我不知道你们谁会犯这样的错,但是我寝室付河川,吴国强,都有这样错误
{
sum+=number;//通过循环结构求所有数之和
}
}
printf("最后和为%d",sum);
}
18、应用ex=1+x+x2/2!+x3/3!+…(前20项的和),求e3=()
A、21.0855 B、20.0855 C、19.0855 D、18.0855
//应用e^x=1+x+x^2/2!+x^3/3!+…(前20项的和),求e^3=()
#include<stdio.h>
int main()
{
double sum;//和值,有分数肯定要用double或者sum,如何判断是不是用double或者float与int就看题目的选项有没有小数
double temp;//定义一个临时变量
int n;//阶乘
double x;//多少次方
//这里的x和n是要靠我们自己输入的,这样有个好处就是你想算其他次方的前n项和可以直接通过输入
//数据的不同来改,但是要记注不要太大,因为double也好int也好都是有范围的,超过了范围的需要用long坐前修饰一下
scanf("%lf %d",&x,&n);//x是次方,n就是阶乘;此题x为3,n为20;
temp=1;//初始化临时变量为1
sum=1;//e^x=1+……,所以初始必有1
int i;
for(i=1;i<n;i++)
{
temp=temp*(x/i);
sum=sum+temp;
//除1后的第一项为temp=1*x/1=x
//所以sum1就=1+x
//再然后第二项temp=x*x/2=(x^2)/2!
//所以sum2=1+x+(x^2)/2!
//再然后第三项temp=(x^2)/2!)*x/3=(x^3)/3!
//所以sum3=1+x+(x^2)/2!+(x^3)/3!
//……
//一直到第19个,加上原有的1那就是20项了
}
printf("%.6lf\n",sum);
return 0;
}
19、已知:
F(0)= F(2)=1
F(1)=0
F(N)=F(N-1)-2F(N-2)+F(N-3) (N>2)
求F(0)到F(200)之间零的个数
A) 2 B) 101 C)21 D) 12
/*、
已知:
F(0)= F(2)=1
F(1)=0
F(N)=F(N-1)-2F(N-2)+F(N-3) (N>2)
求F(0)到F(200)之间零的个数*/
#include<stdio.h>
int main()
{
int a[500];//定义一个可容纳500个元素的数组,多大都行,只要大于200就好
a[0]=1,a[1]=0;a[2]=1;//初始赋值,根据题目要求
int i;
int count=0;
for(i=3;i<=200;i++)
{
a[i]=a[i-1]-2*a[i-2]+a[i-3];//递推公式,例如i=3时a[3]=a[2]-2*a[1]+a[0];
}
//上面那个循环已经求出了数组里面的前200项
for(i=0;i<=200;i++)
{
if(a[i]==0)//满足条件值为0
{
count++;
}
}
printf("%d",count);
}
20、求[4,1500]范围内能被4整除,且其中至少有一位数字是8的数
总共有几个
A)122 B)123 C)124 D)125
//求[4,1500]范围内能被4整除,且其中至少有一位数字是8的数总共有几个
#include<stdio.h>
int main()
{
int num;//num为遍历4————1500的数
int count=0;
for(num=4;num<=1500;num++)
{
if(num%4==0&&(num%10==8||num/10%10==8||num/100%10==8))
//num%4==0满足被4整除这是条件A,至少有一位数字是8这是条件B,A与B是并列的关系,B里面含有几个小条件,小条件之间是或者的关系
// num%10==8 满足一位数,二位数,三位数,四位数的个位是8的情况
// num/10%10==8 满足二位数,三位数,四位数的十位数是8的情况
// num/100%10==8 满足三位数,四位数的百位数是8的情况
// 因为num值<1500 ,所以千位数字不可能是8
{
count++;//满足if条件则计数增加
}
}
printf("4———1500内满足条件的数有 %d 个",count);
}
21、二分法求方程xcosx-2=0在(pi,2pi)之间的根为( ),精确到1E-5。
A、4.114182 B、5.124182 C、5.114182 D、6.114182
//二分法求方程xcosx-2=0在(pi,2pi)之间的根为( ),精确到1E-5。
#include <stdio.h>
#include<math.h>
#define pi 3.14159 //宏定义pi的值
int f(double x)
{
return x*cos(x)-2;//要用到cos,肯定就需要头文件math.h
}
int main()
{
float a,b,c;/* 一般求函数值啊什么的,你们的变量最好都定义double或者float,
但请记得double对应lf,float对应f。*/
a=pi;
b=2*pi;
c=(a+b)/2;
//先把a和b代入f(x)里面可以得到f(a)<0,f(b)>0,由于a到b连续,所以必有一根位于a与b之间
while(f(c)!=0)//c便是我们要求的根,当f(c)的值不为0时,执行下面的操作
{
if(f(a)*f(c)<0)//如果其乘积小于0,则根在a与c之间
{
b=c; //此时新的b为原本的c值
c=(a+b)/2;//新的c为原本a(也是新a)与新b之和的一半
}
else //else就是f(a)*f(c))>0,这时根位于c和b之间
{
a=c;//此时新的a为原本的c值
c=(a+b)/2;//新的c为原本b(也是新b)与新a之和的一半
}
}
//直到满足了f(c)==0时停止了循环,此时的c值就是方程的根
printf("%lf",c);
}
//我运算的结果是5.497783,我也不知道哪里出了问题,你们看了自己试一下,告诉我哪里出错了
22、求出[100,500]以内同时满足除以7余5,除以5余3,除以3余1的所有整数的个数。
A) 1 B)2 C) 3 D) 4
//求出[100,500]以内同时满足除以7余5,除以5余3,除以3余1的所有整数的个数。
#include<stdio.h>
int main()
{
int num;//有规律的定义,计数就用count,某个数就用number或者num,多个数num1,num2,num3……,临时变量用temp;
int count=0;
for(num=100;num<=500;num++)
{
if(num%7==5&&num%5==3&&num%3==1)//同时满足用&&连接
count++;
}
printf("%d",count);
}
23、
, 其中X=0.37,n=0,1,2,3,…… , 当最后一项的绝对值小于10-6时,停止计算, 求Y值 (精确到小数点后第5位,四舍五入)。
A、0.68517 B、0.68519 C、0.68518 D、0.68520
// 1-x+x^2/2
#include<stdio.h>
#include<math.h>
#define x 0.37//题目说x为0.37,那我就宏定义x值为0.37
int main()
{
int n;//我定义的n是从1开始的,因为我最初的求和就有1;然后才减和加
float sum=1;//求和值,最后和为小数,所以要用float;
float y;//y的表达式在下面有,y也是小数,需要用float
for(n=1;(pow(x,n)/n)>0.000001;n++)//pow的值大于0.000001时才循环,当它小于等于0.000001时就停止了循环
{
y=pow(x,n)/n;
if(n%2!=0){
y=-y;
}
sum+=y;
}
printf("%.5f",sum);
}
24.运用如下公式计算圆周率的近似值,当最后一项的绝对值小于10-6时,停止计算。
,
求值.
A、3.141591 B、3.141592 C、3.141590 D、3.141593
/*运用如下公式计算圆周率的近似值,当最后一项的绝对值小于10-6时,停止计算。
,
求pi值.*/
#include<stdio.h>
#include<math.h>
int main()
{
double a=0.0,b=1.0,t=1.0;
for(int i=3;fabs(b)>1e-6;i+=2)//看清楚两位宝贝,这里是i+=2,不是i++
{
a+=b;
t=-t;//因为它的和是一正一负一正一负
b=t/i;
//开始时a=1.0,然后t=-1.0,b=-1.0/3
//进一步a=1.0+b=1.0-1.0/3 ,t=1.0 b=1.0/5
//进一步a=1.0+b=1.0-1.0/3+1.0/5, t=-1.0 b=-1.0/7
}
printf("PI=%.6f\n",4*a);
return 0;}
25.计算式子的值(精确到小数点后第4位,四舍五入)。
A、53.2495 B、53.2496 C、53.2497 D、53.2490
#include<stdio.h>
int main()
{
float sum=1;//初始化我赋值为1,是因为1同后面分数我认为是有不同的
float i=3;//对i和j的类型应该确立为浮点型,用int会最后时整数52.0000,不理解的话私聊我
float j=2;
for(i=3,j=2;i<=101,j<=100;i+=2,j+=2)
{
sum+=i/j;
}
printf("%.4f",sum);
}
26.求出100到300之间满足如下条件:
各位数字之和为12,数字之积为42
的数的个数。
A、5 B、3 C、4 D、6
#include<stdio.h>
int main()
{
int number;//定义遍历的数字
int count=0;//计数用
for(number=100;number<=400;number++)
{
int a=number/100;//百位数
int b=number/10%10;//十位数
int c=number%10;//个位数
if(a+b+c==12&&a*b*c==42)//并且的条件
{
count++;
}
}
printf("共有%d个满足条件的数",count);
}
27.编写程序,求1~100之间的全部同构数的个数。同构数是这样一组数;它出现在平方数的右边。例如:5是25的右边的数,25是625右边的数,5和25都是同构数。
A、5 B、3 C、4 D、6
//求1————100内的同构数
#include<stdio.h>
int main()
{
int count=0;
for(int i=1;i<100;i++)//i是遍历1--100的值
{
int num=i*i;//定义num=i*i;因为同构数满足平方的那个关系
if(i<10)
{
int a=num%10;//例如i=5时,num=25 ,num%10=5这个是符合同构数的,但是i=7,num=49,num%10=9 却不是同构数,所以需要下面的if帮忙
if(i==a)//当i==a时才是同构数
{
count++;
printf("%2d是%4d的同构数\n",i,num);
}
}
else if(i>=10&&i<100)//此时i是个二位数,需要二位数等于num的后两位数字才行
{
int b=num%100;//同上面一位数是一样的情况
if(i==b)
{
count++;
printf("%2d是%4d的同构数\n",i,num);
}
}
}
printf("1--100内共有%d个同构数",count);
}
28.写一个函数计算2016以内最大的10个能被13或17整除的自然数之和。
A、19786 B、19766 C、19767 D、19788
#include<stdio.h>
int fun(int k){
int sum=0,mc=1;
int count = 0;
printf("k以内的10个能被13或17整除的自然数:\n");
while((k >= 2)&&(mc <= 10)){
if((k % 13 == 0)||(k % 17 == 0))//当k整除13或者17时
{
sum+=k;
mc ++;//mc从1开始输出十个后到了10就停止了循环
count ++;
//输出能被13或17整除的自然数
printf("\n");//换行看得更清晰
printf("k = %d",k);//打印k
}
k --;//k--代表着从你输入的数字k=2016开始依次递减输出10个数,这样保证了输出的十个数字是最大的
}
//2016以内的10个能被13或17整除的自然数的和
printf("\n");//换行
printf("k以内的10个能被13或17整除的自然数的和: m = %d\n\n",sum);
return sum;
}
int main(){
fun(2016);
}
29.编写一个程序,求出1~100之间所有每位数的乘积大于每位数的和的数(例如:98满足9*8>9+8),则所有满足条件的数的和为( )
A、3876 B、3976 C、3768 D、3850
#include <stdio.h>
int main()
{
int i,a,b;
int sum=0;
for(i=1;i<=100;i++)
{
a=i%10;//个位数
b=i/10%10;//十位数
//从题目的分析中我们可以看出这个数必然是一个二位数字,所以我自动忽略了一位数和100这个三位数
//前面有好几个程序跟这一样,如果看不懂或者有疑问,两位宝贝就到群里说
if((a*b)>(a+b))//题目的条件限制
{
sum+=i;
}
}
printf("其和值为%d",sum);
return 0;//这个return 0其实并没有太大用处,只是有人今天问我return 0的作用,一般c程序都会加一个return返回值,只不过我们经常省略了它
//具体的return 0你们可以在我之前发群里那个网站里面找到更好的解释
}
30.编写程序,按照下列的计算公式计算的值,当计算到第八项时,的值为( )
文章来源:https://www.toymoban.com/news/detail-478458.html
A、3.141376 B、3.14159 C、3.141278 D、3.141514文章来源地址https://www.toymoban.com/news/detail-478458.html
#include<stdio.h>
#include<math.h>
#define i 2.0
int main()
{
float product=2;//定义乘积初始值为2
float a[10];//定义分母为数组
a[1]=sqrt(2);//第一项(除去了初始值2度那个)
int j;
for(j=1;j<8;j++)
{
a[j]=sqrt(2+a[j-1]);//分母的后一项与前一项的关系
product*=i/a[j];
}
printf("%f",product);
}
到了这里,关于【C语言】湖科大信计专业大一下C语言实验简单30题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!