1. 程式人生 > >來自一個拖更多日的程式設計懶漢的考試題目

來自一個拖更多日的程式設計懶漢的考試題目

	今天進行了研A的複選,上次因為智商被壓制,所以沒進去。這次考試又給了我機會(其實是偷懶不用去找題的機會。)
	上題

第一題是求一個數的10次方

#include<stdio.h>
int main()
{
    int n;
    int sum;
    scanf("%d",&n);
    for(int i=0;i<10;i++)
    {
     
        sum=n*n*n*n*n*n*n*n*n*n;
    }
    printf("%d",sum);   
    return 0;
}

其實剛開始還有點蒙,稀裡糊塗的做了這個題,用上面的方法做的。但是回來後仔細想想覺得自己智障了,明明都用了迴圈了,卻還是在迴圈裡硬生生的乘了十個n。然後我默默的改成了下面的碼。

#include<stdio.h>
int main()
{
    int n;
    int sum=1;
    scanf("%d",&n);
    for(int i=0;i<10;i++)
    {
		sum=sum*n;
    }
    printf("%d",sum);   
    return 0;
}

頓時覺得看著比上面的好多了,起碼高端了一點。

第二題是求一個分段函式

#include<stdio.h>
int main()
{
	int x;
	int y;
	scanf("%d",&x);
	if(x>3)
	{
		y=x*x+1;	
	}
	if(x>-3&&x<3)
	{
		y=1;
	}
	if(x<-3)
	{
		y=x*x-1;
	}
	printf("%d",y);
	return 0;
}

