高级语言程序设计模拟试题及参考答案1.w是一个大于10的无符号整数,若w是n(n>=2)位的整数,函数求出w的低n-1位的数作为函数值返回。
如输入790404,输出为90404。
#include<stdio.h>unsigned fun(unsigned w){int j=1;unsigned sum=0;while (w!=0){if (w<10) break;sum=sum+w%10*j;j=j*10;w=w/10;}return sum;}int main(){unsigned x;printf("enter a unsigned integer number:");scanf("%u",&x);printf("the original data is :%d\n",x);if (x<10) printf("data error!");elseprintf("the result :%u\n",fun(x));printf("\n");return 0;2.完成decrypt函数,实现解密功能:将任意密文实现解密输出。
加密规则:字符串中所有小写英文字母循环加密。
如a到b,b到c,…,z到a。
如输入az ibwf b mjuumf bqqmf!,输出为:zy have a little apple!#include<stdio.h>#include<string.h>void decrypt(char *s){while (*s){if (*s>='a'&& *s<='z')if (*s=='a') *s='z';else*s=*s-1;s++;}}int main(){char t1[80],ch;gets(t1);printf("\nthe original data is :%s",t1);decrypt(t1);printf("\nthe resulted data is :%s",t1);printf("\n");return 0;3. 用选择法实现对10个整数按从大到小的顺序排序输出(要求用指针实现)。
#include<stdio.h>int main(){int a[10],i,j;void sort(int *);for(i=0;i<10;i++)scanf("%d",&a[i]);printf("\nthe original data is :");for(i=0;i<10;i++) printf("%d ",a[i]);sort(a);printf("\nthe result data is :");for(i=0;i<10;i++)printf("%d ",a[i]);puts("");return 0;}void sort1(int *p){int i,j,t;for(i=0;i<9;i++)for(j=i+1;j<10;j++)if(*(p+i)<*(p+j)){t=*(p+i);*(p+i)=*(p+j);*(p+j)=t;}4. 编写函数,使字符串中尾部的*号不得多于n个;若多于n个,则删除多于的*号;若少于或等于n个,什么也不做。
例如:字符串内容为*******AS*BHH**G*******,若n值为4,删除后,字符串内容应该为:*******AS*BHH**G****,若n值为9,则为*******AS*BHH**G*******#include <stdio.h>void fun(char *a,int n){char *t=a;int m=0;while (*t) t++;t--;while (*t=='*'){t--;m++;}if (m>n) *(t+n+1)='\0';}void main(){char s[81];int n;printf("Enter a string:\n");gets(s);printf("\nenter n:");scanf("%d",&n);fun(s,n);printf("the string after deleted:\n");puts(s);printf("\n");6. 用冒泡法实现对10个整数按从小到大的顺序排序输出(要求用指针实现)。
#include<stdio.h>int main(){int a[10],i,j;void sort(int *);for(i=0;i<10;i++)scanf("%d",&a[i]);printf("\nthe original data is :");for(i=0;i<10;i++) printf("%d ",a[i]);sort(a);printf("\nthe result data is :");for(i=0;i<10;i++)printf("%d ",a[i]);puts("");return 0;}void sort(int *p){int i,j,t;for(i=0;i<9;i++)for(j=0;j<9-i;j++)if(*(p+j)<*(p+j+1)){t=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=t;}}7. 有一个数组int A[nSize],要求写一个函数:void myfunc (int p[], int nSize);将A中的0都移至数组末尾,将非0的移至开始(保持原来的顺序不变)。
例如:A原来是:1, 0, 3, 4, 0, -3, 5经过myfunc处理后为:1, 3, 4, -3, 5, 0, 0#include <stdio.h>void myfunc(int p[],int nsize){int i,tt[10]={0},j=0;for(i=0;i<nsize;i++)if (p[i]!=0) tt[j++]=p[i];for(i=0;i<10;i++)p[i]=tt[i];}int main(){int st[10]={12,0,0,54,0,0,0,23,24,68},i;myfunc(st,10);for(i=0;i<10;i++)printf("%d\n",st[i]);return 0;}9. 从键盘输入10个学生的信息(包括姓名,成绩),存到磁盘文件上。
然后再从磁盘文件上读取第2,4,6,8,10共5个学生数据输入计算机,并在屏幕上显示出来。
#include<stdio.h>#include<stdlib.h>#define N 10struct Student{char name[10];int score;}stud[N];void save(){FILE *fp;int i;if((fp=fopen("d:\\file4.dat","w"))==NULL){printf("cannot open file\n");return;}/*fp=fopen("d:\\file4.dat","w");*/for(i=0;i<N;i++)if(fwrite(&stud[i],sizeof(struct Student),1,fp)!=1)printf("file write error\n");//fwrite(&stud[i],sizeof(struct Student),1,fp);fclose(fp);}void read(){FILE *fp=fopen("d:\\file4.dat","r");for(int i=1;i<N;i+=2){fseek(fp,i*sizeof(struct Student),0);fread(&stud[i],sizeof(struct Student),1,fp);printf("读取的数据为:%s %d\n",stud[i].name,stud[i].score);}fclose(fp);}int main(){printf("please enter data of student:\n");for(int i=0;i<N;i++)//scanf(" %s,%d",stud[i].name,&stud[i].score);{printf("\n姓名:");scanf(" %s",stud[i].name);printf("\n成绩:");scanf("%d",&stud[i].score);}save();read();return 0;}10. 从键盘上读入5个字符串,对它们按字母大小的降序排序,然后把排好序的字符串送到磁盘文件中保存,文件把保存到d盘根目录下,完成write函数。
#include<stdio.h>#include<stdlib.h>#include<string.h>void write(char (*st)[20]){int i,j;char t[20];FILE *fp1;for(i=0;i<4;i++)for(j=0;j<5-i-1;j++)if(strcmp(st[j],st[j+1])<0){strcpy(t,st[j]);strcpy(st[j],st[j+1]);strcpy(st[j+1],t);}fp1=fopen("d:\\file.txt","w");for(i=0;i<5;i++){fputs(st[i],fp1);fputs("\n",fp1);}fclose(fp1);}void output(){FILE *fp2;char buf[30];if ((fp2=fopen("d:\\file.txt","r"))==NULL){ printf("can't open file\n");exit(0);}while (fgets(buf,20,fp2))printf("%s",buf);fclose(fp2);}int main(){char a[5][20];int i;printf("Enter three strings:\n");for(i=0;i<5;i++)gets(a[i]);write(a);output();return 0;11 有一个文件,存放了一批学生信息(姓名,学号,成绩),完成函数ave,求学生的平均成绩。