為大家收集整理了《2013計算機二級C語言上機題庫及答案解析(5)》供大家參考,希望對大家有所幫助?。?!
填空題
給定程序中,函數(shù)fun的功能是建立一個N×N的矩陣。 矩陣元素的構成規(guī)律是:最外層元素的值全部為1;從外向內第2層元素的值全部為2;第3層元素的值
全部為3,…依次類推。例如,若N=5,生成的矩陣為:
1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1
請在程序的下劃線處填入正確的內容并把下劃線刪除, 使程序得出正確的結果。
注意:源程序存放在考生文件夾下的BLANK1.C中。
不得增行或刪行,也不得更改程序的結構!
給定源程序:
#include
#define N 7
void fun(int (*a) __1__)
{ int i,j,k,m;
if(N%2==0) m=N/2 ;
else m=N/2+1;
for(i=0; i
for(j= __2__ ; j
a[i][j]=a[N-i-1][j]=i+1;
for(k=i+1; k
a[k][i]=a[k][N-i-1]= __3__;
}
}
main()
{ int x[N][N]={0},i,j;
fun(x);
printf("\nThe result is:\n");
for(i=0; i
{ for(j=0; j
printf("\n");
}
}
解題思路:
第一處:建立一個N×N的矩陣,所以應填:[N]。
第二處:j的起始變量值應i。
第三處:也應該填寫i+1。
改錯題
給定程序MODI1.C中函數(shù) fun 的功能是: 將十進制正整數(shù)m轉換成k(2≤k≤9) 進制數(shù), 并按高位到低位順序輸出。
例如,若輸入8和2,則應輸出1000(即十進制數(shù)8轉換成二進制表示是1000)。
請改正 fun 函數(shù)中的錯誤,使它能得出正確的結果。
注意:不要改動 main 函數(shù)。不得增行或刪行,也不得更改程序的結構!
給定源程序:
#include
#include
void fun( int m, int k )
{
int aa[20], i;
for( i = 0; m; i++ )
{
aa[i] = m/k;
m /= k;
}
for( ; i; i-- )
printf( "%d", aa[ i ] );
}
main()
{
int b, n;
printf( "\nPlease enter a number and a base:\n" );
scanf( "%d %d", &n, &b );
fun( n, b );
printf("\n");
}
解題思路:
第一處:應該取模而不是整除,所以應為:aa[i]=m%k;。
第二處:輸出aa的位置不正確,所以應為:printf("%d",aa[i-1]);。
編程題
編寫一個函數(shù),從num個字符串中找出最長的一個字符串,并通過形參指針max傳回該串地址。(注意: 主函數(shù)中用****作為結束輸入的標志,函數(shù)fun中給出的語句僅供參考。)
注意:部分源程序在文件PROG1.C中。
請勿改動主函數(shù)main和其它函數(shù)中的任何內容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。
給定源程序:
#include
#include
fun(char(*a)[81],int num,char **max)
{
int i,k=0,len, maxlen; /* k為a數(shù)組中最長串所在元素的下標,初始為0,maxlen為其串
長 */
maxlen=strlen(a[k]);
for(i=1;i
{
/* 以下完成查找最長串 */
}
*max=a[k];
}
main()
{
char ss[10][81],*ps;
int n,i=0;
printf("輸入若干個字符串:");
gets(ss[i]);
puts(ss[i]);
while(!strcmp(ss[i],"****")==0)
{
i++;
gets(ss[i]);
puts(ss[i]);
}
n=i;
fun(ss,n,&ps);
printf("\nmax=%s\n",ps);
NONO();
}
解題思路:
本題是考察考生怎樣從已輸入的字符串中找出長度的字符串。求字符串的長度可以使用strlen函數(shù)。
參考答案:
fun(char(*a)[81],int num,char **max)
{
int i,k=0,maxlen; /* k為a數(shù)組中最長串所在元素的下標,初始為0,maxlen為其串長 */
maxlen=strlen(a[k]);
for(i=1;i
{
/* 以下完成查找最長串 */
if(strlen(a[i]) > maxlen) {
maxlen = strlen(a[i]) ;
k = i ;
}
}
*max=a[k];
}
填空題
給定程序中,函數(shù)fun的功能是建立一個N×N的矩陣。 矩陣元素的構成規(guī)律是:最外層元素的值全部為1;從外向內第2層元素的值全部為2;第3層元素的值
全部為3,…依次類推。例如,若N=5,生成的矩陣為:
1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1
請在程序的下劃線處填入正確的內容并把下劃線刪除, 使程序得出正確的結果。
注意:源程序存放在考生文件夾下的BLANK1.C中。
不得增行或刪行,也不得更改程序的結構!
給定源程序:
#include
#define N 7
void fun(int (*a) __1__)
{ int i,j,k,m;
if(N%2==0) m=N/2 ;
else m=N/2+1;
for(i=0; i
for(j= __2__ ; j
a[i][j]=a[N-i-1][j]=i+1;
for(k=i+1; k
a[k][i]=a[k][N-i-1]= __3__;
}
}
main()
{ int x[N][N]={0},i,j;
fun(x);
printf("\nThe result is:\n");
for(i=0; i
{ for(j=0; j
printf("\n");
}
}
解題思路:
第一處:建立一個N×N的矩陣,所以應填:[N]。
第二處:j的起始變量值應i。
第三處:也應該填寫i+1。
改錯題
給定程序MODI1.C中函數(shù) fun 的功能是: 將十進制正整數(shù)m轉換成k(2≤k≤9) 進制數(shù), 并按高位到低位順序輸出。
例如,若輸入8和2,則應輸出1000(即十進制數(shù)8轉換成二進制表示是1000)。
請改正 fun 函數(shù)中的錯誤,使它能得出正確的結果。
注意:不要改動 main 函數(shù)。不得增行或刪行,也不得更改程序的結構!
給定源程序:
#include
#include
void fun( int m, int k )
{
int aa[20], i;
for( i = 0; m; i++ )
{
aa[i] = m/k;
m /= k;
}
for( ; i; i-- )
printf( "%d", aa[ i ] );
}
main()
{
int b, n;
printf( "\nPlease enter a number and a base:\n" );
scanf( "%d %d", &n, &b );
fun( n, b );
printf("\n");
}
解題思路:
第一處:應該取模而不是整除,所以應為:aa[i]=m%k;。
第二處:輸出aa的位置不正確,所以應為:printf("%d",aa[i-1]);。
編程題
編寫一個函數(shù),從num個字符串中找出最長的一個字符串,并通過形參指針max傳回該串地址。(注意: 主函數(shù)中用****作為結束輸入的標志,函數(shù)fun中給出的語句僅供參考。)
注意:部分源程序在文件PROG1.C中。
請勿改動主函數(shù)main和其它函數(shù)中的任何內容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。
給定源程序:
#include
#include
fun(char(*a)[81],int num,char **max)
{
int i,k=0,len, maxlen; /* k為a數(shù)組中最長串所在元素的下標,初始為0,maxlen為其串
長 */
maxlen=strlen(a[k]);
for(i=1;i
{
/* 以下完成查找最長串 */
}
*max=a[k];
}
main()
{
char ss[10][81],*ps;
int n,i=0;
printf("輸入若干個字符串:");
gets(ss[i]);
puts(ss[i]);
while(!strcmp(ss[i],"****")==0)
{
i++;
gets(ss[i]);
puts(ss[i]);
}
n=i;
fun(ss,n,&ps);
printf("\nmax=%s\n",ps);
NONO();
}
解題思路:
本題是考察考生怎樣從已輸入的字符串中找出長度的字符串。求字符串的長度可以使用strlen函數(shù)。
參考答案:
fun(char(*a)[81],int num,char **max)
{
int i,k=0,maxlen; /* k為a數(shù)組中最長串所在元素的下標,初始為0,maxlen為其串長 */
maxlen=strlen(a[k]);
for(i=1;i
{
/* 以下完成查找最長串 */
if(strlen(a[i]) > maxlen) {
maxlen = strlen(a[i]) ;
k = i ;
}
}
*max=a[k];
}