C语言每日一练——第四题

一、题目要求

已知数据文件in.dat中有300个四位数,并调用readDat()函数把这些数存储数组a中,编写函数jsValue(),其功能是:求出所有这些四位数是素数的个数cnt,再把所有满足此条件的四位数依次存入数组b中,然后对数组b的按从小到大顺序排列,最后编写函数wirteDat()把数组b中的数输出到out.dat文件中。

二、in.dat文件内容

7704,9774,3213,5845,7703,2902,1925,2584,7429,6646
3793,8640,4364,3032,9190,2498,6394,3796,2434,6791
5552,9052,9159,8245,7965,1071,8157,6526,2164,6767
4853,1174,4564,5427,7279,9832,3640,7897,3211,4788
6556,4781,2168,6014,7795,6536,9461,4287,8029,8303
2609,8795,8386,3911,8130,7268,1906,7345,3678,5823
8074,6963,7874,6066,4509,8976,1740,2026,7047,4730
9538,2193,8473,6729,4207,5095,4623,4933,6226,8098
1277,5480,1906,4109,9047,1986,5882,8444,1029,6515
2612,7297,6934,8495,7731,1625,1305,7953,7385,3620
7206,4549,5736,3131,6875,6917,6087,4640,5314,8646
6077,5677,7345,4143,1513,8101,2038,9879,3946,6643
7763,6108,4788,9055,8186,5416,5699,6733,5416,2320
2430,4772,9962,9676,1319,7767,7369,1411,3663,2876
2245,4810,5400,6045,1504,4178,7264,2763,7050,1490
8790,4014,9280,7105,7113,3600,8221,8203,6127,7313
1850,5983,9689,4102,1036,6375,5064,7188,9887,9800
6871,4856,2432,9562,3426,9013,5104,4724,4785,9953
5939,6668,8700,4730,9737,4055,6544,9763,1034,2855
8078,5111,4817,4593,9876,1189,2507,1197,1782,4347
7961,8612,9699,6108,4221,2489,8895,3672,8226,8724
6302,7624,7506,8568,4013,2785,3528,6712,1155,3150
1388,5803,6328,6841,5825,7802,2022,6290,1775,3652
9699,6573,8082,9016,4369,4002,3205,2688,8414,7572
2830,1231,3888,5137,5555,8976,2543,6542,8986,5921
5346,1368,2566,3304,4089,3880,1244,6650,6523,6123
1243,7488,5262,9992,3115,9270,6989,1595,1283,2645
4075,9471,7983,9093,7642,8847,5686,4168,8550,8941
5188,2290,3219,2853,6978,9053,5843,7153,6382,6289
3022,5591,9981,7296,2421,7328,9575,7586,1190,8504

三、程序代码

#include <stdio.h>
int a[300], b[300], cnt=0;  

void readDat()
{
  FILE *fp;
  int i;
  fp = fopen("in.dat","r");
  for(i = 0; i < 300; i++)
  {
      fscanf(fp, "%d,", &a[i]);
  }
  fclose(fp);
}

void writeDat()
{
  FILE *fp;
  int i;
  fp = fopen("out.dat","w");
  fprintf(fp, "%d\n", cnt);
  for(i = 0; i < cnt; i++)
  {
      fprintf(fp, "%d\n", b[i]);
  }
  fclose(fp);
}

int isP(int m)
{
  int i;
  for(i = 2; i < m; i++)
  if(m % i == 0)
    return 0;
  return 1;
}
void jsValue()
{
    int i,j;
    int temp;
    for(i=0;i<300;i++)
    {
        if(isP(a[i]))
        {
            b[cnt++]=a[i];
        }
    }

    //方法一:冒泡排序
    for(i=0;i<cnt;i++)
    {
        for(j=0;j<cnt-i-1;j++)
        {
            if(b[j]>b[j+1])
            {
                temp=b[j];
                b[j]=b[j+1];
                b[j+1]=temp;
            }
        }
    }
    //方法二:
    /*for(i = 0; i < cnt; i++)
    {
        for(j = i + 1; j < cnt; j++)
        {
            if(b[i] > b[j])
            {
                temp = b[j];
                b[j] = b[i];
                b[i] = temp;
            }
        }
    }*/
}
void main()
{
  int i;
  readDat();
  jsValue();
  writeDat();
  printf("cnt=%d\n", cnt);
  for(i = 0; i < cnt; i++)
  {
      printf("b[%d]=%d\n", i, b[i]);
  }
}

四、程序运行结果

原文地址:https://www.cnblogs.com/wutao666/p/9615110.html

时间: 2024-09-30 22:25:11

C语言每日一练——第四题的相关文章

C语言每日小练(四)——勇者斗恶龙

