9512.net
甜梦文库
当前位置:首页 >> 学科竞赛 >>

上机考试辅导



C语言上机考试辅导

1

C语言上机考试概况
? 考试时间: 70分钟 ? 上机考试内容及题型 总分:40分 – 改错题(调试程序)16分 – 编程题(编写程序)24分 ? 可使用的编译系统 – C语言系统(TC2.0,WinTC) – C++系统(TC3.0 ,VC 6.0,Dev C++等)

2

/>
上机考试 改错题

3

做改错题注意事项
? ? ? ? 直接打开T:盘中已存在文件myf1.c 只允许修改语句,不允许添加、删除语句。 可添加变量声明、函数声明、预处理命令 错误类型及数量 2个语法错: 编译时均有报错(Error)提示 2个语义错或算法错:少数语义错在编译或运行时有 警告(Warning)提示, 算法错在编译或运行时没有报 错提示但运行结果错 ? 尽力而为找到错误并改正,不要耽搁太长时间

4

常考 语法错

5

语法错 第1类:函数调用中实参表示错误
【例1】 void huan( int a[ ],int m[ ], int n, int *max)
{ }

huan函数头部另一种表示: void huan(int *a,int *m, int n,int *max) void main() { int a[20], i,n,m[4],max,sum=0; huan(a[ ],m[ ],20,&max); /*报错1*/ huan(a[20],m[4],20,&max); /*报错2*/ } 报错行1报错信息 Expression syntax 报错行2报错信息 Type mismatch in parameter a 报错行改为 huan(a,m, 20, &max);
6

【例2 】 int merg(char s1[ ][10],char s2[ ][10],char s3[ ][10], int m,int n ) { } void main() { char s1[4][10]={"int", "for", " do", "if"}; char s2[4][10]={"for","case","do","else"}; char s3[20][10]; j=merg( s1[ ][10], s2[ ][10], s3[ ][10], 4, 4); 报错1 j=merg(int s1[ ][10],int s2[ ][10],int s3[ ][10],4,4);报错2 j=merg( s1[4][10], s2[4][10], s3[4][10], 4, 4); 报错3 } 报错1、2信息 Expression syntax 报错3信息 Type mismatch in parameter s1 报错1、2、3行均改为 j=merg(s1,s2,s3, 4, 4); 7

语法错 第1类:函数调用中实参表示错误

语法错 第2类:函数调用中实参数量错误
【例1】 void resort(int *x, int n) { } main() { int a[10]={17, 15, 10, 14, 16, 17, 19, 18, 13, 12}, i; resort(a); /* 报错*/ } 报错信息: Too few parameters in call to … 报错行改为: resort( a, 10 );

8

语法错 第3类:无返回值函数调用错误
【例1】 void resort(int *x, int n) { } main() { int a[10]={17, 15, 10, 14, 16, 17, 19, 18, 13, 12}, i; a[10]=resort(a,10); /*报错*/ … } 报错信息:Not an allowed type 报错行改为: resort(a,10);

9

语法错 第4类:函数定义头部中有多余分号
【例1】 int validata(int x); { int s[5]; /*报错行 */ int i,j,k; } void main() { int n; n=validata (5); } 报错信息: Declaration syntax error 改正: 删去validata函数定义头部的分号
10

语法错 第5类:函数定义中形参声明错误
【例1】 int sort_aver(int a[ ][3], n, b[ ][3] ) /* 报错 */ { } void main() { int x[10][3]={{1,3,3},{1,1,3},{2,3,5},{3,5,4},{3,3,6}}; int i,j,n, b[3][3]; n=sort_aver(x,5,b); } 报错信息: Declaration syntax error 报错行改为: int sort_aver(int a[ ][3], int n, int b[ ][3])

11

语法错 第5类:函数定义中形参声明错误
【例2】

char *insertstr(char str, char str1, char str2 ) 出错 { if(str[0]==?\0?||str1[0]==?\0?||str2[0]==?\0?) 报错1 return str ; 报错2 } main( ) { char str[80]="I can speak English.You can speak English."; char *p; p=insertstr(str,“English”,“ too”); 报错3 } 报错1信息:Invalid indirection 报错2信息:Non-portable pointer conversion 报错3信息:Type mismatch in parameter 'str' 出错行改为 char *insertstr(char *str, char *str1,char *str2) 12

【例3】

语法错 第5类:函数定义中形参声明错误

int count(char *str[], char *substr[], int ioc[] ) 出错 { int i, j, k, t, m=0; for(i=0 ; str[i]!='\0' ; i++ ) { t=0; for( j=i , k=0; substr[k]==str[k] ; k++ , j++ ) if( substr[k+1]=='\0') { t=1; break; } } return m; } main( ) { int i, k, ioc[10]; char str[80]=“This is a book.” , substr[10]=“book”; k=count( str , substr , ioc ) ; 报错 } 报错信息:Suspicious pointer conversion 出错行改为:int count(char str[], char substr[], int ioc[]) 或:int str_count(char *str, char *substr, int ioc[] )
13

语义错 第10类:函数定义中形参声明错误
【例2】 int tran(char *s, char b[80][]) 有错 { int i,j=0; char str[80]; } void main( ) { int i,num; char s[80]="We23learn!",s1[100][80]; num= tran(s,s1); }

输出结果错误
出错行改为: int tran(char *s, char b[][80])

14

语法错 第6类:return语句中表达式类型错误
【例1】 char *insertstr(char *str,char *str1,char *str2) { return *str; /* 报错*/ } main( ) { char str[80]="I can speak English.You can speak English."; char *p; p=insertstr(str,"English"," too"); puts(p); } 报错信息:Non-portable pointer conversion 报错行改为: return str;
15

语法错 第6类:return语句中表达式类型错误 【例2】 void palin(char *s) / * 出错*/ { int i,j,k,ok; …… return ok; /*报错*/ } void main() { char s[2][80]={"Madam I'm Adam.", "Not a palindrome."}; int i,ok; for(i=0;i<2;i++) { ok=palin(s[i]); printf(ok ? "%s: Yes.\n":"%s: No.\n",s[i]); } } 报错信息:Void functions may not return a value 出错行改为: int palin(char *s) 16

语法错 第7类:缺少必要的 #include命令
【例1】 void replace_word(char s[]) { char word_tab[3][10]={"sad","happy","accuse"}; char t,tmp[80]; int i,j,k,n; for(i=0;s[i];i++) { for(j=i,k=0; isalpha(s[j]); k++,j++) /*报错*/ … } } 报错信息: Undefined symbol '_isalpha' 改错方法:在isalpha(s[j])之前添加 #include<ctype.h>
17

复习:#include命令
库函数 scanf, printf, getchar,putchar gets,puts,fscanf,fprintf 等 sqrt, fabs, pow, sin, cos 等 isdigit,isalpha,isspace, tolower,toupper 等 strcat, strcpy, strcmp,strlen等 在函数调用前应有 预处理命令 #include<stdio.h>

