全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí)C語(yǔ)言練習(xí)題(八)
1.程序填空題
請(qǐng)補(bǔ)充main函數(shù),該函數(shù)的功能是:把1~100間的所有素?cái)?shù)保存在數(shù)組aa中,然后輸出這些素?cái)?shù)并計(jì)算它們的和。
請(qǐng)?jiān)诔绦虻南聞澗€(xiàn)處填入正確的內(nèi)容并把下劃線(xiàn)刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
main()
{
int n,I,j,k,flag,sum;
int aa[50];
sum=0; k=0;
system("cls");
for(i=2;i<100;i++)
{
/**********found**********/
___1___;
for(j=2;j<i&&flag;j++)
if(i%j==0)
{
/**********found**********/
___2___;
}
if(flag)
{
sum+=I;
/**********found**********/
___3___;
}
}
printf("\n*** prime number ***\n");
for(i=0;i<k;i++)
{
if(i%10==0) printf("\n");
printf("%4d",aa[i]);
}
printf("\nsum=%d",sum);
}
【答案】
(1)flag=1 (2)flag=0 (3)aa[k++]=i?
2.程序修改題
下列給定程序中,函數(shù)fun()的功能是:根據(jù)輸入的3個(gè)邊長(zhǎng)(整型值),判斷能否構(gòu)成三角形?若能構(gòu)成等邊三角形,則返回3;若是等腰三角形,則返回2;若能構(gòu)成三角形則返回1;若不能,則返回0。
請(qǐng)改正程序中的錯(cuò)誤,使其能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
#include <math.h>
int fun(int a,int b,int c)
{
if(a+b>c&&b+c>a&&a+c>b)
{
if(a==b&&b==c)
/**********found**********/
return 1;
else if(a==b||b==c||a==c)
return 2;
/**********found**********/
else return 3;
}
else return 0;
}
main()
{
int a,b,c,shape;
printf("Input a,b,c: ");
scanf("%d%d%d",&a,&b,&c);
printf("a=%d, b=%d, c=%d\n",a,b,c);
shape=fun(a,b,c);
printf("The shape :%d\n",shape);
}
【答案】
(1)將 return 1; 改為:return 3;
(2)將 else return 3; 改為:else return 1;?
3.程序設(shè)計(jì)題
請(qǐng)編寫(xiě)函數(shù)fun(),該函數(shù)的功能是:移動(dòng)字符串中的內(nèi)容,移動(dòng)的規(guī)則是把第1~m個(gè)字符平移到字符串的最后,把第m+1到最后的字符移到字符串的前部。
例如,字符串中原有的內(nèi)容為ABCDEFGHIJK,m的值為3,移動(dòng)后字符串中的內(nèi)容應(yīng)該是DEFGHI JKABC。
注意:部分源程序已給出。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫(xiě)的若干語(yǔ)句。
#include <stdio.h>
#include <string.h>
#define N 80
void fun(char *w,int m)
{
?
}
main()
{
char a[N]="ABCDEFGHIJK";
int m;
printf("The origina string :\n");
puts(a);
printf("\nEnter m: ");
scanf("%d",&m);
fun(a,m);
printf("The string after moving :\n");
puts(a);
printf("\n\n");
}
【答案】
void fun(char *w,int m)
{
int i,j;
char t;
for(i=1;i<=m;i++)
{
t=w[0];
for(j=1;w[j]!='\0';j++)
w[j-1]=w[j];
w[j-1]=t; /*將第1個(gè)字符放到
最后一個(gè)字符中*/
}
}
1.程序填空題
請(qǐng)補(bǔ)充main函數(shù),該函數(shù)的功能是:計(jì)算三名學(xué)生學(xué)科的平均成績(jī)。
例如,當(dāng)score[N][M]={{83.5,82,86,65,67},{80,91.5,84,99,95},{90,95,86,95,97}}時(shí),五門(mén)學(xué)科的平均分為:84.5 89.5 85.3 86.3 86.3。
請(qǐng)?jiān)诔绦虻南聞澗€(xiàn)處填入正確的內(nèi)容并把下劃線(xiàn)刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#include <windows.h>
#define N 3
#define M 5
main()
{
int I,j;
static float score[N][M]={{83.5,82,86,65,67},{80,91.5,84,99,95},{90,95,86,95,97}};
static float bb[N];
system("cls");
for(i=0;i<M;i++)
bb[i]=0.0;
/**********found**********/
for(i=0;i<___1___;i++)
{
/**********found**********/
for(j=0;j<___2___;j++)
bb[j]+=score[i][j];
}
for(i=0;i<M;i++)
/**********found**********/
printf("subject%d\taver age=%5.1f",i+1, ___3___);
return 0;
}
【答案】
(1)N (2)M (3)bb[i]/N
2.程序修改題
在給定程序中,函數(shù)fun()的功能是:求k!(k<12),所有階乘的值作為函數(shù)值返回。例如:若k=10,則應(yīng)輸出3628800。
請(qǐng)改正程序中的錯(cuò)誤,使其能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
#include <conio.h>
#include <stdio.h>
#include <windows.h>
long fun(int k)
{
/**********found**********/
if k>0
return(k*fun(k-1));
/**********found**********/
else if(k=0)
return 1;
}
main()
{
int k=10;
system("cls");
printf("%d!=%ld\n ",k,fun(k));
}
【答案】
(1)將 if k>0 改為:if (k>0)
(2)將 else if(k=0) 改為:else if(k==0)
3.程序設(shè)計(jì)題
請(qǐng)編寫(xiě)函數(shù)fun(),該函數(shù)的功能是:移動(dòng)一維數(shù)組中的內(nèi)容,若數(shù)組中有n個(gè)整數(shù),要求把下標(biāo)從0到p(p≤n-1)的數(shù)組元素平移到數(shù)組的最后。
例如:一維數(shù)組中的原始內(nèi)容為1、2、3、4、5、6、7、8、9、10、11、12、13、14、15,p的值為3。移動(dòng)后,一維數(shù)組中的內(nèi)容應(yīng)為5、6、7、8、9、10、11、12、13、14、15、1、2、3、4。
注意:部分源程序已給出。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫(xiě)的若干語(yǔ)句。
#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("\nEnter 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 i,j,t;
for(i=0;i<=p;i++) /*循環(huán)左移p+1次*/
{
t=w[0];
for(j=1;j<n;j++) /*實(shí)現(xiàn)循環(huán)左移*/
w[j-1]=w[j];
w[j-1]=t;
}
}
1.程序填空題
請(qǐng)補(bǔ)充main函數(shù),該函數(shù)的功能是:輸出一個(gè)N×N矩陣,要求對(duì)角線(xiàn)元素賦值為1,非對(duì)角線(xiàn)上的元素賦值為0。
請(qǐng)?jiān)诔绦虻南聞澗€(xiàn)處填入正確的內(nèi)容并把下劃線(xiàn)刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#include <windows.h>
#define N 10
main()
{
int bb[N][N];
int I,j,n;
system("cls");
printf("Input n:\n");
scanf("%d",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
/**********found**********/
___1___;
if(i==j)
/**********found**********/
bb[i][j]=___2___;
/**********found**********/
if(___3___)
bb[i][j]=1;
}
printf("\n***** the result *****\n");
for(i=0;i<n;i++)
{
printf("\n\n");
for(j=0;j<n;j++)
printf("%4d",bb[i][j]);
}
}
【答案】
(1)bb[i][j]=0 (2)1 (3)j==n-1-i
2.程序修改題
假定整數(shù)不重復(fù)數(shù)列{97,2,7,1,2,4,-1}中的數(shù)存放在數(shù)組s中。下列給定程序中,函數(shù)fun的功能是:刪除數(shù)列中值為a的元素,同時(shí)將其他元素前移。Sum中存放的是數(shù)列中元素的個(gè)數(shù)。
請(qǐng)改正程序中的錯(cuò)誤,使其能得到正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不能增行或刪行,也不得更改程序的結(jié)構(gòu)。
#include <stdio.h>
#define M 100
fun(int *x,int sum,int a)
{
int temp=0,j;
x[sum]=a;
while(a!=x[temp])
temp=temp+1;
if(temp==sum)
{
return-1;
}
else
{
/*******found*********/
for(j=temp;j<sum;j++)
x[j+1]=x[j];
return sum-1;
}
}
main()
{
int s[M]={97,2,7,1,2,4,-1},a,sum,j;
sum=8;
printf("The array:\n");
for(j=0;j<sum;j++)
printf("%5d",s[j]);
printf("\nPlease insert data want to deleted:");
scanf("%d",&a);
printf("Delete :%d\n",a);
sum=fun(s,sum,a);
if(sum==-1)
{
printf("***Not be found!***\n\n");
}
else
{
printf("The array after delete :\n");
for(j=0;j<sum;j++)
printf("%5d",s[j]);
printf("\n\n");
}
}
【答案】
void fun(STREC *p)
{
int i;
(*p).ave =0.0;
for(i=0;i<N;i++)
(*p).ave =(*p).ave +(*p).s[i];
(*p).ave =(*p).ave /N;
}
3.程序設(shè)計(jì)題
某學(xué)生的記錄由學(xué)號(hào)、8門(mén)課成績(jī)和平均分組成,學(xué)號(hào)和8門(mén)課的成績(jī)已在主函數(shù)中給出。請(qǐng)編寫(xiě)fun()函數(shù),它的功能是:求出該學(xué)生的平均分并放在記錄的ave成員中。
例如,學(xué)生的成績(jī)是85.5、76、69.5、85、91、72、64.5、87.5,則他的平均分應(yīng)當(dāng)是78.875。
注意:部分源程序已給出。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫(xiě)的若干語(yǔ)句。
#include <stdio.h>
#define N 8
typedef struct
{ char num[10];
double s[N];
double ave;
}STREC;
void fun(STREC *p )
{
?
}
main()
{
STREC s={"GA005",85.5,76,69.5,85,91,
72,64.5,87.5};
int I;
fun(&s);
printf("The %s's student data:\n",
s.num); /*輸出學(xué)號(hào)*/
for(i=0;i<N;i++)
printf("%4.1f\n",s.s[i]);
printf("\nave=%7.3f\n", s.ave);
}
【答案】
void fun(STREC *p)
{
int i;
(*p).ave =0.0;
for(i=0;i<N;i++)
(*p).ave =(*p).ave +(*p).s[i];
(*p).ave =(*p).ave /N;
}
1.程序填空題
請(qǐng)補(bǔ)充main函數(shù),該函數(shù)的功能是:輸入兩個(gè)正整數(shù)m和n,求這兩個(gè)數(shù)的最大公約和最小公倍數(shù)。
請(qǐng)?jiān)诔绦虻南聞澗€(xiàn)處填入正確的內(nèi)容并把下劃線(xiàn)刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#include <windows.h>
main()
{
int a,b,n,m,t;
system("cls");
printf("Input two numbers:\n");
scanf ("%d,%d",&n,&m);
if(n<m) { a=m; b=n; }
else { a=n; b=m; }
/**********found**********/
while(___1___)
{
/**********found**********/
t=___2___
a=b;
b=t;
}
printf("greatest common divisor:%d\n",a);
/**********found**********/
printf("least common multiple:%d\n",___3___);
}
【答案】
(1)b!=0 (2)a%b; (3)n*m/a
2.程序修改題
在給定程序中,函數(shù)fun()的功能是:利用插入排序法對(duì)字符串中的字符按從小到大的順序進(jìn)行排序。插入法的基本方法是:先對(duì)字符串中的頭兩個(gè)元素進(jìn)行排序,然后把第3個(gè)字符插入到前兩個(gè)字符中,插入后前3個(gè)字符依然有序;再把第4個(gè)字符插入到前3個(gè)字符中,待排序的字符串已在主函數(shù)中賦予。
請(qǐng)改正程序中的錯(cuò)誤,使其能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
#include <string.h>
#include <stdio.h>
#define N 80
void insert(char *aa)
{
int I, j, n;
char ch;
n=strlen(aa);
for(i=1;i<n;i++)
/**********found**********/
{
c=aa[i]; j=i-1;
while((j>=0)&&(ch<aa[j]))
{ aa[j+1]=aa[j]; j--; }
aa[j+1]=ch;
}
}
main()
{
char a[N]="QWERTYUIOPASDFGHJKLMNBVCXZ";
int I;
printf("The original string: %s\n",a);
insert(a);
printf("The string after sorting:
%s\n\n",a);
}
【答案】
將c=aa[i]; 改為:ch=aa[i];
3.程序設(shè)計(jì)題
請(qǐng)編寫(xiě)一個(gè)函數(shù)int fun(char *str),用來(lái)刪除字符串中的所有空格。
例如:輸入asd af aa z67,則輸出為asdafaaz67。
注意:部分源程序已給出。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫(xiě)的若干語(yǔ)句。
#include <stdio.h>
#include <ctype.h>
#include <conio.h>
#include <windows.h>
int fun(char *str)
{
?
}
main()
{
char str[81];
int n;
system("cls");
printf("Input a string : ");
gets(str);
puts(str);
fun(str);
printf("***str: %s\n",str);
}
【答案】
int fun (char *str)
{
int i,j=0;
for(i=0;str[i]!='\0';i++)
if(str[i]!=' ')
str[j++]=str[i];
str[j]='\0';
}
1.程序填空題
請(qǐng)補(bǔ)充main函數(shù),該函數(shù)的功能是:求1+2!+ 3!+…+N!的和。
例如,1+2!+3!+…+5! +6!的和為873。
請(qǐng)?jiān)诔绦虻南聞澗€(xiàn)處填入正確的內(nèi)容并把下劃線(xiàn)刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#include <windows.h>
main()
{
int I, n;
long s=0, t=1;
system("cls");
printf("Input n:\n");
/**********found**********/
scanf("%d",___1___);
for(i=1;i<=n;i++)
{
/**********found**********/
t=___2___;
/**********found**********/
s=___3___;
}
printf("1!+2!+3!...+%d!=%ld\n",n,s);
}
【答案】
(1)&n (2)t*i (3)s+t
2.程序修改題
下列給定程序中,函數(shù)fun()的功能是:輸出M行N列整數(shù)方陣,然后求兩條對(duì)角線(xiàn)上的各元素之和,返回此和數(shù)。
請(qǐng)改正程序中的錯(cuò)誤,使其能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
#include <conio.h>
#include <stdio.h>
#include <windows.h>
#define M 5
/**********found**********/
int fun(int n,int xx[ ][ ])
{
int I,j,sum=0;
printf("The %d x %d matrix:\n",M,M);
for(i=0;i<M;i++)
{
for(j=0;j<M;j++)
/**********found**********/
printf("%4f",xx[i][j]);
printf("\n");
}
for(i=0;i<n;i++)
sum+=xx[i][i]+xx[i][n-i-1];
return(sum);
}
main()
{
int aa[M][M]={{1,2,3,4,5},{4,3,2,1,0},
{6,7,8,9,0},{9,8,7,6,5},{3,4,5,6,7}};
system("cls");
printf("The sum of all elements on 2
diagnals is %d",fun(M,aa));
}
【答案】
(1)將fun(double b,double x0)改為:
double fun(double b,double x0)
(2)將if(abs(x1-x0)>=1e-6)改為:
if(fabs(x1-x0)>=1e-6)?
3.程序設(shè)計(jì)題
請(qǐng)編一個(gè)函數(shù)float fun(double h),函數(shù)的功能是對(duì)變量h中的值保留兩位小數(shù),并對(duì)第三位進(jìn)行四舍五入(規(guī)定h中的值為正數(shù))。
例如:若h值為8.32433,則函數(shù)返回8.32;若h值為8.32533,則函數(shù)返回8.33。
注意:部分源程序已給出。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫(xiě)的若干語(yǔ)句。
#include <stdio.h>
#include <conio.h>
#include <windows.h>
float fun(float h )
{
?
}
main()
{
float a;
system("cls");
printf("Enter a: ");
scanf("%f",&a);
printf("The original data is : ");
printf("%f\n\n", a);
printf("The result : %f\n", fun(a));
}
【答案】
float fun(float h )
{
long t;
t=(h*1000+5)/10;
return (float)t/100;
}
1.程序填空題
請(qǐng)補(bǔ)充函數(shù)fun(),該函數(shù)的功能是:把字符串str中的字符按字符的ASCII碼降序排列,處理后的字符串仍然保存在原串中,字符串及其長(zhǎng)度作為函數(shù)參數(shù)傳入。
例如,如果輸入“cdefgh”,則輸出為“hgfedc”。
請(qǐng)?jiān)诔绦虻南聞澗€(xiàn)處填入正確的內(nèi)容并把下劃線(xiàn)刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#include <windows.h>
#define N 80
void fun(char s[],int n)
{
int I, j;
char ch;
for(i=0;i<n;i++)
/**********found**********/
for(j=___1___;j<n;j++)
if(s[i]<s[j])
{
ch=s[j];
/**********found**********/
___2___;
s[i]=ch;
}
}
main()
{
int i=0,strlen=0;
char str[N];
system("cls");
printf("Input a string:\n");
gets(str);
while(str[i]!='\0')
{ strlen++; i++; }
fun(str,strlen);
printf("\n***display string***\n");
puts(str);
}
【答案】
(1)i (2)s[j]=s[i]?
2.程序修改題
在給定程序中,函數(shù)fun()的功能是:將長(zhǎng)整型數(shù)中每一位上為偶數(shù)的數(shù)依次取出,構(gòu)成一個(gè)新數(shù)放在t中。高位仍在高位,低位仍在低位。例如,當(dāng)s中的數(shù)為87653142時(shí),t中的數(shù)為8642。
請(qǐng)改正程序中的錯(cuò)誤,使其能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
#include <conio.h>
#include <stdio.h>
#include <windows.h>
void fun(long s,long *t)
/**********found**********/
{
int d;
long s1=1;
*t=0;
while(s>0)
{
d=s%10;
/**********found**********/
if(d%2=0)
{ *t=d*s1+*t; s1*=10; }
/**********found**********/
s\=10;
}
}
main()
{
long s,t;
system("cls");
printf("\nPlease enter s: ");
scanf("%ld",&s);
fun(s,&t);
printf("The result is :%ld\n",t);
}
【答案】
(1)將 int d;改為:long d;
(2)將 if(d%2=0)改為:if(d%2==0)
(3)將 s\=10;改為:s/=10;?
3.程序設(shè)計(jì)題
請(qǐng)編寫(xiě)函數(shù)fun,它的功能是:求Fibonacci數(shù)列中大于a(a>3)的最小的一個(gè)數(shù),結(jié)果由函數(shù)返回。其中Fibonacci數(shù)列F(n)的定義為:
F(0)=0,F(xiàn)(1)=1
F(n)=F(m-1)+F(m-2)
例如,當(dāng)a=500時(shí),函數(shù)值為610。
注意:部分源程序已給出。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花括號(hào)中填入所編寫(xiě)的若干語(yǔ)句。
#include <conio.h>
#include <math.h>
#include <stdio.h>
int fun(int a)
{
?
}
main()
{
int m;
FILE *out;
m=500;
printf("m=%d,F=%d\n",m,fun(m));
out=fopen ("outfile.dat","w");
for(m=500;m<3000;m+=500)
fprintf(out,"%d\n",fun(m));
fclose (out);
}
【答案】
int x=1,y=1,z=0,i;
for(i=4;i<=a;i++)
{
if(z<a)
{
z=x+y;
x=y;
y=z;
}
else
break;
}
return z;
1.程序填空題
請(qǐng)補(bǔ)充main函數(shù),該函數(shù)的功能是:如果數(shù)組aa的前一個(gè)元素比后一個(gè)元素小,則把它保存在數(shù)組bb中并輸出。
例如:輸入“40,51,62,33,35,52,48,95,66,73”,則結(jié)果輸出“40,51,33,35,48,66”。
請(qǐng)?jiān)诔绦虻南聞澗€(xiàn)處填入正確的內(nèi)容并把下劃線(xiàn)刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#include <windows.h>
#define N 10
main()
{
int I,n=0;
int aa[N]={40,51,62,33,35,52,48,95,66,73};
int bb[N];
system("cls");
/**********found**********/
for(i=0;i<___1___;i++)
if(aa[i]<aa[i+1])
/**********found**********/
___2___;
printf("\n***display bb***\n");
for(i=0;i<n;i++)
/**********found**********/
printf("bb[%d]=%2d ", ___3___);
}
}
【答案】
(1)N-1 (2)bb[n++]=aa[i] (3)i,bb[i]
2.程序修改題
給定程序中,函數(shù)fun()的功能是:刪除字符串s中所有空白字符(包括Tab字符、回車(chē)符及換行符)。輸入字符串時(shí)用'#'結(jié)束輸入。
請(qǐng)改正程序中的錯(cuò)誤,使其能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
#include <string.h>
#include <stdio.h>
#include <ctype.h>
fun(char *p)
{
int I,t;
char c[80];
for(I=0,t=0;p[I];I++)
if(!isspace(*(p+I))) c[t++]=p[I];
/**********found**********/
c[t]='\0';
strcpy(p,c);
}
main()
{
char c,s[80];
int I=0;
printf("Input a string: ");
c=getchar();
while(c!='#')
{
s[I]=c;I++;c=getchar();
}
s[I]='\0';
fun(s);
puts(s);
?
}
【答案】
將c[t]= "\0"; 改為:c[t]= '\0';
3.程序設(shè)計(jì)題
請(qǐng)編寫(xiě)函數(shù)fun(),該函數(shù)的功能是計(jì)算并輸出:
S=1+(1+20.5)+(1+20.5+30.5)+…+(1+20.5+30.5+…+N0.5)
例如,若主函數(shù)從鍵盤(pán)給n輸入20后,則輸出為s=534.188884。
注意:部分源程序已給出。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫(xiě)的若干語(yǔ)句。
#include <math.h>
#include <stdio.h>
double fun(int n)
{
?
}
main()
{
int n;
double s;
printf("\nInput n: ");
scanf("%d",&n);
s=fun(n);
printf("s=%f\n",s);
}
【答案】
double fun(int n)
{
int i;
double s=0.0,s1=0.0;
for(i=1;i<=n;i++)
{
s1=s1+pow(i,0.5);
s=s+s1;
}
return s;
}
1.程序填空題
請(qǐng)補(bǔ)充main函數(shù),該函數(shù)的功能是:從鍵盤(pán)輸入一個(gè)長(zhǎng)整數(shù),如果這個(gè)數(shù)是負(fù)數(shù),則取它的絕對(duì)值,并顯示出來(lái)。例如,輸入:-333,結(jié)果為:333。
請(qǐng)?jiān)诔绦虻南聞澗€(xiàn)處填入正確的內(nèi)容并把下劃線(xiàn)刪除,使程序得出正確的結(jié)果。
注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include <stdio.h>
#include <conio.h>
main()
{
long int a;
printf("Enter the data:\n");
scanf(___1___);
printf("The origial data is %ld\n",a);
if(a<0)
___2___;
printf("\n");
printf(___3___);
}
【答案】
(1)將k=n; 改為:k=i;
(2)將s[j]=i; 改為:s[j++]=i;?
2.程序修改題
在給定程序中,函數(shù)fun的功能是找出100~n(不大于1000)之間百位數(shù)字加十位數(shù)字等于個(gè)位數(shù)字的所有整數(shù),把這些整數(shù)放在s所指的數(shù)組中,其個(gè)數(shù)作為函數(shù)值返回。
請(qǐng)改正程序中的錯(cuò)誤,使它能得到正確結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
#include <stdio.h>
#define N 100
int fun(int *s,int n)
{
int I,j,k,a,b,c;
j=0;
for(i=100;i<n;i++)
{
/**********found**********/
k=n;
a=k%10;
k/=10;
b=k%10;
c=k/10;
if(a==b+c)
/**********found**********/
?
s[j]=I;
}
return j;
}
?
main()
{
int a[N],n,num=0,I;
do
{
printf("\nEnter n(<=1000):");
scanf("%d",&n);
}
while(n>1000);
num= fun(a,n);
printf("\n\nThe result :\n");
for(i=0;i<num;i++)
printf("%5d",a[i]);
printf("\n\n");
}
【答案】
(1)將k=n; 改為:k=i;
(2)將s[j]=i; 改為:s[j++]=i;?
3.程序設(shè)計(jì)題
假定輸入的字符串中只包含字母和*號(hào)。請(qǐng)編寫(xiě)函數(shù)fun(),它的功能是:使字符串中前部的*號(hào)不得多余n個(gè);若多余n個(gè),則刪除多余的*號(hào);若少于或等于n個(gè),則什么也不做,字符串中間和尾部的*號(hào)不刪除。
例如,字符串中的內(nèi)容為****A*BC*DEF*G** *****,若n的值為2,刪除后,字符串中的內(nèi)容則應(yīng)當(dāng)是**A*BC*DEF*G*******;若n的值為4,則字符串中的內(nèi)容仍為****A*BC*DEF*G*******。N的值在主函數(shù)中輸入。在編寫(xiě)函數(shù)時(shí),不得使用C語(yǔ)言提供的字符串函數(shù)。
注意:部分源程序已給出。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫(xiě)的若干語(yǔ)句。
#include <stdio.h>
#include <conio.h>
void fun(char *a,int n)
{
?
}
main()
{
char s[81];int n;
printf("Enter a string :\n");gets(s);
printf("Enter n : ");scanf("%d",&n);
fun( s,n );
printf("The string after deleted :\n");
puts(s);}?
【答案】
void fun(char *a,int n)
{
int i=0, k=0;
char *p, *t;
p=t=a;
while(*t=='*')
{ k++; t++; }
if(k>n)
{
while(*p)
{ a[i]=*(p+k-n); i++; p++; }
a[i]='\0';
}
}