计算机考研自命题(3)

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

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

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

c 复制代码
/*
解题思路:用一个长度为10的数组arr[10] = {0}存放每个数字出现的次数,初始全部为0,
然后输入一个数字 temp ,将数字 temp对10取余数,将temp中的每个数字记录下来  arr[temp%10]++ , temp =temp/10
然后再遍历数组,从中找到最大的值,其对应的下标就是出现次数最多的数字
*/

# include<stdio.h>
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;
} 

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

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

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

c 复制代码
/*
解题熟路:定义一个s[]数组,用来存放一个字符串
然后用gets(s)函数,往s数组中输入一串字符,
然后在输入一个要删除的字符ch = getchar(),定义一个delete()函数,将s和ch传入delete(s,ch)函数中,
遍历s中存放的字符,删除所有等于ch的字符
*/
# include <stdio.h>
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;
}

3、C语言--年龄排序

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

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

c 复制代码
/*
解题思路:在命令行输入联系人的相关信息,用冒泡排序将联系人按年龄从大到小排序
先比较year,year越小年龄就越大
如果year相同,则比较month,month越小年龄越大
如果year和month都相同则比较day,day越小年龄越大
直到将所有的联系人从大到小排好序
*/

# include<stdio.h>
# 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;
}

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

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

c 复制代码
/*
解题思路:
一个只读的方式打开一个文件fp,一个只写的方式打开文件 fp2, 然后用fgets(str,n,fp)函数,将fp中长度为n-1的字符存放在str中,
然后开始遍历str,直到str为空。在遍历期间,如果扫面到两个 //说明这个是注解,需要删除,直接添加换行符  \n 和 \0 结束标值。
如果扫描到 / * 则先  用\0 标记表示结束,不需要后面的部分,然后再找到 * /  将之间的字符删除
直到将整个文件的注解全部删除
*/


# include <stdio.h>
# include <string.h>

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;
}
相关推荐
梦帮科技42 分钟前
AI 音乐产品的发布工程:验证门、数据发布、回滚与生产运维纪律
数据结构·数据库·架构·node.js·音视频·动态规划·推荐算法
泯泷1 小时前
那段文字是谁删的?Yjs 14 正式版之前,一套删除归属方案的实现与边界
前端·javascript·算法
hold?fish:palm1 小时前
34 合并K个升序链表
javascript·算法·链表
C++ 老炮儿的技术栈2 小时前
我们在设计tcp协议时,要传一个字符串过去,报文:头十长度十内容,是否要把‘\0‘也填入,长度是否包含‘\0‘
开发语言·数据结构·c++·mfc·c
Navigator_Z3 小时前
LeetCode //C - 1252. Cells with Odd Values in a Matrix
c语言·算法·leetcode
语戚5 小时前
力扣 1621. 大小为K的不重叠线段的数目:动态规划(Java 实现)
java·算法·leetcode·动态规划·力扣·dp
青山木5 小时前
Hot 100 --- 最长有效括号
java·数据结构·算法·leetcode·动态规划
是隼人5 小时前
buuctf-pwn [NewStarCTF 2023 公开赛道]stack migration(64位栈迁移)题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
这料鬼有毒6 小时前
二刷hot100-1143.最长公共子序列
算法·leetcode·动态规划
政企项目老覃7 小时前
边缘 AI 推理部署:安防零售场景下的模型裁剪与端侧落地实践
人工智能·程序人生·算法·性能优化·vllm