• 计算机考研自命题(3)


    1、C语言–统计数字个数

    1、编写程序,输入正整数n(1~10000),再输入n个正整数,找出这n个数中出现次数最多的数字,统计并输出其出现的次数

    例如 1234 ,2345, 3456 中出现次数最多的数字是 3和 4 ,出现次数均为3次 。、

    /*
    解题思路:用一个长度为10的数组arr[10] = {0}存放每个数字出现的次数,初始全部为0,
    然后输入一个数字 temp ,将数字 temp对10取余数,将temp中的每个数字记录下来  arr[temp%10]++ , temp =temp/10
    然后再遍历数组,从中找到最大的值,其对应的下标就是出现次数最多的数字
    */
    
    # include
    int main(){
    	int n; // 可输入元素的个数
    	int i;
    	int temp; // 输入要统计的数字的整数
    	int arr[10]={0}; //用于存放0-9每个数字出现的次数 ,初始都为0个 
    	int max = 0; // 出现最多的次数 
    	printf("输入统计整数的个数:");
    	scanf("%d",&n);
    	printf("请输入%d个整数:",n);
    	// 输入的整数不能超过n 
    	for(i=0;i<n;i++){
    		scanf("%d",&temp);
    		// 统计每个数字出现的次数 
    		while(temp!=0){
    			arr[temp%10]++;
    			temp = temp/10;
    		}
    	}
    	
    	// 遍历数组 找出数组中存放的最大值,就表示出现次数最多 
    	for(i=0;i<10;i++){
    		if(max < arr[i]){
    			max = arr[i];
    		}
    	} 
    	
    	// 遍历数组,找出出现次数最多的数字 
    	// 数组对应的索引就表示出现的数字 
    	for(i = 0;i<10;i++){
    		if(arr[i] == max){
    			printf("出现最多的数字是:%d\n",i);
    		}
    	}
    	printf("出现次数:%d次",max);
    	return 0;
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    2、C语言–删除指定字符

    2、编写程序,输入字符s和字符串 ch ,在字符s中找到所有的ch字符后删除,得到新的字符并输出。要求通过编写用函数

    viod delchar(char *s,char ch),实现字符串s中的 ch 字符找到后删除的操作。

    /*
    解题熟路:定义一个s[]数组,用来存放一个字符串
    然后用gets(s)函数,往s数组中输入一串字符,
    然后在输入一个要删除的字符ch = getchar(),定义一个delete()函数,将s和ch传入delete(s,ch)函数中,
    遍历s中存放的字符,删除所有等于ch的字符
    */
    # include 
    void delchar(char *s,char ch){
    	int i=0,j=0;
    	while(s[i]!='\0'){   // 字符没有到末尾 
    		if(s[i]!=ch){	// 数组中的字符和待删除字符不相同 
    			s[j] = s[i]; // 字符保存在s[j]中 
    			j++;
    		}
    		i++;
    	}
    	s[j] = '\0';      // 添加结束标志 
    }
    
    
    int main()
    {
    	char ch;
    	char s[80];
    	printf("输入一串字符:"); 
    	gets(s);      //  输入一串字符    可以包含空格 
    	printf("数入待删除字符:");
    	ch = getchar();  // 数入一个字符 
    	delchar(s,ch);
    	printf("结果输出:");
    	puts(s);		// 输出一串字符 
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    3、C语言–年龄排序

    3、建立一个联系人记录簿,包含姓名,出生日期,电话三项,其中出生日期包含年月日三项,要求内嵌套结构体实现。编写程序

    输入n(小于8)个联系人的信息存入记录簿,并按年龄大小从大到小顺序输出。

    /*
    解题思路:在命令行输入联系人的相关信息,用冒泡排序将联系人按年龄从大到小排序
    先比较year,year越小年龄就越大
    如果year相同,则比较month,month越小年龄越大
    如果year和month都相同则比较day,day越小年龄越大
    直到将所有的联系人从大到小排好序
    */
    
    # include
    # define N 7
    // 联系人结构体
    struct Person{
    	char name[20];
    	char tel[11];
    	struct Time{
    		int year;
    		int month;
    		int day;
    	}Time;
    }Person; 
    
    // 输入联系人的基本信息 
    void Input(struct Person person[]){
    	int i,j;
    	struct Person t;
    	int year,month,day;
    	printf("请输入%d个联系人的信息:",N); 
    	
    	// 数入信息 
    	for(i = 0;i<N;i++){
    		scanf("%s %s %d %d %d",&person[i].name,&person[i].tel,&person[i].Time.year,
    		&person[i].Time.month,&person[i].Time.day);
    	}
    	
    	// 冒泡排序  按年龄从从大到小排 
       for(i = 0;i<N-1;i++){
       		for(j = N-1;j>i;j--){
       			if(person[j-1].Time.year > person[j].Time.year){
       				t = person[j];
       				person[j] = person[j-1];
       				person[j-1] = t;
    		   }
    		   if(person[j-1].Time.year == person[j].Time.year){
    		   	if(person[j-1].Time.month > person[j].Time.month){
    		   		t = person[j];
       				person[j] = person[j-1];
       				person[j-1] = t;
    			   }
    		   }
    		   
    		   if(person[j-1].Time.year == person[j].Time.year){
    		   	if(person[j-1].Time.month == person[j].Time.month){
    		   		if(person[j-1].Time.day > person[j].Time.day){
    		   			t = person[j];
       					person[j] = person[j-1];
       					person[j-1] = t;
    				   }
    			   }
    		   }
    	   }
       }
       
       // 输出
       printf("\n");
       printf("\n");
       printf("年龄从大到小排序序列是:\n");
       for(i = 0;i<N;i++) {
       	printf("%s %s %d %d %d\n",person[i].name,person[i].tel,
    	   person[i].Time.year,person[i].Time.month,person[i].Time.day);
       }
    } 
    
    
    int main(){
    	
    	int n,i,temp;
    	struct Person person[N],*p = person;
    	Input(p);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80

    4、C语言–文件删除注解

    4、给一个hello.c 文件,去掉hello.c 文件中的注释,并写入new_hello.c文件中。

    /*
    解题思路:
    一个只读的方式打开一个文件fp,一个只写的方式打开文件 fp2, 然后用fgets(str,n,fp)函数,将fp中长度为n-1的字符存放在str中,
    然后开始遍历str,直到str为空。在遍历期间,如果扫面到两个 //说明这个是注解,需要删除,直接添加换行符  \n 和 \0 结束标值。
    如果扫描到 / * 则先  用\0 标记表示结束,不需要后面的部分,然后再找到 * /  将之间的字符删除
    直到将整个文件的注解全部删除
    */
    
    
    # include 
    # include 
    
    int main(){
        FILE *fp,*fp1;
        char str[9999]="",str1[9999]="";
        int i,j,no=0;
        fp=fopen("201819测试.cpp","r"); //要打开的源文件
        fp1=fopen("new.cpp","w"); //另存为一个文件中
        while(fgets(str,9999,fp)!=NULL){
            for(i=0;i<9999;i++){
                if(str[i]=='/'&&str[i-1]=='/'){
    				str[i-1]='\n';
    				str[i]='\0';
    			}
                if(str[i]=='*'&&str[i-1]=='/'){
    				str[i-1]='\0';
    				no=1;
    				fputs(str,fp1);
    			}
                if(str[i]=='/'&&str[i-1]=='*'){
                    for(j=0;j<9998-i;j++){
    					str[j]=str[i+j+1];
    				}
                    str[j]='\0';
                    no=0;
                }
            }
            if(no==0){
            	fputs(str,fp1);
    		}
        }
        fclose(fp1);  // 关闭文件
        fclose(fp);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
  • 相关阅读:
    关于【Java】中(类)需要知道的
    Hyper-V Ubuntu 虚拟机配置双网卡
    Stream流 - 聚合操作和遍历操作
    【思维构造】Vampiric Powers, anyone?—CF1847C
    JAVA:在IDEA引入本地jar包的方法并解决打包scope为system时发布无法打包进lib的方案
    用Python写一个自动下载视频、弹幕、评论的软件(2022最新)
    深入了解Spring中的JSR 303验证和拦截器
    无涯教程-JavaScript - OCT2HEX函数
    基于UCOSII的DMA-SPI通信
    2021-09-02-Servlet请求与响应
  • 原文地址:https://blog.csdn.net/XUN__MLF/article/details/133988777