专升本计算机编程:C程序设计实例

【程序1】

题目:求1+2!+3!+…+20!的和

1.程序分析:此程序只是把累加变成了累乘。

2.程序源代码:

#include "stdio.h"
#include "conio.h"

int main(){
    
    
	float n,s=0,t=1;
	for(n=1;n<=20;n++){
    
    
		t*=n;
		s+=t;
	}
	printf("1+2!+3!...+20!=%e\n", s);
	getch();
	return 0;
}

tips:

  • #include"conio.h":conio.h库文件定义了通过控制台进行数据输入和数据输出的函数,主要是一些用户通过按键盘产生的对应操作,比如常用的getch()函数就是在这个头文件里定义的
  • getch():getch();并非标准C中的函数,不存在C语言中。所以在使用的时候要注意程序的可移植性。国内C语言新手常常使用getch();来暂停程序且不知道此函数来源,建议使用getchar()或者使用<stdlib.h>头文件中的system(“PAUSE”)调用系统命令暂停;(如果情况允许)代替此功能或更换一款编译器。

【程序2】

题目:判断101-200之间有多少个素数,并输出所有素数。

1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。

2.程序源代码:

#include "stdio.h"
#include "conio.h"
#include "math.h"
int main()
{
    
    
  int m,i,k,h=0,leap=1;
  printf("\n");
  for(m=101;m<=200;m++)
  {
    
    
    k=sqrt(m+1);
    for(i=2;i<=k;i++)
    if(m%i==0)
    {
    
    
      leap=0;//不是素数 
      break;
    }
    if(leap)
    {
    
    
      printf("%-4d",m);
      h++;
      if(h%10==0)
        printf("\n");
    }
    leap=1;
  }
  printf("\nThe total is %d",h);
  getch();
}

【程序3】

题目:输入两个正整数m和n,求其最大公约数和最小公倍数。

1.程序分析:利用辗除法。

2.程序源代码:

#include "stdio.h"
#include "conio.h"
int main()
{
    
    
  int a,b,num1,num2,temp;
  printf("please input two numbers:\n");
  scanf("%d,%d",&num1,&num2);
  if(num1<num2)/*交换两个数,使大数放在num1上*/
  {
    
    
    temp=num1;
    num1=num2;
    num2=temp;
  }
  a=num1;b=num2;
  while(b!=0)/*利用辗除法,直到b为0为止*/
  {
    
    
    temp=a%b;
    a=b;
    b=temp;
  }
  printf("gongyueshu:%d\n",a);
  printf("gongbeishu:%d\n",num1*num2/a);
  getch();
}

tips(辗转相除法):

  • 1.a除以b,如果b等于0,计算结束,a就是那个最大公约数
  • 2.否则,计算a除以b的余数,让a等于b,而b等于那个余数
  • 3.回到第一步

【程序4】

题目:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

1.程序分析:关键是计算出每一项的值。

2.程序源代码:

#include "stdio.h"
#include "conio.h"
int main()
{
    
    
  int a,n,count=1;
  long int sn=0,tn=0;
  printf("please input a and n\n");
  scanf("%d,%d",&a,&n);
  printf("a=%d,n=%d\n",a,n);
  while(count<=n)
  {
    
    
    tn=tn+a;
    sn=sn+tn;
    a=a*10;
    ++count;
  }
  printf("a+aa+...=%ld\n",sn);
  getch();
}

【程序5】

题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。

1.程序分析:请抓住分子与分母的变化规律。

2.程序源代码:

#include "stdio.h"
#include "conio.h"
int main()
{
    
    
   int i,t,number=20;
   float sum=0,a=2,b=1;
   for(i=1;i<=number;i++){
    
    
	  	sum=sum+a/b;
	  	t=a;
	  	a=a+b;
		b=t; 
   }
   printf("sum is %9.6f\n", sum);
   getch();
}

tips:

分子=分子加分母

分母=上一个结果的分子

【程序6】

题目:求0-7所能组成的奇数个数

1.程序分析:

2.程序源代码:

 #include<stdio.h>
 #include<stdlib.h>
 
 int main(int agrc, char*agrv[])
 {
    
    
     long sum = 4, s = 4;//sum的初始值为4表示,只有一位数字组成的奇数个数为4个
     int j;
     for (j = 2; j <= 8; j++)
     {
    
        
         printf("%d位数为奇数的个数%ld\n", j-1, s);
         if (j <= 2)
             s *= 7;
         else
             s *= 8;
         sum += s;    
     }
     printf("%d位数为奇数的个数%ld\n", j-1, s);
     printf("奇数的总个数为:%ld\n", sum);
     system("pause");
     return 0;
 }

tips(算法思想):
这个问题其实是一个排列组合的问题,设这个数为sun=a1a2a3a4a5a6a7a8,a1-a8表示这个数的某位的数值,
当一个数的最后一位为奇数时,那么这个数一定为奇数,不管前面几位是什么数字。如果最后一位数为偶数,
则这个数一定为偶数。
a1-a8可以取0-7这个八个数字,首位数字不为0。
从该数为一位数到该数为8位数开始统计奇数的个数:
1.当只有一位数时也就是该数的最后一位,奇数个数为4
2.当该数为两位数时,奇数个数为47=28
3.当该数为三位数时,奇数个数为:4
87=224



8.当该数为八位数时,奇数个数为:4
8888887(依次为最后一位到第一位)

摘自博客:https://blog.csdn.net/dodoto/article/details/45698609

【程序7】

题目:有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,况原有的数据和计算出的平均分数存放在磁盘文件"stud"中。

1.程序分析:

2.程序源代码:

#include "stdio.h"

struct student{
    
    
	char num[6];
	char name[8];
	int score[3];
	float avr;
} stu[5];

int main(){
    
    
	int i,j,sum;
	FILE *fp;
	/*input*/
	for(i=0;i<5;i++){
    
    
		printf("\n please input No. %d score:\n",i);
		printf("stuNo:");
		scanf("%s",stu[i].num);
		printf("name:");
		scanf("%s",stu[i].name);
		sum=0;
		for(j=0;j<3;j++){
    
    
			printf("score %d.",j+1);
			scanf("%d",&stu[i].score[j]);
			sum+=stu[i].score[j];
		}
		stu[i].avr=sum/3.0;
	}
	fp=fopen("stud","d");
	for(i=0;i<5;i++)
	if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1){
    
    
		printf("file write error\n");
	}
	fclose(fp);
}

【程序8】

题目:求100之内的素数

1.程序分析:

2.程序源代码:

#include "stdio.h"
#include "math.h"
#include "conio.h"
#define N 101

int main()
{
    
    
  int i,j,line,a[N];
  for(i=2;i<N;i++) a[i]=i;
    for(i=2;i<sqrt(N);i++)
      for(j=i+1;j<N;j++)
      {
    
    
        if(a[i]!=0&&a[j]!=0)
          if(a[j]%a[i]==0)
            a[j]=0;
      }
  printf("\n");
  for(i=2,line=0;i<N;i++)
  {
    
    
    if(a[i]!=0)
    {
    
    
      printf("%5d",a[i]);
      line++;
    }
    if(line==10)
    {
    
    
      printf("\n");
      line=0;
    }
  }
  getch();
  return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_44337241/article/details/112872998
今日推荐