為大家收集整理了《2013計(jì)算機(jī)二級(jí)C語(yǔ)言上機(jī)練習(xí)題及答案(19)》供大家參考,希望對(duì)大家有所幫助?。。?BR> 填空題
程序通過定義學(xué)生結(jié)構(gòu)體變量,存儲(chǔ)了學(xué)生的學(xué)號(hào)、姓名和3門課的成績(jī)。函數(shù)fun的功能是將形參a所指結(jié)構(gòu)體變量s中的數(shù)據(jù)進(jìn)行修改,并把a(bǔ)中地址作為函數(shù)值返回主函數(shù),在主函數(shù)中輸出修改后的數(shù)據(jù)。
例如:a所指變量s中的學(xué)號(hào)、姓名、和三門課的成績(jī)依次是:10001、
" ZhangSan "、95、80、88,修改后輸出t中的數(shù)據(jù)應(yīng)為:10002、"LiSi "、96、
81、89。
請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(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");
}
解題思路:
本題是利用形參對(duì)結(jié)構(gòu)體變量中的值進(jìn)行修改并通過地址把函數(shù)值返回。
第一處:必須定義結(jié)構(gòu)指針返回類型,所以應(yīng)填:struct student *。
第二處:分別對(duì)成績(jī)?cè)黾?分,所以應(yīng)填:a->score[i]。
第三處:返回結(jié)構(gòu)指針a,所以應(yīng)填:a。
改錯(cuò)題
給定程序MODI1.C中函數(shù)fun的功能是:從N個(gè)字符串中找出長(zhǎng)的那個(gè)串,并將其地址作為函數(shù)值返回。各字符串在主函數(shù)中輸入,并放入一個(gè)字符串?dāng)?shù)組中。
請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確結(jié)果。
注意:不要改動(dòng)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])。
第二處: 返回一個(gè)由變量sp控制的字符串指針,所以應(yīng)改為:return sp;。
編程題
函數(shù)fun的功能是:將a、b中的兩個(gè)兩位正整數(shù)合并形成一個(gè)新的整數(shù)放在c 中。合并的方式是:將a中的十位和個(gè)位數(shù)依次放在變量c的百位和個(gè)位上,b中的十位和個(gè)位數(shù)依次放在變量c的十位和千位上。
例如,當(dāng)a=45,b=12。調(diào)用該函數(shù)后,c=2415。
注意: 部分源程序存在文件PROG1.C中。數(shù)據(jù)文件IN.DAT中的數(shù)據(jù)不得修改。
請(qǐng)勿改動(dòng)主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入
你編寫的若干語(yǔ)句。
給定源程序:
#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();
}
解題思路:
本題是給出兩個(gè)兩位數(shù)的正整數(shù)分別取出各位上的數(shù)字,再按條件組成一個(gè)新數(shù)。
取a十位數(shù)字的方法:a/10
取a個(gè)位數(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)體變量,存儲(chǔ)了學(xué)生的學(xué)號(hào)、姓名和3門課的成績(jī)。函數(shù)fun的功能是將形參a所指結(jié)構(gòu)體變量s中的數(shù)據(jù)進(jìn)行修改,并把a(bǔ)中地址作為函數(shù)值返回主函數(shù),在主函數(shù)中輸出修改后的數(shù)據(jù)。
例如:a所指變量s中的學(xué)號(hào)、姓名、和三門課的成績(jī)依次是:10001、
" ZhangSan "、95、80、88,修改后輸出t中的數(shù)據(jù)應(yīng)為:10002、"LiSi "、96、
81、89。
請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(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");
}
解題思路:
本題是利用形參對(duì)結(jié)構(gòu)體變量中的值進(jìn)行修改并通過地址把函數(shù)值返回。
第一處:必須定義結(jié)構(gòu)指針返回類型,所以應(yīng)填:struct student *。
第二處:分別對(duì)成績(jī)?cè)黾?分,所以應(yīng)填:a->score[i]。
第三處:返回結(jié)構(gòu)指針a,所以應(yīng)填:a。
改錯(cuò)題
給定程序MODI1.C中函數(shù)fun的功能是:從N個(gè)字符串中找出長(zhǎng)的那個(gè)串,并將其地址作為函數(shù)值返回。各字符串在主函數(shù)中輸入,并放入一個(gè)字符串?dāng)?shù)組中。
請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確結(jié)果。
注意:不要改動(dòng)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])。
第二處: 返回一個(gè)由變量sp控制的字符串指針,所以應(yīng)改為:return sp;。
編程題
函數(shù)fun的功能是:將a、b中的兩個(gè)兩位正整數(shù)合并形成一個(gè)新的整數(shù)放在c 中。合并的方式是:將a中的十位和個(gè)位數(shù)依次放在變量c的百位和個(gè)位上,b中的十位和個(gè)位數(shù)依次放在變量c的十位和千位上。
例如,當(dāng)a=45,b=12。調(diào)用該函數(shù)后,c=2415。
注意: 部分源程序存在文件PROG1.C中。數(shù)據(jù)文件IN.DAT中的數(shù)據(jù)不得修改。
請(qǐng)勿改動(dòng)主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入
你編寫的若干語(yǔ)句。
給定源程序:
#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();
}
解題思路:
本題是給出兩個(gè)兩位數(shù)的正整數(shù)分別取出各位上的數(shù)字,再按條件組成一個(gè)新數(shù)。
取a十位數(shù)字的方法:a/10
取a個(gè)位數(shù)字的方法:a%10
參考答案:
void fun(int a, int b, long *c)
{
*c = (b%10)*1000+(a/10)*100+(b/10)*10+a%10;
}