```很明顯,在經歷了第一題的智障階段後我的智商明顯有所回升。(行!我承認這是一道給智障題。)
第三題

#include<stdio.h> int main() { int n; scanf("%d",&n); for(int i=0;i<n;i++) printf("*#"); return 0; }

ok,這也是一個智障題。
第四題 

#include<stdio.h> int main() { int n; scanf("%d",&n); for(int i=0;i<n;i++) { for(int j=0;j<i;j++) { printf("#"); } printf("*"); printf("\n"); } return 0; }

這是列印一個由星號和#列印的三角形,要求每行最後一個是星號第一行只有一個星號沒有#然後每行#號遞增,先用迴圈打出需求的行數進入第一個迴圈然後先利用另一個迴圈輸入#然後再輸入一個星號,再進行換行然後持續執行,知道完成足夠的行數

*
#*
##*
###*
####*
類似於這樣的圖形。
第五題是輸出五個數中可以整除3的數的和

#include<stdio.h>

int main() { int sum=0; for(int i=0;i<5;i++) {

	int n;
    scanf("%d",&n);
    if(n%3==0)
    {
    	sum+=n;
	}
}
printf("%d",sum);
return 0;

}

智障題,走開走開。
第六題是求n個隨機整數的絕對值的和而且是不能用mathdio.h標頭檔案那種

#include<stdio.h> int abs(int); int main() { int sum=0; int n; scanf("%d",&n); for(int i=0;i<n;i++) { int m; scanf("%d",&m); sum=sum+abs(m); } printf("%d",sum);

return 0;

}

int abs(int x)
{	
	int y;
	if(x<0)
	y=-x;
	if(x=0||x>0)
	y=x;
	return y;
}
這裡就是運用了常規的累加演算法,然後需要自己定義一個abs函式,然後把他在標頭檔案之後再int main函式之前進行一個 int abs(int);這樣的宣告。而且在後續的簡歷函式中在int abs(int x)要打花括號然後在最後的迴歸值時要回歸到定義的值。要注意格式。

第七題是求1-1/2!+1/3!-1/4!+.......-1/n!(重點是保留三位小數)我在這解道題的過程中,把它拆分成了幾個部分,首先解決的是累加減的問題,就是確定奇數項加偶數項減,通過把n%2==0就可以判斷奇偶數項,然後再解決n!的問題,通過上一題我又想到了自定義函式的方式,定義一個階乘的函式m來求解。

#include <stdio.h> int m(int x); int main() { int n; float sum=0; scanf("%d",&n); for(int i=0;i<n;i++) { if(i%2==0) sum=sum+1.0/m(i+1); else sum=sum-1.0/m(i+1);

}
printf("%f",sum);
return 0;

} int m(int x) { int y; y=x; int a=1; for(int j=0;j<y;j++) { a=a*(j+1); } return a; }

然後這裡的x和y我一開始還不知道該怎樣弄,究竟該設成什麼樣的變數,但是隻能是司馬當成活馬醫了,先用x和y試著不行的話一會再改。然後程式通過了。題中給的輸入案例輸入了5,我得到了0.633333。沒錯就是五個3,但是題目中只要0.633,我不管怎麼試,都是六位小數,始終不能再程式上通過,最後只能絕望把這題扔下了。最後交卷的時候問學長為啥不過,學長說你用三為小數表示不就行了嘛,不會嗎。然後我成功的想起了%f的結果出六位小數而%.3f就可以出三位小數了。最後改進之後得到了新的程式碼成功打出了0.633,這就很難受。明明對了99%可偏偏還是差在了這1%上了。

第八題是要求列印一個矩陣出來
100000
010000
001000
000100
000010
000001類似於這樣子的。
對於這道題我的想法就是先建立迴圈迴圈行數,然後再用迴圈分別在大迴圈裡執行出0和1然後分三部分執行 1是一部分 1前面的0是一部分 1後面的0又是一部分,分開來打印出來這個矩陣。

int main() { int n; scanf("%d",&n); for(int i=0;i<n;i++) {

{
	for(int j=0;j<=i-1;j++)
	printf("0");
}
printf("1");
for(int k=0;k<n-i-1;k++)

printf("0");
printf("\n");
}

return 0;

}

就是這樣的一個簡易矩陣圖形。
第九題是輸入一個三位整數來求他的各個位上的數的和,這個題讓我想起了之前翁大叔的一次作業,輸入一個三位數然後輸出他的倒敘,所以我回憶了一下得出了下面的程式碼

#include<stdio.h> int abs(int); int main() { int n; scanf("%d",&n); int a; a=n/100; int b; b=n%100; int c; c=b/10; int d; d=b%10; int sum; sum=a+c+d; printf("%d",sum); return 0; }

第十題就是讓輸入一個數然後後續答案按照|1|+|-2|+|3|+|-4|這樣的形式輸出,然後可以看出偶數項的絕對值符號裡面會帶有減號而奇數項沒有。所以還是要進行對奇偶項的判斷。並且還要考慮到最後一項的後面不能夠出現+號的情況,所以我得出了這樣的程式碼。

int n,m;
scanf("%d",&n);
for(int i=0;i<n;i++)
{  
   
	if(i%2==0)
	{
	if(i==n-1)
	printf("|%d|",i);
	else
	printf("|%d|+",i);
	}
	if(i%2==1)
	{
	if(i==n-1)
	printf("|%d|",-(i));
	else
	printf("|%d|+",-(i));
    }
}
return 0;

}

但是我的程式碼輸出來的第一項是|0|,所以我又一點點地除錯,改進最後試出了當吧後續的i改成i+1的時候可以實現題目要求。然後得出了正確程式碼。

#include <stdio.h> int main() { int n,m; scanf("%d",&n); for(int i=0;i<n;i++) {

	if(i%2==0)
	{
	if(i==n-1)
	printf("|%d|",i+1);
	else
	printf("|%d|+",i+1);
	}
	if(i%2==1)
	{
	if(i==n-1)
	printf("|%d|",-(i+1));
	else
	printf("|%d|+",-(i+1));
    }
}
return 0;

}

其實最後還想晒晒之前自己打出來的那顆心,但是想想還是算了,那種完全printf出來的東西,我還是不丟人了。。。。