C语言程序设计实验与习题答案之令狐文艳创作

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2.程序填空
令狐文艳
(1)以下程序的功能是计算1~50之间能被7整除的整数之和。

#include<stdio.h>
void main()
{int i,sum= 0;
for(i=1; 50;i++)
if( i%7==0) sum+=i;
printf("sum=%d\n",sum);
}
(2) 下面程序接收来自键盘的输入,直到输入
<Ctrl>+Z(值为-1)键为止。

这些字符被原样输出,但若有连续一个以上的空格时只输出一个空格。

请填空。

#include <stdio.h>
void main()
{char cx;
char front=’’;
while ( (cx=getchar())!=’\n’)
{if (cx!=’’)
putchar(cx);
if (cx= =’’)
if (front!=’’)
putchar(cx);
front=cx;
}
}
3.程序改错
(1)下列程序的功能是求1+3+5+…99的和。

#include <stdio.h>
void main( )
{ int s,i; ★ //int s=0,i;
i=1;
while(i<=99)s=s+i;★ //{s=s+i;i++;}
printf("1+3+5+…99的和是:%d\n",s);
}
(2)下面程序的功能是输入一个正整数,判断是否是素数,若
为素数输出1,否则输出0。

#include <stdio.h>
void main()
{ int i,x,y=0; ★ //y=1
scanf("%d",&x);
for(i=2;i<=x/2&&y;i++)
if ((x%i)!=0) y=0; ★ //x%i==0
printf("%d\n",y);
}
4.设计性实验
(1)题
/* 方法(1)精度控制 */#include <stdio.h>#include
<math.h>main(){ int s; float
n,t,pi; t=1; pi=0; n=1.0; s=1; w hile((fabs(t))>=1e-
6) { pi=pi+t; n=n+2; s=-
s; t=s/n; } pi=pi*4; printf( "pi=%10.6f\n",pi);}/* 方法(2)次数控制*/#include
<stdio.h>#include <math.h>main(){ int
s; long times; float
n,t,pi; t=1; pi=0; n=1.0; s=1; for (times=1;times<=1e9;times++) { pi=pi+t; n=n+2; s=-
s; t=s/n; } pi=pi*4; printf( "pi=%10.6f\n",pi);}
(2)题
main(){ int i,j,frame; double
wheattal=0; double wheatfnu=1; printf("Please input frame’s
numbers:"); scanf("%d",&frame); for(i=0;i<frame;i+ +) { wheattal+=wheatfnu; wheatfnu+=wheatfnu; }
printf("\n Total wheattatol’s
timeter=%e\n",wheattal/1.40e8);}
(3)题
/*方法一:使用递推公式n=n+2*/
main(){ int i,n=1;
double
s=0,t=1; for(i=1;i<=20;i++) { t*=n; s+=t;
n+=2; } printf("s=%lf",s); getch();}
/*方法二:使用通项公式2*i+1*/
main(){ int i;
double
s=0,t=1; for(i=1;i<=20;i++) { t*=2*i+1; s+ =t; } printf("s=%lf",s); getch();}
/*方法三*/
#include "stdio.h"main(){long total,sum,m,n,t;total=0; for(m=1;m<=20;m++) { sum=1;t=1; for(n=1;n<=m ;n++) { sum=sum*t;
t=t+2;} total=total+sum; } printf("total=%ld", total);}
2.程序填空
(1)以下程序的功能是计算1~50之间能被7整除的整数之和。

#include<stdio.h>
void main()
{int i,sum= 0;
for(i=1; 50;i++)
if( i%7==0) sum+=i;
printf("sum=%d\n",sum);
}
(2) 下面程序接收来自键盘的输入,直到输入
<Ctrl>+Z(值为-1)键为止。

这些字符被原样输出,但若有连续一个以上的空格时只输出一个空格。

请填空。

