• 上机练习七


    导航:复试上机历年真题,题目未搜集全
    十四:2003 十三:2004
    十二:2005 十一:2006
    十:2007 九:2008
    八:2009 七:2012
    六:2013 五:2014
    四:2015 三:2017
    二:2018 一:2019

    2012

    1、打印菱形

    题目:
    打印菱形,中间以空格隔开
    如 n=5 时输出如下图形:

        *
      * * *
    * * * * *
      * * *
        *
    

    代码:

    #include<stdio.h>
    
    int main()
    {
    	int N;
    	scanf("%d", &N);
    
    	for(int i=1;i<=N/2+1;i++)//三角带中间一行 
    	{
    		for(int j=1;j<=N/2+1-i;j++)
    			printf("  ");
    		for(int j=1;j<=2*i-1;j++)
    			printf("* ");
    		printf("
    ");		
    	}	
    	
    	for(int i=N/2+2;i<=N;i++)//下半个倒三角 
    	{
    		for(int j=N/2+2;j<=i;j++)
    			printf("  ");
    		for(int j=1;j<=(N-i+1)*2-1;j++)
    			printf("* ");
    		printf("
    ");
    	}
    	
    	
    	return 0;
    }
    
    

    2、素数

    题目:
    打印 n 以内(包括 n)的所有素数,从小到大,中间用空格隔开

    代码:

    #include<stdio.h>
    
    
    bool isprime(int x)
    {
    	for(int i=2;i<=x/2;i++)
    		if(x%i==0)
    			return false;
    	return true;
    }
    
    
    
    int main()
    {
    	int N;
    	scanf("%d", &N);
    	for(int i=2;i<=N;i++)
    	{
    		if(isprime(i)==true)
    			printf("%d ", i); 
    	}
    	
    	
    	return 0;	
     } 
    

    3、递归多项式

    题目:
    函数P(n, x)满足如下关系

    • P(n, x)= 1, n=0时
    • P(n, x)= x, n=1时
    • P(n, x)= ((2n-1)x-P(n-1, x)-(n-1)*P(n-2, x)), n>1时

    代码:

    #include<stdio.h>
    
    
    double p(int n, double x)
    {
    	if(n==0)
    		return 1;
    	else if(n==1)
    		return x;
    	else 
    		return ((2*n-1)*x-p(n-1, x)-(n-1)*p(n-2, x));
    	
    }
    
    
    int main()
    {
    	int n;
    	double x;
    	scanf("%d %lf", &n, &x);
    	printf("变量为%5.2f的第%d阶多项式值为%5.2f
    ", x, n, p(n, x));
    	
    	return 0;
    }
    

    4、求满足条件的数

    题目:
    求出10-99之间所有每位数的乘积大于每位数之和的数,如98满足:9*8>9+8。

    代码:

    #include<stdio.h>
    
    
    
    int main()
    {
    	int a[100];
    	int num=0;
    	
    	int x,y;
    	for(int i=10;i<=99;i++)
    	{
    		x = i/10;
    		y = i%10;
    		if(x*y>x+y)
    			a[num++]=i;
    	}
    	
    	int sums=0;
    	for(int i=0;i<num;i++)
    	{
    		sums+=a[i];
    	}
    	
    	printf("%d
    ", sums);
    	
    	return 0;
    } 
    

    5、学生链表

    题目:
    建立一个链表,其每个节点代表一位学生的信息。信息从文件 a.in 中读取(其格式为第一行为一个大于零的整数表示学生的数量,以后每行表示一位学生的信息)完成:(这里用输入代替从文件中读取)
    1.求平均年龄。
    2.以姓名为标准(字典序,从小到大,区分大小写)对链表进行排序,输出排序后的学号

    对于名字字典相同的学生要比较其id,按照id排列
    使用尾插法创建链表
    使用选择排序对链表排序

    代码:

    #include<stdio.h>
    #include<math.h>
    #include<string.h>
    #include<algorithm>
    
    using namespace std;
    
    
    typedef struct Node{
    	char id[100];
    	char name[100];
    	int age;
    	struct Node *next;
    }Node, *Linklist;
    
    
    void creatLinklist(Linklist L, int n)//尾插法创建新链表, n个结点 
    {
    	L->next = NULL;
    	Node *q, *r;
    	r = L;
    	for(int i=0;i<n;i++)
    	{
    		q = new Node;
    		scanf("%s %s %d", q->id, q->name, &q->age);
    		q->next = NULL;
    		r->next = q;
    		r = r->next;
    	}
    }
    
    
    double calAverAge(Linklist L)//遍历链表求平均值 
    {
    	Node *r;
    	r = L->next;
    	int count;
    	double res, sums;
    	
    	sums=0; count=0;
    	while(r!=NULL)
    	{
    		count++;
    		sums+=r->age;
    		r = r->next;
    	}
    	res = sums/count;
    	return res;
    }
    
    
    int cmp(Node *p, Node *q)
    //对学生的名字按照字典序比较
    //如果p->name<q->name,返回负数,如果p->name>q->name返回正数
    //如果p->name==q->name,进一步比较学生id
    //如果p->id<q->id,返回负数,如果p->id>q->id返回正数
    //不可能存在两人名字相同并且学号相同 
    {
    	int res;
    	res = strcmp(p->name, q->name);
    	if(res!=0)
    		return res;
    	else//如果名字相同,则按照id比较
    	{
    		int idcmp = strcmp(p->id, q->id);
    		return idcmp;
    	} 
    }
    
    
    void selcetSort(Linklist L) 
    //根据姓名对链表进行选择排序 
    {
    	Node *p, *q, *m;
    	for(p=L->next;p->next!=NULL;p=p->next)
    	{
    		m = p;
    		for(q=p->next;q!=NULL;q=q->next)
    		{
    			if(cmp(q, m)<0)
    				m = q;
    		}
    		
    		if(m!=p)
    		{
    			swap(p->age, m->age);
    			swap(p->name, m->name);
    			swap(p->id, m->id);
    		}
    			
    	}
    }
    
    
    
    int main()
    {
    	Linklist L;
    	L = new Node;
    	int N;
    	
    	printf("请输入学生个数:"); 
    	scanf("%d", &N); 
    	
    	creatLinklist(L, N);
    	double aver = calAverAge(L);
    	printf("平均年龄为:%.2f
    ", aver);
    	
    	Node *r;
    	r = L->next;
    	printf("学生链表为:
    "); 
    	while(r!=NULL)
    	{
    		printf("%s %s %d
    ", r->id, r->name, r->age);
    		r = r->next;
    	}
    	
    	selcetSort(L);
    	r = L->next;
    	printf("学生链表按照姓名从小到大排列为:
    "); 
    	while(r!=NULL)
    	{
    		printf("%s %s %d
    ", r->id, r->name, r->age);
    		r = r->next;
    	}
    	
    	return 0;
    } 
    
  • 相关阅读:
    (16)C#继承
    (3)新概念英语一(11-20)lessons
    (15)C#集合
    (14)编码
    (2)新概念英语一(1-10)lessons
    (13)C#数组和元组
    Uva 11729 Commando War
    Uva 11292 Dragon of Loowater
    谈谈单元最短路
    [USACO 3.3.1]骑马修栅栏t
  • 原文地址:https://www.cnblogs.com/welan/p/12714903.html
Copyright © 2020-2023  润新知