航電OJ C語言-實驗5

1. (15分) 實驗5.2 利用篩法求指定範圍之內的素數

題目描述
使用篩法求指定範圍[1,n]之間的素數。輸出時每行顯示10個數據。(每行最後一個數據後不輸出空格)
n爲正整數,且0<n<=1000.

輸入描述
一個正整數:n

輸出描述
一行輸出10個數,中間空格隔開,每行最後一個數據後不輸出空格

輸入樣例
100

輸出樣例
2 3 5 7 11 13 17 19 23 29
31 37 41 43 47 53 59 61 67 71
73 79 83 89 97

用戶代碼

#include<stdio.h>
int main()
{
    int i,j,k,m=0,n;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
      k=0;
      for(j=1;j<=i;j++)
      {
       if(i%j==0)
         k++;
      }
       if(k==2)
       {
        m++;
        if(m%10!=0)
        printf("%d ",i);
        else
        printf("%d\n",i);
       }
    }
    return 0;
}

最後保存時間: 2019-11-19 20:19:10

本題得分:15分(3/3)
查看最新評判結果

2. (15分) 實驗5.3 樣品抽樣檢查

題目描述
有1000臺產品(編號從1~1000),要從中抽出15臺進行抽樣檢測。請設計一個抽樣模擬程序,輸出抽樣結果,輸出時要求每行輸出五個數據。
【提示】產生15個1~1000間的隨機數,請查閱srand()和rand()函數。
抽樣的結果需要保存到數組中,且樣品編號不能重複。

輸入描述
無輸入

輸出描述
輸出抽樣的15個數,每行5個,以%-6d方式輸出。

輸入樣例

輸出樣例
本題由於爲隨機產生的數,因此沒有設置測試用例,所以無需在意分數,只要得到類似上面樣例輸出的3行5列的1~1000之間的15個數即可

用戶代碼


#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
	int i,k;
	srand((unsigned)time(NULL));
	for(i=1;i<=15;i++)
	{
		k=rand()%1000;
		if(i%5==0)
			printf("%-6d\n",k);
		else
			printf("%-6d",k);
	}
	return 0;
}

最後保存時間: 2019-11-21 16:27:35

本題得分:0分(0/0)
查看最新評判結果

3. (30分) 實驗5.5

從鍵盤輸入一個班(全班最多不超過30人)學生某課的成績,當輸入成績爲負值或超出規定人數時,輸入結束,分別實現下列功能: (1)輸出各分數段的學生人數及所佔的百分比,並打印不及格學生名單; (2)統計成績在全班平均分及平均分之上的學生人數,並打印這些學生名單;
題目描述
【提示】(1)用score[i]存放第i+1個學生的成績。將成績分爲6個分數段,60分以下爲第0段,6069分爲第1段,7079分爲第2段,8089分爲第3段,9099分爲第4段,100分爲第5段,因此成績與分數段的對應關係爲分數段或爲0(當成績<60時)或者爲(成績-50)/10(當成績>=60時)
各分數段的學生人數保存在數組stu中,用stu[i]存放第i段的學生人數。對於每個學生的成績,先計算該成績所對應的分數段,然後將相應分數段的人數加1,即stu[i]++。輸出各個階段的學生人數及比例,當score[i]<0時,打印i+1(即學生序號)和score[i]。
(2)先計算全班平均分aver,當第i個學生的成績score[i]>= aver時,打印i+1(即學生序號)和score[i]。

輸入描述
依次輸入各個學生的分數,當輸入負數或超過30人時結束

輸出描述
輸出不及格學生名單
輸出高於平均分學生名單
輸出高於平均分的學生人數
輸出各個分數段的學生人數及所佔比例
注意:所有實數保留小數點後兩位數,即以%.2f格式輸出

輸入樣例
10
20
30
40
50
60
70
80
90
100
100
99
98
76
79.6
54.3
67.9
12.4
56.0
65.9
78.1
-1

輸出樣例
不及格名單爲
student1,10.00
student2,20.00
student3,30.00
student4,40.00
student5,50.00
student16,54.30
student18,12.40
student19,56.00
高於平均分名單爲
student7,70.00
student8,80.00
student9,90.00
student10,100.00
student11,100.00
student12,99.00
student13,98.00
student14,76.00
student15,79.60
student17,67.90
student20,65.90
student21,78.10
高於平均分的人數爲12
<60人數=8,所佔有比例爲38.10
60-69人數=3,所佔有比例爲14.29
70-79人數=4,所佔有比例爲19.05
80-89人數=1,所佔有比例爲4.76
90-99人數=3,所佔有比例爲14.29
100人數=2,所佔有比例爲9.52

用戶代碼

