1. 程式人生 > >ITAT 第九屆 模擬題(江西賽區決賽) C語言程式設計 參考答案

ITAT 第九屆 模擬題(江西賽區決賽) C語言程式設計 參考答案

  單項選擇題
    1. 題幹:下列符號串中,屬於C語言合法識別符號的個數為(  )。
_1_2_3,a-b-c,float,9cd,a3b4

     分數:2分
     選項:
         A:1  
         B:2  
         C:3  
         D:4  
    2. 題幹:以下程式的輸出是(  )。
#include <stdio.h>
main()                           
{ int i,j=4;                  
  for(i=j; i<=2*j; i++)
 switch (i/j)
 {   case 0 :
     case 1: printf("*"); break;
     case 2: printf("#"); break;
 }
}

     分數:2分
     選項:
         A:*###  
         B:**##  
         C:***#  
         D:****#  
    3. 題幹:以下程式執行後的輸出結果是(  )。
#include"stdio.h"
sub(int *t,int n)
{
    int *p1,*p2;
    for(p1=t,p2=t;p1-t<n;p1++)
    if(*p1<*p2)p2=p1;
    return(*p2);
}
void main()
{
    int a[9]={9,36,19,39,26,5,6,33,15};
    printf("%d\n",sub(a,9));
}

     分數:2分
     選項:
         A:5  
         B:9  
         C:15  
         D:39  
    4. 題幹:以下關於函式的說法中正確的是(  )。

     分數:2分
     選項:
         A:定義函式時,形參型別說明可放在函式體內  
         B:return語句後邊的值不能為表示式  
         C:如果函式型別與返回值型別不一致,以函式型別為準  
         D:如果形參與實參的型別不一致,以實參為準  
    5. 題幹:以下程式的輸出為(  )。
int a=2;
int f(int *a)
{
    return(*a)++;
}
void main()
{
    int s=0;
    {int a=5;
     s+=f(&a);
    }
    s+=f(&a);
    printf("%d %d\n",a,s);
}

     分數:2分
     選項:
         A:2 7  
         B:2 10  
         C:3 7  
         D:3 11  
  

  多項選擇題
    1. 題幹:以下使用者識別符號,其中合法的有( )。

     分數:2分
     選項:
         A:return  
         B:f2_G3  
         C:A3-3  
         D:abc  
    2. 題幹:以下不符合C語言語法的實型常量有( )。

     分數:2分
     選項:
         A:1.2E0.5  
         B:3.14.159E  
         C:.5E-3  
         D:E15  
    3. 題幹:以下正確的if語句形式有( )。

     分數:2分
     選項:
         A:if (x>y && x!=y);  
         B:if (x==y) x+=y;  
         C:if (x!=y) scanf("%d",&x) else scanf("%d",&y);  
         D:if (x<y) {x++;y++;}  
    4. 題幹:以下關於陣列描述錯誤的有( )。

     分數:2分
     選項:
         A:陣列的大小是固定的,但可以有不同型別的陣列元素  
         B:陣列的大小是可變的,但所有陣列元素的型別必須相同  
         C:陣列的大小是固定的,所有陣列元素的型別必須相同  
         D:陣列的大小是可變的,可以有不同型別的陣列元素  
    5. 題幹:若以下選項中的變數已正確定義,則不正確的賦值語句有( )。

     分數:2分
     選項:
         A:x1=26.8%3;  
         B:x=3*x+x;  
         C:x3=0x12  
         D:x4=1+2=3  

  基礎操作題
    1. 題幹:編寫程式,將一個字串中的母音字母複製到另一個字串,然後輸出。
     分數:40分

void cpy(char s[],char c[])
{
	int i, j=0;
	for(i=0; s[i] != '\0'; i++)
	{
		if(s[i]=='a'||s[i]=='a'||s[i]=='e'||s[i]=='e'||s[i]=='i'||s[i]=='i'
			||s[i]=='o'||s[i]=='o'||s[i]=='u'||s[i]=='u')
		{
			c[j]=s[i];
			j++;
		}
	}
	c[j]='\0';
}
main()
{
	char str1[80], str2[80];
	printf("輸入一個字串:");
	gets(str1);
	cpy(str1, str2);
	printf("輸出一個字串:\n");
	puts(str2);
} 



    2. 題幹:輸入一個2~2000間的任意數字,要求給出其因式分解。
如:輸入96,輸出96=2*2*2*2*2*3。

     分數:40分
#include<stdio.h>
#include<math.h>
static int count=0;
int isprimernumber(int m)
{
	int i;
	for(i=2;i<=sqrt(m);i++)
		if(m%i==0)
			return 0;
		return 1;
}
void jiexi(int cur,int k)
{
	int i;
	if(isprimernumber(k))
	{
		if(count==0)
			printf("%d",k);
		else 
			printf("*%d",k);
		return; 
	}
	for(i=cur;i<k/2;i++)
	{
		if(isprimernumber(i)&&k%i==0)
		{
			if(count==0)
				printf("%d",i);
			else 
				printf("*%d",i);
			count++;
			jiexi(i,k/i);
			break;
		}
	}
}
void main()
{
	int d;
	printf("input data: ");
	scanf("%d",&d);
	jiexi(2,d);
	printf("\n");
}



  綜合操作題
    1. 題幹:輸入兩個字串,要求將這兩個字串交叉連線。如串1為"ABCD",串2為"123456",則合併後的串為"A1B2C3D456"。

     分數:50分

#include<stdio.h>
void merge(char str1[],char str2[],char res[])
{
	int i,j,count=0;
	for(i=0; str1[i] !='\0'&& str2[i] !='\0'; i++)
	{  
		res[count++] = str1[i];
		res[count++] = str2[i];
	}
	if(str1[i] =='\0')
	{
		for(j=i;str2[j] != '\0';j++)
			res[count++] = str2[j];
	}else
	{
		for(j=i;str1[j] != '\0';j++)
			res[count++] = str1[j];
	}
	res[count]='\0';
}
void main()
{
	char str1[100];
	char str2[100];
	char str3[200];
	printf("input string 1:");
	gets(str1);
	printf("input string 2:");
	gets(str2);
	
	merge(str1,str2,str3);
	printf("new: %s\n",str3);
}


《C(D0916)》的主觀題答案  1. 答案: b  2. 答案: d  3. 答案: a  4. 答案: c  5. 答案: c  1. 答案: bd  2. 答案: abd  3. 答案: abd  4. 答案: abd  5. 答案: ad