勇者斗恶龙 你的王国里有一条n个头的恶龙,你希望雇佣一些骑士把它杀死(砍掉全部的头). 村里有m个骑士能够雇佣.一个能力值为x的骑士能够砍掉恶龙一个致敬不超过x的头,且须要支付x个金币. 怎样雇佣骑士才干砍掉恶龙的全部头.且须要支付的金币最少?注意,一个骑士仅仅能砍一个头(且不能被雇佣两次). 输入格式:输入包括多组数据. 每组数据的第一行为正整数n和m(1<=n,m<=20000):下面n行每行为一个整数.即恶龙每一个头的直径.下面m行每行为一个整数,即每一个骑士的能力. 输入结束标志为n=

经典算法题每日演练——第二十四题 梳排序

原文:经典算法题每日演练--第二十四题 梳排序 这篇再看看一个经典的排序,梳排序,为什么取名为梳,可能每个梳都有自己的gap吧,大梳子gap大一点,小梳子gap小一点. 上一篇我们看到鸡尾酒排序是在冒泡排序上做了一些优化,将单向的比较变成了双向,同样这里的梳排序也是在冒泡排序上做了一些优化. 冒泡排序上我们的选择是相邻的两个数做比较,就是他们的gap为1,其实梳排序提出了不同的观点,如果将这里的gap设置为一定的大小, 效率反而必gap=1要高效的多. 下面我们看看具体思想,梳排序有这样一个1.

C语言每日一练——第二题

一.题目要求 已知数据文件in.dat中存有300个四位数,并调用读函数readDat()把这些数存入数组a中,请编制一函数jsValue(),其功能是:求出所有这些四位数是素数的个数cnt,再求出所有满足此条件的四位数平均值pjz1,以及所有不满足此条件的四位数平均数pjz2.最后main()函数调用写函数把结果cnt,pjz1,pjz2,输出到out.dat文件中 二.in.dat文件内容 7704,9774,3213,5845,7703,2902,1925,2584,7429,6646 3

C语言每日一练——第一题

一.程序功能 程序的功能是:将大于整数m且紧靠m的k个素数存入数组xx.并把in.dat文件的内容输入到程序,并把输出结果输出道out.dat文件夹中例如:若输入17,5 则应该输入:19,23,29,31,37 1.in.dat文件内容 17 5 101 7 321 5 32 4 55 6 76 6 99 4 781 5 22 6 66 3 2.程序实现 #include <stdio.h> //判断m是否为素数 /*int isP(int m) { int i; for(i = 2; i

python每日一练:0004题

第 0004 题: 任一个英文的纯文本文件,统计其中的单词出现的个数. import re count = 0 with open('./EnglishText.txt','r') as f: temp = f.readlines() for i in temp: regList = re.findall('[a-zA-Z0-9]+',i) #找出每一行中的单词数 count += len(regList) print("文本EnglishText.txt中单词的个数为:{0}".fo

python每日一练:0015题

第 0015 题: 纯文本文件 city.txt为城市信息, 里面的内容(包括花括号)如下所示: { "1" : "上海", "2" : "北京", "3" : "成都" } 请将上述内容写到 city.xls 文件中,如下图所示: 代码如下: import xlwt import re workbook = xlwt.Workbook() worksheet = workbook.ad

python每日一练:0011题

第 0011 题: 敏感词文本文件 filtered_words.txt,里面的内容为以下内容,当用户输入敏感词语时,则打印出 Freedom,否则打印出 Human Rights. 北京 程序员 公务员 领导 牛比 牛逼 你娘 你妈 love sex jiangge 示例代码: inputs = input('请输入内容:') with open('filtered_words.txt','r',encoding='utf-8') as f: while True: word = f.read

每日一练:排序题:一大一小,依次类推题

/*描述:有一组数(43,14,6,9,3,27,38,19,5等) 排序:将最大的放在第一位,最小放在第二位,剩下的最大的放在第三位,最小的放在第四位,以此类推 输出排序结果*/ package everyDay; import java.util.Arrays; public class SortTest { /** * 实现思路:1.数组的排序小大 * 2.判断数组奇偶 * 2.1偶数:除2,小前半部分b数组,大后半部分c数组长度 * 2.2 再分别把a的值给b和c,又两个循环 * 2.3

C语言每日一题之No.9

再做决定之前,我还是做好自己该做的.我不希望几年后会悔恨自己为什么在最该努力的时候不愿意吃苦.尊敬的女王陛下,请接题: 一.题目:有已按升序排好顺序的字符串a,编写程序将字符串s中的每个字符按升序的规则插到字符串a中,最后输出"abdefghjkmnptwy". 二.思路:既然是已经排好序的,就用二分法查找的思想 将字符串s中的每个字符依次作为key拿来和字符串a做比较并且插入 三.程序 1 #include <stdio.h> 2 #include <string.