#include<math.h>
#include<ctype.h>

#include<string.h>

18

【例1】

语法错 第8类:数组声明错误

void edit(char *s) { char buf[ ]; 报错 } 报错信息: Size of array not known 报错行改为: char buf[80];

19

语法错 第8类:数组声明错误
【例2】
#define N 10 main { int i, j, n, a[n][n]; /*报错*/ } 报错信息: Constant expression required 报错行改为:int a[N][N]; 或 int a[10][10];

20

语法错 第8类:数组声明错误
【例3】 char s[4][ ]={"a%1", "_a12", "aaa", "$ss"}; 报错 报错信息:Size of array not known 报错行改为: char s[4][5]={ “a%1”,“_a12”,“aaa”,“$ss”}; 或 char s[ ][5]={ “a%1”,“_a12”,“aaa”,“$ss”};

21

语法错 第8类:数组声明错误
【例4】 #include <stdio.h> main() { char str[80]=This is a book; 报错 } 报错信息: Undefined symbol 'this? Incompatible type conversion Declaration syntax error 报错行改为: char str[80]=“This is a book”;

22

语法错 第8类:数组声明错误
【例5】 char str= “ You are a teacher ”; 报错 printf("%s \n", str); 报错信息: Non-portable pointer assignment 报错行改为: char str[ ]= " You are a teacher ";

23

语法错 第8类:数组声明错误
【例6】 char color[3]={B,W,R}; 报错 报错行报错信息:Undefined symbol 'B' 报错行改为: char c,color[3]={'B','W','R'};

24

语法错 第8类:数组声明错误
【例7】 main() { char cs[5][20]="beautiful","student","China", “function”,“include”; 报错 } 报错信息: Initializer syntax error 报错行改为: char cs[5][20]={"beautiful","student","China", “function”,“include”};

25

语法错 第9类:符号常量定义格式错误
【例1】 #define N=10 或 #define N 10 ; void yanghui(int y[][N], x[][N], n) { } main() { static int i,j,n,a[N][N],b[N][N]; yanghui(a,b,n); } 报错1信息: Expression syntax 报错2信息: Array bounds missing ] 出错行改为 : #define N 10 /*出错 */ /*报错1*/

/*报错2*/

26

语法错 第10类:带参数宏定义格式错误
【例1】 #include <stdio.h> #include <limits.h> #define min(int x,int y) ((x)<(y)?(x):(y)) 报错 int min_dist(int a[], int b[], int m, int n) { int min = INT_MAX; int ia=0, ib=0; min = min(min, a[ia]-b[ib]); } 报错信息:Invalid macro argument separator 报错行改为: #define min(x,y) ((x)<(y)?(x):(y))
27

语法错 第11类:结构变量声明、结构变量引用错误
【例1】

struct d { int y,m,d; }; int days(struct d d1,struct d d2) { ...} void main() { struct d1,d2; /* 出错1*/ ... scanf("%d-%d-%d",&d2.y,&d2.m,&d2.d); printf(“%d days\n”,days(d1.y, d2.y)); /* 出错2*/ } 出错1改为:struct d d1,d2 出错2改为:printf("%d ds\n",days(d1,d2)); 28

【例2】 typedef struct { char na[20]; /*姓名*/ char d[10]; /*系名*/ int m; /*课程成绩*/ }ST; typedef struct { char d[10]; /*系名*/ int m; /*及格人数*/ }CT; int countif(ST s[],int n,CT a[]) { ... if(s[i]>=60)a[k].m++; 报错 } 报错信息: Illegal structure operation 改为: if(s[i].m>=60)a[k].m++;
29

语法错 第11类:结构变量声明、结构变量引用错误

语法错 第12类:语句错误
【例1】

for (*s) /* 报错 */ { if(isalpha(*s)) { i=0; for(;isalpha(*s);s++) str[i++]=*s; str[i]='\0'; strcpy(b[j++],str); } else s++; } 报错信息:syntax error before ')' token 报错行改为:while(*s) 或 for(;*s;)
30

语法错 第12类:语句错误
【例2】 if a[n-i-1]>a[i] /* 报错 */ { temp=a[i]; a[i]=a[n-i-1]; a[n-i-1]=temp; } 报错信息:syntax error before "a" 报错行改为: if (a[n-i-1]>a[i])

31

语法错 第13类:常量表示错误
【例1】 while(isalpha(s[i])) s2[len2++]=s[i++]; s2[len2]=\0; /* 报错 */ 报错信息: Illegal character '\' 报错行改为:s2[len2]=0;或 s2[len2]='\0';

32

语法错 第14类:指针运算符使用错误
【例1】

long factor(int m,int *fac,int *n) { *n+=1; } void main( ) { int fac[N]={0},i,m,num; long sum; sum=factor(m,fac,*num); /* 报错 */ } 报错信息: Invalid indirection 报错行改为: sum=factor(m,fac,&num);
33

常考 语义错

34

使用 【例】 程序功能:重新排列一维数组元素的顺序, 使得左边的所有元素均为偶数并按由大到小的次序 存放,右边的所有元素均为奇数并按由小到大的次 序存放。 #include <stdio.h> void resort(int x[], int n) { int i; … while(x[i]%2=0) i++; /* 报错*/ … } 报错信息: Lvalue required 报错行改为:while(x[i]%2==0)i++;
35

语义错 第1类:运算符“==”与运算符“=”混淆

语义错 第2类: scanf调用中参数变量前缺运算符&
【例】 main() { int x,y; scanf(“%d%d ”, x, y); /*出错*/ printf(“%d”, x+y); } 输出结果错误 出错行改为: scanf(“%d%d ”, &x, &y);

36

语义错 第3类:printf调用中实参类型错误
【例3】调库函数 void main() { char str1[80],str2[80],password[80]="love"; int i; for(i=0;i<3;i++) { gets(str1); printf(“your password is:%s”,str1[80] ); 出错 ... } } 输出结果错误 出错行改为: printf("your password is: %s",str1);
37

语义错 第4类:printf、scanf调用中转换说明错误
【例1】 #include <stdio.h> main( ) { int i,a[]={1, 2, 4,8,10,12,13,14,16,18}, b[]={3,4,7,8,9,10,12,13,16,19}; for (i = 0; i < 10; i++) printf(“\n%3f %10f %10f”, i, a[i], b[i]); 出错 } 运行时报错:printf : floating point formats not linked Abnormal program termination 出错行改为:printf(“%3d%10d%10d”, i, a[i], b[i]);

38

【例2】

#include <stdio.h> main( ) { long x; double y; scanf(“%d%f ”, &x, &y); /*出错*/ } 输出结果错误 出错行改为: scanf(“%ld %lf ”,&x,&y);

39

