程序设计基础期末模拟题

1.格式输出类

(1)输入正整数m和方阵的阶次n,且m<=nn,参照输出样例的格式,按照蛇形方式在方阵中填充从0到m-1的数字,数字用完后用“”代替,每行数字或者’*'之间用Tab键分割,行末无Tab键。
样例
输入:
5
3
输出:
2 3 *
1 4 *
0 * *
输入2:
9
3
输出2:
2 3 8
1 4 7
0 5 6

可行代码

#include<stdio.h>
int main()
{
	int n,s;
	char a[100];
	scanf("%d",&s);
	scanf("%d",&n);
	int i,j,k;
	k=0;
	for(i=1;i<=(n*n);i++)
	{
		if(k<=s-1)
		{
		   	a[i]='0'+k;
		    k++;
		}
		else
		{
			a[i]='*';
		}	
	}
	char b[100][100]={};
	char c[100][100]={};
	for(j=n-1;j>=0;j--)
	{
		b[0][j]=a[n-j];
	} 
	k=n+1;
	for(i=1;i<n;i++)
	{
	     for(j=0;j<n;j++)
	     {
	     	b[i][j]=a[k];
	     	k++;
		 }
	}
	for(i=0;i<n;i++)
	{
	     for(j=0;j<n;j++)
	     {
	     	c[j][i]=b[i][j];
		 }
	}
	for(i=0;i<n;i++)
	{
	     for(j=0;j<n;j++)
	     {
	     	if(j==n-1)
	     	{
	     		printf("%c\n",c[i][j]);
			}
			else
			{
				printf("%c ",c[i][j]);
			}
		 }
	}
	return 0;
} 

(2)
请利用嵌套循环输出平行四边形,平行四边形行数为n,每行的“*”的数目也为n,n由键盘输入。
示例输入:
5
示例输出:
+++++
+++++
+++++
+++++
+++++

(注意此处显示有问题,应该是输出一个平行四边形,第二行前面1个空格,第三行前面2个空格,以此类推)

可行代码

#include<stdio.h>
int main()
{
	int i,j,n;
	scanf("%d",&n);
	for(i=1;i<=n*n;i++)
	{
		printf("+");
		if(i%n==0)
		{
			printf("\n");
			for(j=0;j<i/n;j++)
			{
				printf(" ");
			}
		}
	}
	return 0;
} 

2.字符串处理类

(1)编写程序,从键盘输入一行文本(长度不超过80),将文本中每个数字字符出现的次数存储于数组中,按照数字顺序输出每个数字字符的出现次数和所有数字出现的总次数。没有出现过的数字不输出,非数字字符不统计。
输入输出样例:
输入:
AdfdGG123 dfh2034.56 fd8s.

输出(在一行中输出所有信息。以从0到9的顺序输出文本中出现过的数字,用减号和大于号连接该数字出现的次数,不同数字间以逗号分隔,中间无空格。所有数字出现的总数用TOTAL表示):
0->1,1->1,2->2,3->2,4->1,5->1,6->1,8->1,TOTAL->10

可行代码

#include<stdio.h>
#include<string.h>
int main()
{
	char s[100]={};
	gets(s);
	int a[10]={};
	int i=0;
	while(s[i]!='\0')
	{
		if(s[i]=='0')
		   a[0]++;
		if(s[i]=='1')
		   a[1]++;
		if(s[i]=='2')
		   a[2]++;
		if(s[i]=='3')
		   a[3]++;	
		if(s[i]=='4')
		   a[4]++;
		if(s[i]=='5')
		   a[5]++;
		if(s[i]=='6')
		   a[6]++;
		if(s[i]=='7')
		   a[7]++;
		if(s[i]=='8')
		   a[8]++;
		if(s[i]=='9')
		   a[9]++;
		i++;
	}
	int d=0;
	for(i=0;i<10;i++)
	{
		d+=a[i];
	}
	for(i=0;i<10;i++)
	{
		if(a[i]!=0)
		{
			printf("%d->%d,",i,a[i]);
		}
	}
	printf("TOTAL->%d",d);
	return 0;
}

3.函数类

写一个函数,其功能是对一个字符串的内容进行压缩,压缩的规则是:如果该字符是第一次和第二次出现的字母(区分大小写),则保留;否则,则删去(标点符号、空格等非字母字符都删去,不符合保留条件的字母也删去)。通过函数返回压缩结果。在主函数中输入一个不长于50的字符串,调用上述函数进行压缩,并输出结果。
样例
输入:I,am.a student
输出:Iamastudent

输入:To be or not to be
输出:Tobeornttbe

可行代码

#include<stdio.h>
#include<string.h>
int main()
{
	char a[50];
	char b[50]={};
	gets(a);
	int i,k;
	k=0;
	while(a[i]!='\0')
	{
		if(a[i]>='A'&&a[i]<='Z'||a[i]>='a'&&a[i]<='z')
		{
			b[k]=a[i];
			k++;
		}
		i++;
	}
	puts(b);
	return 0;
}

