最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

C语言典型例题答案详解解

来源:动视网 责编:小OO 时间:2025-10-04 08:50:55
文档

C语言典型例题答案详解解

典型例题例1:求main(){inti,sum;for(sum=0,i=1;i=10-4循环,t为某项值。...71513114+-+-≈πmain(){ints;floatn,t,pi;n=1.0;s=1;t=1./n;pi=0;while(fabs(t)>=1e-4)/*判断某项*/{pi=pi+t;/*累加和*/n=n+2.0;/*改变分母*/s=-s;/*符号变反*/t=s/n;}/*计算下一项*/printf("PI=%10.6f\\ngetch();}1,1,2,3,5,8,13,
推荐度:
导读典型例题例1:求main(){inti,sum;for(sum=0,i=1;i=10-4循环,t为某项值。...71513114+-+-≈πmain(){ints;floatn,t,pi;n=1.0;s=1;t=1./n;pi=0;while(fabs(t)>=1e-4)/*判断某项*/{pi=pi+t;/*累加和*/n=n+2.0;/*改变分母*/s=-s;/*符号变反*/t=s/n;}/*计算下一项*/printf("PI=%10.6f\\ngetch();}1,1,2,3,5,8,13,
典型例题

例1:求main( )

{ int i, sum;

for (sum=0, i=1; i<=100; i++)

sum=sum+i ;

printf("1+2+3+…+100=%d \\n

1+2+3+…+100=5050∑=100

1n n

main()

{int i,fact;

for(fact=1,i=1;i<=5;i++)

{fact=fact*i;

printf("\%d!=%d\\n

}

}

1!=1(每次循环都进行输出))

2!=2

3!=6

4!=24

5!=120例3: 计算某班32位学生某门课的平均成绩,并输出最高分、最低分。

main()

{int i,score,max=0,min=100;

float sum=0;

for(i=1;i<=32;i++)

{scanf("%d

sum=sum+score;

if(score>max)max=score;

if(scoreprintf("max=%d,min=%d\\n

}

i:

11*1=1

22*1=22*2=4

33*1=33*2=63*3=9

44*1=44*2=84*3=124*4=16

┇┇

┇┇

99*1=99*2=1*3=27……9*9=81 j1239

被乘数i取值1~9;i每取一值,乘数j取值1~imain()

{int i,j,k;

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

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

{k=i*j;

printf("%d*%d=%-4d

}

printf(“\\n”);

}

getch();/*加getch();每行暂停*/ }

例5:输入5个最多8位的正整数,将各数按位颠倒输出。

main( )

{ int i; long n, d;

for(i=1; i<=5; i++)

{ printf(“Enter a data(1-99999999):”);

scanf(“%ld”, &n);

while(n!=0)

{ d=n%10;

printf(“%d”, d);

n=n/10;}

}

}

半径的范围控制——r:1~10

附加控制——area>100

main()

{ int r; float area;

for(r=1; r<=10; r++)

{ area=3.141592*r*r;

if(area>100) break;

printf(“r=%d,area=%-7.2f\\n”, r, area);

}

}

main()

{ int n, c=0;

printf(“\\n”);

for(n=100; n<=200; n++)

{ if(n%3==0) continue;

printf(“%d”, n);

c++;

printf(“%s”, c%10==0? ”\\n” : ” ”);

}

}

算法1:(穷举法)

1)找出m、n中的较小者 t;

最大公约数肯定在t、t-1、t-2、…1之间;

2) 测试m%i和n%i是否同时为0 ;

除数i依次取t、t-1、t-2 … 1 ;

测试条件成立时的i值即为最大公约数;

3) 最小公倍数:m×n/最大公约数;main( )

{ int m, n, t, i;

printf(“Enter m,n:”);

scanf(“%d,%d”, &m, &n);

t=mfor(i=t; i>=1; i--)

if (m%i==0&&n%i==0) break;

printf(“GCD=%d,SCM=%d\\n”, i, m*n/i); }

18,12↙17,3↙

GCD=6,SCM=36 GCD=1,SCM=51算法2:(辗转相除法)

main( )

{ int a, b, m, n, r, t;

printf(“Enter a, b:”);

scanf(“%d,%d”, &a, &b);

m=a, n=b; /*产生a、b副本*/ if(mr=m%n;

while(r!=0)

{ m=n; n=r; r=m%n; }

printf(“GCD=%d,SCM=%d”,

n, a*b/n);

}

输入a、b

a ⇒m,

b ⇒n T F

Øm⇔n 求m%n ⇒r

r!=0?

n ⇒m

r ⇒n

m%n ⇒r 输出n、a*b/n

m>n?

例9:判断m是否素数

素数:除1和它本身之外再无别的约数;

算法:判断m%i==0成立否?

(int)

i取值: 2~(m-1) 或:2~m #include"math.h"

main()

{int m,i,k;

printf("\Enter m:");scanf("%d

k=sqrt(m);

for(i=2;i<=k;i++)

if(m%i==0)break;

if(i>k)printf("%d is a prime number.\\n

else printf("%d is not prime number.\\n

算法:外循环控制m取100 ~200之间的奇数。

#include"math.h"

main()

{int m,i,k,c=0;printf("\\n");

for(m=101;m<200;m=m+2)

{k=sqrt(m);

for(i=2;i<=k;i++)

if(m%i==0)break;

if(i>k)/*i>k成立表示未出现约数*/ {printf("%-6d

c++;

if(c%10==0)printf("\\n");}

}

}

例11:用公式求π的近似值,直到最后一项的绝对值小于10-4 为止。考虑问题:

1) 需循环累加,但累加项数不确定;

2) 有规律的量

分母n 的取值:1、3、5、7 …

奇偶项符号s 的变化:+、-、+、-

3) 循环条件:fabs(t)>=10-4循环,t 为某项值。

...7

1513114+-+-≈π

main()

{int s;

float n,t,pi;

n=1.0;s=1;t=1./n;pi=0;

while(fabs(t)>=1e-4)/*判断某项*/ {pi=pi+t;/*累加和*/ n=n+2.0;/*改变分母*/

s=-s;/*符号变反*/

t=s/n;}/*计算下一项*/ printf("PI=%10.6f\\n

getch();

}

1,1,2,3,5,8,13,21 …

考虑问题:

1) 属递推问题:从前一项或几项推出下一项结果;

2) 定义两个变量:

f1=f2=1; f1=f1+f2; f2=f2+f1;

由前两项相加求得下一项后第一项可覆盖,即变量的值是不断更迭的(迭代法)。

main()

{long f1,f2,i;

f1=f2=1;

for(i=1;i<=20;i++)

{printf("%12ld%12ld

if(i%2==0)printf("\\n");/*每行4项*/

f1=f1+f2;/*一次递推两项*/

f2=f2+f1;

}

getch();

}

例13:输入一个数,输出其因子连乘表达式main( )

{ int n, f, i=2;

printf (“Input an integer n:”);

scanf (“%d”, &n); f=n;

printf (“%d=1”, n);

do { if ( f%i==0)

{ f=f/i; printf ( “*%d”, i ); }

else i++;

} while( i<=n );

printf (“\\n”);

}

例14:用字符’*’打印出钻石图案

分析:将上半三角、下半三角分别处理,找出行

数、空格数、星号数之间的关系;

前四行:行空格星号1 3 1 2 2 33 1 54 0 7规律:i 4–i i ×2–1后三行:1 1 52 2 33 3 1

规律:i i 7–i ×2

*

* * *

* * * * *

* * * * * * *

* * * * *

* * *

*

{int i,j;

for(i=1;i<=4;i++)

{for(j=4-i;j>0;j--)printf(””);

for(j=i*2-1;j>0;j--)printf(”*”);

printf(”\\n”);

}

for(i=1;i<=3;i++)

{for(j=i;j>0;j--)printf(””);

for(j=7-i*2;j>0;j--)printf(”*”);

printf(”\\n”);

}

}

main( )

{ int i, l, n, s, all; char str[80], t;

l=n=s=all=0;

gets(str);

for(i=0; (t=str[i])!='\\0';i++) /*t:提高效率*/

{ if(t>='A'&&t<='Z'||t>='a'&&t<='z')l++;

else if(t>='0'&&t<='9')n++;

else if(t==' ')s++;

all++; }

printf("l=%d,n=%d,s=%d,all=%d\\n

}

int a[100], i;

for( i=0; i<100; i++) a[i]=i+1; /*生成数组*/ for(i=0; i<100; i++)

{ if( i%10==0) printf(“\\n”); /*换行控制*/ printf(”%-5d”, a[i]);

}

for(i=99; i>=0; i--)

printf(”%d,”, a[i]);

for(i=1; i<=99; i=i+2)

printf(”%5d”, a[i]);例17:编写函数,用冒泡法对数组从小到大排序main()

{ int x[10], i;

void sort( int a[], int n )

for(i=0; i < 10; i++) scanf("%d

sort( x, 10);

for(i = 0; i < 10; i++) printf("%d

printf( "\\n" );

}

void swap( int *p1, int *p2 ) { int t;

t = *p1; *p1 = *p2; *p2 = t; }

void sort( int a[], int n )

{ int i, j;

for(i=0; i < n-1; i++)

for(j= 0; j < n-1-i; j++)

if (a[j] > a[j+1])

swap(&a[j],&a[j+1]); }例18:用选择法对一数列按降序排序(由大到小) #define N5

main()

{int a[N],i,j,p,t;

for(i=0;iscanf("%d,

for(i=0;i{p=i;

for(j=i+1;jif(a[j]>a[p])p=j;/*条件成立更新p*/

if(p!=i){t=a[i];a[i]=a[p];a[p]=t;}

}

┇/*输出*/

}

main()

{int a[N]={2,3,5,6,12,15,23,46,50,100}; int num,low,high,mid,mark=-1; printf("Enter check number:");

scanf("%d

low=0;high=N-1;

┇┇

low=0; high=N-1;

while(low<=high)

{ mid=(high+low)/2;/*计算中间位置*/ if(num==a[mid]){ mark=1; break;}

else if(numelse low=mid+1;

}

if(mark==1)

printf("%d found in %d\\n

}

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

1 6 15 20 15 6 1

1 7 21 35 35 21 7 1

1 8 28 56 70 56 28 8 1

1 9 36 84 126 126 84 36 9 1#define N10

main()

{static int a[N][N],i,j;

for(i=0;ia[i][0]=a[i][i]=1;

for(i=2;ia[i][j]=a[i-1][j-1]+a[i-1][j];

for(i=0;iprintf("%5d

printf("\\n");

}

}

例21:输入一行字符,判断其是否对称,是则输出Yes,否则输出No。

#include

main()

{ char a[80];int n, i;

gets( a );

n = strlen(a) ;

for ( i = 0; i < n/2; i++ )

if ( a[i] != a[n-1-i] )

break;

if ( i < n/2)

printf( "No\\n" );

else

printf( "Yes\\n" );

}

#include "stdio.h"

main( )

{ static char str[80];

int i, len, scol;

printf("Please input a character string:");

gets(str);

len=strlen(str); /*测试有效长*/ scol=(80-len)/2;/*计算起始列*/

for(i=1; i<=scol; i++) putchar(' ');

puts(str);

}

数学表达:C语言表达:

阶乘

1 fac(int n)

n!=< { if(n==1) return 1;

n*(n-1)! else return n*fac(n-1);

}

连加

1 sum(int n)

s n=< { if(n==1) return 1;

n+s n-1 else return n+sum(n-1); }例:求字符串长度

int my_strlen(char *str)

{ if(*str==…\\0‟) return 0;

else return (1+my_strlen(str+1));

}

例:求N 层嵌套平方根

double y(double x, int n)

{ if(n==0) return 0;

else return (sqrt(x+y(x, n-1)); }例23:编写函数,在一个已从小到大排序的数组中查找一个指定的数,如果找到,返回指向数组中该数的指针,否则返回空指针。

int *find(int *a, int n, int data) /* 数组a长度n待查数data */ { int *p=a, *q=a+n, *r;

while ( p < q ) /* 待查找区不为空时*/ { r = p + (q-p)/2;/* 待查找区的中点位置*/ if ( *r==data )

return r; /* 如找到,返回该指针*/ else if ( *r < data )

p = r + 1;/* 比中点大,在后半区*/ else q = r;/* 比中点小,在前半区*/ }

return NULL; /* 没找到,返回空指针*/ }main()

{ int x[]={11,22,33,44,55,66,77,88,99,100}, d, *p;

scanf( "%d

printf( "Not Found.\\n" ); /* 没找到*/ }

例24编写通用的函数,可根据需要建立任意节点数的链表。struct student*creat()/*无参有返回值*/ {struct student*head=NULL,*p1,*p2;

int len;long n;float s;

len=sizeof(struct student);

while(1)/*循环次数不确定*/ {printf("Enter number,score:");

scanf("%ld,%f

if(n==0)break;/*输入0表示数据结束*/

p1=(struct student*)malloc(len);

┇}

return(head);}┇

while(1)

{printf("Enter number,score:");

scanf("%ld,%f

if(n==0)break;/*以0表示数据结束*/ p1=(struct student*)malloc(len);

p1->num=n;p1->score=s;/*转存入节点*/ if(head==NULL) head=p2=p1;

else { p2->next=p1; p2=p1; }

}

p2->next=NULL; /*末尾链节成员赋空*/ return(head); /*返回链表头指针*/ } /*creat*//*输出各节点*/

void plink(struct student*head)

{struct stduent*p;

int i;

for(i=1;i<=N;i++)

{if(i==1)p=head;

else p=p->next;

printf("%d:num=%ld,score=%5.2f\\n

i,p->num,p->score);

}

return;

}

p=head;

while(p!=NULL)

{ printf("num=%ld, score=%5.2f\\n

p->num, p->score);

p=p->next;

}

return;

}

注:本形式的链表输出函数具有通用性,可适应由于删除或插入节点引起的链表长度的变化。

例25 删除指定的节点

struct student *del(struct student *head, long n) {struct student*p1,*p2;/*↑n:要删除学号*/ p1=head;

if(p1->num==n)head=p1->next;/*删除首节点*/ else

{do{p2=p1;p1=p1->next;

}while(p1!=NULL&&p1->num!=n);

if(p1->num==n)p2->next=p1->next;/*找到*/ else printf("Not be found!\\n");/*未找到*/ }

free(p1);/*释放被删除节点的存储区*/ return(head);/*返回头指针*/ }例26 在链表中插入节点的函数:

struct student*insert(struct student*head)

{struct student*p0,*p1,*p2;

long n;int len;

len=sizeof(struct student);

p0=(struct student*)malloc(len);/*申请新节点*/ printf("Enter num,score to insert:");

scanf("%ld,%f

n=p0->num;/*产生学号副本n*/ p1=head;/*从首节点开始查找*/┇

p1=head;/*↓插入在头部*/ if(nnum) { p0->next=head; head=p0; }

else

{ do /*查找插入位置*/ { p2=p1;

p1=p1->next;

} while(p1!=NULL && n>p1->num);

p0->next=p2->next; /*插入在其余位置*/

p2->next=p0;

}

return(head);

} /*insert*/

文档

C语言典型例题答案详解解

典型例题例1:求main(){inti,sum;for(sum=0,i=1;i=10-4循环,t为某项值。...71513114+-+-≈πmain(){ints;floatn,t,pi;n=1.0;s=1;t=1./n;pi=0;while(fabs(t)>=1e-4)/*判断某项*/{pi=pi+t;/*累加和*/n=n+2.0;/*改变分母*/s=-s;/*符号变反*/t=s/n;}/*计算下一项*/printf("PI=%10.6f\\ngetch();}1,1,2,3,5,8,13,
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top