语义错 第5类:使用错误的库函数
【例】 void replace_word(char s[]) { ... } main() { char line[80]="I accuse your mistakes."; replace_word(line); putchar(line); /* 出错*/ }

输出结果错误
出错行改为: puts(line);

40

语义错 第6类:用运算符==比较两数组中字符串相同否
【例】函数intersec找出所有在二维数组s1和s2中都出 现的字符串,将这些字符串放入二维数组s3中,函 数返回s3中字符串的个数。 int intersec(char s1[][10],char s2[][10],char s3[][10],int m,int n) { int i,j,k=0; for(i=0; i<m; i++) for(j=i;j<n; j++) /*出错1,算法错*/ if(s1[i]==s2[j]) /*出错2,语义错*/ { strcpy(s3[k++],s1[i]); break; } return k; 输出结果错误 出错行1改为: for(j=0; j<n; j++) 41 出错行2改为: if( strcmp(s1[i],s2[j])==0 )

语义错 第7类:用运算符=将字符串复制到数组

【例1】函数merge功能:合并s1数组和s2数组中的字符 串集合为一个新集合保存到s3数组,每个字符串在新 集合中仅出现一次,函数返回新集合中字符串的个数。 int merge(char s1[][10],char s2[][10],char s3[][10],int m,int n) { int i, j, k=0; for(i=0; i<m; i++) s3[k++]=s1[i]; /*出错1 ,语义错*/ for(i=0; i<n; i++) { for(j=0; j<m; j++) if(strcmp(s2[i], s1[j])) /*出错2 ,语义错*/ break; return k; } }输出结果错误 出错行1 改为: strcpy(s3[k++],s1[i]); 42 出错行2 改为: if(strcmp(s2[i],s1[j])==0)

语义错 第8类:应当用 ‘\0’ 的地方用 “\0” 【例1】
int word_sort(char s[],char w[10][20]) { int i=0,j=0,k=0; char b[20]; while(s[i]) { if(isalpha(s[i])) w[k][j++]=s[i]; else { w[k][j]= “\0”; /* 出错 */ k++; j=0; } i++; } ... return k; } 输出结果错误 出错行改为:w[k][j]= ?\0?; 或 w[k][j]= 0;
43

【例】对4行4列二维数组的每一行排序,偶数行(0当作 偶数)由小到大排序,奇数行由大到小排序。 #define N 4 void swap(int *p1,int *p2) { int p; p=p1;p1=p2;p2=p; /*出错*/ } void sort(int a[N][N]) { int i,j,k; for(i=0;i<N;i++) for(j=0;j<N-1;j++) for(k=j+1;k<N;k++) if( i%2==0 ? a[i][j]>a[i][k] : a[i][j]<a[i][k] ) swap(a[i]+j,a[i]+k); } 输出结果错误 出错行改为:p=*p1; *p1=*p2;*p2=p;
44

语义错 第9类:指针变量与指针指向的变量混淆使用

【例1】 int trans(char *p) { int i=0; while(isdigit(p[i])) { v=v*10+p[i]; /* 出错行*/ i++; } return v; } main() { int x=trans(“1234”); ... } 输出结果错误 出错行改为: v=v*10+p[i] -'0';
45

语义错 第10类:数字字符串转为整数时错误

常考 算法错

46

算法错 第1类:运算符&&与 || 混淆使用
【例1】 对s数组中保存的五个字符串,删除其中不符合下列 组成规则的字符串,输出s数组中剩余的字符串。字符串组 成规则:由字母、数字、下划线组成,首字符非数字。

#include<stdio.h> #include<string.h> #include<ctype.h> #define M 20 #define N 10 int isident (char s[][N], int n ) { int i , j, k, flag ; for (j=0; j<n; j++ ) { flag=0; if(s[j][0]!=?_? || isalpha(s[j][0])==0) /* 出错 */ flag=1;
47

else
for(i=1; s[j][i]!='\0'; i++) if(s[j][i]!='_' && ! isalpha(s[j][i]) && ! isdigit(s[j][i])) flag=1; if(flag==1) { for(k=j; k<n-1;k++) strcpy(s[k],s[k+1]); n--; j--; } } return n; } 输出结果错误 出错行改为: if(s[j][0]!='_'&& isalpha(s[j][0])==0)
48

算法错 第2类:循环语句循环初值、终值错误
【例1】 对4行4列二维数组的每一行排序,偶数行(0当作偶数) 由小到大排序,奇数行由大到小排序。 #define N 4 void swap(int *p1,int *p2) { int p; p=*p1; *p1=*p2;*p2=p; } void sort(int a[N][N]) { int i,j,k; for(i=0;i<N;i++) for(j=0;j<N-1;j++) /*选择法排序*/ for( k=j+1; k<N-1; k++) /* 出错*/ if(i%2==0?a[i][j]>a[i][k]:a[i][j]<a[i][k]) swap(a[i]+j,a[i]+k); }输出结果错误

出错行2改为:for( k=j+1; k<N; k++)
49

【例2】 对s数组中保存的五个字符串,删除其中不符合 下列组成规则的字符串,输出s数组中剩余的字符串。 字符串组成规则:由字母、数字、下划线组成,首 字符非数字 #include<stdio.h> #include<string.h> #include<ctype.h> #define M 20 #define N 10 int isident (char s[][N], int n ) { int i , j, k, flag ; for (j=0; j<n; j++ ) { flag=0; if(s[j][0]!=?_?&& isalpha(s[j][0])==0) flag=1;
50

else for(i=1; s[j][i]!='\0'; i++) if(s[j][i]!='_' && ! isalpha(s[j][i]) &&! isdigit(s[j][i])) flag=1; if(flag==1) { /*从二维数组中删除一行字符串*/ for(k=0; k<n-1;k++) /* 出错*/ strcpy(s[k],s[k+1]); n--; j--; } } return n; } 出错行改为: for(k=j; k<n-1; k++)
51

输出结果错误

【例3】sort函数: 对于a指向数组中下标start到end的 (end-start+1)个元素排序,若flag>0则从大到小排 序,若flag=0则从小到大排序。 void sort(int a[], int start, int end, int flag) { int i, j, k, temp; /*冒泡排序法*/ for(i=start; i<end-start;i++) /* 出错 */ for(j=start; j<end-1-i; j++) if ( flag ? a[j]<a[j+1] : a[j]>a[j+1]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } }
出错行改为:for( i=0; i<end-start; i++)
52

输出结果错误

算法错 第3类:数据交换错误
【例】交换a[i]和a[i+1]的值 temp=a[j]; a[j+1]=a[j]; /*出错*/ a[j+1]=temp;

输出结果错误
出错行改为: a[j]=a[j+1];

53

综合改错 举例 2011秋 C01

54

