1. 程式人生 > 其它 >2019-2010-2-《高階語言程式設計(C)》期末考試-題

2019-2010-2-《高階語言程式設計(C)》期末考試-題

技術標籤:c語言試題c語言

一.判斷題:
1-1
區域性變數如果沒有指定初值,則其初值不確定。 (2分)

T
F

1-2
實參向形參進行數值傳遞時,數值傳遞的方向是單向的,即形參變數值的改變不影響實參變數的值。(2分)

T
F

1-3
檔案的讀函式是從輸入檔案中讀取資訊,並存放在記憶體中。(2分)

T
F

1-4
C語言中,編譯預處理後,所有的符號常量名和巨集名都用相應的字串替換。(2分)

T
F

1-5
用typedef可以增加新型別。(2分)

T
F

答案:

T T T T F

二.單選題:
2-1
以下陣列定義中錯誤的是( )。(2分)

A.
int x[][3]={
0}; B. int x[2][3]={{1,2},{3,4},{5,6)}; C. int x[][3]={{1,2,3},(4,5,6)}; D. int x[2][3]={1,2,3,4,5,6};

2-2
以下不正確的賦值或賦初值的方式是( )。(2分)

A.
char str[]="string";


B.
char str[7]={'s', 't', 'r', 'i', 'n', 'g'};


C.
char str[10];str="string";


D.
char str[7]={'s', 't', 'r', 'i',
'n', 'g', ’\0};

2-3
以下列舉型別的定義中,正確的是()。(2分)

A.
enum a={one,two,three};


B.
enum a{one=9,two=-1,three};


C.
enum a={"one","two","three"};


D.
enum a{"one","two","three"};

2-4
若定義pf為指向float型別變數f的指標,下列語句中__是正確的。(2分)

A.
float f, *pf = f;
B. float f, *pf = &f; C. float *pf = &f, f; D. float f, *pf =0.0;

2-5
在單鏈表中,若p所指的結點不是最後結點,在p之後插入s所指結點,則執行( )(2分)

A.
s->next=p; p->next=s;


B.
s->next=p->next; p=s;


C.
s->next=p->next; p->next=s;


D.
p->next=s; s->next=p;

答案:

B C B B C

三.函式題:
遞迴求Fabonacci數列 (15分)
本題要求實現求Fabonacci數列項的函式。Fabonacci數列的定義如下:

f(n)=f(n−2)+f(n−1) (n≥2),其中f(0)=0,f(1)=1。

函式介面定義:

int f( int n );

裁判測試程式樣例:

#include <stdio.h>

int f( int n );

int main()
{
    int n;

    scanf("%d", &n);
    printf("%d\n", f(n));

    return 0;
}

/* 你的程式碼將被嵌在這裡 */

輸入樣例:

6

輸出樣例:

8

參考答案:

int f( int n )
{
	do
	{
		if(n==0)
		{
			return 0;
			break;
		}
	    else
			if(n==1)
			{
			 return 1;
			 break;
			}
			else
			{
			return(f(n-2)+f(n-1));
			}
	}while(n>=0);
}

四.程式設計題:
4-1 成績轉換 (15分)
本題要求編寫程式將一個百分制成績轉換為五分製成績。轉換規則:

大於等於90分為A;
小於90且大於等於80為B;
小於80且大於等於70為C;
小於70且大於等於60為D;
小於60為E。
輸入格式:
輸入在一行中給出一個整數的百分制成績。

輸出格式:
在一行中輸出對應的五分製成績。

輸入樣例:

90

輸出樣例:

A

參考程式碼:

#include <stdio.h>
#include <math.h>
main()
{
	int a;
	scanf("%d",&a);
	if(a>=90)
		printf("A");
	else
		if(a>=80)
			printf("B");
		else
				if(a>=70)
				printf("C");
				else
					if(a>=60)
				     printf("D");
					else
						printf("E");
}

