国家二级C语言机试(操作题)模拟试卷685
程序填空题
1.函数fun的功能是:在有n个元素的结构体数组std中,查找有不及格科目的学生,找到后输出学生的学号;函数的返回值是有不及格科目的学生人数。
例如,主函数中给出了4名学生的数据,则程序运行的结果为:
学号:N1002学号:N1006
共有2位学生有不及格科目
请在程序的下画线处填入正确的内容,并把下画线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdio.h>
typedef struct
{
char num[8];
double score[2];
/******found******/
}___1___;
int fun(STU std[],int n)
{
int i,k=0;
for(i=0;i<n;i++)
/******found******/
if(std[i].score[0]<60___2___
std[i].score[1]<60)
{
k++;
pfinff(\\
(1)STU
(2)||
(3)k
解析:本题考查:对结构体的定义和使用,以及逻辑运算符的使用。
填空1:STU结构体别名,通过main()中的语句可知。
填空2:||只要学生两门课成绩有不及格的,就算不及格,因此使用或运算。
填空3:k返回的是不及格的学生个数,有题意可知k是累计个数的。
程序修改题
2.下列给定的程序中,函数fun的功能是:计算并输出k以内最大的10个能被13或17整除的自然数之和。k的值由主函数传入,若k的值为500,则函数的值为4622。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int fun(int k)
{
int m=0,mc=0,j;
while((k>=2)&&(mc<10))
{
/******found******/
if((k%13=0)||(k%17=0))
{m=m+k;mc++;}
k–;
/******found******/
return m;
}
void main()
{
printf(\\
(1)if((k%13==0)||(k%17==0))
(2)}return m;
解析:(1)C语言中,x能被y整除的表示方法是x%y==0,而不是题目中所表示的x%y=0。所以,if((k%13=0)||(k%17=0))修改后的结果应该是答案所示信息。
(2)程序中缺少程序完整所需的“}”,此类信息在做题时一定要注意,可以在做题前先运行一下程序,这样明显的错误一般都会有错误信息显示出来。比如丢失“}”的错误信息是“Compound statement missing}in function fun”。
说明:做题之前先运行一下程序,如果有书写错误,系统会提示,这样可以简化题目。
程序设计题
3.请编写函数fun,对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按ASCII码降序排列。例如,原来的字符串为\\
void fun(char*s,int num)
{
char ch:
int i,j;
for(i=1;i<6;i++)
fbr(j=i+1;j<6;j++)
{
if(*(s+i)<*(s+j))
{
ch=*(s+j);
*(s+j)=*(s+i);
*(s+i)=ch;
}
}
}
解析:本题考查:for循环语句;字符的交换;指针型变量;指针移动。
指针移动:指针经常用于指向数组和字符串,通过指针的移动实现对数组或字符串的遍历。数组和字符串都是用一段连续的地址来存放元素的。所以,指针的移动也就是对地址的加减。
本题要求对长度为7的字符串,除首、尾字符外,将其余5个字符按ASCII码降序排列,因而要用双重循环进行排序。注意第1个循环的变量的初值i=1,第2个循环的变量的初值为j=i+1;这是因为题目要求除首、尾字符外,将其余5个字符按ASCII码降序排列。
本文档预览:3600字符,共2404字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载