一、选择题1、不能把字符串“hello!”赋给数组b的语句是 ____________________A.char b[10]={'H','e','l','l','o','!'};B.char b[10];b="Hello!";C.char b[10];strcpy(b,"Hello!");D.char b[10]="Hello!";2、在宏定义“#define PI 3.14159”中,用宏名PI代替一个 ____________________A.单精度数B. 双精度数C.常量D.字符串3、下列说法错误的是 ____________________A.C语言中对二进制文件的访问速度比文本文件块B.C语言中随机文件以二进制代码形式存储数据C.语句“FILE fp;”定义了一个名为“fp”的文件指针D.C语言中的文本文件以ASCII码形式存储数据二、基本操作题30、下列给定程序中,函数fun的功能是:将N*N矩阵中元素的值按列向右移动一个位置,右边被移出矩阵的元素绕回左边第一列。
例如,N=3,有下列矩阵。
1 2 3 3 1 24 5 6 计算结果为 6 4 57 8 9 9 7 8请将正确内容填入答题卡相应位置,使程序得出正确答案。
#include "stdio.h"#define N 4void fun(int(*t)[N]){int i,j,x;for(i=0;i<N;i++) //for(i=0;i<____ 1 ____;i++){x=t[i][N-1];//x=____ 2 ____;for(j=N-1;j>=1;j--) //此处应为 1t[i][j]=t[i][j-1];t[i][0]=x;//____ 3 ____=x;}}main(){int i,j,t[][N]={21,12,13,24, 25,16,47,38, 29,11,32,54, 42,21,33,10};printf("The original array:\n");for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%4d",t[i][j]);printf("\n");}fun(t);//____ 4 ____;printf("\nThe result is:\n");for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%4d",t[i][j]);printf("\n");}}答案:for(i=0;i<N;i++) //for(i=0;i<____ 1 ____;i++) x=t[i][N-1];//x=____ 2 ____;t[i][0]=x;//____ 3 ____=x;fun(t);//____ 4 ____;四、程序分析题32、阅读程序,写出运行结果(1)下列程序的运行结果是 ____________________ #include "stdio.h"main(){int a,b,c;a=b=c=0;c=(a-=a-5),(a=b,b+5);printf("%d,%d,%d\n",a,b,c);}答案:0,0,5(2)下列程序的运行结果是 ____________________ #include "stdio.h"main(){int x[5]={2,4,6,8,10},*p,**pp;p=x;pp=&p;printf("%d",*(p++));printf("%3d\n",**pp);}答案:2 4(3)下列程序的运行结果是 ____________________ #include "stdio.h"main(){int i=2,j=3,k=4;if(i++==2 && (++j==3 || k++==3))k++;printf("%d %d %d",i,j,k);}答案:3 4 5(4)下列程序的运行结果是 ____________________#include "stdio.h"int fun(char *a,char *b){while((*a!='\0') && (*b!='\0') && (*a==*b)){a++;b++;}return (*a-*b);}main(){char a[10]="abc";char b[10]="ab";printf("%d",fun(a,b));}答案:99(5)下列程序的运行结果是 ____________________#include "stdio.h"void WriteStr(char *fn,char *str){FILE *fp;fp=fopen(fn,"w");fputs(str,fp);fclose(fp);}main(){WriteStr("t1.dat","start");WriteStr("t1.dat","end");}答案:end33、程序填空。
按照题目要求,将正确内容填入答题卡相应位置,使程序完整。
(1)已知字母A的ASCII码为65,以下是一个猜字母游戏,计算机随机产生A至Z之间的一个字母,用户有10次猜字母的机会。
第一次猜中得10分,第二次猜中的9分……。
第10次猜中得1分。
10次都猜不中得0分,如果猜错,计算机提示所猜字母是超前还是落后。
最后显示总得分。
#include "stdio.h"#include "stdlib.h"#include "time.h"int main(){int i,score=0;char ch,ch1,ch2;srand((unsigned)time(0));____ 1 ____;for(i=1;i<=10;i++){printf("\n请输入所猜的大写字母");scanf("%c%c",&ch1,&ch2);if(ch1>ch) printf("落后了");else if(ch1<ch) printf("超前了");else{printf("你猜中了");score=score+11-i;____ 2 ____;}}printf("\n你的得分为:%d %c",score,ch);return 0;}答案:ch=rand()%26+65;//____ 1 ____;break;//____ 2 ____;(2)结果为 13431 请根据结果7完成程序。
#include "stdio.h"struct NODE{int k; struct NODE *link;};int main(){struct NODE m[5],*p=m,*q=m+4;int i=0;while(p!=q){____ 3 ____;p++;q->k=i++;____ 4 ____;}____ 5 ____;for(i=0;i<5;i++) printf("%d ",m[i].k);return 0;}答案:p->k=++i;//____ 3 ____;q--;//____ 4 ____;p->k=i;//____ 5 ____;34、阅读程序,修改程序中的错误,不得增减行,也不得更改程序结构。
(1)输入10个正整数,计算其中的素数之和并输出结果(不考虑溢出情况),两个错误。
两个错误。
L01 #include "stdio.h"L02 int sum(int *b,int m)L03 { int s=0,is_prime(long);L04 while(m--)L05 if(is_prime(*b++)) s+=*b;L06 return s;L07 }L08 is_prime(long m)L09 { int k;L10 if(m<=1) return 0;L11 if(m==2 || m==3) return 1;L12 for(k=2;k*k<=m;k++)L13 if(m%k==0) return 0;L14 else return 1;L15 }L16 int main()L17 { int x[10],i;L18 for(i=0;i<10;i++) scanf("%d",x+i);L19 printf("sum=%d\n",sum(x,10));L20 }答案:L05 if(is_prime(*b++)) s+=*(b-1);//if(is_prime(*b++)) s+=*b;L08 int is_prime(long m)//is_prime(long m) 此处tc认为没有错L14 return 1; //else return 1;(2)求整数x的y次方的低3位值。
例如,5的6次方为12625,此值的低3位为625. 三个错误。
L01 #include "stdio.h"L02 long fun(int x,int y,long *p)L03 { int i;long t=1;L04 for(i=1;i<y;i++) t=t*x;L05 *p=t;L06 t=t/1000;return t; }L07 int main()L08 { long t,r; int x,y;L09 printf("\ninput x and y:");L10 scanf("%d%d",&x,&y);L11 t=fun(x,y,r);L12 printf("\n\nx=%d,y=%d,r=%ld,last=%ld\n\n",x,y,r,t); L13 }答案:L04 for(i=1;i<=y;i++) t=t*x;//for(i=1;i<y;i++) t=t*x; L06 t=t%1000; return t; } //t=t/1000;return t; }L11 t=fun(x,y,&r);//t=fun(x,y,r);五、程序设计题35、下列程序的功能是:建立具有n个节点的链表#include "stdio.h"#include "stdlib.h"typedef struct node{int data;____ 1 ____;}NODE;int main(){NODE *head,*p,*q;int i,n;printf("input n:");scanf("%d",&n);if(n<=0) head=NULL;else{p=____ 2 ____ =malloc(sizeof(NODE));scanf("%d",&q->data);for(i=1;i<n;i++){q=(NODE *)malloc(sizeof(NODE));____ 3 ____;scanf("%d",&q->data);p=q;}____ 4 ____;}printf("onput:\n");p=head;while(____ 5 ____ ){printf("%d",p->data);p=p->next;}return 0;}答案:struct node *next;//____ 1 ____;p=q=head=(NODE *)malloc(sizeof(NODE));//p=____ 2 ____ =malloc(sizeof(NODE)); p->next=q;//____ 3 ____;p->next=NULL;//____ 4 ____;while(p)//while(____ 5 ____ )。