一、改错题(16分) 【程序功能】 验证猜想:当f为41,x分别取1、2、3、4、…、40时,由多项 式x2-x+f产生的数均为素数。 以下程序首先用多项式x2-x+f产生40个整数存放在a指向的数组中, 然后判断a数组中各元素的值是否均为素数,如果是则输出 “YES”,并将a指向的数组中的素数按每行10个数的形式输出; 否则输出“NO”。 【测试数据与运行结果】 屏幕输出: YES 41 43 47 53 61 71 83 97 113 131 151 173 197 223 251 281 313 347 383 421 461 503 547 593 641 691 743 797 853 911

971 1033 1097 1163 1231 1301 1373 1447 1523 1601
55

【含有错误的源程序】 以下源程序已保存在T盘myf1.c文件内,考生可直接打开 该文件调试程序。 #include <stdio.h> #include <conio.h> int allprime(int n,int a[]) { int i,j,b[]; /* 改为int i,j,b[40]; */ for(i=0;i<n;i++) { b[i]=1; for (j=1;j<a[i]/2;j++) /* 改为for (j=2;j<a[i]/2;j++) */ if (a[i]%j==0) b[i]=0; } for(i=0;i<n;i++) if(0=b[i]) /* 改为if(0==b[i]) */ return 0; return 1; } 56

void main() { int i,j,x0=1,x1=40, f=41,a[40]; for(j=x0;j<=x1;j++) a[j-1]=j*j-j+f; j--; if(allprime(j,a[])) /* 改为if(allprime(j,a))*/ { printf("\nYES\n"); for(i=0;i<j;i++) { printf("%d\t",a[i]); if((i+1)%10==0)printf("\n"); } } else printf("\nNO\n"); getch(); }
57

上机考试 编程题

58

做编程题注意事项
? 录入的源程序按文件名“myf2.c”保存到T: 盘 ? 每个编程题均要求编写2个函数: (1) 功能函数( 12分) (2) main函数( 12分) ? 判卷时不按运行结果正确与否给分,按判分点判分。 只要求实现功能,不限定使用的算法 ? 判分点举例 #include、 main函数框架结构,文件指针变量声明, fopen函数调用,main函数对功能函数的调用语句, 输出结果,功能函数框架结构、功能函数内实现指 定功能的语句。
59

编程题常考算法
1. 判断与求解特殊的整数 – 判断整数的奇、偶性 – 判断素数 – 判断回文数 – 求一个整数的因子 – 求一个整数的反序数 – 求两个整数的最大公约数 2. 找出满足给定条件的所有整数(穷举法) 3. 分解整数的各位数字并统计(用数组保存分解的数 字及统计结果)

60

4. 一维数组数据处理 – 生成数据 – 数组排序 – 删除数组中数据 – 插入新数据到数组中 – 数据移动 5. 二维数组数据处理 – 生成矩阵 – 按行排序 – 变换两行数据 – 数据变换 6. 字符串处理 7. 计算无穷级数近似值

61

编程题 编写举例
【程序功能】 在给定范围内查找并输出所有由两个不同数字组成的六位 回文数。一个整数如果与其反序数相等,则称该整数为回 文数。例如,112211是回文数并且112211是由两个不同的 数字1和2组成的,因此112211是符合上述条件的数。 【编程要求】 1. 编写函数int palin(long m1,long m2,long x[]),在m1?m2范 围内查找所有由两个不同数字组成的回文数并依次保存到 x指向的数组中。函数返回x数组中回文数的个数。 2. 编写main函数,调用palin函数查找100000?120000范围内 所有由两个不同数字组成的六位回文数并将这些数保存到 一维数组中,将该一维数组中的数据输出到屏幕并保存到 文件myf2.out中。最后将考生本人的准考证号字符串保存 到文件myf2.out中.
62

【测试数据与运行结果】
输出结果: 100001 101101 110011 112211 113311 114411 115511 116611 117711 118811 119911

63

【编程步骤】
自顶向下,逐步求精。

第1步:写出必要的预处理命令和两个函数的框架 #include <stdio.h> 预处理命令 int palin(long m1, long m2 , long x[ ]) palin函数框架
{
}

main( )
{
}

main 函数框架

64

第2步:按编写要求细化main函数 main() { int i,n; long a[200]; 声明变量、数组并初始化 FILE *fp; 声明文件指针变量 fp=fopen(“myf2.out”,“w”); 调用fopen函数 n=palin(100000,120000, a); 调用palin函数 for(i=0;i<n;i++) { printf(“%ld ”,a[i]); 输出结果到屏幕 fprintf(fp, “%ld\t”, a[i]); 输出结果到文件 } fprintf(fp,“\nMy exam number is : 0112400123”); 输出准考证号到文件 }
65

第3步:按编写要求细化palin函数 int palin(long m1,long m2,long x[ ]) { int a[10], i, k=0, sum; long n,m,t; /* 穷举法:n 取m1~m2范围内每个整数 */ for(n=m1; n<=m2; n++) { for(i=0;i<10;i++) a[i]=0; t=n; m=0; /*逐个分解n的十进制表示中每位数字,记录这些数字的出 现并用这些数字形成n的反序数 回文数判断算法:一个整数等于它的反序数 while(t>0) 求反序数 算法 { i=t%10; a[i]=1; m=m*10+i; t/=10; } for(sum=0,i=0; i<10; i++) if(a[i]!=0)sum++; if(m==n && sum==2) x[k++]=n; } return k; 66 }

例1:2011秋C01编程题
【程序功能】 在已有的一份姓名登记表中删除重复出现的姓名, 输出处理后的姓名登记表。 【编程要求】 1. 编写函数int del_name(char s[][20], int n)。函数功能: 在s指向的数组前n行中存储的n个字符串中删除重复 出现的字符串,只保留第一次出现的字符串,函数 返回s指向的数组中剩余的字符串个数。 2. 编写函数main()。函数功能:声明数组name并用测 试数据初始化,用name作实参调用函数del_name, 将经过删除后name数组中剩余的字符串输出到屏幕 及数据文件myf2.out中。最后将考生本人准考证号 输出到文件myf2.out中。
67

【测试数据与运行结果】 测试数据:"Ann", "Belle", "David","Ann", "Mary","Belle", "Ken","Ann","Mark" ,"Mary" 屏幕输出:Ann Belle David Mary Ken Mark

68

【参考答案】 #include <stdio.h> #include <string.h> #include <conio.h> #define M 20 #define N 100 int del_name(char s[][M], int n) { int i,j,k; for (i=0;i<n;i++) { j=i+1; while(j<n) if( strcmp(s[i],s[j])==0 ) 算法:从数组中删除数据 { for(k=j;k<n-1;k++) strcpy(s[k],s[k+1]); s[k][0]=0; n--; } else j++; } return n; 69 }

void main() { char name[N][M]={"Ann", "Belle", "David","Ann", "Mary","Belle", "Ken", "Ann", "Mark" ,"Mary"}; int k,n=10; FILE *fp; fp= fopen("myf2.out","w"); n=del_name(name, n); for(k=0;k<n;k++) { puts(name[k]); fputs(name[k],fp); } fprintf(fp,"\nMy exam numbler is:0112400123"); fclose(fp); getch(); } 70

【程序功能】 找出给定范围内的和亲数。 对于两个正整数,如果其中的一个整数是另一个整数的全部 真因子之和,反之亦然,则称这两个数为“和亲数”。例 如,220有真因子“1, 2, 4, 5, 10, 11, 20, 22, 44, 55, 110”,其 和为284,而284有真因子“1, 2, 4, 71, 142”,其和为220, 因此220和284就是一对和亲数。 【编程要求】 1.编写函数int heqinmath(int m,int n,int a[][2]),找出m?n (m<n)之间的所有和亲数对,并将其保存到a指向的数组 中,函数返回a数组中和亲数对的个数。 2.编写main函数,接收键盘输入的两个正整数m和n(m<n), 调用heqinmath函数求出m?n之间的所有和亲数对,将结果 输出到屏幕并保存到文件myf2.out中。最后将考生本人的准 考证号字符串保存到文件myf2.out中。
71

例2:编程题

【测试数据与运行结果】
测试数据: m=2, n=500 运行结果: ( 220 , 284 ) ( 284 , 220 )

72

#include <stdio.h> #include <stdlib.h> int heqinmath(int m,int n,int a[][2]) { int i,j,m1,s1,s2,count=0; for( m1=m; m1<n; m1++) { s1=1; s2=1; /* 算法: 求一个整数的所有真因子 */ for(i=2;i<m1;i++) if(m1%i==0) s1=s1+i; for(j=2;j<s1;j++) if(s1%j==0) s2=s2+j; if((s2==m1)&&(m1!=s1)) { a[count][0]=m1; a[count++][1]=s1; } } return count; }
73

