第一届
1. 输入一个五位整数,将它反向输出。例如输入12345,输出应为54321。(15分)
Strrev();
2. 用两种循环结构分别编程计算1+2+3…+100的值。
运行结果为“1+2+…+100=5050”(15分)
3. 从终端读入20个数据到数组中,统计其中正数的个数,并计算它们之和。(15分)
4. 利用指针实现将5个整数输入到数组a中,然后将a逆序复制到数组b中,并输出b中各单元的值。(20分)
5. 要将五张100元的大钞票,换成等值的50元,20元,10元,5元一张的小钞票,要求换成30张小钞票,每种面值的至少一张,编程输出所有可能的换法,程序应适当考虑减少重复次数。(25分)
6. 求n以内(不包括n)同时能被3和7整除的所有自然数之和的平方根s,并作为函数值返回,最后结果s输出到文件out.dat中。例如若n为1000时,函数值应为:s=153.909064。(30分)
第四届(A)
1、编写一个程序,让它有以下功能:从键盘上输入一个五位数,对此整数中的五个数值进行从大到小排序,形成一个新的五位数,输出这个整数。(15分)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int cmp(const void* a,const void* b)
{
return *(char*)b - *(char*)a;
}
int main()
{
char s[6];
scanf("%s",s);
qsort(s,5,sizeof(s[0]),cmp);
printf("%s\n",s);
}
2、输入年、月、日,输出该日期是该年的第几天。(25分)
3、利用数组实现数据的存储。将学生的学号和成绩存储在数组中,利用循环计算出数组中存储学生的平均成绩,找出高于平均分的学生信息并输出。(20分)
4、输入五个国家的名字,按字母顺序(即按ASCII码从小到大的顺序)排列输出。(20分)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int cmp(constvoid* a,const void* b)
{
return strcmp((char*)a,(char*)b);
}
int main()
{
int i;
char s[5][10];
for(i=0;i<5;i++)
scanf("%s",s[i]);
qsort(s,5,sizeof(s[0]),cmp);
for(i=0;i<5;i++)
printf("%s\n",s[i]);
}
5、用指针实现:任意输入20个数,将它们按照从大到小的顺序输出。(20分)
附加题
6、编写一个简单的通讯录管理系统。通讯录包括:姓名、通讯地址、邮编、联系电话,现编写一个通讯录管理系统,可以对通讯录进行输入、显示、查找,通讯录保存到一个文件中。(50分)
(提示:可能用到以下库函数:
malloc(),功能:分配size字节的存储区,
用法:(类型 *)malloc(size *sizeof(你要定义的类型));包含于<stdlib.h>库中
feof(),功能:检测文件是否结束
用法: int feof(fp)
FILE *fp;包含于<stdio.h>库中。)
(B)
1、编程完成数据加密。数据是五位的整数,加密规则为:每位数字都加上6,然后用和除以8的余数代替该数字,再将第一位和第五位交换,第二位和第四位交换。(15分)
2、请猜数字,该数字由系统随即产生。要求:用户最多有10次猜测的机会,如果在10次内猜对数字,则程序显示祝贺信息,如果连续10次都没有猜中数字,则游戏自动退出。(25分)
(提示:可能用到以下库函数:
randomize();用系统的时间作为随机种子;包含于stdlib.h库中
random(100):随机产生0-99之间的一个随机数;包含于stdlib.h库中
toupper():将字符c转换为大写英文字母,包含于ctype.h库中)
3、有一个3×4的矩阵,要求编写程序找出每一行中最大值并与第一列交换。(20分)
4、输入五个字符串,要求按照字母顺序(即按ASCII码从小到大的顺序)输出这五个字符串。(20分)
5、用指针实现:把一个整数插入到由小到大排列的数列中,插入后仍然保持由小到大的顺序。(20分)
附加题
6、编写一个简单的通讯录管理系统。通讯录包括:姓名、通讯地址、邮编、联系电话,现编写一个通讯录管理系统,可以对通讯录进行输入、显示、查找等,通讯录保存到一个文件中。(50分)
(提示:可能用到以下库函数:
malloc(),功能:分配size字节的存储区,
用法:(类型 *)malloc(size *sizeof(你要定义的类型));包含于<stdlib.h>库中
feof(),功能:检测文件是否结束
用法: int feof(fp)
FILE *fp;包含于<stdio.h>库中。)
第五届(A)
1、 编程解决如下数学问题:有12升水,怎样利用一个8升和一个5升的容器将水分为两个6升?要求以如下格式打印出分水步骤。(20分)
a12 b8 c5
12 0 0
* * * ( “*”表示当前状态下每个容器的盛水量)
......
0 6 6
2、 编程实现:有二维数组a[3][3]={{5.4,3.2,8},{6,4,3.3},{7,3,1.3}},将数组a的每一行元素均除以该行上的主对角元素(第1行同除以a[0][0],第2行同除以a[1][1],...),按行输出新数组。(20分)
3、 编程:设x取值为区间[1,20]的整数,求函数f(x)=x-sin(x)- cos(x)的最大值,要求使用自定义函数实现f(x)功能。(20分)
4、 编写函数fun,通过指针实现将一个字符串反向。要求主函数输入字符串,通过调用函数fun实现输入字符串反向。(20分)
5、 已知学生三门课程基本信息如下。请使用结构体编程,计算学生三门课程平均成绩后,列表输出学生的姓名、数学、英语、计算机、平均分信息,并按平均分排序。(20分)
姓名 数学 英语 计算机
Mary 93 100 88
Jone 82 90 90
Peter 91 76 71
Rose 100 80 92
6、 附加题:编程实现输入一串英文,统计其中各单词出现的个数(不区分大小写字母),以“000”作为字符串输入结束标志,例如:
Twinkle twinkle little star 000(回车)
twinkle little star
2 1 1 (50分)
(B)
1、 编程解决如下问题:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡, 问鸡翁,鸡母,鸡雏各几何?(20分)
2、 编程实现:有二维数组a[3][3]={{1.3,2.7,3.6},{2,3,4.7},{3,4,1.27}},将数组a的每一行元素均除以该行上绝对值最大的元素,按行输出新数组。(20分)
3、 编程:设x、y取值为区间[1,10]的整数,f(x,y)=(3x-2y)/(x+y),求使f(x,y)取最小值的x1、y1,要求使用自定义函数实现f(x,y)功能。(20分)
4、 编写函数fun,其功能是:在字符串中所有数字字符前加一个“*”字符,要求通过指针实现。(20分)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
void fun(char *str)
{
char*s_p,*s_new;
s_p = str;
while(*s_p!='\0')
{
if(*s_p>='0'&&*s_p<='9')
{
s_new = (char*)malloc(strlen(str)+1);
strcpy(s_new,s_p);
*s_p = '\0';
strcat(str,"*");
s_p++;
strcat(str,s_new);
free(s_new);
s_new = NULL;
}
s_p++;
}
puts(str);
}
int main()
{
charstr[100];
gets(str);
fun(str);
return 0;
}
5、 编程:已知学生记录由学号和学习成绩构成,N名学生的记录已存入结构体数组中,找出成绩最低的学生,并输出这个学生的信息,已知学生信息如下。(20分)
A01,81;A02,89;A03,66;A04,87;A05,77
A06,90;A07,79;A08,61;A09,80;A10,71
6、 附加题:编写一个函数InverseByWord(char*sentence),实现一个英文句子按单词逆序存放的功能,并给出测试程序。(50分)
如:This is an interestingprogramme.
逆序后变为:.programmeinteresting an is This
第六届(A)
编程解决如下问题(50分)。
有一个数学等式:AB*CD=BA*DC,式中的一个字母代表一位数字,试找出所有符合上述要求的乘积式并打印输出。
2. 编程解决如下问题(50分)。
请在整数n=742683613984中删除8个数字,使得余下的数字按原次序组成的新数最小。要求如下:
(1)整数n和删除数字的个数“8”在源程序中完成赋值,程序直接输出运行结果;
(2)程序结果输出先后被删除的数字(之间以逗号分隔)和删除后所得的最小数。
(提示:整数n可以以字符数组的方式定义、赋值和处理)
3. 附加题:编程解决如下问题(50分)。
(1)已知平面上三个点:(7,1)、(4,6)、(5,8),判断这三点组成的三角形是何种三角形(锐角,直角,钝角)(10分);
(2)对(1)问中的三角形,给出它的外接圆半径(20分);
(3)已知平面上6个点的坐标为:(7,1)、(4,6)、(5,8)、(6,2)、(3,9)、(2,7),试求覆盖这6个点的覆盖圆最小半径(20分)。
(要求:点坐标数据在程序初始化中赋值完成,程序运行后直接输出结果,不进行数据输入;点坐标数据和题目要求完全一致,否则导致的结果不正确视为程序编写错误。)
(B)
编程解决如下问题(50分)。
有一个数学等式:ABCD*E= DCBA,式中的一个字母代表一位数字,试找出所有符合上述要求的乘积式并打印输出。
#include <stdio.h>
#include <stdlib.h>
int main()
{
intnum,i,j,s;
int div[4] ={0};
for(j=1000;j<=9999;j++)
{
num = j;
for(i=0;i<4;i++)
{
div[i] = num % 10;
num = num / 10;
}
s = div[0] * 1000 + div[1] * 100 +div[2] * 10 + div[3];
for(i=1;i<=9;i++)
{
if(j* i == s)
{
printf("%d* %d = %d\t",j,i,s);
}
}
}
return 0;
}
2. 编程解决如下问题(50分)。
请在整数n=92081346718538中删除10个数字,使得余下的数字按原次序组成的新数最大。要求如下:
(1) 整数n和删除数字的个数“10”在源程序中完成赋值,程序直接输出运行结果;
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int cmp(const void *a,const void *b)
{
return *(char*)b - *(char*)a;
}
int main()
{
char n[] = "92081346718538";
int m = 10;
int i;
int len =strlen(n) - m;
qsort(n,sizeof(n),sizeof(n[0]),cmp);
for(i=0;i<len;i++)
printf("%c",n[i]);
printf("\n");
return 0;
}
修改版:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char n[] = "72081346718538";
int len =strlen(n);
int m = 10;
int length =len - m;
int i,j,pos;
int num;
pos = 0;
for(i=0;i<length;i++)
{
num = -1;
for(j=pos;j<=m;j++)
{
if(n[j]-'0'>num)
{
num = n[j]-'0';
pos = j;
}
}
printf("%d",num);
m++;
pos++;
}
return 0;
}
(2)程序结果输出先后被删除的数字(之间以逗号分隔)和删除后所得的最大数。
(提示:整数n可以以字符数组的方式定义、赋值和处理)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int cmp(const void *a,const void *b)
{
return *(char*)a - *(char*)b;
}
int main()
{
char n[] = "92081346718538";
int len =strlen(n);
char m[100]= {0};
strcpy(m,n);
int i,j;
qsort(m,len,sizeof(m[0]),cmp);
for(i=0;i<len;i++)
{
for(j=0;j<10;j++)
{
if(n[i]==m[j])
{
printf("%c,",n[i]);
break;
}
}
}
for(i=len-1;i>=10;i--)
printf("%c",m[i]);
printf("\n");
return 0;
}
3. 附加题:编程解决如下问题(50分)。
在小于10的素数中有3、5、7组成的等差数列,在小于30的素数中有11、17、23、29组成的等差数列。试找出区间[100,1000]内的素数构成的最大等差数列(即等差数列包含的素数个数最多)并打印输出。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main()
{
intprime[1000]={0};
inti,j,k,sub,*max,*max_temp,count_temp=0,l=0,count=0;
for(i=101;i<=1000;i+=2)
{
for(j=2;j<=sqrt(double(i));j++)
{
if(i%j==0)break;
}
if(j>sqrt(double(i))) prime[l++] = i;//k个?素?数ºy
}
for(i=0;i<l;i++)
printf("%d\t",prime[i]);
printf("\n===========================================\n");
max = (int*)malloc(l*sizeof(int));
max_temp = (int*)malloc(l*sizeof(int));
memset(max,0,sizeof(max));
memset(max_temp,0,sizeof(max_temp));
for(i=0;i<l;i++)
{
for(j=i+1;j<l;j++)
{
count_temp = 0;
max_temp[count_temp++] = prime[i];
max_temp[count_temp++] = prime[j];
sub = prime[j] - prime[i];
for(k=j+1;k<l;k++)
{
if(prime[k]-max_temp[count_temp-1]==sub)
{
max_temp[count_temp++] =prime[k];
}
}
if(count<= count_temp)
{
count = count_temp;
for(k=0;k<count;k++)
{
max[k] = max_temp[k];
}
}
}
}
for(i=0;i<count;i++)
printf("%d\t",max[i]);
printf("\n===========================================\n");
for(i=0;i<l;i++)
{
for(j=i+1;j<l;j++)
{
count_temp = 0;
max_temp[count_temp++] = prime[i];
max_temp[count_temp++] = prime[j];
sub = prime[j] - prime[i];
for(k=j+1;k<l;k++)
{
if(prime[k]-max_temp[count_temp-1]==sub)
{
max_temp[count_temp++] =prime[k];
}
}
if(count== count_temp)
{
for(k=0;k<count;k++)
{
printf("%d\t",max_temp[k]);
}
printf("\n");
}
}
}
return 0;
}