1. 程式人生 > 其它 >專升本計算機程式設計:C程式設計例項

專升本計算機程式設計:C程式設計例項

技術標籤:專升本專欄演算法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;
}