main( ) { int count,i,m,n,a[10][2]; FILE *fp; fp=fopen("myf2.out","w"); if(fp==NULL) { printf("Can not open the file! \n") ; exit(0) ; }; printf("Please input m,n:\n"); scanf("%d%d",&m,&n); count=heqinmath(m,n,a); for(i=0;i<count;i++) printf("(%d,%d)\n",a[i][0],a[i][1]); for(i=0;i<count;i++) fprintf(fp,"(%d,%d)\n",a[i][0],a[i][1]); fprintf(fp,"\nMy exam number is : 0112400123"); fclose (fp); } 74

例3:编程题
【编程要求】 1. 编写函数int Del_findgcd(int a[],int n,int *f),对于a指向的 数组中前n个元素,删除所有下标值为奇数的数组元素中保 存的整数,求得数组中剩余的n/2(或n/2+1)个整数的最大 公约数并将其保存到f指向的变量中。函数返回a数组中剩余 整数的个数。 2. 编写main函数,声明一个一维数组并用测试数据初始化, 调用Del_findgcd函数删除数组中的所有满足条件的整数并求 出剩余整数的最大公约数,将数组中剩余的整数和这些整数 的最大公约数输出到屏幕并保存到文件myf2.out中。最后将 考生本人的准考证号字符串保存到文件myf2.out中。 【测试数据与运行结果】 测试数据: 6 8 9 11 12 13 15 16 18 19(n=10) 输出结果:6 9 12 15 18,max common divisor=3
75

#include "stdio.h" #include "conio.h" int Del_findgcd(int a[] , int n , int *f ) { int i,k,g; /*删除下标值为奇数的数组元素中的数 */ for(i=0,k=0;i<n;i++) if(i%2==0) a[k++]=a[i]; if(n%2==0) n=n/2; else n=n/2+1; /* 算法:求最大公约数 */ k=a[0]; for(i=1;i<n;i++) { g=a[i]; while(k!=g) /*求k、g的最大公约数 */ { if(k>g) k=k-g; else g=g-k; } } *f=k; return n; 76 }

main( ) { FILE *fp; int i,a[10]={6,8,9,11,12,13,15,16,18,19},f,n; if((fp=fopen("myf2.txt","w"))==NULL) { printf("can?t open file!"); exit(0); } n=Del_findgcd(a,10,&f); for(i=0;i<n;i++) { printf("%d,",a[i]); fprintf(fp,"%d,",a[i]); } printf("max common divisor=%d\n",f); fprintf(fp,"max common divisor=%d\n",f); fprintf(fp,"My exam number is: 1234567890"); fclose(fp); getch(); }
77

例4:编程题
【程序功能】 在数列中查找、移动超完全数。 超完全数是指具有以下特性的整数N:Φ(Φ(N))=2N,其 中Φ(N)表示整数N的所有因子之和(因子包括N自身)。例 如,16的所有因子之和为31(1+2+4+8+16=31),31的所 有因子之和为32(1+31=32),而32=2×16,因此16是一 个超完全数。 1000以内的超完全数有2、4、16和64。 【编程要求】 1. 编写函数void sumfac(int x[],int n) ,对于x指向的数组中存 储的n个整数组成的数列,完成以下变换操作:从后向前遍历 数列查找超完全数。每找到一个超完全数后,将其移动到数 列第一个数之前。 2. 编写main函数,将测试数据中给出的变换前数列保存到一个 一维数组中,调用sumfac函数对一维数组中的数列做变换, 输出变换后的数列到屏幕并保存到文件myf2.out中。最后将 考生本人的准考证号字符串保存到文件myf2.out中。
78

【测试数据与运行结果】

变换前数列:

1
变换后数列: 2

2

4

8 16 32 64 128 256 512

4

16

64

1

8

32 128 256 512

79

#include <stdio.h> void sumfac(int x[],int n) ; int fac(int n); main() { int i,a[10]={1,2,4,8,16,32,64,128,256,512}; FILE *fp; if((fp=fopen("myf2.out","w"))==NULL) { printf("Creat File myf2.out failed!\n"); exit(0); } sumfac(a,10); printf("\n"); fprintf(fp,"\n"); for(i=0;i<10;i++) { printf("%6d", a[i]); fprintf(fp, "%6d", a[i]); } fprintf(fp,"\nMy exam number is : 0112400123"); fclose(fp); getch(); }
80

int fac(int n) /* 返回n的全部因子之和*/ { int i,sum=0; for(i=1;i<=n;i++) if(n%i==0) sum+=i; return sum; } void sumfac(int x[],int n) { int i,j,k,m,sum; for(i=n-1,k=0;i>=k;i--) { sum=fac(x[i]); if(fac(sum)==x[i]*2) { m=x[i]; /* 将x[i]中数据移到第一个数之前*/ for(j=i;j>0;j--) x[j]=x[j-1]; x[0]=m; k++; i++; } } }
81

