int LeapYear(int year){/***********FOUND***********/ return ((year%4==0 && year%100) && (year%400==0)); }
int main(){
int mon_days[2][11]={{31,28,31,30,31,30,31,31,30,31,30},{31,29,31,30,31,30,31,31,30,31,30}}; int year,mon,day,days; int i;
scanf(\"%d %d %d\",&year,&mon,&day); days=day;
/***********FOUND***********/ for(i=0;i〈mon—2;i++)
/***********FOUND***********/ days=mon_days[LeapYear(year)][i]; printf(”%d\\n\); getch(); return 0; }
第三套
5
题目:主函数main()调用函数MyStrcat()将字符串src连接到字符串dstStr后面。下面给定的程序存在错误,请改正. #include 〈stdio。h> #include 〈conio.h〉
void MyStrcat(char dstStr[], char srcStr[]){ int i,j; i=j=0;
/***********FOUND***********/ while(dstStr[i++]) i++; i-=1;
while(srcStr[j]){
dstStr[i]=srcStr[j]; i++;j++; }
/***********FOUND***********/ srcStr[i]=0; }
int main(){
char dst[100]=\"This is \"; char src[20]=\"C Test!”;
/***********FOUND***********/ MyStrcat(dst[100],src[20]); puts(dst); getch(); return 0; }
第四套
题目:程序去除主函数main()中字符串str中的非字母字符。函数IsAlpha()的功能是判断字符c是否为字母。 #include 〈stdio。h〉 #include /***********FOUND***********/return ((c〉='a’ && c<=’z’) && (c>=’A' && c〈=’Z’)); }
int main(){
char str[]={”/** One World,One Dream! **/\"}; int prev,next; prev=next=0;
6
while(str[next]){ if(IsAlpha(str[next])){
/***********FOUND***********/ str[next]=str[prev]; prev++; }
next++; }
/***********FOUND***********/ str[next]=0; puts(str); getch(); return 0; } 第五套
题目:主函数main()统计字符串str中的各字母(不区分大小写)及其他字符出现的次数,并显示统计结果(次数为0,则不显示)。下面给定的程序存在错误,请改正。 #include int main(){char str[]={”---JiangSu Teachers University of Technology———\"}; int chnum[27]={0},i=—1;
/***********FOUND***********/ while(str[i]){
if(isalpha(str[i]))
/***********FOUND***********/ chnum[toupper(str[i])—97]++; else
chnum[26]++; }
for(i=0;i〈27;i++)
/***********FOUND***********/ if(chnum[i]=0) if(i==26)
printf(”other ch=%d\\n\",chnum[26]); else
printf(\"%c(%c)=%d\\n”,i+65,i+97,chnum[i]); getch(); return 0;
7
}
8
第三部分【程序设计题】
第一套
题目:假设英文大小写字母的权值分别为: A—E,a—e 1; F-J,f-j 2; K-O,k—o 3; P—T,p—t 4; U-Y,u—y 5; Z,z 6
计算主函数main()中数组words中的各英文单词的权重(英文单词的权重为该单词各字母权值之和).
例如:
单词\"World\"的权重为16(W为5;o为3;r为4;l为3;d为1,5+3+4+3+1=16)。 编写程序:
1. 编写函数void calculate(char w[][20],int n,int p[]),计算数组w中n个英文单词的权重,并将权重存放在数组p中.
2。 编写函数void sort(int p[],int n,char w[][20]),对数组p中n个单词的权重进行降序排序,权重所对应单词在数组w中的位置也要作相应调整。
——-——-—-—-—————-——-----——-—--———--———-—--——-————-——--—---
注意:请勿改动主函数main()中的任何语句。
———-—————————-—-—-—------—————---——---—-—--———--—-—----*/
#include #include void calculate(char w[][20],int n,int p[]){ /**********Program**********/
/********** End **********/ }
void sort(int p[],int n,char w[][20]){ /**********Program**********/
9
/********** End **********/ }
int main(){
char words[5][20]={{\"JiangSu\"},{\"Teachers”},{”University”},{\"of\{”Technology”}};
int value[5]={0}; int i;
FILE *fp; if((fp=fopen(\"DATA.TXT\",”w”))==NULL){ printf(\"File open error\\n”); exit(0); }
calculate(words,5,value); for(i=0;i<5;i++){
fprintf(fp,\"%-20s%4d\\n\[i],value[i]); printf(\"%-20s%4d\\n\[i],value[i]); }
printf(”\\n”);
fprintf(fp,\"\\n\"); sort(value,5,words); for(i=0;i<5;i++){
fprintf(fp,”%-20s%4d\\n”,words[i],value[i]); printf(\"%-20s%4d\\n”,words[i],value[i]); }
fclose(fp); getch(); return 0; }
第二套
题目:主函数main()中str_b是这样的字符串:若干个长度不等的,连续的'0’、'1'字符组成的字符子串被长度不等的’.'字符间隔。将连续的'0'、’1'字符子串看成是二进制整数。要求将其转换为十进制整数。其中字符子串的首字符代表二进制数的符号位,'0’表示正数,'1’表示负数。例如:\"0111”表示7,”1111\"表示-7。
编写程序:
1. 编写函数int convert(char b[],int d[]),将字符数组b中连续二进制数字字符子串转换为十进制整数,并存入整型数组d中。函数返回十进制数的个数。 2. 编写函数void sort(int d[],int n),对数组d中n个元素进行升序排序。 #include〈stdio.h〉 #include〈stdlib.h〉
10
#includeint convert(char b[],int d[]){/**********Program**********/
/********** End **********/ }
void sort(int d[],int n){
/**********Program**********/
/********** End **********/ }
int main(){
char str_b[100]=”。。.111100。01111.01100111。.。0111..110000.011..”; int int_d[10]; int i,k; FILE *fp;
if((fp=fopen(\"DATA.TXT\){ printf(”File open error\\n”); exit(0); }
k=convert(str_b,int_d); for(i=0;i〈k;i++){
printf(\"%d\”,int_d[i]);
fprintf(fp,\"%d\”,int_d[i]); }
printf(\"\\n\");
fprintf(fp,”\\n”); sort(int_d,k);
for(i=0;i〈k;i++){
printf(\"%d\”,int_d[i]); fprintf(fp,\"%d\\",int_d[i]); }
11
printf(”\\n”); fprintf(fp,”\\n”); fclose(fp); getch(); return 0; }
第三套
题目:主函数main()的一维数组a中元素为非0整数。程序将负数存入数组b的左侧,正数存入数组b的右侧,并将数组b左侧的负数按升序,右侧的正数按降序重新排列。
编写程序:
1。 编写函数int split(int a[],int b[],int len),将数组a中len个整数分别存放在数组b的左右两侧,其中负数存入数组b的左侧,正数存入数组b的右侧。函数返回数组b中最后一个负数的下标. 2. 编写void sort(int a[],int left,int right,int order)函数,对数组a中下标在[left, right]范围内的元素进行升序或降序排序.当order=1时,进行降序排序,当order=0时,进行升序排序。 #include #include #include〈conio.h> int split(int a[],int b[],int len){/**********Program**********/
/********** End **********/ }
void sort(int a[],int left,int right,int order){ /**********Program**********/
/********** End **********/ }
int main(){
int a[10]={7,-2,3,14,-5,—6,5,22,-4,8},b[10];
12
int i,mid; FILE *fp;
if((fp=fopen(\"DATA。TXT\))==NULL){ printf(”File open error\\n”); exit(0); }
mid=split(a,b,10); for(i=0;i<10;i++){
printf(”%d\”,b[i]); fprintf(fp,”%d\\[i]); }
printf(”\\n”); fprintf(fp,”\\n”); sort(b,0,mid,0); sort(b,mid+1,9,1); for(i=0;i〈10;i++){ printf(”%d\\]);
fprintf(fp,”%d\\",b[i]); }
printf(\"\\n”); fprintf(fp,”\\n”); fclose(fp); getch(); return 0; }
第四套
题目:主函数main()中一维数组ring[9]存放数字1-9。将ring看成是一个首尾相接的环。将9个数分成3段,第1段为1个2位数,第2段为1个3位数,第3段为1个4位数,程序计算这3段数之和。要求从环的第1个数开始,直到第9个数,依上述规则进行处理。同时在这些和中寻找77的整数倍的数。 例如:
从环的第一个数开始的3段数为12,345,67,其和为7146; 从环的第二个数开始的3段数为23,456,71,其和为8370; 。.。。.
从环的第九个数开始的3段数为91,234,5678,其和为6003; 编写程序:
1. 编写函数void calculate(int ring[],int st[]),从数组ring的第1个数开始,将9个数分成3段,第1段为1个2位数,第2段为1个3位数,第3段为1个4位数,程序计算所有3段数之和。并将所有3段数之和存入数组st中。
2。 编写函数int check(int st[],int t77[]),在数组st中寻找77的整数倍的数,存
13
入数组t77中,函数返回其个数. #include #include〈stdlib.h> #includevoid calculate(int ring[],int st[]){
/**********Program**********/
/********** End **********/ }
int check(int st[],int t77[]){
/**********Program**********/
/********** End **********/ }
int main(){
int ring[9]={1,2,3,4,5,6,7,8,9}; int st[9],t77[9],i,k; FILE *fp;
if((fp=fopen(”DATA。TXT”,\"w”))==NULL){ printf(\"File open error\\n”); exit(0); }
calculate(ring,st); for(i=0;i<9;i++){
printf(”%d\”,st[i]); fprintf(fp,\"%d\\",st[i]); }
printf(\"\\n”); fprintf(fp,\"\\n\"); k=check(st,t77); for(i=0;i〈k;i++){
14
printf(”%d\”,t77[i]);
fprintf(fp,\"%d\”,t77[i]); }
printf(”\\n”); fprintf(fp,\"\\n”); fclose(fp); getch(); return 0; }
第五套
题目:将主函数main()中字符数组IPb中的32个’0’,'1’字符看做一个32位的二进制形式的IP地址,将其转换为4个十进制数整数形式的IP地址。并以点分十进制记法(XXX。XXX。XXX。XXX)输出IP地址。同时指出该地址所属的地址类。IP地址类见下面分类:
A类地址:1.0.0。1—126.255。255。254 B类地址:128。0。0.1-191。255。255.254 C类地址:192。0.0.1-223.255.255。254 D类地址:224。0.0.0-239。255.255.255 E类地址:240- 编写程序:
1。 编写函数void btod(char ipb[],int ipd[]),将字符数组ipb中由字符组成的二进制IP地址转换为十进制IP地址,存入数组ipd中。
2。 编写函数char classto(int ip),依据参数ip,判断IP所属的地址类,函数返回所属类的字符('A’~'E’)。 #include 〈stdio。h〉 #include 〈conio。h〉 #include 〈stdlib。h>
void btod(char ipb[],int ipd[]){
/**********Program**********/
/********** End **********/ }
char classto(int ipd){
/**********Program**********/
15
/********** End **********/ }
int main(){
char IPb[33]=\"11000000111011001110001110000011\",c; int IPd[4]={0},i; FILE *fp;
btod(IPb,IPd); c=classto(IPd[0]);
if((fp=fopen(”DATA。TXT\)==NULL){ printf(”File open error\\n”); exit(0); }
for(i=0;i<3;i++){
printf(\"%d。”,IPd[i]); fprintf(fp,”%d。\ }
printf(”%d\\[3]); fprintf(fp,\"%d\\[3]); printf(”%c类地址\\n\",c); fprintf(fp,\"%c类地址\\n”,c); fclose(fp); getch(); return 0; }
16