4-2 輸出100~200之間素數 (15分)
求出100~200之間的全部素數,每行輸出8個數,每個數寬度為5列。

輸出格式:
每行輸出8個素數數,每個素數寬度為5列。

輸出樣例:

 101  103  107  109  113  127  131  137
  139  149  151  157  163  167  173  179
  181  191  193  197  199

參考程式碼:

#include <stdio.h>
#include <math.h>
int sushu(int a);
int sushu(int a)
{
	int i,flag=1;
	if(a==1)
		return 0;
	else
	{
	 for(i=2;i<=sqrt(a);i++)
	 {
		if(a%i==0)
		{ 
			flag=0;
			break;
		}
	 }
	 if(flag==1)
	 	return 1;
	 else
		return 0;
	}
}
main()
{
	int i,j=0;
	for(i=100;i<=200;i++)
	{
		if(sushu(i)==1)
		{
			
			printf("%5d",i);
			j++;
		if(j==8 || j==16||j==24)
			printf("\n");
		}
	}
}

4-3 交換最小值和最大值 (15分)
本題要求編寫程式,先將輸入的一系列整數中的最小值與第一個數交換,然後將最大值與最後一個數交換,最後輸出交換後的序列。

注意:題目保證最大和最小值都是唯一的。

輸入格式:
輸入在第一行中給出一個正整數N(≤10),第二行給出N個整數,數字間以空格分隔。

輸出格式:
在一行中順序輸出交換後的序列,每個整數後跟一個空格。

輸入樣例:

5
8 2 5 1 4

輸出樣例:

1 2 5 4 8 

參考程式碼:

#include <stdio.h>
#include<math.h>
int main()
{
	int a[10],b[10],n,i,j,k,t;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
		b[i]=a[i];
	}
	for(i=0;i<n-1;i++)
	{
		k=i;
		for(j=i+1;j<n;j++)
		{
			if(a[k]<a[j])
				k=j;
		}
		if(k!=i)
		{
			t=a[k];
			a[k]=a[i];
			a[i]=t;
		}
	}
		for(i=0;i<n;i++)
	{
			if(a[n-1]==b[i])
			{
				t=b[0];
				b[0]=b[i];
				b[i]=t;
			}
	}
			for(i=0;i<n;i++)
	{
			if(a[0]==b[i])
			{
				t=b[n-1];
				b[n-1]=b[i];
				b[i]=t;
			}
	}
	for(i=0;i<n;i++)
	{
		printf("%d ",b[i]);
	}
}

4-4 計算職工工資 (20分)
給定N個職員的資訊,包括姓名、基本工資、浮動工資和支出,要求編寫程式順序輸出每位職員的姓名和實發工資(實發工資=基本工資+浮動工資-支出)。

輸入格式:
輸入在一行中給出正整數N。隨後N行,每行給出一位職員的資訊,格式為“姓名 基本工資 浮動工資 支出”,中間以空格分隔。其中“姓名”為長度小於10的不包含空白字元的非空字串,其他輸入、輸出保證在單精度範圍內。

輸出格式:
按照輸入順序,每行輸出一位職員的姓名和實發工資,間隔一個空格,工資保留2位小數。

輸入樣例:

3
zhao 240 400 75
qian 360 120 50
zhou 560 150 80

輸出樣例:

zhao 565.00
qian 430.00
zhou 630.00

參考程式碼:

#include<stdio.h>
struct str
{
	char name[20];
    float ji;
	float fu;
	float zhi;
	float shi;
}t[10000];
int main()
{
	int n,i;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{	scanf("%s %f %f %f",t[i].name,&t[i].ji,&t[i].fu,&t[i].zhi);
	    t[i].shi=t[i].ji+t[i].fu-t[i].zhi;
	}
	for(i=0;i<n;i++)
	{
	printf("%s %.2f\n",t[i].name,t[i].shi);
	}
}