參考資料:高教版《全國計算機等級考試二級教程——C語言程序設計》
P145 編程題
9.28
題目:
編寫函數(shù)撤嫩,對具有10個整數(shù)的數(shù)組進行如下操作:從下標為n的元素開始直到最后一個元素坊秸,依次向前移動一個位置。輸出移動后的結(jié)果俐东。
題解:
此題目的隱含條件應該是“0 < n <= 10”,否則會出錯。因為沒有進一步的解釋耀盗,所以我就認為將最后一個元素的內(nèi)容保留了氛雪。
由于這個函數(shù)沒有返回值房匆,所以定義為void類型。
定義函數(shù)fun()如下:
void fun(int a[], int n)
{
int m = 0, i = 0;
//數(shù)組下標n是從0開始的报亩,而我們需要移動第m個元素浴鸿,就需要在數(shù)組下標上減1
m = n - 1;
for (i = m; i < 9; i++)
{
//這一句報了警告C6386,說緩沖區(qū)溢出弦追,不知道是為什么岳链,歡迎各位大神指教
a[i] = a[i + 1]; //移動數(shù)組中的元素
}
}
運行測試:
完整程序如下:
#include <stdio.h>
void fun(int *, int); //函數(shù)的說明語句
int main(void)
{
int a[10] = { 0 }, i = 0, n = 0;
printf("輸入10個整數(shù):\n");
//利用for循環(huán)依次讀入數(shù)字并放入數(shù)組中
for (i = 0; i <= 9; i++)
scanf("%d", &a[i]);
//輸出輸入的數(shù)組
printf("輸入的數(shù)組為:\n");
for (i = 0; i <= 9; i++)
printf("%d ", a[i]);
printf("\n輸入n:\n");
scanf("%d", &n); //輸入n
//利用一個if-else語句來判斷n是否在范圍內(nèi)
if (n <= 1 && n > 10)
printf("輸入的數(shù)據(jù)無效。\n");
else
fun(a, n);
//輸出移動后的結(jié)果
printf("移動后的結(jié)果為:\n");
for (i = 0; i <= 9; i++)
printf("%d ", a[i]);
return 0;
}
void fun(int a[], int n)
{
int m = 0, i = 0;
//數(shù)組下標n是從0開始的劲件,而我們需要移動第m個元素掸哑,就需要在數(shù)組下標上減1
m = n - 1;
for (i = m; i < 9; i++)
a[i] = a[i + 1]; //移動數(shù)組中的元素
}
輸入輸出:
輸入10個整數(shù):
11
12
13
14
15
16
17
18
19
20
輸入的數(shù)組為:
11 12 13 14 15 16 17 18 19 20
輸入n:
6
移動后的結(jié)果為:
11 12 13 14 15 17 18 19 20 20
9.29
題目:
編寫函數(shù),把數(shù)組中所有的奇數(shù)放在另一個數(shù)組中返回零远。
題解:
定義兩個數(shù)組苗分,一個存放初始數(shù)據(jù),一個用來存放奇數(shù)遍烦。
這個函數(shù)也沒有返回值俭嘁,所以定義為void類型。
定義函數(shù)fun()如下:
void fun(int a[])
{
int b[10] = { 0 }, i = 1, j = 0;
//判斷數(shù)組a中第i個元素是否為奇數(shù)服猪。如果是供填,則將其存放到數(shù)組b中
for (i = 0; i < 9; i++)
{
if (a[i] % 2 != 0)
{
b[j] = a[i];
j++;
}
}
printf("\n輸入的數(shù)組為:\n");
for (i = 0; i <= 9; i++)
printf("%d ", a[i]);
printf("\n");
printf("\n奇數(shù)為:\n");
for (i = 0; i < j; i++)
printf("%d ", b[i]);
}
完整程序如下:
#include <stdio.h>
void fun(int*); //函數(shù)的說明語句
int main(void)
{
//定義數(shù)組a用來存放輸入的10個數(shù)
int a[10] = { 0 }, i = 0;
printf("輸入10個整數(shù):\n");
//輸入10個整數(shù)
for (i = 0; i <= 9; i++)
scanf_s("%d", &a[i]);
fun(a);
return 0;
}
void fun(int a[])
{
//定義數(shù)組b用來存放奇數(shù)
int b[10] = { 0 }, i = 1, j = 0;
//判斷數(shù)組a中第i個元素是否為奇數(shù)。如果是罢猪,則將其存放到數(shù)組b中
for (i = 0; i < 9; i++)
{
if (a[i] % 2 != 0)
{
b[j] = a[i];
j++;
}
}
printf("\n輸入的數(shù)組為:\n");
for (i = 0; i <= 9; i++)
printf("%d ", a[i]);
printf("\n");
printf("\n奇數(shù)為:\n");
for (i = 0; i < j; i++)
printf("%d ", b[i]);
}
輸入輸出:
輸入10個整數(shù):
1
2
3
4
5
6
7
8
9
10
輸入的數(shù)組為:
1 2 3 4 5 6 7 8 9 10
奇數(shù)為:
1 3 5 7 9
9.30
題目:
編寫函數(shù)近她,把數(shù)組中所有的字母按由大到小的字母順序進行排序。
題解:
(還沒學到排序法膳帕,這里先空著粘捎,等學到排序法了再補上)
9.31
題目:
輸入若干有序數(shù)放在數(shù)組中薇缅。然后輸入一個數(shù),插入到此有序數(shù)列中攒磨。插入后泳桦,數(shù)組中的數(shù)仍然有序。請對插在最前娩缰、插在最后灸撰、插在中間三種情況運行程序,以便驗證程序是否正確拼坎。
題解:
(暫時還不會浮毯,先空著)
9.32
題目:
編寫函數(shù),把任意十進制正整數(shù)轉(zhuǎn)換成二進制數(shù)泰鸡。提示:把十進制數(shù)不斷被2除的余數(shù)放在一個一維數(shù)組中债蓝,直到商數(shù)為0。在主函數(shù)中進行輸出盛龄,要求不得按逆序輸出饰迹。
題解:
寫了一大堆沒一個正確的……從這里扒了一個過來:https://blog.csdn.net/wjkhello/article/details/78149441
#include<stdio.h>
int main(void)
{
int a,b,k,i;
int remainder[30]; //定義了一個remainder數(shù)組,用來收集短除法除得的余數(shù)讯嫂,棧倒序輸出蹦锋。
a=1000;
k=0;
while(a!=0)
{
b=a/2;
k++;
remainder[k]=a-b*2;
a=a/2;
}
for (i=k;i>=1;i--)
{
printf("%d",remainder[i]);
}
return 0;
}
我發(fā)現(xiàn)不啃算法不行了,這幾天啃啃算法吧欧芽,要不然二級考試可能就涼涼了……
9.36
題目:
編寫程序打印出以下形式的乘法九九表莉掂。
* * A MULTIPLICATION TABLE * *
(1) (2) (3) (4) (5) (6) (7) (8) (9)
--------------------------------------------------------------------------
(1) 1 2 3 4 5 6 7 8 9
(2) 2 4 6 8 10 12 14 16 18
(3) 3 6 9 12 15 18 21 24 27
(4) 4 8 12 16 20 24 28 32 36
(5) 5 10 15 20 25 30 35 40 45
(6) 6 12 18 24 30 36 42 48 54
(7) 7 14 21 28 35 42 49 56 63
(8) 8 16 24 32 40 48 56 64 72
(9) 9 18 27 36 45 54 63 72 81
--------------------------------------------------------------------------
題解:
總算看到一個比較簡單的。
程序如下:
#include <stdio.h>
int main(void)
{
int a[9] = { 0 },j = 0, i = 0, k = 1; //定義一個數(shù)組和計數(shù)變量
for (i = 0, j = 1; i <= 8; i++, j++)
a[i] = j; //將數(shù)字1-9存入該數(shù)組
//打印表頭
printf("\t* * A MULTIPLICATION TABLE * *\n");
putchar('\t');
for (i = 1; i <= 9; i++)
printf("(%d)\t", i);
putchar('\n');
printf("--------------------------------------------------------------------------\n");
//利用嵌套的for循環(huán)來打印乘法表
for (k = 1; k <= 9; k++)
{
//打印每一列前的數(shù)字
printf("(%d)\t", k);
//用k分別乘以a數(shù)組中的每個元素的方式打印乘法表中的第k行
for (i = 0; i <= 8; i++)
{
printf("%d\t", a[i] * k);
}
putchar('\n');
}
printf("--------------------------------------------------------------------------\n");
return 0;
}
輸出:
* * A MULTIPLICATION TABLE * *
(1) (2) (3) (4) (5) (6) (7) (8) (9)
--------------------------------------------------------------------------
(1) 1 2 3 4 5 6 7 8 9
(2) 2 4 6 8 10 12 14 16 18
(3) 3 6 9 12 15 18 21 24 27
(4) 4 8 12 16 20 24 28 32 36
(5) 5 10 15 20 25 30 35 40 45
(6) 6 12 18 24 30 36 42 48 54
(7) 7 14 21 28 35 42 49 56 63
(8) 8 16 24 32 40 48 56 64 72
(9) 9 18 27 36 45 54 63 72 81
--------------------------------------------------------------------------
其他的題目暫時都不會了千扔,本菜鳥算法不行也沒學過矩陣憎妙,等以后啃完算法慢慢補吧……