?? 2010-
字號:
}
main()
{ int x[N][N],i,j;
printf("Enter number for array:\n");
for(i=0; i<N; i++)
for(j=0; j<N; j++) scanf("%d",&x[i][j]);
printf("Array:\n");
for(i=0; i<N; i++)
{ for(j=0; j<N; j++) printf("%3d",x[i][j]);
printf("\n");
}
if(fun(x)) printf("The Array is a magic square.\n");
else printf("The Array isn't a magic square.\n");
}
解題思路:
第一處:行列變量row和colum的值初始化為0。
第二處:兩個條件只要有一個不滿足就返回0,所以應(yīng)填:||。
第三處:如果矩陣是“幻方”,則返回1。
***************************************************
給定程序MODI1.C中fun函數(shù)的功能是: 根據(jù)整型形參m,計算如下公式的值。
1 1 1
t = 1 - ----- - ----- - …… - -----
2 3 m
例如,若主函數(shù)中輸入5,則應(yīng)輸出 -0.283333。
請改正函數(shù)fun中的錯誤或在橫線處填上適當?shù)膬?nèi)容并把橫線刪除, 使它能
計算出正確的結(jié)果。
注意:不要改動 main 函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
給定源程序:
#include <stdio.h>
double fun( int m )
{
double t = 1.0;
int i;
for( i = 2; i <= m; i++ )
/**********found**********/
t = 1.0-1 /i;
/**********found**********/
_______;
}
main()
{
int m ;
printf( "\nPlease enter 1 integer numbers:\n" );
scanf( "%d", &m);
printf( "\n\nThe result is %lf\n", fun( m ) );
}
解題思路:
第一處:在除法運算中,如果除數(shù)和被除數(shù)都是整數(shù),所么所除結(jié)果也是整數(shù),因此應(yīng)改
為t-=1./i。
第二處:應(yīng)是返回公式的值,函數(shù)中公式的值是存放在臨時變量t中,所以應(yīng)填return t;。
*******請編寫一個函數(shù),函數(shù)的功能是刪除字符串中的所有空格。
例如, 主函數(shù)中輸入"asd af aa z67", 則輸出為 "asdafaaz67"。
注意:部分源程序在文件PROG1.C中。
請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入
你編寫的若干語句。
給定源程序:
#include <stdio.h>
#include <ctype.h>
int fun(char *str)
{
}
main()
{
char str[81];
int n;
printf("Input a string:") ;
gets(str);
puts(str);
fun(str);
printf("*** str: %s\n",str);
NONO();
}
解題思路:
本題是考察考生怎樣利用字符串指針來刪除字符串的空格字符。在函數(shù)開始處把指針p先指
向字符串str以及位置變量i置0,然后采用while循環(huán)和字符串指針p來處理的,每循環(huán)一次來判
斷指針p所指的字符是否為空格,如果不是空格,則把該字符寫到str字符串中,位置由i來控制,
如果是空格,則不處理,繼續(xù)取下一字符,直至字符串結(jié)束為止,最后再把字符串結(jié)束符寫到
位置為i的str上,再通過形參str返回。
參考答案:
int fun(char *str)
{
char *p = str ;
int i = 0 ;
while(*p) {
if(*p != ' ') str[i++] = *p ;
p++ ;
}
str[i] = 0 ;
}
第11套:
給定程序中,函數(shù)fun的功能是將帶頭結(jié)點的單向鏈表逆置。即若原鏈表中從
頭至尾結(jié)點數(shù)據(jù)域依次為:2、4、6、8、10,逆置后,從頭至尾結(jié)點數(shù)據(jù)域依次為:
10、8、6、4、2。
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除, 使程序得出正確的結(jié)
果。
注意:源程序存放在考生文件夾下的BLANK1.C中。
不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
給定源程序:
#include <stdio.h>
#include <stdlib.h>
#define N 5
typedef struct node {
int data;
struct node *next;
} NODE;
void fun(NODE *h)
{ NODE *p, *q, *r;
/**********found**********/
p = h->__1__;
/**********found**********/
if (p==__2__) return;
q = p->next;
p->next = NULL;
while (q)
{ r = q->next; q->next = p;
/**********found**********/
p = q; q = __3__;
}
h->next = p;
}
NODE *creatlist(int a[])
{ NODE *h,*p,*q; int i;
h = (NODE *)malloc(sizeof(NODE));
h->next = NULL;
for(i=0; i<N; i++)
{ q=(NODE *)malloc(sizeof(NODE));
q->data=a[i];
q->next = NULL;
if (h->next == NULL) h->next = p = q;
else { p->next = q; p = q; }
}
return h;
}
void outlist(NODE *h)
{ NODE *p;
p = h->next;
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]={2,4,6,8,10};
head=creatlist(a);
printf("\nThe original list:\n");
outlist(head);
fun(head);
printf("\nThe list after inverting :\n");
outlist(head);
}
解題思路:
本題是考察使用鏈表方法,對鏈表的結(jié)點數(shù)據(jù)進行降序排列。
第一處:使用結(jié)構(gòu)指針p,來控制鏈表的結(jié)束,p必須指向h結(jié)構(gòu)指針的next指針,來定位p
的初始位置。所以應(yīng)填寫:h->next。
第二處:判斷p指針是否結(jié)束,所以應(yīng)填寫:0。
第三處:q指向原q的next指針,所以應(yīng)填:r。
*******給定程序MODI1.C中函數(shù)fun的功能是: 計算s所指字符串中含有t所指字符串
的數(shù)目, 并作為函數(shù)值返回。
請改正函數(shù)fun中指定部位的錯誤, 使它能得出正確的結(jié)果。
注意: 不要改動main函數(shù), 不得增行或刪行, 也不得更改程序的結(jié)構(gòu)!
給定源程序:
#include <stdio.h>
#include <string.h>
#define N 80
int fun(char *s, char *t)
{ int n;
char *p , *r;
n=0;
while ( *s )
{ p=s;
/*********found**********/
r=p;
while(*r)
if(*r==*p) { r++; p++; }
else break;
/*********found**********/
if(*r= 0)
n++;
s++;
}
return n;
}
main()
{ char a[N],b[N]; int m;
printf("\nPlease enter string a : "); gets(a);
printf("\nPlease enter substring b : "); gets( b );
m=fun(a, b);
printf("\nThe result is : m = %d\n",m);
}
解題思路:
第一處:程序中子串是由變量t來實現(xiàn)的,再根據(jù)下面while循環(huán)體中語句可知,所以應(yīng)改
為:r=t;。
第二處: 是判斷相等的條件,所以應(yīng)改為:if(*r==0)。
*** 請編寫函數(shù)fun, 函數(shù)的功能是: 將放在字符串數(shù)組中的M個字符串(每串的長
度不超過N), 按順序合并組成一個新的字符串。函數(shù)fun中給出的語句僅供參考。
例如, 字符串數(shù)組中的M個字符串為
AAAA
BBBBBBB
CC
則合并后的字符串的內(nèi)容應(yīng)是: AAAABBBBBBBCC。
提示strcat(a,b)的功能是將字符串b復(fù)制到字符串a(chǎn)的串尾上,成為一個新串。
注意:部分源程序在文件PROG1.C中。
請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容, 僅在函數(shù)fun的花括號中填入
你編寫的若干語句。
給定源程序:
#include <stdio.h>
#define M 3
#define N 20
void fun(char a[M][N], char *b)
{
/* 以下代碼僅供參考 */
int i; *b=0;
}
main()
{ char w[M][N]={"AAAA","BBBBBBB","CC"}, a[100];
int i ;
printf("The string:\n");
for(i=0; i<M; i++)puts(w[i]);
printf("\n");
fun(w,a);
printf("The A string:\n");
printf("%s",a);printf("\n\n");
NONO();
}
解題思路:
本題是考察字符串的操作。
使用for循環(huán)以及C語言函數(shù)strcat依次連接起來。
參考答案:
#include <stdio.h>
#define M 3
#define N 20
void fun(char a[M][N], char *b)
{
/* 以下代碼僅供參考 */
int i; *b=0;
for(i = 0 ; i < M ; i++)
strcat(b, a[i]) ;
}
第12套:
給定程序中,函數(shù)fun的功能是將不帶頭結(jié)點的單向鏈表逆置。即若原鏈表中
從頭至尾結(jié)點數(shù)據(jù)域依次為:2、4、6、8、10,逆置后,從頭至尾結(jié)點數(shù)據(jù)域依次
為:10、8、6、4、2。
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除, 使程序得出正確的結(jié)
果。
注意:源程序存放在考生文件夾下的BLANK1.C中。
不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
給定源程序:
#include <stdio.h>
#include <stdlib.h>
#define N 5
typedef struct node {
int data;
struct node *next;
} NODE;
/**********found**********/
__1__ * fun(NODE *h)
{ NODE *p, *q, *r;
p = h;
if (p == NULL)
return NULL;
q = p->next;
p->next = NULL;
while (q)
{
/**********found**********/
r = q->__2__;
q->next = p;
p = q;
/**********found**********/
q = __3__ ;
}
return p;
}
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]={2,4,6,8,10};
head=creatlist(a);
printf("\nThe original list:\n");
outlist(head);
head=fun(head);
printf("\nThe list after inverting :\n");
outlist(head);
}
解題思路:
本題是考察使用鏈表方法,對鏈表的結(jié)點數(shù)據(jù)進行降序排列,最后通過函數(shù)進行返回。
第一處:由于鏈表中的所有結(jié)果要求通過函數(shù)進行返回,所以應(yīng)填:NODE *。
第二處:中間變量r用來保存q的next指針,所以應(yīng)填:next。
第三處:q指向原q的next指針,所以應(yīng)填:r。
*** 給定程序MODI1.C中函數(shù)fun的功能是: 將s所指字符串中位于奇數(shù)位
置的字符 或ASCII碼為偶數(shù)的字符放入t所指數(shù)組中(規(guī)定第一個字符放在
第0位中)。 例如, 字符串中的數(shù)據(jù)為: AABBCCDDEEFF,
則輸出應(yīng)當是:ABBCDDEFF。
請改正函數(shù)fun中指定部位的錯誤, 使它能得出正確的結(jié)果。
注意: 不要改動main函數(shù), 不得增行或刪行, 也不得更改程序的結(jié)構(gòu)!
給定源程序:
#include <stdio.h>
#include <string.h>
#define N 80
void fun(char *s, char t[])
{ int i, j=0;
for(i=0; i<strlen(s); i++)
/***********found**********/
if(i%2 && s[i]%2==0)
t[j++]=s[i];
/***********found**********/
t[i]='\0';
}
main()
{ char s[N], t[N];
printf("\nPlease enter string s : "); gets(s);
fun(s, t);
printf("\nThe result is : %s\n",t);
}
解題思路:
第一處: 根據(jù)試題分析,兩個條件之間應(yīng)該是“或”的關(guān)系,而不是“與”的關(guān)系,所以
應(yīng)改為:if(i%2 || s[i]%2==0)。
第二處: 當字符串處理結(jié)束后,應(yīng)該補上字符串的結(jié)束符,那么字符串t的位置是由i來控
制,所以應(yīng)改為:t[j]=0;。
***請編寫函數(shù)fun, 函數(shù)的功能是: 將M行N列的二維數(shù)組中的數(shù)據(jù), 按列的順序
依次放到一維數(shù)組中。函數(shù)fun中給出的語句僅供參考。
例如, 二維數(shù)組中的數(shù)據(jù)為:
33 33 33 33
44 44 44 44
55 55 55 55
則一維數(shù)組中的內(nèi)容應(yīng)是:
33 44 55 33 44 55 33 44 55 33 44 55。
注意:部分源程序在文件PROG1.C中。
請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容, 僅在函數(shù)fun的花括號中填入
你編寫的若干語句。
給定源程序:
#include <stdio.h>
void fun(int s[][10], int b[], int *n, int mm, int nn)
{
/* 以下代碼僅供參考 */
int i,j,np=0; /* np用作b數(shù)組下標 */
*n=np;
}
main()
{ int w[10][10]={{33,33,33,33},{44,44,44,44},{55,55,55,55}},i,j;
int a[100]={0}, n=0;
printf("The matrix:\n");
for(i=0; i<3; i++)
{ for(j=0;j<4; j++)printf("%3d",w[i][j]);
printf("\n");
}
fun(w,a,&n,3,4);
printf("The A array:\n");
for(i=0;i<n;i++)printf("%3d",a[i]);printf("\n\n");
NONO();
}
解題思路:
本題是把二維數(shù)組中的數(shù)據(jù)按行存放到一維數(shù)組中。
1. 計算存放到一維數(shù)組中的位置。
2. 取出二維數(shù)組中的數(shù)據(jù)存放到一維數(shù)組(已計算出的位置)中。
參考答案:
void fun(int (*s)[10], int *b, int *n, int mm, int nn)
{
/* 以下代碼僅供參考 */
int i,j,np=0; /* np用作b數(shù)組下標 */
for(i = 0 ; i < nn ; i++)
for(j = 0 ; j < mm ; j++) {
b[np] = s[j][i] ;
np = i * mm + j + 1;
}
*n=np;
}
第13套:
給定程序中,函數(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>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -