C语言程序设计实验与习题答案

更新时间:2024-03-14 12:32:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

2.程序填空

(1)以下程序的功能是计算1~50之间能被7整除的整数之和。

#include void main()

{int i,sum= 0 ;

for(i=1; 50 ;i++)

if( i%7==0 ) sum+=i;

printf(\

}

(2) 下面程序接收来自键盘的输入,直到输入+Z(值为-1)键为止。这些字符被原样输出,但若有连续一个以上的空格时只输出一个空格。请填空。

#include 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

void main( )

{ int s,i; ★ //int s=0,i;

i=1;

while(i<=99) s=s+i; ★ //{s=s+i;i++;} printf(\?99的和是:%d\\n\

}

(2)下面程序的功能是输入一个正整数,判断是否是素数,若为素数输出1,否则输出0。

#include void main()

{ int i,x,y=0; ★ //y=1

scanf(\

for(i=2;i<=x/2&&y;i++)

if ((x%i)!=0) y=0; ★ //x%i==0

printf(\ }

4.设计性实验

(1)题

/* 方法(1)精度控制 */ #include #include main() { int s;

float n,t,pi;

t=1; pi=0; n=1.0; s=1; while((fabs(t))>=1e-6) { pi=pi+t; n=n+2; s=-s; t=s/n; }

pi=pi*4;

printf(\}

/* 方法(2)次数控制*/ #include #include 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(\}

(2)题

main() {

int i,j,frame;

double wheattal=0; double wheatfnu=1;

printf(\ scanf(\ for(i=0;i

wheattal+=wheatfnu; wheatfnu+=wheatfnu;

}

printf(\n Total wheattatol’s timeter=%e\\n\} (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(\ 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(\ getch(); }

/*方法三*/

#include \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(\}

2.程序填空

(1)以下程序的功能是计算1~50之间能被7整除的整数之和。

#include void main()

{int i,sum= 0 ;

for(i=1; 50 ;i++)

if( i%7==0 ) sum+=i;

printf(\

}

(2) 下面程序接收来自键盘的输入,直到输入+Z(值为-1)键为止。这些字符被原样输出,但若有连续一个以上的空格时只输出一个空格。请填空。

#include 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 void main( )

{ int s,i; ★ //int s=0,i;

i=1;

while(i<=99) s=s+i; ★ //{s=s+i;i++;} printf(\?99的和是:%d\\n\

}

(2)下面程序的功能是输入一个正整数,判断是否是素数,若为素数输出1,否则输出0。

#include void main()

{ int i,x,y=0; ★ //y=1

scanf(\

for(i=2;i<=x/2&&y;i++)

if ((x%i)!=0) y=0; ★ //x%i==0

printf(\ }

4.设计性实验

(1)题

/* 方法(1)精度控制 */ #include #include main() { int s;

float n,t,pi;

t=1; pi=0; n=1.0; s=1; while((fabs(t))>=1e-6) { pi=pi+t; n=n+2; s=-s; t=s/n; }

pi=pi*4;

printf(\}

/* 方法(2)次数控制*/ #include #include 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(\}

(2)题

main() {

int i,j,frame;

double wheattal=0; double wheatfnu=1;

printf(\ scanf(\ for(i=0;i

wheattal+=wheatfnu; wheatfnu+=wheatfnu; }

printf(\n Total wheattatol’s timeter=%e\\n\} (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(\

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(\ getch(); } /*方法三*/

#include \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(\}

2.程序填空

(1)求任意两个整数之间所有的素数。

#include void main()

{int i1,i2,i,j,flag;

printf(\

scanf(\ &i1 , &i2 ); printf(\

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(\ }

printf(\

}

(2)以下程序的功能是输出下三角九九乘法表。

#include void main() { int i,j;

for(i=1;i<= 9 ;i++) { for(j=1;j<= i ;j++)

printf(\ i*j );

printf(\ }

}

if(m%i!=0) ★ //if(m%i==0)

{ k=0;break;}

if(k==1)

{printf(\ }

printf(\

}

(2)下面程序是求表达式1-1/2+1/3-1/4+1/5-??-1/100的值,结果保留小数后4位。

#include 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/100=.3f\\n\ }

4.设计性实验

(1)编程输出以下图形。

#include 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(\ printf(\ } }

(2)编写一个程序输出所有5位数字的回文。

方法一:

#include 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; //取出当前数的最后一位到i t=t*10+i; //把取出的i组装到t a=a/10; }

if(x==t) //原来的5位整数等于反序后的数t {printf(\num++;}

if(num==0) printf(\//每行输出10个数 } } 方法二:

/*求5位整数中所有回文*/ #include void main() {

long int n,m,t=0;

for(n=10000;n<=99999;n++) {

if(hw(n)==1)

{ printf(\ t++;

if(t%5==0) printf(\/*每行输出5个数*/ } } }

int hw(long int a) /*hw函数测试a是否是回文*/ {

long int m,r=0; m=a; while(m) {

r=r*10+m; 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 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(\

} 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(\

a[10]=x;/*把x放到数据串最末位置*/

for(i=0;i<10;i++)

if(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(\ printf(\ }

⑵①i%7==0||i==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 void main() {int x, i,j,k;

else

printf(\

}

3.程序改错

(1)以下程序的功能是求一元二次方程的实数根。

#include #include

double *quadratic(double *factor) { static double result[2]; double delta;

delta=factor[1]*factor[1]-4*factor[0]*factor[2];

if(delta<0) return 0;

delta=sqrt(delta);

result[0]=(-factor[1]+delta)/(2*factor[0]);

result[1]=(-factor[1]-delta)/(2*factor[0]);

return result;

}

void main()

{ double fun[3],r; ★ // double fun[3],*r; printf(\

scanf(\%f%f%f\★ //%lf%lf%lf

r=quadratic(fun[3]); ★ // r=quadratic(fun);

if(r)

printf(\

X1=%lf\\tX2=%lf\\n\

else

printf(\

}

(2)以下程序的功能是统计数组a中所有偶数的个数。

#include\

void main( )

{int a[10],*p,sum=0;

printf(\请输入10个整数:\

for(p=a;p

scanf(\★ //

scanf(\

for( ;p>=a;p--)★ //

for(p-- ;p>=a;p--)

if(p%2= =0) sum++;★ // if(*p%2==0)

sum++;

printf(\共有%d个偶数\

}

2.程序填空

(1)以下程序的功能是利用指针找出3个整数中的最小数。

#include void main( )

{ int *p1,*p2,*p3,min,x,y,z; p1=&x; p2=&y; p3=&z;

printf(″please input three integer: ″); scanf(″%d%d%d″,p1,p2,p3);

① ; //min=*p1

if(*p1>*p2)

② ; //min=*p2

if(min>*p3)

③ ; //min=*p3

printf(″min=%d\\n″,min);

}

(2)以下程序利用指向函数的指针实现函数调用,完成可选择的加减乘除运算。

#include

/*定义函数add*/

int add(int x,int y)

{ printf(\

/*定义函数sub*/

int sub(int x,int y)

{printf(\

/*定义函数mult*/

int mult(int x,int y)

{ printf(\

/*定义函数dev*/

int dev(int x,int y)

{ printf(\

void main()

{ int (*funp)(int,int); char op;

int x,y;

printf(\

scanf(\

scanf(\

scanf(\

① (op) //switch {case '+': funp= ② ;break; //add

case '-': case '*': case '/': default:

funp=sub; break; funp=mult; break; funp=dev; break; printf(\

}

printf(\ ③ (x,y)); //funp

}

3.程序改错

(1)以下程序的功能是:输入出。

#include void main() {int i1,i2,i3;

int *p1,*p2,*p3;

3个整数,按由小到大的顺序输

void swap(int ,int ); ★ // void swap(int *,int *)

printf(\

scanf(\

//

scanf(\

p1=i1;p2=i2;p3=i3; ★ //

p1=&i1;p2=&i2;p3=&i3;

if(i1>i2) swap(p1,p2); if(i1>i3) swap(p1,p3); if(i2>i3) swap(p2,p3);

printf(\}

void swap(int *p,int *q) {int t; t=*p; *p=*q; *q=t; }

(2)下列程序的功能是利用自定义函数计算一无符号整数各位数字的乘积。

#include

unsigned *f(unsigned num) {unsigned s=1,*p;

p=s; ★ //p=&s;

do

{s=s*(num); num/=10; }while(num); return p; }

void main() {unsigned x,p;

printf(\

scanf(\

p=f(x);

printf(\★ // printf(\

}

4.设计性实验

(1)编程一函数,其功能是求一个长正整数各位数字之和。要求使用指针函数实现结果的返回。在主函数中进行测试。例如在

主函数中输入 348762,输出结果应为为30即3+4+8+7+6+2的和。

//方法一:利用指向函数的指针 int sum(long n) { unsigned long x; if(n<10) x=n; else

x=sum(n/10)+n; return(x);

}

//利用递归求和

void main() {

long x;

int (*f)(long); // f=sum;

scanf(\ printf(\f(x));

}

//方法二:利用指针函数

#include unsigned *f(long num) {

仿照第3)题改错(2)

unsigned s=0,*p;

p=&s;

do {

s=s+(num);

num/=10;

}while(num); return p; }

void main() { unsigned *p; long x;

printf(\

scanf(\

p=f(x);

printf(\

}

(2)编程一函数求两个整数的最大公约数,要求使用指针函数实现结果的返回。在主函数中调用此函数进行测试。两个整数由键盘输入。

//方法一:利用指向函数的指针

int mcf(int a,int b) { int temp; while(b)

{ temp=a%b; a=b; b=temp; }

return a; }

void main() {

int x,y;

int (*f)(int,int);

f=mcf;

scanf(\

printf(\f(x,y)); }

//方法二:利用指针函数

int *mcf(int a,int b) { int temp;

仿照第3)题改错(2)

while(b)

{ temp=a%b; a=b; b=temp; }

return &a;

}

void main() {

int x,y,*p;

scanf(\ p=mcf(x,y);

printf(\ }

本文来源:https://www.bwwdw.com/article/s1e8.html

Top