一、选择题
1、
下列关于算法的描述中,错误的是__________。
A.算法可以用伪代码、流程图等多种形式描述
B.一个正确的算法必须有输入
C.一个正确的算法必须有输出
D.能用流程图描述的算法,也可用计算机高级语言描述
2、
如用"scanf("%c%c",&c1,&c2)",为字符变量c1和c2分别赋值字符'A'和'B',正确的输入是__________。
A.字符'A'和'B'之间用逗号间隔
B.字符'A'和'B'之间不能有任何间隔符
C.字符'A'和'B'之间可以用回车间隔
D.字符'A'和'B'之间用空格间隔
3、
下列关于文件操作的描述中,错误的是__________。
A. "file *fp;"可定义一个文件指针
B.fputc函数可用于把数据写入到文件
C.fprintf函数可用于把数据写入到文件
D.fputs函数可用于把数据写入到文件
二、程序填空题
1、
一件衣服80元,消费满300元,打九折;消费满500元,打8折。试编程实现以下功能:输入购买衣服件数,输出购买件数和需付金额(元)。
#include <stdio.h>
main()
{
int s,n;
_____ 1 _____
printf("n=");
scanf("%d",&n);
s=n*80;
switch(_____ 2 _____)
{
case 0:
case 1:
case 2:
break;
case 3:
case 4:
d=0.9;
break;
_____ 3 _____
d=0.8;
}
_____ 4 _____
printf("n=%d,s=%d\n",n,s);
return 0;
}
三、写程序结果
1、
下列程序的运行结果是__________。
#include <stdio.h>
main()
{
int a=2,b=1,c=1;
for(;a;)
{
b+=a;
a-=++c;
}
printf("%d,%d,%d\n",a,b,c);
return 0;
}
2、
下列程序的运行结果是__________。
#include <stdio.h>
main()
{
int s=24,r=1;
while(s)
{
if(!(s & 0x01))
r++;
else
break;
s>>=1;
}
printf("r=%d\n",r);
return 0;
}
3、
下列程序的运行结果是__________。
#include <stdio.h>
#define S(X) X*X
main()
{
int a=10,k=2,m=1;
a/=S(k+m)/S(k+m);
printf("%d\n",a);
return 0;
}
4、
#include <stdio.h>
void fun(char *s,char c)
{
int i,j,n;
for(i=0;s[i]!='\0';i++)
if(s[i]==c)
{
n=0;
while(s[i+1+n]!='\0') n++;
for(j=i+n+1;j>i;j--) s[j+1]=s[j];
s[j+1]=c;
i=i+1;
}
}
main()
{
char s[80]="baacda",c='a';
fun(s,c);
printf("result:%s\n",s);
return 0;
}
5、
下列程序的运行结果是__________。
#include <stdio.h>
int max(int x,int y)
{
return (x>y)?x:y;
}
main()
{
int A[]={2,-3,8};
int n=sizeof(A)/sizeof(int);
int nStart=A[n-1];
int nAll=A[n-1];
int i;
for(i=n-2;i>=0;i--)
{
nStart=max(A[i],nStart+A[i]);
nAll=max(nStart,nAll);
}
printf("max=%d\n",nAll);
return 0;
}
四、程序填空
1、
有n盏灯,编号为1~n;k个人,k≤n≤100。第1个人把所有灯打开,第2个人按下所有编号为2倍数的灯开关(这些灯将关掉),第3个人按下所有编号为3倍数的灯开关(关掉的灯将打开,开着的灯将关闭),依此类推。问最后有哪些灯开着?
下面程序的功能是:输入n和k,输出开着的灯编号。如有7盏灯,3个人,则输出"1-5-6-7"。
#include <stdio.h>
#include "string.h"
#define maxn 101
int a[maxn]={0};
int main()
{
int i,j,n,k,_____ 1 _____
printf("n=");
scanf("%d",&n);
printf("k=");
scanf("%d",&k);
for(i=1;i<=k;i++)
for(j=i;j<=n;j++)
if(_____ 2 _____)
_____ 3 _____
for(i=1;i<=n;i++)
if(_____ 4 _____)
{
if(first) _____ 5 _____
else printf("-");
printf("%d",i);
}
printf("\n");
return 0;
}
五、改错
1、
下列程序的功能是:函数f的功能是:求整数n(n<1000)每个数位上包含1的个数,如:17中各数位包含1的数量为1,112中各数位包含1的数量为2.主函数的功能是求小于N的自然数中,各数位包含1的数量的和。如N=7,执行结果为"iCount=1";如N=12,执行结果为"iCount=5"。以下程序只允许修改三行
#include <stdio.h>
unsigned int f(unsigned int n)
{
unsigned int iNum=0;
while(n)
{
iNum+=(n%10)?0:1;
n%=10;
}
return iNum;
}
int main()
{
unsigned int N=7;
unsigned int iCount=0;
int i;
for(i=1;i<=N;i++)
{
iCount=f(i);
}
printf("iCount=%d",iCount);
}
2、
下面程序功能是计算如下级数,直到最后一项的绝对值小于10-6。以下程序只允许修改两行
1-1/3+1/5-1/7+…
#include <stdio.h>
int main()
{
double sum=0.0;
int i;
for(i=0;;i++)
{
double term=1/(i*2+1);
if(i%2==0)
sum+=term;
else
sum-=term;
if(term<1e-6)
continue;
}
printf("%.6f\n",sum);
return 0;
}
六、程序设计题
1、
下列程序的功能是:输入学生信息与三科成绩,并存放在链表中;输出总成绩最高的学生信息及成绩。例如,若学生信息为:“2023001张一明83 92 78;2023002 李小明 85 94 78;2023003 王大明 88 88 78”,则执行程序后,输出总分最高的学生李小明的相关信息。
#include <stdio.h>
#include "stdlib.h"
#define maxNum 3
typedef struct data
{
char ID[10]; /*存放学号*/
char name[10]; /*存放姓名*/
int score[3]; /*存放三科成绩*/
struct data *next;
}_____ 1 _____
MYDATA *creatData()
/*创建存放信息的链表*/
{
MYDATA *p,*q,*h;
int i;
int INPUT=0;
h=q=(MYDATA *)malloc(sizeof(MYDATA));
while(INPUT++<maxNum)
{
p=(MYDATA *)malloc(sizeof(MYDATA));
printf("input No(7 numbers):");
scanf("%s",p->ID);
printf("input name(8 charaters):");
scanf("%s",p->name);
printf("input 3 scores:\n");
for(i=0;i<3;i++)
scanf("%d",(p->score)+i);
p->next=p;
q->next=p;
_____ 2 _____
}
q->next=NULL;
return h;
}
void outData(MYDATA *h) /*输出链表存放的信息*/
{
MYDATA *p;
int i;
p=h->next;
while(p!=NULL)
{
printf("No--%s\n",p->ID);
printf("Name--%s\n",p->name);
for(i=0;i<3;i++)
printf("%d ",(p->score)[i]);
p=p->next;
printf("\n\n");
}
}
void findMax(MYDATA *h) /*输出总成绩最高的学生信息*/
{
MYDATA *p;
int i,pos=0,j=0;
int maxSum=0;
p=h->next;
while(p!=NULL)
{
int sum=0;
for(i=0;i<3;i++)
sum+=(p->score)[i];
if(sum>maxSum)
{
maxSum=sum;
_____ 3 _____
}
j++;
p=p->next;
}
_____ 4 _____
printf("the best score is :\n");
while(pos--)
p=p->next;
printf("No--%s\n",p->ID);
printf("Name--%s\n",p->name);
for(i=0;i<3;i++)
printf("%d ",(p->score)[i]);
printf("maxSum=%d\n\n",maxSum);
}
int main()
{
MYDATA *h;
h=creatData();
outData(h);
_____ 5 _____
return 0;
}
参考答案:
一、选择题
1—3 B、B、A
二、程序填空题
1、float d=1.0; 2、s/100 3、default : 4、s=s*d;
三、写程序结果
1、0,3,2 2、r=4 3、1
4、result:baaaacdaa 5、max=8
注:第2题若s=20或s=18更好
第5题最好还要输出nStart
四、程序填空
1、first=1; 2、j%i==0 3、a[j]=!a[j];
4、a[i]==1 5、first=!first; 或者 first=0;
五、改错
1、
L07 iNum+=(n%10==1)?1:0;
L08 n/=10;
L19 iCount+=f(i);
注:若19行按照如下功能修改也可以,但是没有完全按照题意,故不要改第4行
L04 static unsigned int iNum=0;
2、
L08 double term=1.0/(i*2+1);//double term=1/(i*2+1);
L14 break;//continue;
六、程序设计题
1、MYDATA; 2、q=p; 3、pos=j;
4、p=h->next; 5、findMax(h);
标签:main,return,_____,真题,int,对口,2023,printf,include From: https://blog.51cto.com/teacherzhou/6940585