zoukankan      html  css  js  c++  java
  • 上机练习七

    导航:复试上机历年真题,题目未搜集全
    十四: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;
    } 
    
  • 相关阅读:
    C#操作REDIS例子
    A C# Framework for Interprocess Synchronization and Communication
    UTF8 GBK UTF8 GB2312 之间的区别和关系
    开源项目选型问题
    Mysql命令大全——入门经典
    RAM, SDRAM ,ROM, NAND FLASH, NOR FLASH 详解(引用)
    zabbix邮件报警通过脚本来发送邮件
    centos启动提示unexpected inconsistency RUN fsck MANUALLY
    rm 或者ls 报Argument list too long
    初遇Citymaker (六)
  • 原文地址:https://www.cnblogs.com/welan/p/12714903.html
Copyright © 2011-2022 走看看