📄 nbtk.txt
字号:
/**********found**********/
(*tt)++;
}
if(tl>sl) return t;
else return s;
}
main()
{ char a[80],b[80],*p,*q; int i;
printf("\nEnter a string : "); gets(a);
printf("\nEnter a string again : "); gets(b);
printf("\nThe longer is :\n\n\"%s\"\n",fun(a,b));
}
解题思路:
第一处: 试题要求返回字符串的首地址,所以应改为:char *fun(char *s,char *t)
第二处: 取字符串指针ss的下一个位置,所以应改为:ss++;。
第三处:取字符串指针tt的下一个位置,所以应改为:tt++;。
***************************************************
请编写函数fun,函数的功能是: 移动字符串中的内容,移动的规则如下: 把第
1到第m个字符, 平移到字符串的最后, 把第m+1到最后的字符移到字符串的前部。
例如, 字符串中原有的内容为: ABCDEFGHIJK, m的值为3, 则移动后, 字符串
/* 宏为世纪教育 www.greatc.cn */
中的内容应该是: DEFGHIJKABC。
注意:部分源程序在文件PROG1.C中。
请勿改动主函数main和其它函数中的任何内容, 仅在函数fun的花括号中填入
你编写的若干语句。
给定源程序:
#include <stdio.h>
#include <string.h>
#define N 80
void fun1(char *w) /* 本函数的功能是将字符串中字符循环左移一个位置 */
{
int i; char t;
t=w[0];
for(i=0;i<strlen(w)-1;i++)
w[i]=w[i+1];
w[strlen(w)-1]=t;
}
void fun(char *w, int m) /* 可调用fun1函数左移字符 */
{
}
main()
{ char a[N]= "ABCDEFGHIJK";
int m;
printf("The original string:\n");puts(a);
printf("\n\nEnter m: ");scanf("%d",&m);
fun(a,m);
printf("\nThe string after moving:\n");puts(a);
printf("\n\n");
NONO();
}
解题思路:
本题是考察字符串的操作。
1. 由于函数fun1是将字符串中字符循环左移一个位置,并通过实参w返回循环左移一个位
置的字符串。
2. 利用循环for语句来操作多少个字符(m)需要循环左移。
参考答案:
/* 宏为世纪教育 www.greatc.cn */
void fun1(char *w) /* 本函数的功能是将字符串中字符循环左移一个位置 */
{
int i; char t;
t=w[0];
for(i=0;i<strlen(w)-1;i++)
w[i]=w[i+1];
w[strlen(w)-1]=t;
}
void fun(char *w, int m) /* 可调用fun1函数左移字符 */
{
int i;
for(i = 0 ; i < m ; i++) fun1(w);
}
※※※※※※※※※※※※※※※※※※※※※※※※※
第07套:
程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的信息。函
数fun的功能是输出这位学生的信息。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
/* 宏为世纪教育 www.greatc.cn */
#include <stdio.h>
typedef struct
{ int num;
char name[9];
char sex;
struct { int year,month,day ;} birthday;
float score[3];
}STU;
/**********found**********/
void show(STU ___1___)
{ int i;
printf("\n%d %s %c %d-%d-%d", tt.num, tt.name, tt.sex,
tt.birthday.year, tt.birthday.month, tt.birthday.day);
for(i=0; i<3; i++)
/**********found**********/
printf("%5.1f", ___2___);
printf("\n");
}
main( )
{ STU std={ 1,"Zhanghua",'M',1961,10,8,76.5,78.0,82.0 };
printf("\nA student data:\n");
/**********found**********/
show(___3___);
}
解题思路:
本题是利用结构体变量存储了一名学生的信息。
第一处:tt变量在函数体fun已经使用,所以应填:tt。
第二处:利用循环分别输出学生的成绩数据,所以应填:tt.score[i]。
第三处:函数的调用,所以应填:std。
***************************************************
给定程序MODI1.C中函数 fun 的功能是:求出数组中最大数和次最大数,并
把最大数和a[0]中的数对调、次最大数和a[1]中的数对调。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!
给定源程序:
#include <stdio.h>
#define N 20
int fun ( int * a, int n )
{ int i, m, t, k ;
for(i=0;i<2;i++) {
/**********found**********/
m=0;
for(k=i+1;k<n;k++)
/**********found**********/
if(a[k]>a[m]) k=m;
t=a[i];a[i]=a[m];a[m]=t;
}
/* 宏为世纪教育 www.greatc.cn */
}
main( )
{ int x, b[N]={11,5,12,0,3,6,9,7,10,8}, n=10, i;
for ( i=0; i<n; i++ ) printf("%d ", b[i]);
printf("\n");
fun ( b, n );
for ( i=0; i<n; i++ ) printf("%d ", b[i]);
printf("\n");
}
解题思路:
第一处:外循环每循环一次,把当前位置i赋值给m,所以应改为:m=i;。
第二处:通过内循环来找出最大的一个数的位置k,所以应改为:if(a[k]>a[m]) m=k;。
***************************************************
请编写一个函数 unsigned fun ( unsigned w ),w 是一个大于10的无符
号整数,若 w 是 n (n ≥ 2)位的整数,函数求出w的低 n-1位的数作为函数值返
回。
例如:w 值为 5923,则函数返回 923; w 值为 923 则函数返回 23。
注意: 部分源程序存在文件PROG1.C中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
给定源程序:
#include <stdio.h>
unsigned fun ( unsigned w )
{
}
main( )
{ unsigned x;
printf ( "Enter a unsigned integer number : " ); scanf ( "%u", &x );
printf ( "The original data is : %u\n", x );
if ( x < 10 ) printf ("Data error !");
else printf ( "The result : %u\n", fun ( x ) );
NONO( );
}
解题思路:
本题是考察考生怎样获取一个符合要求的无符号整数。本题是应用if条件语句首先判断给
出的数是几位数,再模相应的值,最后得出的余数就是结果。
参考答案:
unsigned fun ( unsigned w )
{
if(w>10000) w %= 10000 ;
else if(w>1000) w %= 1000 ;
else if(w>100) w %= 100 ;
else if(w>10) w %=10 ;
return w ;
}
※※※※※※※※※※※※※※※※※※※※※※※※※
第08套:
给定程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的学号、
姓名和3门课的成绩。函数fun的功能是将该学生的各科成绩都乘以一个系数a。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include <stdio.h>
/* 宏为世纪教育 www.greatc.cn */
typedef struct
{ int num;
char name[9];
float score[3];
}STU;
void show(STU tt)
{ int i;
printf("%d %s : ",tt.num,tt.name);
for(i=0; i<3; i++)
printf("%5.1f",tt.score[i]);
printf("\n");
}
/**********found**********/
void modify(___1___ *ss,float a)
{ int i;
for(i=0; i<3; i++)
/**********found**********/
ss->___2___ *=a;
}
main( )
{ STU std={ 1,"Zhanghua",76.5,78.0,82.0 };
float a;
printf("\nThe original number and name and scores :\n");
show(std);
printf("\nInput a number : "); scanf("%f",&a);
/**********found**********/
modify(___3___,a);
printf("\nA result of modifying :\n");
show(std);
}
解题思路:
本题是利用结构体存储学生记录并由实参ss返回。
第一处:实参ss是一个结构型指针变量,所以应填:STU。
第二处:该学生的各科成绩都乘以一个系数a,所以应填:score[i]。
第三处:函数的调用,由于函数定义时使用的指针结构型变量,所以应填:&std。
***************************************************
给定程序MODI1.C中函数fun的功能是:求k!(k<13),所求阶乘的值作为函
数值返回。例如:若k = 10,则应输出:3628800。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!
给定源程序:
#include <stdio.h>
long fun ( int k)
{
/************found************/
if k > 0
return (k*fun(k-1));
/* 宏为世纪教育 www.greatc.cn */
/************found************/
else if ( k=0 )
return 1L;
}
main()
{ int k = 10 ;
printf("%d!=%ld\n", k, fun ( k )) ;
}
解题思路:
第一处:条件判断缺少圆括号。
第二处:判断相等的符号是==。
***************************************************
程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数
fun(int a[][N], int n),函数的功能是:使数组左下三角元素中的值乘以n 。
例如:若n的值为3,a 数组中的值为
| 1 9 7 | | 3 9 7 |
a = | 2 3 8 | 则返回主程序后a数组中的值应为 | 6 9 8 |
| 4 5 6 | | 12 15 18|
注意: 部分源程序存在文件PROG1.C中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
给定源程序:
#include <stdio.h>
#include <stdlib.h>
#define N 5
int fun ( int a[][N], int n )
{
}
main ( )
{ int a[N][N], n, i, j;
printf("***** The array *****\n");
for ( i =0; i<N; i++ )
{ for ( j =0; j<N; j++ )
{ a[i][j] = rand()%10; printf( "%4d", a[i][j] ); }
printf("\n");
}
do n = rand()%10 ; while ( n >=3 );
printf("n = %4d\n",n);
fun ( a, n );
printf ("***** THE RESULT *****\n");
for ( i =0; i<N; i++ )
{ for ( j =0; j<N; j++ ) printf( "%4d", a[i][j] );
printf("\n");
}
NONO( );
}
解题思路:
本题是利用两重循环给二维数组左下三角元素中的值乘以n。
参考答案:
int fun ( int a[][N], int n )
{
int i, j;
for(i = 0 ; i < N ; i++)
for(j = 0 ; j <= i; j++)
a[i][j] *= n ;
}
※※※※※※※※※※※※※※※※※※※※※※※※※
第09套:
给定程序中,函数fun的功能是将不带头节点的单向链表结点数据域中的数据从小到大排序。即若原链表结点数据域从头至尾的数据为:10、4、2、8、6,排序后链表结点数据域从头至尾的数据为:2、4、6、8、10。
请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include <stdio.h>
#include <stdlib.h>
#define N 6
typedef struct node {
int data;
struct node *next;
} NODE;
void fun(NODE *h)
{ NODE *p, *q; int t;
p = h;
while (p) {
/**********found**********/
q = __1__ ;
/**********found**********/
while (__2__)
{ if (p->data > q->data)
{ t = p->data; p->data = q->data; q->data = t; }
q = q->next;
/* 宏为世纪教育 www.greatc.cn */
}
/**********found**********/
p = __3__ ;
}
}
NODE *creatlist(int a[])
{ NODE *h,*p,*q; int i;
h=NULL;
for(i=0; i<N; i++)
{ q=(NODE *)malloc(sizeof(NODE));
q->data=a[i];
q->next = NULL;
if (h == NULL) h = p = q;
else { p->next = q; p = q; }
}
return h;
}
void outlist(NODE *h)
{ NODE *p;
p=h;
if (p==NULL) printf("The list is NULL!\n");
else
{ printf("\nHead ");
do
{ printf("->%d", p->data); p=p->next; }
while(p!=NULL);
printf("->End\n");
}
}
main()
{ NODE *head;
int a[N]= {0, 10, 4, 2, 8, 6 };
head=creatlist(a);
printf("\nThe original list:\n");
outlist(head);
fun(head);
printf("\nThe list after inverting :\n");
outlist(head);
}
解题思路:
本题是考察使用链表方法,使用两重while循环语句,对链表的结点数据进行升序排列。
第一处:由于外循环变量使用p指针,内循环变量使用q指针,所以q指向必须指向p的next
指针,因此应填写:p.next。
第二处:判断内循环q指针是否结束,所以应填:q。
第三处:外循环控制变量p指向自己的next指针,所以应填:p.next。
***************************************************
给定程序MODI1.C中函数fun的功能是: 将s所指字符串中的字母转换为按字母
/* 宏为世纪教育 www.greatc.cn */
序列的后续字母(但Z转换为A, z转换为a),其它字符不变。
请改正函数fun中指定部位的错误, 使它能得出正确的结果。
注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
给定源程序:
#include <stdio.h>
#include <ctype.h>
void fun (char *s)
{
/**********found***********/
while(*s!='@')
{ if(*s>='A' & *s<='Z' || *s>='a' && *s<='z')
{ if(*s=='Z') *s='A';
else if(*s=='z') *s='a';
else *s += 1;
}
/**********found***********/
(*s)++;
}
}
main()
{ char s[80];
printf("\n Enter a string with length < 80. :\n\n "); gets(s);
printf("\n The string : \n\n "); puts(s);
fun ( s );
printf ("\n\n The Cords :\n\n "); puts(s);
}
解题思路:
第一处: 使用while循环来判断字符串指针s是否结束,所以应改为:while(*s)。
第二处: 取字符串指针s的下一个位置,所以应改为:s++;。
***************************************************
请编写函数fun, 函数的功能是: 移动一维数组中的内容; 若数组中有n个整
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -