為大家收集整理了《2013計算機二級C語言上機練習(xí)題及答案(19)》供大家參考,希望對大家有所幫助?。?!
填空題
程序通過定義學(xué)生結(jié)構(gòu)體變量,存儲了學(xué)生的學(xué)號、姓名和3門課的成績。函數(shù)fun的功能是將形參a所指結(jié)構(gòu)體變量s中的數(shù)據(jù)進行修改,并把a中地址作為函數(shù)值返回主函數(shù),在主函數(shù)中輸出修改后的數(shù)據(jù)。
例如:a所指變量s中的學(xué)號、姓名、和三門課的成績依次是:10001、
" ZhangSan "、95、80、88,修改后輸出t中的數(shù)據(jù)應(yīng)為:10002、"LiSi "、96、
81、89。
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除, 使程序得出正確的結(jié)果。
注意:源程序存放在考生文件夾下的BLANK1.C中。
不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
給定源程序:
#include
#include
struct student {
long sno;
char name[10];
float score[3];
};
__1__ fun(struct student *a)
{ int i;
a->sno = 10002;
strcpy(a->name, "LiSi");
for (i=0; i<3; i++) __2__ += 1;
return __3__ ;
}
main()
{ struct student s={10001,"ZhangSan", 95, 80, 88}, *t;
int i;
printf("\n\nThe original data :\n");
printf("\nNo: %ld Name: %s\nScores: ",s.sno, s.name);
for (i=0; i<3; i++) printf("%6.2f ", s.score[i]);
printf("\n");
t = fun(&s);
printf("\nThe data after modified :\n");
printf("\nNo: %ld Name: %s\nScores: ",t->sno, t->name);
for (i=0; i<3; i++) printf("%6.2f ", t->score[i]);
printf("\n");
}
解題思路:
本題是利用形參對結(jié)構(gòu)體變量中的值進行修改并通過地址把函數(shù)值返回。
第一處:必須定義結(jié)構(gòu)指針返回類型,所以應(yīng)填:struct student *。
第二處:分別對成績增加1分,所以應(yīng)填:a->score[i]。
第三處:返回結(jié)構(gòu)指針a,所以應(yīng)填:a。
改錯題
給定程序MODI1.C中函數(shù)fun的功能是:從N個字符串中找出長的那個串,并將其地址作為函數(shù)值返回。各字符串在主函數(shù)中輸入,并放入一個字符串?dāng)?shù)組中。
請改正程序中的錯誤,使它能得出正確結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
給定源程序:
#include
#include
#define N 5
#define M 81
fun(char (*sq)[M])
{ int i; char *sp;
sp=sq[0];
for(i=0;i
if(strlen( sp)
sp=sq[i] ;
return sq;
}
main()
{ char str[N][M], *longest; int i;
printf("Enter %d lines :\n",N);
for(i=0; i
printf("\nThe N string :\n",N);
for(i=0; i
longest=fun(str);
printf("\nThe longest string :\n"); puts(longest);
}
解題思路:
第一處: 要求返回字符串的首地址,所以應(yīng)改為:char *fun(char (*sq)[M])。
第二處: 返回一個由變量sp控制的字符串指針,所以應(yīng)改為:return sp;。
編程題
函數(shù)fun的功能是:將a、b中的兩個兩位正整數(shù)合并形成一個新的整數(shù)放在c 中。合并的方式是:將a中的十位和個位數(shù)依次放在變量c的百位和個位上,b中的十位和個位數(shù)依次放在變量c的十位和千位上。
例如,當(dāng)a=45,b=12。調(diào)用該函數(shù)后,c=2415。
注意: 部分源程序存在文件PROG1.C中。數(shù)據(jù)文件IN.DAT中的數(shù)據(jù)不得修改。
請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入
你編寫的若干語句。
給定源程序:
#include
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);
NONO();
}
解題思路:
本題是給出兩個兩位數(shù)的正整數(shù)分別取出各位上的數(shù)字,再按條件組成一個新數(shù)。
取a十位數(shù)字的方法:a/10
取a個位數(shù)字的方法:a%10
參考答案:
void fun(int a, int b, long *c)
{
*c = (b%10)*1000+(a/10)*100+(b/10)*10+a%10;
}
填空題
程序通過定義學(xué)生結(jié)構(gòu)體變量,存儲了學(xué)生的學(xué)號、姓名和3門課的成績。函數(shù)fun的功能是將形參a所指結(jié)構(gòu)體變量s中的數(shù)據(jù)進行修改,并把a中地址作為函數(shù)值返回主函數(shù),在主函數(shù)中輸出修改后的數(shù)據(jù)。
例如:a所指變量s中的學(xué)號、姓名、和三門課的成績依次是:10001、
" ZhangSan "、95、80、88,修改后輸出t中的數(shù)據(jù)應(yīng)為:10002、"LiSi "、96、
81、89。
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除, 使程序得出正確的結(jié)果。
注意:源程序存放在考生文件夾下的BLANK1.C中。
不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
給定源程序:
#include
#include
struct student {
long sno;
char name[10];
float score[3];
};
__1__ fun(struct student *a)
{ int i;
a->sno = 10002;
strcpy(a->name, "LiSi");
for (i=0; i<3; i++) __2__ += 1;
return __3__ ;
}
main()
{ struct student s={10001,"ZhangSan", 95, 80, 88}, *t;
int i;
printf("\n\nThe original data :\n");
printf("\nNo: %ld Name: %s\nScores: ",s.sno, s.name);
for (i=0; i<3; i++) printf("%6.2f ", s.score[i]);
printf("\n");
t = fun(&s);
printf("\nThe data after modified :\n");
printf("\nNo: %ld Name: %s\nScores: ",t->sno, t->name);
for (i=0; i<3; i++) printf("%6.2f ", t->score[i]);
printf("\n");
}
解題思路:
本題是利用形參對結(jié)構(gòu)體變量中的值進行修改并通過地址把函數(shù)值返回。
第一處:必須定義結(jié)構(gòu)指針返回類型,所以應(yīng)填:struct student *。
第二處:分別對成績增加1分,所以應(yīng)填:a->score[i]。
第三處:返回結(jié)構(gòu)指針a,所以應(yīng)填:a。
改錯題
給定程序MODI1.C中函數(shù)fun的功能是:從N個字符串中找出長的那個串,并將其地址作為函數(shù)值返回。各字符串在主函數(shù)中輸入,并放入一個字符串?dāng)?shù)組中。
請改正程序中的錯誤,使它能得出正確結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
給定源程序:
#include
#include
#define N 5
#define M 81
fun(char (*sq)[M])
{ int i; char *sp;
sp=sq[0];
for(i=0;i
if(strlen( sp)
sp=sq[i] ;
return sq;
}
main()
{ char str[N][M], *longest; int i;
printf("Enter %d lines :\n",N);
for(i=0; i
printf("\nThe N string :\n",N);
for(i=0; i
longest=fun(str);
printf("\nThe longest string :\n"); puts(longest);
}
解題思路:
第一處: 要求返回字符串的首地址,所以應(yīng)改為:char *fun(char (*sq)[M])。
第二處: 返回一個由變量sp控制的字符串指針,所以應(yīng)改為:return sp;。
編程題
函數(shù)fun的功能是:將a、b中的兩個兩位正整數(shù)合并形成一個新的整數(shù)放在c 中。合并的方式是:將a中的十位和個位數(shù)依次放在變量c的百位和個位上,b中的十位和個位數(shù)依次放在變量c的十位和千位上。
例如,當(dāng)a=45,b=12。調(diào)用該函數(shù)后,c=2415。
注意: 部分源程序存在文件PROG1.C中。數(shù)據(jù)文件IN.DAT中的數(shù)據(jù)不得修改。
請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入
你編寫的若干語句。
給定源程序:
#include
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);
NONO();
}
解題思路:
本題是給出兩個兩位數(shù)的正整數(shù)分別取出各位上的數(shù)字,再按條件組成一個新數(shù)。
取a十位數(shù)字的方法:a/10
取a個位數(shù)字的方法:a%10
參考答案:
void fun(int a, int b, long *c)
{
*c = (b%10)*1000+(a/10)*100+(b/10)*10+a%10;
}

