?? 2010-
字號:
解題思路:
本題是考察字符串的操作。
1. 由于函數(shù)fun1是將字符串中字符循環(huán)左移一個位置,并通過實參w返回循環(huán)左移一個位
置的字符串。
2. 利用循環(huán)for語句來操作多少個字符(m)需要循環(huán)左移。
參考答案:
void fun1(char *w) /* 本函數(shù)的功能是將字符串中字符循環(huán)左移一個位置 */
{
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) /* 可調(diào)用fun1函數(shù)左移字符 */
{
int i;
for(i = 0 ; i < m ; i++) fun1(w);
}
第07套:
程序通過定義并賦初值的方式,利用結(jié)構(gòu)體變量存儲了一名學(xué)生的信息。函
數(shù)fun的功能是輸出這位學(xué)生的信息。
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)
果。
注意:源程序存放在考生文件夾下的BLANK1.C中。
不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
給定源程序:
#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___);
}
解題思路:
本題是利用結(jié)構(gòu)體變量存儲了一名學(xué)生的信息。
第一處:tt變量在函數(shù)體fun已經(jīng)使用,所以應(yīng)填:tt。
第二處:利用循環(huán)分別輸出學(xué)生的成績數(shù)據(jù),所以應(yīng)填:tt.score[i]。
第三處:函數(shù)的調(diào)用,所以應(yīng)填:std。
2.給定程序MODI1.C中函數(shù) fun 的功能是:求出數(shù)組中最大數(shù)和次最大數(shù),并
把最大數(shù)和a[0]中的數(shù)對調(diào)、次最大數(shù)和a[1]中的數(shù)對調(diào)。
請改正程序中的錯誤,使它能得出正確的結(jié)果。
注意:不要改動 main 函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
給定源程序:
#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;
}
}
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");
}
解題思路:
第一處:外循環(huán)每循環(huán)一次,把當前位置i賦值給m,所以應(yīng)改為:m=i;。
第二處:通過內(nèi)循環(huán)來找出最大的一個數(shù)的位置k,所以應(yīng)改為:if(a[k]>a[m]) m=k;。
3.請編寫一個函數(shù) unsigned fun ( unsigned w ),w 是一個大于10的無符
號整數(shù),若 w 是 n (n ≥ 2)位的整數(shù),函數(shù)求出w的低 n-1位的數(shù)作為函數(shù)值返
回。
例如:w 值為 5923,則函數(shù)返回 923; w 值為 923 則函數(shù)返回 23。
注意: 部分源程序存在文件PROG1.C中。
請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)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( );
}
解題思路:
本題是考察考生怎樣獲取一個符合要求的無符號整數(shù)。本題是應(yīng)用if條件語句首先判斷給
出的數(shù)是幾位數(shù),再模相應(yīng)的值,最后得出的余數(shù)就是結(jié)果。
參考答案:
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套:
給定程序通過定義并賦初值的方式,利用結(jié)構(gòu)體變量存儲了一名學(xué)生的學(xué)號、
姓名和3門課的成績。函數(shù)fun的功能是將該學(xué)生的各科成績都乘以一個系數(shù)a。
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)
果。
注意:源程序存放在考生文件夾下的BLANK1.C中。
不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
給定源程序:
#include <stdio.h>
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);
}
解題思路:
本題是利用結(jié)構(gòu)體存儲學(xué)生記錄并由實參ss返回。
第一處:實參ss是一個結(jié)構(gòu)型指針變量,所以應(yīng)填:STU。
第二處:該學(xué)生的各科成績都乘以一個系數(shù)a,所以應(yīng)填:score[i]。
第三處:函數(shù)的調(diào)用,由于函數(shù)定義時使用的指針結(jié)構(gòu)型變量,所以應(yīng)填:&std。
** 給定程序MODI1.C中函數(shù)fun的功能是:求k!(k<13),所求階乘的值作為函
數(shù)值返回。例如:若k = 10,則應(yīng)輸出:3628800。
請改正程序中的錯誤,使它能得出正確的結(jié)果。
注意:不要改動 main 函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
給定源程序:
#include <stdio.h>
long fun ( int k)
{
/************found************/
if k > 0
return (k*fun(k-1));
/************found************/
else if ( k=0 )
return 1L;
}
main()
{ int k = 10 ;
printf("%d!=%ld\n", k, fun ( k )) ;
}
解題思路:
第一處:條件判斷缺少圓括號。
第二處:判斷相等的符號是==。
***************************************************
程序定義了N×N的二維數(shù)組,并在主函數(shù)中自動賦值。請編寫函數(shù)
fun(int a[][N], int n),函數(shù)的功能是:使數(shù)組左下三角元素中的值乘以n 。
例如:若n的值為3,a 數(shù)組中的值為
| 1 9 7 | | 3 9 7 |
a = | 2 3 8 | 則返回主程序后a數(shù)組中的值應(yīng)為 | 6 9 8 |
| 4 5 6 | | 12 15 18|
注意: 部分源程序存在文件PROG1.C中。
請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)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( );
}
解題思路:
本題是利用兩重循環(huán)給二維數(shù)組左下三角元素中的值乘以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套:
給定程序中,函數(shù)fun的功能是將不帶頭節(jié)點的單向鏈表結(jié)點數(shù)據(jù)域中的數(shù)據(jù)從小到大排序。即若原鏈表結(jié)點數(shù)據(jù)域從頭至尾的數(shù)據(jù)為:10、4、2、8、6,排序后鏈表結(jié)點數(shù)據(jù)域從頭至尾的數(shù)據(jù)為:2、4、6、8、10。
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除, 使程序得出正確的結(jié)
果。
注意:源程序存放在考生文件夾下的BLANK1.C中。
不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
給定源程序:
#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;
}
/**********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循環(huán)語句,對鏈表的結(jié)點數(shù)據(jù)進行升序排列。
第一處:由于外循環(huán)變量使用p指針,內(nèi)循環(huán)變量使用q指針,所以q指向必須指向p的next
指針,因此應(yīng)填寫:p.next。
第二處:判斷內(nèi)循環(huán)q指針是否結(jié)束,所以應(yīng)填:q。
第三處:外循環(huán)控制變量p指向自己的next指針,所以應(yīng)填:p.next。
***給定程序MODI1.C中函數(shù)fun的功能是: 將s所指字符串中的字母轉(zhuǎn)換為按字母
序列的后續(xù)字母(但Z轉(zhuǎn)換為A, z轉(zhuǎn)換為a),其它字符不變。
請改正函數(shù)fun中指定部位的錯誤, 使它能得出正確的結(jié)果。
注意: 不要改動main函數(shù), 不得增行或刪行, 也不得更改程序的結(jié)構(gòu)!
給定源程序:
#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循環(huán)來判斷字符串指針s是否結(jié)束,所以應(yīng)改為:while(*s)。
第二處: 取字符串指針s的下一個位置,所以應(yīng)改為:s++;。
*****請編寫函數(shù)fun, 函數(shù)的功能是: 移動一維數(shù)組中的內(nèi)容; 若數(shù)組中有n個整
數(shù), 要求把下標從0到p(含p,p小于等于n-1)的數(shù)組元素平移到數(shù)組的最后。
例如, 一維數(shù)組中的原始內(nèi)容為: 1,2,3,4,5,6,7,8,9,10; p的值為3。移動
后, 一維數(shù)組中的內(nèi)容應(yīng)為: 5,6,7,8,9,10,1,2,3,4。
注意:部分源程序在文件PROG1.C中。
請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入
你編寫的若干語句。
給定源程序:
#include <stdio.h>
#define N 80
void fun(int *w, int p, int n)
{
}
main()
{ int a[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int i,p,n=15;
printf("The original data:\n");
for(i=0; i<n; i++)printf("%3d",a[i]);
printf("\n\nEnter p: ");scanf("%d",&p);
fun(a,p,n);
printf("\nThe data after moving:\n");
for(i=0; i<n; i++)printf("%3d",a[i]);
printf("\n\n");
NONO();
}
解題思路:
本題是考察一維數(shù)組的操作。
1. 定義一維數(shù)組中間變量b,把n值后面數(shù)組中的內(nèi)容存入b中。
2. 再把m前的數(shù)組中的內(nèi)容存入b中。
3. 最后把數(shù)組b的內(nèi)容依次存放到w中。
參考答案:
void fun(int *w, int p, int n)
{
int i, j = 0, b[N] ;
for(i = p + 1 ; i < n ; i++) b[j++] = w[i] ;
for(i = 0 ; i <= p ; i++) b[j++] = w[i] ;
for(i = 0 ; i < n ; i++) w[i]= b[i] ;
}
第10套:
給定程序中,函數(shù)fun的功能是:判定形參a所指的N×N(規(guī)定N為奇數(shù))的矩
陣是否是"幻方",若是,函數(shù)返回值為1; 不是,函數(shù)返回值為0。"幻方"的判定
條件是:矩陣每行、每列、主對角線及反對角線上元素之和都相等。
例如,以下3×3的矩陣就是一個"幻方":
4 9 2
3 5 7
8 1 6
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除, 使程序得出正確的結(jié)
果。
注意:源程序存放在考生文件夾下的BLANK1.C中。
不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
給定源程序:
#include <stdio.h>
#define N 3
int fun(int (*a)[N])
{ int i,j,m1,m2,row,colum;
m1=m2=0;
for(i=0; i<N; i++)
{ j=N-i-1; m1+=a[i][i]; m2+=a[i][j]; }
if(m1!=m2) return 0;
for(i=0; i<N; i++) {
/**********found**********/
row=colum= __1__;
for(j=0; j<N; j++)
{ row+=a[i][j]; colum+=a[j][i]; }
/**********found**********/
if( (row!=colum) __2__ (row!=m1) ) return 0;
}
/**********found**********/
return __3__;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -