全國計算機等級考試二級C語言練習(xí)題(五)
1.程序填空題
給定程序中,函數(shù)fun的功能是:計算出形參s所指字符串中包含的單詞個數(shù),作為函數(shù)值返回。為便于統(tǒng)計,規(guī)定各單詞之間用空格隔開。
例如,形參s所指的字符串為:This is a C language program.,函數(shù)的返回值為6。
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
int fun(char *s)
{
int n=0,flag=0;
while(*s!='\0')
{ if(*s!=' ' && flag==0) {
/**********found**********/
___1___; flag=1;}
/**********found**********/
if(*s==' ') flag=___2___;
/**********found**********/
___3___;}
return n;
}
main()
{
char str[81]; int n;
printf("\nEnter a line text:\n");
gets(str);
n=fun(str);
printf("There are %d words in this text.\n",n);
}
【答案】
(1)n++ (2)0 (3)s++
2.程序修改題
給定程序中,函數(shù)fun的功能是:先將s所指字符串中的字符按逆序存放到t所指字符串中,然后把s所指串中的字符按正序連接到t所指串的后面。
例如,當(dāng)s所指的字符串為:“ABCDE”時,則t所指的字符串應(yīng)為:“EDCBAABCDE”。
請改正程序中的錯誤,使其能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#include <string.h>
void fun(char*s,char*t)
{
/**********found**********/
int I;
sl=strlen(s);
for(i=0;i<sl;i++)
/**********found**********/
t[i]=s[sl-i];
for(i=0;i<sl;i++)
t[sl+i]=s[i];
t[2*sl]='\0';
}
main()
{
char s[100],t[100];
printf("Please enter string s:");
scanf("%s",s);
fun(s,t);
printf("The result is: %s\n", t);
}
【答案】
(1)將int i; 改為:int i,sl;
(2)將t[i] = s[sl-i]; 改為:
t[i] = s[sl-i-1];
3.程序設(shè)計題
函數(shù)fun的功能是:將a、b兩個兩位正整數(shù)合并形成一個新的整數(shù)放在c中。合并的方式是:將a中的十位和個位數(shù)依次放在變量c的百位和個位上,b中的十位和個位數(shù)依次放在變量c的千位和十位上。
例如,當(dāng)a=45、b=12時,調(diào)用該函數(shù)后c=1425。
注意:部分源程序已給出。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。
#include <stdio.h>
void fun(int a,int b,long *c)
{
?
}
main()
{
int a,b;
long c;
printf("Input a,b:");
scanf("%d%d",&a,&b);
fun(a,b,&c);
printf("The result is: %ld\n", c);
}
【答案】
void fun(int a,int b,long *c)
{
*c=a/10*100+a%10+b/10*1000+b%10*10;
}
1.程序填空題
給定程序中,函數(shù)fun的功能是:找出形參s所指字符串中出現(xiàn)頻率最高的字母(不區(qū)分大小寫),并統(tǒng)計出其出現(xiàn)的次數(shù)。
例如,形參s所指的字符串為:abcAbsmaxless,程序執(zhí)行后的輸出結(jié)果為:
letter 'a' :3 times
letter 's' :3 times
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#include <string.h>
#include <ctype.h>
void fun(char*s)
{
int k[81]={0},n,I,max=0;
char ch;
while(*s)
{
if(isalpha(*s))
{
/**********found**********/
ch=tolower(___1___);
n=ch-'a';
/**********found**********/
k[n]+=___2___;
}
s++;
/**********found**********/
if(max<k[n]) max=___3___;
}
printf("After count :\n");
for(i=0;i<26;i++)
if(k[i]==max)
printf("letter \'%c\': %d times\n",i+'a',k[i]);
}
main()
{
char s[81];
printf("Enter a string:\n\n");
gets(s);
fun(s);
}
【答案】
(1)*s (2)1 (3)k[n]?
2.程序修改題
給定程序中函數(shù)fun的功能是:判斷一個整數(shù)是否是素數(shù),若是返回1,否則返回0。在main()函數(shù)中,若fun返回1輸出YES,若fun返回0輸出NO!。
請改正程序中的錯誤,使其能得出正確的結(jié)果。
注意:不要改動main函數(shù)。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
int fun(int m)
{
int k=2;
while(k<=m&&(m%k))
/**********found**********/
k++
/**********found**********/
if(m=k)
return 1;
else
return 0;
}
main()
{
int n;
printf("\nPlease enter n: ");
scanf( "%d", &n );
if(fun(n)) printf( "YES\n" );
else printf("NO!\n");
}
【答案】
(1)將k++ 改為:k++;
(2)將if(m = k ) 改為:if(m == k)
3.程序設(shè)計題
數(shù)組a[N]保存著一組3位數(shù)的無符號正整數(shù),其元素的個數(shù)通過變量len傳入fun函數(shù)。請補充fun函數(shù),該函數(shù)的功能是:從數(shù)組a中找出個位和百位數(shù)字相等的所有無符號整數(shù),結(jié)果保存在數(shù)組yy中,其個數(shù)由fun函數(shù)返回。
例如,當(dāng)a[6]={111,323,677,456,987,999}時,b[3]={111,323,999}。
注意:部分源程序已給出。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花括號中填入所編寫的若干語句。
#include <stdio.h>
#include <conio.h>
#define N 500
int fun(int a[],int bb[],int len)
{
?
}
main()
{
int a[8]={111,323,677,456,987,999};
int b[N];
int len=0,n=0,i=0;
len=6;
printf("The original data\n ");
for(i=0;i<len;i++)
printf("%u ",a[i]);
printf("\n\n\n");
n=fun(a,b,len);
printf("\nb=");
for(i=0;i<n;i++)
printf("%u ",b[i]);
}
【答案】
int i,n=0;
int g,b;
for(i=0;i<len;i++)
{
g=a[i]%10;
b=a[i]/100;
if(g==b)
bb[n++]=a[i];
}
return n;
1.程序填空題
給定程序中,函數(shù)fun的功能是:在形參ss所指字符串?dāng)?shù)組中,查找含有形參substr所指子串的所有字符串并輸出,若沒找到則輸出相應(yīng)信息。Ss所指字符串?dāng)?shù)組中共有N個字符串,且串長小于M。程序中庫函數(shù)strstr(s1,s2)的功能是在s1串中查找s2子串,若沒有,函數(shù)值為0;若有,為非0。
請在程序的下劃線處填入正確的內(nèi)容,并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#include <string.h>
#define N 5
#define M 15
void fun(char (*ss)[M],char *substr)
{
int I,find=0;
/**********found**********/
for(i=0;i<___1___;i++)
/**********found**********/
if(strstr(ss[i],___2___)!=NULL)
{ find=1; puts(ss[i]); printf("\n"); }
/**********found**********/
if(find==___3___)
printf("Don't found!\n");
}
main()
{
char x[N][M]={"BASIC","Clangwage","Java","QBASIC","Access"},str[M];
int I;
printf("The original string\n\n");
for(i=0;i<N;i++) puts(x[i]);
printf("\n");
printf("Enter a string for search : ");
gets(str);
fun(x,str);
}
【答案】
(1)N 或 =N-1 (2)substr (3)0?
2.程序修改題
給定程序中函數(shù)fun的功能是:統(tǒng)計字符串中各元音字母(即:A、E、I、O、U)的個數(shù)。注意,字母不分大、小寫。
例如:若輸入:THIs is a boot,則輸出應(yīng)該是:1、0、2、2、0。
請改正程序中的錯誤,使其能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
fun(char *s,int num[5])
{
int k,i=5;
for(k=0;k<I;k++)
/**********found**********/
num[i]=0;
for(;*s;s++)
{
i=-1;
/**********found**********/
switch(s)
{ case 'a': case 'A': {i=0; break;}
case 'e': case 'E': {i=1; break;}
case 'I': case 'I': {i=2; break;}
case 'o': case 'O': {i=3; break;}
case 'u': case 'U': {i=4; break;}
}
if(i>=0) num[i]++;
}
}
main()
{
char s1[81];
int num1[5],I;
printf( "Please enter a string: " );
gets(s1);
fun(s1,num1);
for(i=0;i<5;i++) printf("%d",num1[i]);
printf("\n");
【答案】
(1)將num[i]=0; 改為:num[k]=0;
(2)將switch(s) 改為:switch(*s)
}?
3.程序設(shè)計題
請編寫函數(shù)fun,其功能是求出二維數(shù)組周邊元素之和,該和值作為函數(shù)值返回。二維數(shù)組中的值在主函數(shù)中賦予。
例如:二維數(shù)組中的值為
1 3 5 7 9
2 9 9 9 4
6 9 9 9 8
1 3 5 7 0
則函數(shù)值為61。
注意:部分源程序已給出。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。
#include <stdio.h>
#include <windows.h>
#define M 4
#define N 5
int fun(int a[M][N])
{
?
}
main()
{
int aa[M][N]={{1,3,5,7,9},{2,9,9,9,4},
{6,9,9,9,8},{1,3,5,7,0}};
int I,j,y;
system("cls");
printf("The original data is : \n");
for(i=0;i<M; i++)
{
for(j=0;j<N;j++)
printf("%6d",aa[i][j]);
printf("\n");
}
y=fun(aa);
printf("The sum: %d\n",y);
printf("\n");
}
【答案】
int fun(int a[M][N])
{
int k,s=0;
for( k=0; k<N; k++ )
s+=a[0][k]+a[M-1][k];
for( k=1; k<M-1; k++ )
s+=a[k][0]+a[k][N-1];
return s;
}
1.程序填空題
程序通過定義學(xué)生結(jié)構(gòu)體變量,存儲了學(xué)生的學(xué)號、姓名和3門課的成績。函數(shù)fun的功能是對形參b所指結(jié)構(gòu)體變量中的數(shù)據(jù)進行修改,最后在主函數(shù)中輸出修改后的數(shù)據(jù)。
例如:b所指變量t中的學(xué)號、姓名、和三門課的成績依次是:10002、“ZhangQi”、93、85、87,修改后輸出t中的數(shù)據(jù)應(yīng)為:10004、“LiJie”、93、85、87。
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#include <string.h>
struct student
{long sno;
char name[10];
float score[3];
};
void fun(struct student *b)
{
int I;
/**********found**********/
b___1___=10004;
/**********found**********/
strcpy(b___2___,"LiJie");
}
main()
{
struct student t={10002,"ZhangQi",93,85,87};
int I;
printf("The original data :\n");
printf("No: %ld Name: %s\nscores: ",t.sno, t.name);
for(i=0;i<3;i++)
printf("%6.2f ",t.score[i]);
printf("\n");
/**********found**********/
fun(___3___);
printf("The data after modified :\n");
printf("No:%ld Name: %s\nscores: ",t.sno,t.name);
for(i=0;i<3;i++)
printf("%6.2f ",t.score[i]);
printf("\n");
}
【答案】
(1)->sno (2)->name (3)&t
2.程序修改題
給定程序中,函數(shù)fun的功能是:讀入一個字符串(長度<20),將該字符串中的所有字符按ASCII碼升序排序后輸出。例如,若輸入:edcba,則應(yīng)輸出:abcde。
請改正程序中的錯誤,使其能統(tǒng)計出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
void fun(char t[])
{
char c;
int I,j;
/**********found***********/
for(i=strlen(t);I;i--)
for(j=0;j<I;j++)
/**********found***********/
if(t[j]<t[j+1])
{c=t[j];t[j]=t[j+1];t[j+1]=c;}
}
main()
{
char s[81];
printf("Enter a character string:");
gets(s);
printf("Before sorting:\n %s ",s);
fun(s);
printf("After sorting decendingly:\n
%s",s);
}
【答案】
(1)將for( i=strlen(t); i; i--) 改為:
for(i=strlen(t)-1;i;i--)
(2)將if(t[j]< t[j + 1]) 改為:
if(t[j]>t[j + 1])?
3.程序設(shè)計題
請編寫函數(shù)fun,其功能是:將ss所指字符串中所有下標為奇數(shù)位置上的字母轉(zhuǎn)換為大寫(若該位置上不是字母,則不轉(zhuǎn)換)。
例如,若輸入“abc4EFg”,則應(yīng)輸出“aBc4EFg”。
注意:部分源程序已給出。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。
#include <stdio.h>
#include <string.h>
void fun(char *ss)
{
?
}
void main(void)
{
char tt[51];
printf("Please enter an character string
within 50 characters:\n");
gets(tt);
printf("After changing,the string\n
%s",tt);
fun(tt);
printf("becomes\n %s",tt);
}
【答案】
void fun(char *ss)
{
int k;
for(k=1;k<strlen(ss);k+=2)
if(ss[k]>='a'&&ss[k]<='z')
ss[k]=ss[k]-'a'+'A';
}
1.程序填空題
程序通過定義學(xué)生結(jié)構(gòu)體數(shù)組,存儲了若干名學(xué)生的學(xué)號、姓名和3門課的成績。函數(shù)fun的功能是:將存放學(xué)生數(shù)據(jù)的結(jié)構(gòu)體數(shù)組按照姓名的字典序(從小到大)排序。
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#include <string.h>
struct student
{ long sno;
char name[10];
float score[3];
};
void fun(struct student a[],int n)
{
/**********found**********/
___1___t;
int I,j;
/**********found**********/
for(I=0;I<___2___;I++)
for(j=I+1;j<n;j++)
/**********found**********/
if(strcmp(___3___)>0)
{t=a[I];a[I]=a[j];a[j]=t;}
}
main()
{
struct student s[4]={
{10001,"ZhangSan", 95, 80, 88},
{10002,"LiSi", 85, 70, 78},
{10003,"CaoKai", 75, 60, 88},
{10004,"FangFang", 90, 82, 87}};
int I,j;
printf("The original data :\n");
for(j=0;j<4;j++)
{
printf("No: %ld Name: %-8s scores: ",s[j].sno,s[j].name);
for(I=0;I<3;I++)
printf("%6.2f ",s[j].score[I]);
printf("\n");
fun(s,4);
printf("The data after sorting :\n");
for(j=0;j<4;j++)
{
printf("No: %ld Name: %-8s scores: ",s[j].sno,s[j].name);
for(I=0;I<3;I++)
printf("%6.2f ",s[j].score[I]);
printf("\n");
}
}
}
【答案】
(1)struct student
(2)n-1 或 =n-2
(3)a[i].name, a[j].name
2.程序修改題
給定程序中,函數(shù)fun的功能是:由形參給定n個實數(shù),輸出平均值,并統(tǒng)計在平均值以上(含平均值)的實數(shù)個數(shù)。
例如,n=8時,輸入:193.199、195.673、195.757、196.051、196.092、196.596、196.579、196.763,所得平均值為:195.838745,在平均值以上的實數(shù)個數(shù)應(yīng)為:5
請改正程序中的錯誤,使程序能輸出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
int fun(float x[], int n)
{
/**********found**********/
int j,c=0, float xa=0.0;
for(j=0;j<n;j++)
xa+=x[j]/n;
printf("ave=%f\n",xa);
for(j=0;j<n;j++)
/**********found**********/
if(x[j]=>xa)
c++;
return c;
}
main()
{
float x[100]={193.199,195.673,195.757,
196.051,196.092,196.596,196.579,196.763};
printf("%d\n",fun(x,8));
}
【答案】
(1)將int j,c=0,float xa=0.0; 改為:
int j,c=0; float xa=0.0;
(2)將if(x[j]=> xa) 改為:if(x[j]>=xa)?
3.程序設(shè)計題
編寫函數(shù)fun,其功能是,根據(jù)以下公式求P的值,結(jié)果由函數(shù)值返回。M與n為兩個正整數(shù)且要求m > n:
P=m!/(n!*(m-n)!)
例如:m=12、n=8時,運行結(jié)果為495.000000。
注意:部分源程序已給出。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。
#include <stdio.h>
float fun(int m,int n)
{
?
}
main()
{
printf("P=%f\n",fun(12,8));
}
【答案】
float fun(int m,int n)
{
float s=1.0;
int k;
for(k=n+1;k<=m;k++)
s*=k;
for(k=1;k<=(m-n);k++)
s/=k;
return s;
}
1.程序填空題
給定程序中,函數(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é)果。
注意:不得增行或刪行,也不得更改程序的結(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("The original list:\n");
outlist(head);
fun(head);
printf("The list after inverting:\n");
outlist(head);
}
【答案】
(1)p->next
(2)q!=NULL或q
(3)p->next?
2.程序修改題
給定程序中,函數(shù)fun的功能是:在p所指字符串中找出ASCII碼值最大的字符,將其放在第一個位置上;并將該字符前的原字符向后順序移動。
例如,調(diào)用fun函數(shù)之前給字符串輸入:ABCDeFGH,調(diào)用后字符串中的內(nèi)容為:eABCDFGH。
請改正程序中的錯誤,使其能得出正確結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
#include <stdio.h>
fun( char *p )
{
char max,*q; int i=0;
max=p[i];
while(p[i]!=0)
{
if(max<p[i])
{ max=p[i];
/**********found**********/
q=p+i
}
i++;
}
/**********found**********/
While(q>p)
{
*q=*(q-1);
q--;
}
p[0]=max;
}
main()
{
char str[80];
printf("Enter a string: ");
gets(str);
printf("\nThe original string:");
puts(str);
fun(str);
printf("\nThe string after moving: ");
puts(str);
printf("\n\n");
}
【答案】
(1)將q=p+i 改為:q=p+i;
(2)將While(q>p) 改為:while(q<p)
3.程序設(shè)計題
學(xué)生的記錄由學(xué)號和成績組成,N名學(xué)生的數(shù)據(jù)已在主函數(shù)中放入結(jié)構(gòu)體數(shù)組s中,請編寫函數(shù)fun,它的功能是:把指定分數(shù)范圍內(nèi)的學(xué)生數(shù)據(jù)放在b所指的數(shù)組中,分數(shù)范圍內(nèi)的學(xué)生人數(shù)由函數(shù)值返回。
例如,輸入的分數(shù)是60、69,則應(yīng)當(dāng)把分數(shù)在60~69之間的學(xué)生數(shù)據(jù)進行輸出,包含60分和69分的學(xué)生數(shù)據(jù)。主函數(shù)中將把60放在low中,把69放在heigh中。
注意:部分源程序已給出。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。
#include <stdio.h>
#define N 16
typedef struct
{
char num[10];
int s;
}STREC;
int fun(STREC *a,STREC *b,int l,int h)
{
?
}
main()
{
STREC s[N]={{"GA005",85},{"GA003",76},
{"GA002",69},{"GA004",85},{"GA001",96},
{"GA007",72},{"GA008",64},{"GA006",87},
{"GA015",85},{"GA013",94},{"GA012",64},
{"GA014",91},{"GA011",90},{"GA017",64},
{"GA018",64},{"GA016",72}};
STREC h[N],tt;FILE *out;
int I,j,n,low,heigh,t;
printf("Enter 2 integer number
low&heigh: ");
scanf("%d%d",&low,&heigh);
if( heigh<low )
{t=heigh;heigh=low;low=t;}
n=fun(s,h,low,heigh);
printf("The student's data between
%d--%d :\n",low,heigh);
for(i=0;i<n;i++)
printf("%s %4d\n",h[i].num,h[i].s);
printf("\n");
out=fopen("out34.dat","w") ;
n=fun(s,h,80,98);
fprintf(out,"%d\n",n);
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(h[i].s>h[j].s)
{ tt=h[i];h[i]=h[j]; h[j]=tt; }
for(i=0;i<n;i++)
fprintf(out,"%4d\n",h[i].s);
fprintf(out,"\n");
fclose(out);
}
【答案】
int fun(STREC *a,STREC *b,int l,int h)
{
int k,n=0;
for(k=0;k<N;k++)
if(a[k].s>=l&&a[k].s<=h)
b[n++]=a[k];
return n;
}
1.程序填空題
給定程序中,函數(shù)fun的功能是將參數(shù)給定的字符串、整數(shù)、浮點數(shù)寫到文本文件中,再用字符串方式從此文本文件中逐個讀入,并調(diào)用庫函數(shù)atoi和atof將字符串轉(zhuǎn)換成相應(yīng)的整數(shù)、浮點數(shù),然后將其顯示在屏幕上。
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#include <stdlib.h>
void fun(char *s,int a,double f)
{
/**********found**********/
___1___fp;
char str[100],str1[100],str2[100];
int a1; double f1;
fp=fopen("file1.txt","w");
fprintf(fp,"%s %d %f\n",s,a,f);
/**********found**********/
___2___;
fp=fopen("file1.txt","r");
/**********found**********/
fscanf(___3___,"%s%s%s",str,str1,str2);
fclose(fp);
a1=atoi(str1);
f1=atof(str2);
printf("Result:%s %d %f\n",str,a1,f1);
}
main()
{
char a[10]="Hello!";
int b=12345;
double c=98.76;
fun(a,b,c);
}
【答案】
(1)FILE * (2)fclose(fp) (3)fp?
2.程序修改題
給定程序中,函數(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("Enter a string with length<80.:");
gets(s);
printf("The string : \n ");
puts(s);
fun(s);
printf("The Cords :\n ");
puts(s);
}
【答案】
(1)將while(*s!='@') 改為:while(*s!='\0')
(2)將(*s)++; 改為:s++?
3.程序設(shè)計題
請編寫函數(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。
注意:部分源程序已給出。請勿改動主函數(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("Enter p: "); scanf("%d",&p);
fun(a,p,n);
printf("The data after moving:\n");
for(i=0;i<n;i++) printf("%3d",a[i]);
printf("\n\n");
}
【答案】
void fun(int *w,int p,int n)
{
int j,k,t=0;
for(j=0;j<=p;j++)
{
t=w[0];
for(k=1;k<n;k++)
w[k-1]=w[k];
w[n-1]=t;
}
}