例5:编程题
【编程要求】 1.编写函数int fun(int m),求大于m并且不包含小于21的素 数因子的最小合数,函数返回该合数。 合数是指除了1和自身以外仍存在其他因子的数(即非素 数)。

2.编写main函数,接收键盘输入的一个整数,调用fun函数 求得大于该整数且满足上述条件的合数,将该合数输出到屏 幕并保存到文件myf2.out中。最后将考生本人的准考证号字 符串保存到文件myf2.out中。 【测试数据与运行结果】
输入21时,输出529 输入1000时,输出1073
82

#include <stdio.h> int prime(int n) { int i; for(i=2;i<=n/2;i++) if(n%i==0) return 0; return 1; } int fun(int m) { int a[8]={2,3,5,7,11,13,17,19},i,n; /*a数组:保存小于21的所有素数 */ n=m+1; while(1) { if(!prime(n)) { for(i=0;i<8;i++) if(n%a[i]==0) break; if(i>=8) return n; } n++; } 83 }

main() { int m,n; FILE *fp; fp=fopen("myf2.out","w"); if( fp==NULL) { printf("Can not open the file! \n") ; exit(0) ; }; scanf("%d",&m); n=fun(m); printf("%d\n",n); fprintf(fp,"%d\n",n); fprintf(fp,"\nMy exam number is : 0112400123"); fclose(fp); }
84

例6:编程题
【编程要求】 1.编写函数 int find( char a[],char b[]),函数被调用时a指向 的数组中已存储一个字符串,该字符串是一个包含了多个 单词的英文句子(单词是指全部由英文字母组成的子串, 不同单词之间有一个或多个空格作为分隔)。 函数功能:找出字符串a中最长的单词并将其存入b指向的 数组中,函数返回最长单词在字符串a中的起始位置下标。 2.编写main函数,接收键盘输入的一个英文句子字符串, 调用find函数找到该句子中最长的单词,将最长单词及其在 字符串中的起始位置下标输出到屏幕并保存到文件myf2.out 中。最后将考生本人的准考证号字符串保存到文件myf2.out 中。 【测试数据与运行结果】 输入: This is C programming test 输出: programming,i=10
85

#include <stdio.h> int find(char a[], char b[]) { int i=0,plen=0,maxlen=0,pseat=0; while(a[i]!='\0') { while(a[i]!=' '&&a[i]!='\0') { plen++; i++; } if ( plen>maxlen) { pseat=i-plen; maxlen=plen; } while(a[i]==' ') i++; plen=0; } for(i=0;i<maxlen;i++) b[i]=a[pseat+i]; b[i]='\0'; return (pseat); } 86

main() { FILE *fp; char a[80],b[20];int i; fp=fopen("myf2.out","w"); if(fp==NULL) { printf("Can not open the file!\n"); exit(0); } printf("input a string:"); gets(a); i=find(a,b); printf("%s,i=%d\n",b,i); fprintf(fp," %s,i=%d\n",b,i); fprintf(fp,"\nMy exam number is : 0112400123"); fclose(fp); } 87

例7:编程题
【编程要求】 1. 编写函数 double myfun(double x),求下列数学函数展开 式的近似值,累加运算在最后一项绝对值小于10-6时停止。

1 x 1 3 x 1 3 5 x f ( x) ? x ? ? ? ? ? ? ? ? ? ? ??(?1 ? x ? 1) 2 3 2 4 5 2 4 6 7
2.编写main函数,声明数组x并用三个实数-1.0、0.5、1.0初 始化,用x数组元素的值三次调用myfun函数求值,将计算 结果按如下格式输出到屏幕并保存到文件myf2.out中。最后 将考生本人的准考证号字符串保存到文件myf2.out中。 【测试数据与运行结果】 运行结果: f(-1.000000)=-1.562194 f(0.500000)=0.523599 f(1.000000)=1.562194 88

3

5

7

1 x 1 3 x 1 3 5 x f ( x) ? x ? ? ? ? ? ? ? ? ? ? ??(?1 ? x ? 1) 2 3 2 4 5 2 4 6 7

3

5

7

#include <stdio.h> #include <stdlib.h> #include <math.h> #define EPS 1.0e-6 double myfun(double x) { double tn,ft=1.0 , sn=x , xn=x, n=2; do { xn=xn*x*x; ft=ft*(2*n-3)/(2*n-2); tn=ft*xn/(2*n-1); sn=sn+tn; n=n+1; } while(fabs(tn)>EPS); return sn; 89 }

main() { FILE *fp; double x[3]={ -1.0,0.5,1.0}; int i; fp=fopen("myf2.out","w"); if(fp==NULL) { printf("Can not open the file! \n"); exit(0); } for(i=0;i<3;i++) { printf("f(%lf)=%0.6lf\n",x[i],myfun(x[i])); fprintf(fp,"f(%lf)=%0.6lf\n",x[i],myfun(x[i])); } fprintf(fp,"\nMy exam number is : 0112400123"); fclose(fp); }
90

例8:编程题
【编程要求】 1.编写函数void sort(struct book a[],int m),其功能是 对a指向的长度为m的结构数组排序。排序要求:按 bookname以字典序排列,bookname相同的按price从 小到大排列。 2.编写main函数,声明结构数组a并用测试数据初始 化,调用sort函数对结构数组a排序,将排序后的结 构数组a中的数据输出到屏幕及结果文件myf2.out中。 最后将考生的准考证号也保存到结果文件myf2.out 中。
91

【测试数据与运行结果】 测试数据: "C",30.5,"BASIC",20.8, "True Basic",35,"BASIC",25,"Fortran",48.7,"C",35 运行结果: BASIC 20.8 BASIC 25.0 C 30.5 C 35.0 Fortran 48.7 True Basic 35.0

92

#include<stdio.h> #include<string.h> #define N 6 struct book { char bookname[20]; float price; }; void sort(struct book a[],int m) { int i,j,k; struct book temp; for(i=0;i<m-1;i++) /* 算法:选择法排序*/ { k=i; for(j=i+1;j<=m;j++) if(strcmp(a[k].bookname,a[j].bookname)>0 ||strcmp(a[k].bookname,a[j].bookname)==0 && a[k].price>a[j].price) k=j; if(k!=i) { temp=a[k]; a[k]=a[i]; a[i]=temp; } } 93 }

void main() { struct book a[N]={"C",30.5,"BASIC",20.8, "True Basic",35,"BASIC",25, "Fortran",48.7,"C",35}; int i; FILE *fp; fp=fopen("myf2.out","w"); if(fp==NULL) exit(0); sort(a,N); for(i=0;i<N;i++) { printf("%-20s%5.1f\n",a[i].bookname,a[i].price); fprintf(fp,"%-20s%5.1f\n",a[i].bookname,a[i].price); } fprintf(fp,"\nMy exam number is: 0112400123\n"); fclose(fp); }

94

例9:编程题
【程序功能】 取一个正整数中所有偶数数字,用这些数字构成一个最大数。 【编程要求】 1. 编写函数long fun(long s),取出整数s中的所有偶数数字, 用这些数字构成一个最大数,函数返回该数。 2. 编写main函数,接收键盘输入的一个长整型数,调用fun函 数求出用该整数的所有偶数数字构成的一个最大数,将所得 结果输出到屏幕及结果文件myf2.out中。最后将考生本人的 准考证号字符串也保存到结果文件myf2.out中。 【测试数据与运行结果】 测试数据:s=25846513 运行结果:8642

95

#include <stdio.h> void sort(int a[ ],int n) { int i,j,k,t; for(i=0;i<n-1;i++) /*算法:冒泡法排序 */ { for(j=0;j<n-1-i ; j++) if(a[j]<a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } } long fun(long s) { int d, b[10],i,j=0; long s1=0; while(s>0) { d=s%10; if(d%2==0) b[j++]=d; s/=10; } sort(b,j); for(i=0;i<j;i++) s1=s1*10+b[i]; return s1; 96 }

void main() { long m,n; FILE *fp; if((fp=fopen("myf2.out","w"))==NULL) { printf("The file can not open!"); exit(0);} scanf("%ld",&n); m=fun(n); printf("%ld\n",m); fprintf(fp,"%ld\n",m); fprintf(fp,"My exam numbler is:0112400123"); fclose(fp); }

97

例10:编程题
【程序功能】 验证3~2008之间的所有素数中存在这样两个素数,它们 的和等于2008。 【编程要求】 1. 编写函数 int fun(int n,int *a,int *b),其功能是在3~n之 间寻找一对素数,它们的和等于n。若找到则将这两个素 数分别保存到a、b指向的变量中,函数返回1;若找不到, 函数返回0。 2.编写main函数,声明变量n并用测试数据初始化,调用 fun函数找出3~n之间和值为n的一对素数,将找到的这对 素数输出到屏幕及结果文件myf2.out中。最后将考生本人 的准考证号字符串也保存到结果文件myf2.out中. 【测试数据与运行结果】 测试数据: n=2008 运行结果: a=5 b=2003 a+b=2008
98

#include <stdio.h> #include <math.h> int prime(int n) /*需要一个素数判断函数*/ { int i; for(i=2;i<=n/2;i++) if(n%i==0) return 0; return 1; } int fun(int n,int *a,int *b) { int n1,n2; for(n1=3;n1<n;n1+=2) { if(prime(n1)) n2=n-n1; if(prime(n2)&&n1+n2==n) { *a=n1; *b=n2; return 1; } } return 0; }
99

void main() { FILE *fp; int n=2008,a,b,c; if((fp=fopen("myf2.out","w"))==NULL) { printf("Create File myf2.out failed!\n"); exit(0);} c=fun(n,&a,&b); if(c) { printf("a=%d b=%d a+b=%d\n",a,b,a+b); fprintf(fp,"%d + %d=%d\n",a,b,a+b); fprintf(fp,"\nMy exam number is: 0112400123\n"); } else fprintf(fp,"not found!"); fclose(fp); getch(); }

100

例11:编程题
【程序功能】 先判断一个M×N矩阵是否是Monge矩阵,再对该矩阵 作变换,判断变换后的M×N矩阵是否仍是Monge矩阵。 如果一个m×n矩阵为Monge矩阵,当且仅当i=1,2,?, m-1 和 j=1,2,? , n-1 时 A[i,j]+A[i+1,j+1]≤A[i,j+1]+A[i+1,j]成立。

101

【编程要求】 1. 编写函数int Monge(int a[][5],int n),其功能是判断a指 向的n行5列数组中的矩阵是否是Monge矩阵,若是则函数 返回1,否则返回0。 2. 编写函数void change(int a[][5],int n),其功能是对a指 向的n行5列数组中存储的矩阵作如下变换:第一行与最后 一行交换,第二行与倒数第二行交换,??,直到每一行 都交换过一次为止。 编写main函数,声明数组a并用测试数据初始化,调用 Monge函数对a数组作判断,调用change函数对a数组作变 换,再调用Monge函数对经过变换的a数组作判断,将变 换前、后a数组中数据及是否是Monge矩阵的判断结果都 输出到屏幕及结果文件myf2.out中。最后将考生的准考证 号也写入结果文件myf2.out中。

102

【测试数据与运行结果】 运行结果: 10 17 13 28 23 17 22 16 29 23 24 28 22 34 24 11 13 6 17 7 45 44 32 37 23 a is Monge 45 44 32 37 23 11 13 6 17 7 24 28 22 34 24 17 22 16 29 23 10 17 13 28 23 a is not Monge

103

#include <stdio.h> #define N 5 void change(int a[][N],int n) { int i,j,t; for(i=0;i<n/2;i++) for(j=0;j<N;j++) { t=a[i][j]; a[i][j]=a[n-1-i][j]; a[n-1-i][j]=t; } } int Monge(int a[][N], int n) { int i,j; for (i=0;i<n-2;i++) { for (j=0;j<N-2;j++) if (a[i][j]+a[i+1][j+1]>a[i][j+1]+a[i+1][j]) return 0; } return 1; 104 }

void main() { int a[][N]={{10,17,13,28,23},{17,22,16,29,23}, {24,28,22,34,24},{11,13,6,17,7},{45,44,32,37,23}}; int monge,i,j; FILE *fp; fp=fopen("d:\\myf2.out","w"); if(fp==NULL)exit(0); monge=Monge(a,5); for(i=0;i<N;i++) { for(j=0;j<N;j++) { printf("%4d",a[i][j]); fprintf(fp,"%4d",a[i][j]); } printf("\n"); fprintf(fp,"\n"); } if (monge) { printf ("a is Monge\n"); fprintf(fp,"a is Monge\n"); } else { printf ("a is not Monge\n"); fprintf (fp,"a is not Monge\n"); } change(a,5);
105

for(i=0;i<N;i++) { for(j=0;j<N;j++) { printf("%4d",a[i][j]); fprintf(fp,"%4d",a[i][j]); } printf("\n"); fprintf(fp,"\n"); } monge=Monge(a,5); if (monge) { printf ("a is Monge\n"); fprintf(fp,"a is Monge\n"); } else { printf ("a is not Monge\n"); fprintf (fp,"a is not Monge\n"); } fprintf (fp,"My exam number:04224005010"); fclose(fp); }

106