#include <stdio.h>
void main()
{char cx;
char front=’’;
while ( (cx=getchar())!=’\n’)
{if (cx!=’’)
putchar(cx);
if (cx= =’’)
if (front!=’’)
putchar(cx);
front=cx;
}
}
3.程序改错
(1)下列程序的功能是求1+3+5+…99的和。

#include <stdio.h>
void main( )
{ int s,i; ★ //int s=0,i;
i=1;
while(i<=99)s=s+i;★ //{s=s+i;i++;}
printf("1+3+5+…99的和是:%d\n",s);
}
(2)下面程序的功能是输入一个正整数,判断是否是素数,若
为素数输出1,否则输出0。

#include <stdio.h>
void main()
{ int i,x,y=0; ★ //y=1
scanf("%d",&x);
for(i=2;i<=x/2&&y;i++)
if ((x%i)!=0) y=0; ★ //x%i==0
printf("%d\n",y);
}
4.设计性实验
(1)题
/* 方法(1)精度控制 */#include <stdio.h>#include
<math.h>main(){ int s; float
n,t,pi; t=1; pi=0; n=1.0; s=1; w hile((fabs(t))>=1e-
6) { pi=pi+t; n=n+2; s=-
s; t=s/n; } pi=pi*4; printf( "pi=%10.6f\n",pi);}/* 方法(2)次数控制*/#include
<stdio.h>#include <math.h>main(){ int
s; long times; float
n,t,pi; t=1; pi=0; n=1.0; s=1; for (times=1;times<=1e9;times++) { pi=pi+t; n=n+2; s=-
s; t=s/n; } pi=pi*4; printf( "pi=%10.6f\n",pi);}
(2)题
main(){ int i,j,frame; double
wheattal=0; double wheatfnu=1; printf("Please input frame’s
numbers:"); scanf("%d",&frame); for(i=0;i<frame;i+ +) { wheattal+=wheatfnu; wheatfnu+=wheatfnu; } printf("\n Total wheattatol’s
timeter=%e\n",wheattal/1.40e8);}
(3)题
/*方法一:使用递推公式n=n+2*/
main(){ int i,n=1;
double
s=0,t=1; for(i=1;i<=20;i++) { t*=n; s+=t;
n+=2; } printf("s=%lf",s); getch();}
/*方法二:使用通项公式2*i+1*/
main(){ int i;
double
s=0,t=1; for(i=1;i<=20;i++) { t*=2*i+1; s+ =t; } printf("s=%lf",s); getch();}
/*方法三*/
#include "stdio.h"main(){long total,sum,m,n,t;total=0; for(m=1;m<=20;m++) { sum=1;t=1; for(n=1;n<=m ;n++) { sum=sum*t;
t=t+2;} total=total+sum; } printf("total=%ld", total);}
2.程序填空
(1)求任意两个整数之间所有的素数。

#include <stdio.h>
void main()
{int i1,i2,i,j,flag;
printf("input two integer(i1,i2):");
scanf("%d%d", &i1 , &i2 );
printf("prime number:\n");
for(i= i1 ;i<= i2 ;i++)
{
flag=1;
for(j=2;j<=i-1;j++)
{
if(i%j==0)
{
flag= 0 ;
break;
}
}
if(flag==1)printf("%d\t",i);
}
printf("\n");
}
(2)以下程序的功能是输出下三角九九乘法表。

#include <stdio.h>
void main()
{ int i,j;
for(i=1;i<= 9;i++)
{ for(j=1;j<= i;j++)
printf("%d*%d=%d\t",i,j, i*j);
printf("\n");
}
}
3.程序改错
(1)下列程序的功能是输出所有的“水仙花数”。


谓“水仙花数”是指一个三位数,该数的各位数字立
方和等于该数本身的数。

例如:153是一个“水仙
花数”,因为153=13+53+33。

#include <stdio.h>
void main( )
{ int x,s,a;
for(s=0,x=100;x<1000;s=0,x++)★
{ a=x;
while(a!=0)
{ s=s+(a%10)*(a%10)*(a%10);★
a=a/10;
}
if(x==s) printf("%d " ,x);★
}
}
(2)以下程序的功能是输出1至1000之间的所有完数。