4.指针函数类

(在子函数中要使用指针,完全不用指针的扣分 20%)
有一维整型数组a和b (长度<100),将它们元素的差集(a\b)保存到另一个数组c之中,且数组c不包含重复元素。该功能使用以下函数来实现:
int subst(int * a, int m, int * b ,int n,int * c);
说明:函数中a、b和c为数组,m和n代表a和b的元素个数,返回c的元素个数。
在主函数中输入正整数m和n,再输入a和b各元素的值,然后调用函数subst,最后在主函数显示c的全部元素值(顺序为它们在a中的顺序)。如果差集为空,输出 None
样例输入:
6 4
5 5 5 6 7 8
5 8 9 10
样例输出:
6 7

可行代码

#include<stdio.h>
#include<string.h>
int subst(int *a,int m,int *b,int n,int *c)
{
	int k,l,v;
	v=0;
	int flag;
	for(k=0;k<m;k++)
	{
		flag=0;
		for(l=0;l<n;l++)
		{
			if(*(a+k)==*(b+l))
			{
				flag=1;
				break;
			}
		}
		if(flag==0)
		{
			*(c+v)=*(a+k);
			v++; 
		}
	}
	*(c+v)=-9999;
}
int main()
{
	int a[100],b[100],c[100]={};
	int m,n;
	int i;
	scanf("%d %d",&m,&n);
	for(i=0;i<m;i++)
	{
		scanf("%d",&a[i]);
	}
	for(i=0;i<n;i++)
	{
		scanf("%d",&b[i]);
	}
	int *p=a,*q=b,*r=c;
	subst(p,m,q,n,r);
	i=0;
	if(c[0]==-9999)
	{
		printf("None");
	}
	else
	{
		while(c[i]!=-9999)
	   {
		printf("%d ",c[i]);
		i++;
	   }
	} 
   
	return 0;
}

5.结构体处理类

某单位组织面试,5位面试官分别给5位应聘者打分,人事部门从键盘依次输入5位应聘人员的信息(姓名和年龄)和5个得分(5位面试官),编写程序按总分从低到高排序,显示得分最低的前两名的排名、信息和总分。
(1)定义应聘人员信息的结构体CANDIDATE,包括姓名(由不含空格的26个英文字母的大小写构成,不超过10个字符)、年龄、5位面试官打分和总分,其中打分和总分均为浮点数;
(2)定义void input(struct CANDIDATE *candi)函数,用来输入一位应聘人员的信息(姓名和年龄)和面试得分,计算总分并保存;
(3)定义void output(struct CANDIDATE *candi)函数,用来输出一位应聘人员的信息(姓名和年龄)和面试总分(总分保留2位小数);
(4)定义void select(struct CANDIDATE *candi)函数,用来选出总分最低的前2名(假设不存在总分相同的情况);提示:可排序;注意:只需要选出前2名。
(5)在主函数中调用input、select和output函数。
示例输入(分隔符为空格)
Angle 26 86 84 93 86 90
Tom 25 85 73 84 96 93
Sophia 25 73 84 68 86 86
Zuis 24 83 75 92 85 79
Louise 26 95 83 86 87 93
示例输出(各数据项用英文空格隔开,英文冒号后也有一个空格,总分保留两位小数,每行最后一个数据项没有空格)
Number1: Sophia 25 397.00
Number2: Zuis 24 414.00

可行代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct CANDIDATE{
	char name[10];
	int age;
	float g1;
	float g2;
	float g3;
	float g4;
	float g5;
	float g6; 
};
void input(struct CANDIDATE *candi)
{
	scanf("%s %d %f %f %f %f %f",&candi->name,&candi->age,&candi->g1,&candi->g2,&candi->g3,&candi->g4,&candi->g5);
	candi->g6=candi->g1+candi->g2+candi->g3+candi->g4+candi->g5;
}
void output(struct CANDIDATE *candi)
{
	printf("%s %d %.2f\n",candi->name,candi->age,candi->g6);
	 
}
void select(struct CANDIDATE *candi)
{
	int i,j,k;
	char a[10];
	float t=0;
	for(i=0;i<4;i++)
	{
		k=i;
		for(j=i+1;j<=5;j++)
		{
			if((candi+k)->g6>(candi+j)->g6)
			{
				k=j;
			}
		}
		strcpy(a,(candi+k)->name);
		strcpy((candi+k)->name,(candi+i)->name);
		strcpy((candi+i)->name,a); 
		t=(candi+k)->g6;
		(candi+k)->g6=(candi+i)->g6;
		(candi+i)->g6=t;
	}
}
int main()
{
	struct CANDIDATE f[5];
	int w;
	for(w=0;w<5;w++)
	{
		input(&f[w]);
	}
	select(f);
	for(w=1;w<3;w++)
	{
		printf("Number %d:",w); 
		output(&f[w]);
	}
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值