例12:编程题
【编程要求】 1. 编写函数 void fun(char *a,char *b,char *c),其功能是先将b 指向的字符串逆序存放,然后按a[0]、b[0]、a[1]、b[1]…的 顺序合并a字符串和b字符串到c指向的数组中,将a或b中剩 余字符拼接在c数组的尾部。 2. 编写main函数,声明三个一维数组s1、s2和s,接收键盘输入 的两个字符串保存到数组s1和s2中,调用fun函数对s2字符串 做逆序变换后再合并s1字符串和s2字符串到s数组。将合并后 产生的数组s中的字符串输出到屏幕及结果文件myf2.out中。 最后将考生本人的准考证号字符串也保存到结果文件 myf2.out中。 【测试数据与运行结果】 测试数据: s1字符串为"abcdefg",s2字符串为"ABCD" 运行结果: aDbCcBdAefg
107

#include <stdio.h> #include <string.h> void fun(char *a,char *b,char *c) { int i,j; char ch; i=0; j=strlen(b)-1; while(i<j) /* 算法:字符串逆序*/ { ch=b[i]; b[i]=b[j]; b[j]=ch; i++; j--; } while(*a||*b) { if(*a) { *c=*a; c++; a++;} if(*b) { *c=*b; c++; b++;} } *c='\0'; }
108

void main() { FILE *fp; char s1[80],s2[80],s[200]; if((fp=fopen("myf2.out","w"))==NULL) { printf("can't open file"); exit(0); } printf("\nEnter s1 string:"); gets(s1); printf("\nEnter s2 string:"); gets(s2); fun(s1,s2,s); printf("\nThe result is: %s\n",s); fprintf(fp,"%s",s); fprintf(fp,"\n"); fprintf(fp,"%s","\nMy exam number is : 0112400123\n"); fclose(fp); }
109

例13:编程题
【程序功能】 计算由两个整数生成的两个合法代码的码距。 这里的合法代码定义为由16个二进制数字字符组 成的字符串。例如 “0000000000100101”是一个合 法代码。 码距是指两个合法代码中对应位数字字符不同的 位数。例如,合法代码“0000000000100101”和 “0000000000001110”自右向左在第1、2、4、6位 上具有不同数字字符,因此这两个合法代码的码 距为4。

110

【编程要求】 1. 编写函数int hamming(int x,int y,char a[ ],char b[ ])实现以下功能:先将形参x和y分别转换为2个 合法代码并按从低位到高位的顺序分别保存2个合 法代码到a和b指向的数组中(不足16位时高位补 字符0),再计算a数组和b数组中的两个合法代码 的码距,函数返回该码距。 2. 编写函数main实现以下功能:声明字符数组a、b 和变量m、n,输入两个整数并保存到m和n中, 若m、n的值在0?32767范围内则用m、n和数组a、 b作实参调用hamming函数,计算由m和n生成的 两个合法代码的码距,将a、b数组中存储的合法 代码及这两个代码的码距输出到屏幕及文件 myf2.out中。最后将考生本人的准考证号输出到 文件myf2.out中。
111

【测试数据与运行结果】 输入:m=16 n=8 输出: a: 0000000000010000 b: 0000000000001000 distance of 16 and 8 is 2

112

#include <stdio.h> void bin(int n, char str[]) { int i=15, j; while(n!=0) { str[i--]=n%2+'0'; n=n/2; } for(j=0;j<=i;j++) str[j]='0'; str[16]= '\0'; } int hamming(int x, char a[],int y, char b[]) { int count=0,i; bin(x,a); bin(y,b); for(i=0;i<16;i++) if(a[i]!=b[i]) count++; return count; } 113

void main( ) { int m,n,t; char a[17], b[17]; FILE *fp; if ((fp=fopen("myf2.out", "w"))==NULL) { printf("Can not open the file myf2.out!\n"); exit(1); } do { scanf("%d%d",&m,&n); }while(m<0||m>32767||n<0||n>32767); t=hamming(m,a,n,b); printf("\n%s \n%s \ndistance of %d and %d is %d\n",a,b,m,n,t); fprintf(fp,"%s \n%s \ndistance of %d and %d is %d\n",a,b,m,n,t); fprintf(fp,"\nMy exam number is :0112400123"); fclose(fp); getch(); } 114



更多相关文章:
计算机基础上机考试试题
计算机基础上机考试试题_其它_高等教育_教育专区。测试题一( 测试题一(60 分钟 100 分)操作测试题( 一、Windows 操作测试题(共 5 分) 在 D 盘建立以自己...
计算机B级考试
全国专业技术人员计算机应用能力考试采取科目 ( 模块 ) 化设计 ,考试 采取一人 一机,上机实际操作的方式进行。每个科目(模块)考试时间为 50 分钟。 2、全国专业...
职称计算机考试题库答案
四、应试人员必须按照准考证规定的考试时间、场次和座位号参加所报科目的考试,按要求输入本人 身份证号和相应科目座位号进入考试系统答题。 五、考试全部采用上机操作...
计算机二级C语言上机考试操作步骤及流程
二级C 语言上机考试操作步骤一、进入考试系统单击桌面上的“考试系统”图标,进入考试启动界面。“考试启动界面”如图 1 所示。 图1 二、输入考生信息进入考试界面后...
职称计算机考试注意事项【全】
计算机职称考试采取直接上机的操作形式,只有 操作正确,采取出现执行结果,题目答完后在对试题界面执行操作不 会响应,你认为答题完了,但试题的界面依然可以操作,说明这...
计算机模块考试技巧
二、上机操作方法和答题技巧 1.职称计算机考试采用直接上机操作,只有操作正确,才会出现执 行结果,题目答完后再对试题界面执行操作不会响应(题目操作完毕显 示的是...
全国计算机等级考试一级练习题(2)
全国计算机等级考试一级练习题计算机应用基础2 一、单选题 1、第一代电子数字计算机适应的程序设计语言为___。 A:机器语言 B:高级语言 C:数据库语言 D:可视化...
程序设计基础实验与上机考试教程最全答案
程序设计基础实验与上机考试教程最全答案_电脑基础知识_IT/计算机_专业资料。实验报告 实验日期___ 实验名称: 实验一 常用标准控件一【实验目的与要求】 1.掌握Vis...
计算机等级考试一级上机试题(两套)
.F. .T. 非计算机专业计算机等级考试 一级上机考试题 (第二套) 一、汉字录入(请在 Word 系统中录入如下内容,25 分) 要求:1.在表格中正确地录入考生姓名和...
office办公软件上机操作试题
中国成语故事——卧薪尝胆 计算机 office 办公软件上机操作试题一、Word 编辑: ...“筛选”命令,筛选出考试“通过”的学生,并将筛 选结果显示到表“Sheet2”中...
更多相关标签:
二级c上机考试题库    计算机上机考试题库    实践技能上机考试题目    上机考试题库    未来教育上机考试题库    计算机上机考试系统    华为上机考试题库    执业医师技能考试上机    

All rights reserved Powered by 甜梦文库 9512.net

copyright ©right 2010-2021。
甜梦文库内容来自网络,如有侵犯请联系客服。zhit325@126.com|网站地图