若一个整数等于该数的所有因子之和,则称该整数为完数。

#include <stdio.h>
void main()
{ int i,j;
int s;
for(i=1;i<=999; i++)
{s=1;★//s=0;
for(j=1;j<i-1;j++)★ //for(j=1;j<=i-
1;j++)
{if(i/j==0 ) s=s+j;}★ //i%j
if(s=i)printf("%5d",i);★ //s==i
}
}
4.设计性实验
main(){ int i,j,k,n=0; /*i,j,k分别代表三位整数的百位,十位,个位.n代表个数
*/ for(i=1;i<=9;i++) for(j=0;j<=9;j++) for(k=0;k<=9;k++) if(i*i*i+j*j* j+k*k*k==1099) /*在所有组合中找出满足指定条件的
*/ { print f("%4d",100*i+10*j+k); n++;
if(n%5==0) printf("\n"); /*表示每行输出5个数*/ }}
#include<stdio.h>#include<string.h>main(){ int
i,j,k; for(i=1;i<=4;i++) /*上三角形有4行,每循环1次输出1行*/ { for(k=1;k<8-((2*i-
1)/2);k++) /*该循环输出每行的空格.8用于调节偏离位置,可换成别的数(>=8)*/ printf("
"); for(j=1;j<=2*i-1;j++) /*该循环输出每行的’*’字符
*/ printf("*"); putchar(’\n’);
/*换行*/ } for(i=3;i>=1;i--) /*下面为倒三角形,有3行*/ { for(k=1;k<8-((2*i-
1)/2);k++) printf("
"); for(j=1;j<=2*i-
1;j++) printf("*"); putchar(’\n ’); }}
main( )
{ intn=1,score,t;
scanf("%d",&score);
while (score>=0&&n<=5)
{ n++;
t=0;
while(score!=0)
{
t=t+(score%10)*(score%10);
score=score/10;
}
if(t==108)
printf("%d",score);
scanf("%d",&score);
}
}
#include "math.h"main(){ float
x0,x1,x2,fx0,fx1,fx2; /*x1,x2分别表示每次区间的左右端点,x0代表区间的中间点,fx0,fx1,fx2代表相应点的函数值
*/ do {printf("please input
x1&x2:"); scanf("%f,%f",&x1,&x2); fx1=x1*( (2*x1-4)*x1+3)-6; fx2=x2*((2*x2-4)*x2+3)-
6; }while(fx1*fx2>0); /*该循环指定有根的区间
*/ do { x0=(x1+x2)/2; fx0=x0*((2*x0-4)*x0+3)-6; if((fx0*fx1)<0) /*丢掉右区间
*/ { x2=x0; fx2=fx0;
} else /*丢掉左区间
*/ { x1=x0; fx1=fx0; } }while(fabs(fx0)>1e-5); /*该循环实现二分法求根 */ printf("root x=%f",x0);}
2)程序填空
(1)
#include <stdio.h>void main() {
int m,n,num1,num2,temp; printf("Input two positive
integer:\n"); scanf("%d,%d",&num1,__&num2_______);
if(num1<num2) {temp=num1; num1=num2;
num2=__temp_______;} m=num1; n=num2;
while(n!=0) { temp=__m%n__________;
m=n; n=temp; } printf("The grestest common divisor
is %d\n",m); printf("The lowest common multiple is %d\n",num1*num2/__m____); }
(2)下面程序是计算表达式1+(1+2)+(1+2+3)+…
+(1+2+3+…+10)和。

#include<stdio.h>
void main()
{int sum,i,j,t;
sum=①;
for(i=1;i<=10;i++)
{t=0;
for(j=1;j<=②;j++)
t=t+j;
sum=③;
}
printf("1+(1+2)+(1+2+3)+...+(1+2+3+ (10)
=%d\n",sum);
}
①0 ②i ③ sum+t
3.程序改错
(1)下面的程序是求1~100之间的素数,并将所有素数按每行10个输出。

#include <stdio.h>
#define <math.h>
★ //#include<stdio.h> void main()
{ int i,m,k,n;
★//int i,m,k,n=0;
for(m=1;m<=100;m=m+2)
{
if(n/10==0)
★//if(n%10==0)
printf("\n");
k=1;
for(i=2;i<=sqrt(m);i++)
if(m%i!=0)★//if(m%i==0) { k=0;break;}
if(k==1)
{printf("%3d ",m);n=n+1;}
}
printf("\n");
}
(2)下面程序是求表达式1-1/2+1/3-1/4+1/5-……-1/100的值,结果保留小数后4位。

#include<stdio.h>
void main()
{int i;
float s;
i=0;★ //i=1;
s=1;★ //s=0;
while(i<100)
{ if(i%2==0)
s=s-1/i;★ //s=s-1.0/i;
else
s=s+1/i;★ //s=s+1.0/i
i=i+1;
}
printf("1-1/2+1/3-1/4+…-1/100=%10.3f\n",s);
}
4.设计性实验
(1)编程输出以下图形。

#include<stdio.h> void main() { int i,j,k; for(i=1;i<=6;i++) {
for(k=1;k<=20-(2*i-
1)/2;k++) printf("
"); for(j=1;j<=2*i-
1;j++) printf("%d",i);
printf("\n"); } }
(2)编写一个程序输出所有5位数字的回文。

方法一:
#include <stdio.h> void main() { long
x,a,t; //x:原5位整数,a:用来暂存x,t:把a反序后
的数 int i,num=0; //i:表示原5位数的某一位,num:回文数的个数 for(x=10000;x<=99999;x++) //每次取出1个5位整
数 { a=x;
//把取出的5位整数保存到
a t=0; //t 用来存放反序后的
数 while(a>0) { i=a%10; //取出当前数的最后一位到
i t=t*10+i; //把取出的i组装到
t a=a/10; } if(x==t)
//原来的5位整数等于反序后的数
t {printf("%ld,",x); num++;} if(num%10== 0) printf("\n"); //每行输出10个数 }}
方法二:
/*求5位整数中所有回文*/#include <stdio.h>void
main(){ long int
n,m,t=0; for(n=10000;n<=99999;n++) { i f(hw(n)==1) { printf("%6ld",n);
t++; if(t%5==0) printf("\n"); /*每行输出5个数*/ } }}
int hw(long int a) /*hw函数测试a是否是回文*/
{ long
int m,r=0; m=a; while(m) { r=r*10+m%10; m/=10; } if( a==r) return 1; /*是回文返回
1 */ else return 0; /*是回文返回0 */ }
(3)编程计算e=1+1/1!+1/2!+1/3!+ …+1/n!。

精度为1e-6(即最后一项1/n!<1e-6就停止循环)。

提示:注意1/n!=1/(n-1)!*1/n;利用循环加上每一次的分项。

#include <stdio.h>
void main()
{ long i;
double e,t;
e=1.0;
t=1.0;
for(i=1;t>1e-6;i++)
{t/=(double)i;e+=t; }
printf("e=%f\n",e);
}
2.

①a[10]=x;
②break;
③a[k]=x;
附:算法简析
main()
{
int x,i,j,k;/*感觉似乎j定义了没什么作用*/
int a[11]={8,18,28,38,48,58,68,78,88,98};
printf("请输入需要插入的一个整数:");
scanf("%d",&x);
a[10]=x;/*把x放到数据串最末位置*/
for(i=0;i<10;i++)
if(x<a[i]) {k=i;break;}/*寻找x的插入点,当发现插入点时退出*/
for(i=10;i>k;i--)/*将插入点以及其后的每个数据后移一个单位(给x腾位)*/
/*实例演示——腾位
8 18 28 38 48 58 68 78 88 98 (x)
8 18 28 38 38 48 58 68 78 88 98

插入点
*/
a[i]=a[i-1];
a[k]=x;/*将x放到插入点位置*/
for (i=0;i<11;i++)
printf("%3d",a[i]);
printf("\n");
}
⑵①i%7==0||i%11==0
②n++
③i%5==0
3.
⑴a.将continue;改为break;
b.将i=k-1;改为j=k-1;
c.将j=k+1;改为i=k+1;
d.将for(i=0;i<10;i++)改为for(i=0;i<9;i++);
附:算法简析
#include <stdio.h>
void main()
{int x, i,j,k;
int a[10]={ 8,18,28,38,48,58,68,78,88,98};
printf("请输入需要删除的一个整数:");
scanf("%d",&x);
i=0;
j=9;
while(i<=j)
{k=(i+j)/2 ;
if(a[k]==x) break;
if(a[k]>x)j=k-1;
if(a[k]<x)i=k+1;
}/*二分法查找x在数组中的位置,该位置即删除点,注意始末坐标不要弄颠倒*/
if(i>j) printf("需要删除的数不在数组中\n");
else{ for( ;k<9;k++)a[k]=a[k+1];/*挤位,后面的数据向删除点靠拢*/
/*实例演示——挤位(若删除38)
删除点

8,18,28,38,48,58,68,78,88,98
8,18,28,48,58,68,78,88,98,98
*/
for (i=0;i<9;i++)
/*删除一个数,只剩9个,数组最末尾储存的是重复的数据(倒数第二个),故不输出*/
printf("%5d",a[i]);
}
}
⑵a.将for(i=0,j=0;i<=10;i++)改为for(i=1,j=0;i<=10;i++)
b.将if(i%3=0)改为if(i%3==0)
c.将for(;j>=0;j++)改为for(;j>=0;j--)
4.

#include<math.h>
#include<stdio.h>
int isprime(int x)
{
int k=sqrt(x);
for(;k>1;k--)
if(x%k==0) return 0;
return x;
}
void sort(int a[],int x)
{
int i,k,t;
for(i=0;i<x-1;i++)
for(k=i+1;k<x;k++)
if(a[i]>a[k])
{
t=a[i];
a[i]=a[k];
a[k]=t;
}
}
void main()
{
int num[50],prime[50],i,n=0,j;
printf("PLease input 50 integers:\n");
for(i=0;i<50;i++)
{
scanf("%d",&num[i]);
if((j=isprime(num[i]))!=0)
prime[n++]=j;
}
sort(prime,n);
printf("The sorted prime numbers are : \n");
for(i=0;i<n;i++)
printf("%-5d",prime[i]);
}

#include<stdio.h>
#include<string.h>
main()
{
char input[10],paswor[10]="password",ch,flag=0; int count=1,i=0;
while(count<=3)
{
printf("请输入密码:");
while((ch=getch())!=13)
{
input[i++]=ch;
putchar(’*’);
}
input[i]=’\0’;
if(strcmp(input,paswor)==0)
printf("\n\n你好!我的主人!");
flag=1;
break;
}
else
printf("\n\n离我远点!");
count++;
getch();
}
if(flag==0)
printf("密码输入三次错误,你不是我的主人!\n\n离我远点!\n\n否则,我很生气,后果很严重!!!");
getch();
}

main()
{
int num[10],i,max,min,maxj,minj;
printf("Please input the data:\n");
scanf("%d",&num[0]);
max=min=num[0];
for(i=1;i<10;i++)
{ scanf("%d",&num[i]);
if(max<num[i]){max=num[i];maxj=i;}
if(min>num[i]){min=num[i];minj=i;}
}
printf("The maximum element’s underside
is %d,max=%d",maxj,num[maxj]);
printf("\nThe minimum element’s underside
is %d,min=%d",minj,num[minj]);
}

#include<stdio.h>
#include<conio.h>
void input(int a[],int *n)
int i;
printf("How many datas do you want to input? "); scanf("%d",n);
printf("\nPlease input %d datas:\n",*n);。

相关文档
最新文档