计算机考研自命题(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;
} 

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;
}

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;
}

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;
}

你可能感兴趣的:(考研,考研,数据结构,链表,算法,c语言,c++)