考研复试-----C语言上机操作(二)

上接(考研复试-----C语言上机操作(一)

第一题:

    1,问题描述

        冒泡排序。

    2,问题思路

        冒泡排序总共有两层循环,第一层循环是总共需要排序的次数,由于我们每次默认最后一个数字是有序的,因此,每次的遍历次数为n-1,而内层循环的目的是调整部分序列为有序序列,每次都从数组的第一个数开始,由于第i次的时候,有序数组的长度为i,因此我们遍历结束的条件是n-1-i,这或许有点抽象,大家在代码里看看吧。

        【注】想要了解更多的排序方式,大家可以参考这篇文章(基础算法总结)。

    3,参考代码

/*****************************
 File name:bubble sorting
 Author:zhangsan	Version:1.0		Date:2018/3/19
 Description:输入数字,对它进行冒泡排序 
 *****************************/

#include "stdio.h"

/*****************************
 *函数名: swap
 *作用:交换两个数的值 
 *参数:*i - 第一个数的地址   *j - 第二个数的地址 
 *返回值:无 
 *****************************/

swap(int *i, int *j){
	int temp;
	temp = *i;
	*i = *j;
	*j = temp;
}

/*****************************
 *函数名: bubble_sort 
 *作用:冒泡排序
 *参数:*a - 传进来的排序数组 
 *返回值:无 
 *****************************/

bubble_sort(int *a){
	int i,j;
	for( i = 0; i <10 - 1 ; i++){
		for( j = 1; j < 10 - 1 -i; j++){
			if(a[j] < a[j-1])
			swap(&a[j],&a[j-1]);
		}
	} 
}

/*****************************
 *函数名: display 
 *作用:遍历的输出数组的值 
 *参数:*a - 传进来的排序数组  n-传入数组的长度 
 *返回值:无 
 *****************************/

display(int *a,int n){
	int i;
	for( i = 0; i < n; i++){
		printf("%d ",a[i]);
	}
}

//主函数 
int main(){
	int a[10],i;
	
	printf("请输入10个数字(中间使用空格隔开):\n");
	for( i = 0; i < 10; i++){
		scanf("%d",&a[i]);
	}
	
	bubble_sort(a);				//对原数组进行排序 

	display(a,10);				//输出数组的值 
	return 0;
}

第二题:

    1,问题描述

        一坐标轴表示某道路,从0开始到L,整数位置上都种有一棵树,现改路维修,要砍掉铁路上的树木(铁路可以重叠)。例如:L等于10,铺设四条铁路,坐标是(1,2)、(2,3)、(2,8)、(3,5),那么1到8坐标点的树都要砍掉,剩下0,9,10三颗。程序要求,输入L,输入铺设铁路条数m,然后输入m铁路的坐标。求剩下多少颗树。

    2,问题思路

        建一个数组,然后设置为1,当在修铁路时把那一段的数字都改为0,最后统计还剩多少1。(或许还有更好的思路,能否用二维数组?)

    3,参考代码

/*****************************
 File name:Tree 
 Author:zhangsan	Version:1.0		Date:2018/3/19
 Description:留树的问题 
 *****************************/

#include "stdio.h"

/*****************************
 *函数名:init
 *作用:初始化数组,全设为1表示都存在一棵树 
 *参数:*a - 整个定义好的数组 
 *返回值:无 
 *****************************/

init(int *a,int n){
	int i;
	for( i = 0; i <= n; i++){
		a[i] = 1;
	} 
	
}

/*****************************
 *函数名: display 
 *作用:遍历的输出数组的值 
 *参数:*a - 传进来的排序数组  n-传入数组的长度 
 *返回值:无 
 *****************************/

display(int *a,int n){
	int i;
	printf(" ---->现在保留下来的树木为:");
	for(i=0;i<n+1;i++){
		if(a[i]){
			printf("%d-",i); 
		}	
	}
	printf("。"); 
}

//主函数 
int main(){
	int i,j,l,m;
	
	printf("请输入路的总长度:L = ");		
	scanf("%d",&l);			//输入总长度 
	
	int a[l+1];
	init(a,l+1);			//初始化树的数组 
	
	printf("\n请输入铺设铁路的总条数:M = ");		
	scanf("%d",&m);			//输入总条数 
	
	for(i = 1; i <= m; i++){
		int start,end;		//设置开始和结束值,然后把其中的值全换为0 
		printf("\n请输入第%d条铁路的开始位置和结束位置(中间拿空格隔开):",i);
		scanf("%d %d",&start,&end);
		while(start <= end){
			a[start] = 0;
			start++;
		}
	} 
	
	display(a,l); 	//输出结果 
		
	return 0;
}

第三题:

    1,问题描述

        字符处理:输入某字符,以"#"结束。输出的字符串要满足以下要求:①删除元音字母(包括大小写)。②辅音字母前加“!”。③字母大小写互换。例如:输入"tour#",输出"!T!R"。

    2,问题思路

        ①什么是元音,什么是辅音?答:除了a、e、i、o、u以外的全是辅音!

        ②字母大小写,在系统中,ASCII值为8、9、10 和13 分别转换为退格、制表、换行和回车字符。32是空格,48~57是0到9十个阿拉伯数字;65~90为26个大写英文字母,97~122号为26个小写英文字母。

        ③对于字符串的处理,你可以选择两种方式:一为输入完集中处理,二是一边输入一边处理。还是看个人喜好吧。

    3,参考代码

    /***************************** 
     File name:Test2  
     Author:zhangsan    Version:1.0     Date:2018/3/19 
     Description:字符串的处理 
     *****************************/  
      
    #include "stdio.h" 
      
    //主函数   
    int main(){  
           char c;
        while((c=getchar())!='#')
        {
            if(c=='a'||c=='A'||c=='e'||c=='E'||c=='i'||c=='I'||c=='o'||c=='O'||c=='u'||c=='U')
                continue;
            if(c >= 'a' && c <= 'z')
                printf("!%c",c-32);
            if(c >= 'A' && c <='Z')
                printf("!%c",c+32); 
        }
        return 0; 
    }  

第四题:

    1,问题描述

        有一矩形和以正方形。输入矩形的长n,宽m,和正方形边长a。输出至少多少个这样正方形能把该矩形完全覆盖(当然覆盖面积大于矩形)

    2,问题思路

        该该问题主要在于分类讨论,有三种情况①当a > n时,此时最简单,一个正方形便可完全覆盖长方形。②当n > a >m时,此时只要求出 n/a+1,那便是需要的正方形数目。③当 a < m时,此时个数为(n/a+1)*(m/a+1)。

    3,参考代码

    /***************************** 
     File name:Test2  
     Author:zhangsan    Version:1.0     Date:2018/3/19 
     Description:长方形被正方形覆盖的问题 
     *****************************/  
      
    #include "stdio.h" 
      
    /***************************** 
     *函数名: solve_sum  
     *作用:求出总的个数 
     *参数:n - 长方形的长 m-长方形的宽	 a-正方形的边长 
     *返回值:无  
     *****************************/  
      
    solve_sum(int n,int m,int a){ 
        int sum;
		if( a < m ){	
			sum = (n/a+1) * (m/a+1);
		}else if( a < n ){
			sum = n/a+1;
		}else {
			sum = 1;
		}
		printf("覆盖长 X 宽为%d x %d 的长方形需要%d个边长为%d的正方形。",n,m,sum,a);
      
    }  
      
    //主函数   
    int main(){  
        int n,m,a;
		
		printf("请分别输入长方形的长宽和正方形的边长(中间拿空格隔开):\n");
		scanf("%d %d %d",&n,&m,&a);
		
		solve_sum(n,m,a);		//主要的判断方法 
		
        return 0; 
    }  

参考:考研复试-----C语言上机操作(三)


-----------------------------END---------------------------------


猜你喜欢

转载自blog.csdn.net/zzzzlei123123123/article/details/79607984