#include<stdio.h>
int main()
{
    int i,j=0,k,n=0;
	double score[29],stu[6]={0},s=0,aver;
    for(i=0;;i++)
    {
      scanf("%lf",&score[i]);
      if(score[i]>=0)
       j++;
      else
      {
       j--;
       break;
      }
    }
    for(i=0;i<=j;i++)
    {
     k=(int)score[i]/10;
     switch(k)
     {
     case 0:
     case 1:
     case 2:
     case 3:
     case 4:
     case 5:stu[0]++;continue;
     case 6:stu[1]++;continue;
     case 7:stu[2]++;continue;
     case 8:stu[3]++;continue;
     case 9:stu[4]++;continue;
     case 10:stu[5]++;continue;
     }
    }
    for(i=0;i<=j;i++)
     s=s+score[i];
    aver=s/(j+1);
    printf("不及格名單爲\n");
    for(i=0;i<=j;i++)
    {
    if(score[i]<60)
    printf("student%d,%.2f\n",i+1,score[i]);
    }
    printf("高於平均分名單爲\n");
    for(i=0;i<=j;i++)
    {
     if(score[i]>aver)
     {
       printf("student%d,%.2f\n",i+1,score[i]);
       n++;
     }
    }
    printf("高於平均分的人數爲%d\n",n);
    printf("<60人數=%.0f,所佔有比例爲%.2f\n",stu[0],100*stu[0]/(j+1));
    printf("60-69人數=%.0f,所佔有比例爲%.2f\n",stu[1],100*stu[1]/(j+1));
    printf("70-79人數=%.0f,所佔有比例爲%.2f\n",stu[2],100*stu[2]/(j+1));
    printf("80-89人數=%.0f,所佔有比例爲%.2f\n",stu[3],100*stu[3]/(j+1));
    printf("90-99人數=%.0f,所佔有比例爲%.2f\n",stu[4],100*stu[4]/(j+1));
    printf("100人數=%.0f,所佔有比例爲%.2f\n",stu[5],100*stu[5]/(j+1));
    return 0;
}

最後保存時間: 2019-11-20 21:48:56

本題得分:30分(2/2)
查看最新評判結果

4. (20分) 實驗5.6 查找一個字符串在另一個字符串中首次出現的位置,要求字符串從鍵盤輸入。

題目描述
【提示】數組str1存放母串,str2存放子串,子串與母串中的字符逐個比較,相同則比較下一個字符;不同,則子串重新從第一個字符、母串從下一個字符開始比較。
當子串遍歷完,即到串尾,則意味着在母串找到了子串;否則,則未找到子串。

輸入描述
分別輸入母串和子串(注意:長度不能超過100)

輸出描述
若查找成功輸出“母串中發現子串”,否則輸出“母串中未發現子串”

輸入樣例
are you ok?
ok?

輸出樣例
母串中發現子串

用戶代碼

#include<stdio.h>
int main()
{
	char str[100],substr[100];
	int local=-1,flag=0,i=0,k=0;
	gets(str);
	gets(substr);
	while(str[i]!='\0'&&substr[k]!='\0'&&flag==0)
	{
		if(str[i]==substr[k])
			k++;
		else
			k=0;
		i++;
		if(substr[k]=='\0')
			flag=1;
	}
	if(flag==1)
		printf("母串中發現子串");
	else
		printf("母串中未發現子串");
		return 0;
}

最後保存時間: 2019-11-20 23:47:58

本題得分:20分(3/3)
查看最新評判結果

5. (20分) 實驗5.4 驗證魔方陣

題目描述
在下面的5X5魔方矩陣中,每一樣、每一列及對角線上的元素之和都是相等的,試編寫程序將這些魔方矩陣中的元素讀到一個二維數組中,然後驗證其是否爲魔方矩陣,並將其按如下格式顯示在屏幕上(見題目描述)
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
[提示] 定義一個含有12個元素的數組,存放各行、各列及對角線的元素之和。

輸入描述
無輸入(矩陣中的元素直接由二維數組初始化獲得)

輸出描述
輸出該魔方矩陣(元素以%-6d格式輸出)
並打印“這個矩陣是魔方矩陣”。

輸入樣例

輸出樣例
這個矩陣是魔方矩陣
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9

用戶代碼


#include<stdio.h>
int main()
{
	int square[5][5]={{17,24,1,8,15},{23,5,7,14,16},{4,6,13,20,22},{10,12,19,21,3},{11,18,25,2,9}},sum[12]={0},i,j,k,flag;
	  for(i=0;i<=4;i++)
	  {
		  for(j=0;j<=4;j++)
			  sum[i]=sum[i]+square[i][j];
	  }
	   for(j=0;j<=4;j++)
	   {
		   for(i=0;i<=4;i++)
			   sum[j+5]=sum[j+5]+square[i][j];
	   }
	   for(i=0,j=0;i<=4;i++,j++)
		   sum[10]=sum[10]+square[i][j];
	   for(i=4,j=4;i>=0;i--,j--)
		   sum[11]=sum[11]+square[i][j];
	   for(k=0;k<=10;k++)
	   {
		   if(sum[k]==sum[k+1])
		   {
			   k++;flag=1;
		   }
		   else
			   flag=0;
	   }
	   if(flag==1)
		   printf("這個矩陣是魔方矩陣\n");
	   for(i=0;i<=4;i++)
	   {
		   for(j=0;j<=4;j++)
		   {
			   if(j<4)
				   printf("%-6d",square[i][j]);
			   else
				   printf("%-6d\n",square[i][j]);
		   }
	   }
		return 0;
}

最後保存時間: 2019-11-21 00:24:25

本題得分:20分(1/1)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章