?? 2010-
字號:
第01套:
1.給定程序中,函數fun的功能是:將形參n所指變量中,各位上為偶數的數去
除,剩余的數按原來從高位到低位的順序組成一個新的數,并通過形參指針n傳回
所指變量。
例如,輸入一個數:27638496,新的數:為739。
請在程序的下劃線處填入正確的內容并把下劃線刪除, 使程序得出正確的結果。
注意:源程序存放在考生文件夾下的BLANK1.C中。
不得增行或刪行,也不得更改程序的結構!
給定源程序:
#include <stdio.h>
void fun(unsigned long *n)
{ unsigned long x=0, i; int t;
i=1;
while(*n)
/**********found**********/
{ t=*n % __1__;
/**********found**********/
if(t%2!= __2__)
{ x=x+t*i; i=i*10; }
*n =*n /10;
}
/**********found**********/
*n=__3__;
}
main()
{ unsigned long n=-1;
while(n>99999999||n<0)
{ printf("Please input(0<n<100000000): "); scanf("%ld",&n); }
fun(&n);
printf("\nThe result is: %ld\n",n);
}
解題思路:
第一處:t是通過取模的方式來得到*n的個位數字,所以應填:10。
第二處:判斷是否是奇數,所以應填:0。
第三處:最后通形參n來返回新數x,所以應填:x。
2.給定程序MODI1.C中函數 fun 的功能是:計算n!。
例如,給n輸入5,則輸出120.000000。
請改正程序中的錯誤,使程序能輸出正確的結果。
注意:不要改動main函數,不得增行或刪行,也不得更改程序的結構!
給定源程序:
#include <stdio.h>
double fun ( int n )
{ double result = 1.0 ;
/************found************/
if n = = 0
return 1.0 ;
while( n >1 && n < 170 )
/************found************/
result *= n--
return result ;
}
main ( )
{ int n ;
printf("Input N:") ;
scanf("%d", &n) ;
printf("\n\n%d! =%lf\n\n", n, fun(n)) ;
}
解題思路:
第一處:條件語句書寫格式錯誤,應改為:if (n==0)。
第二處:語句后缺少分號。
3.請編寫一個函數fun,它的功能是:將一個數字字符串轉換為一個整數(不得
調用C語言提供的將字符串轉換為整數的函數)。例如,若輸入字符串"-1234",則
函數把它轉換為整數值 -1234。函數fun中給出的語句僅供參考。
注意: 部分源程序存在文件PROG1.C文件中。
請勿改動主函數main和其它函數中的任何內容, 僅在函數fun的花括號中填
入你編寫的若干語句。
給定源程序:
#include <stdio.h>
#include <string.h>
long fun ( char *p)
{
/* 以下代碼僅供參考 */
int i, len, t; /* len為串長,t為正負標識 */
long x=0;
len=strlen(p);
if(p[0]=='-')
{ t=-1; len--; p++; }
else t=1;
/* 以下完成數字字符串轉換為一個數字 */
return x*t;
}
main() /* 主函數 */
{ char s[6];
long n;
printf("Enter a string:\n") ;
gets(s);
n = fun(s);
printf("%ld\n",n);
NONO ( );
}
NONO ( )
{/* 本函數用于打開文件,輸入數據,調用函數,輸出數據,關閉文件。 */
FILE *fp, *wf ;
int i ;
char s[20] ;
long n ;
fp = fopen("c:\\test\\in.dat","r") ;
wf = fopen("c:\\test\\out.dat","w") ;
for(i = 0 ; i < 10 ; i++) {
fscanf(fp, "%s", s) ;
n = fun(s);
fprintf(wf, "%ld\n", n) ;
}
fclose(fp) ;
fclose(wf) ;
}
解題思路:
本題是將一個數字字符串轉換為一個整數。
參考答案:
#include <stdio.h>
#include <string.h>
long fun ( char *p)
{
/* 以下代碼僅供參考 */
int i, len, t; /* len為串長,t為正負標識 */
long x=0;
len=strlen(p);
if(p[0]=='-')
{ t=-1; len--; p++; }
else t=1;
/* 以下完成數字字符串轉換為一個數字 */
while(*p) x = x*10-48+(*p++);
return x*t;
}
main() /* 主函數 */
{ char s[6];
long n;
printf("Enter a string:\n") ;
gets(s);
n = fun(s);
printf("%ld\n",n);
NONO ( );
}
NONO ( )
{/* 本函數用于打開文件,輸入數據,調用函數,輸出數據,關閉文件。 */
FILE *fp, *wf ;
int i ;
char s[20] ;
long n ;
fp = fopen("c:\\test\\in.dat","r") ;
wf = fopen("c:\\test\\out.dat","w") ;
for(i = 0 ; i < 10 ; i++) {
fscanf(fp, "%s", s) ;
n = fun(s);
fprintf(wf, "%ld\n", n) ;
}
fclose(fp) ;
fclose(wf) ;
}
注意:由于NONO( )這個函數是改卷人用的,與考生沒有什么關系,故下面從第2套試題開始均省略NONO( )
第02套:
給定程序中,函數fun的功能是將形參給定的字符串、整數、浮點數寫到文本
文件中,再用字符方式從此文本文件中逐個讀入并顯示在終端屏幕上。
請在程序的下劃線處填入正確的內容并把下劃線刪除, 使程序得出正確的結
果。
注意:源程序存放在考生文件夾下的BLANK1.C中。
不得增行或刪行,也不得更改程序的結構!
給定源程序:
#include <stdio.h>
void fun(char *s, int a, double f)
{
/**********found**********/
__1__ fp;
char ch;
fp = fopen("file1.txt", "w");
fprintf(fp, "%s %d %f\n", s, a, f);
fclose(fp);
fp = fopen("file1.txt", "r");
printf("\nThe result :\n\n");
ch = fgetc(fp);
/**********found**********/
while (!feof(__2__)) {
/**********found**********/
putchar(__3__); ch = fgetc(fp); }
putchar('\n');
fclose(fp);
}
main()
{ char a[10]="Hello!"; int b=12345;
double c= 98.76;
fun(a,b,c);
}
解題思路:
本題是考察先把給定的數據寫入到文本文件中,再從該文件讀出并顯示在屏幕上。
第一處:定義文本文件類型變量,所以應填:FILE *。
第二處:判斷文件是否結束,所以應填:fp。
第三處:顯示讀出的字符,所以應填:ch。
2.給定程序MODI1.C中函數fun的功能是: 依次取出字符串中所有數字字符, 形
成新的字符串, 并取代原字符串。
請改正函數fun中指定部位的錯誤, 使它能得出正確的結果。
注意: 不要改動main函數, 不得增行或刪行, 也不得更改程序的結構!
給定源程序:
#include <stdio.h>
void fun(char *s)
{ int i,j;
for(i=0,j=0; s[i]!='\0'; i++)
if(s[i]>='0' && s[i]<='9')
/**********found**********/
s[j]=s[i];
/**********found**********/
s[j]="\0";
}
main()
{ char item[80];
printf("\nEnter a string : ");gets(item);
printf("\n\nThe string is : \"%s\"\n",item);
fun(item);
printf("\n\nThe string of changing is : \"%s\"\n",item );
}
解題思路:
第一處: 要求是取出原字符串中所有數字字符組成一個新的字符串,程序中是使用變量j
來控制新字符串的位置,所以應改為:s[j++]=s[i];。
第二處: 置新字符串的結束符,所以應改為:s[j]='\0';.
***************************************************
請編寫函數fun, 函數的功能是: 將M行N列的二維數組中的字符數據, 按列的
順序依次放到一個字符串中。
例如, 二維數組中的數據為:
W W W W
S S S S
H H H H
則字符串中的內容應是: WSHWSHWSH。
注意:部分源程序在文件PROG1.C中。
3.請勿改動主函數main和其它函數中的任何內容, 僅在函數fun的花括號中填入
你編寫的若干語句。
給定源程序:
#include <stdio.h>
#define M 3
#define N 4
void fun(char s[][N], char *b)
{
int i,j,n=0;
for(i=0; i < N;i++) /* 請填寫相應語句完成其功能 */
{
}
b[n]='\0';
}
main()
{ char a[100],w[M][N]={{'W','W','W','W'},{'S','S','S','S'},{'H','H','H','H'}};
int i,j;
printf("The matrix:\n");
for(i=0; i<M; i++)
{ for(j=0;j<N; j++)printf("%3c",w[i][j]);
printf("\n");
}
fun(w,a);
printf("The A string:\n");puts(a);
printf("\n\n");
NONO();
}
解題思路:
本題是把二維數組中的字符數據按列存放到一個字符串中。
1. 計算存放到一維數組中的位置。
2. 取出二維數組中的字符存放到一維數組(已計算出的位置)中。
參考答案:
void fun(char s[][N], char *b)
{
int i,j,n=0;
for(i=0; i < N;i++) /* 請填寫相應語句完成其功能 */
{
for(j = 0 ; j < M ; j++) {
b[n] = s[j][i] ;
n = i * M + j + 1;
}
}
b[n]='\0';
}
第03套程序通過定義學生結構體變量,存儲了學生的學號、姓名和3門課的成績。所
有學生數據均以二進制方式輸出到文件中。函數fun的功能是重寫形參filename所
指文件中最后一個學生的數據,即用新的學生數據覆蓋該學生原來的數據,其它學
生的數據不變。
請在程序的下劃線處填入正確的內容并把下劃線刪除, 使程序得出正確的結
果。
注意:源程序存放在考生文件夾下的BLANK1.C中。
不得增行或刪行,也不得更改程序的結構!
給定源程序:
#include <stdio.h>
#define N 5
typedef struct student {
long sno;
char name[10];
float score[3];
} STU;
void fun(char *filename, STU n)
{ FILE *fp;
/**********found**********/
fp = fopen(__1__, "rb+");
/**********found**********/
fseek(__2__, -1L*sizeof(STU), SEEK_END);
/**********found**********/
fwrite(&n, sizeof(STU), 1, __3__);
fclose(fp);
}
main()
{ STU t[N]={ {10001,"MaChao", 91, 92, 77}, {10002,"CaoKai", 75, 60, 88},
{10003,"LiSi", 85, 70, 78}, {10004,"FangFang", 90, 82, 87},
{10005,"ZhangSan", 95, 80, 88}};
STU n={10006,"ZhaoSi", 55, 70, 68}, ss[N];
int i,j; FILE *fp;
fp = fopen("student.dat", "wb");
fwrite(t, sizeof(STU), N, fp);
fclose(fp);
fp = fopen("student.dat", "rb");
fread(ss, sizeof(STU), N, fp);
fclose(fp);
printf("\nThe original data :\n\n");
for (j=0; j<N; j++)
{ printf("\nNo: %ld Name: %-8s Scores: ",ss[j].sno, ss[j].name);
for (i=0; i<3; i++) printf("%6.2f ", ss[j].score[i]);
printf("\n");
}
fun("student.dat", n);
printf("\nThe data after modifing :\n\n");
fp = fopen("student.dat", "rb");
fread(ss, sizeof(STU), N, fp);
fclose(fp);
for (j=0; j<N; j++)
{ printf("\nNo: %ld Name: %-8s Scores: ",ss[j].sno, ss[j].name);
for (i=0; i<3; i++) printf("%6.2f ", ss[j].score[i]);
printf("\n");
}
}
解題思路:
本題是考察如何從文件中讀出數據,再把結構中的數據寫入文件中。
第一處:從指定的文件中讀出數據,所以應填:filename。
第二處:讀取文件fp的最后一條記錄,所以應填:fp。
第三處:再把讀出的記錄,寫入文件fp指定的位置上,所以應填:fp。
***************************************************
給定程序MODI1.C中的函數Creatlink的功能是創建帶頭結點的單向鏈表, 并
為各結點數據域賦0到m-1的值。
請改正函數Creatlink中指定部位的錯誤, 使它能得出正確的結果。
注意: 不要改動main函數, 不得增行或刪行, 也不得更改程序的結構!
給定源程序:
#include <stdio.h>
#include <stdlib.h>
typedef struct aa
{ int data;
struct aa *next;
} NODE;
NODE *Creatlink(int n, int m)
{ NODE *h=NULL, *p, *s;
int i;
/**********found***********/
p=(NODE )malloc(sizeof(NODE));
h=p;
p->next=NULL;
for(i=1; i<=n; i++)
{ s=(NODE *)malloc(sizeof(NODE));
s->data=rand()%m; s->next=p->next;
p->next=s; p=p->next;
}
/**********found***********/
return p;
}
outlink(NODE *h)
{ NODE *p;
p=h->next;
printf("\n\nTHE LIST :\n\n HEAD ");
while(p)
{ printf("->%d ",p->data);
p=p->next;
}
printf("\n");
}
main()
{ NODE *head;
head=Creatlink(8,22);
outlink(head);
}
解題思路:
第一處: 指向剛分配的結構指針,所以應改為:p=(NODE *)malloc(sizeof(NODE));
第二處: 在動態分配內存的下一行語句是,使用臨時結構指針變量h保存p指針的初始位置,
最后返回不能使用p,是因為p的位置已經發生了變化,所以應改為返回h。
***************************************************
請編寫函數fun, 函數的功能是:統計一行字符串中單詞的個數,作為函數值返
回。一行字符串在主函數中輸入, 規定所有單詞由小寫字母組成,單詞之間由若干
個空格隔開, 一行的開始沒有空格。
注意:部分源程序在文件PROG1.C中。
請勿改動主函數main和其它函數中的任何內容, 僅在函數fun的花括號中填入
你編寫的若干語句。
給定源程序:
#include <stdio.h>
#include <string.h>
#define N 80
int fun( char *s)
{
}
main()
{ char line[N]; int num=0;
printf("Enter a string :\n"); gets(line);
num=fun( line );
printf("The number of word is : %d\n\n",num);
NONO();
}
解題思路:
本題是統計字符串中的單詞數。
1. 利用while循環語句和指針變量,當字符為空格時,則單詞數k加1。
2. 循環結束返回k。
參考答案:
int fun( char *s)
{
int k = 1 ;
while(*s) {
if(*s == ' ') k++ ;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -