你也可以上程序咖(https://meta.chengxuka.com),打開大學(xué)幕題板塊,不但有答案,講解,還可以在線答題。
一、選擇題
1.假定 int 類型變量占用兩個(gè)字節(jié),則以下定義的數(shù)組 a 在內(nèi)存中所占字節(jié)數(shù)是( )。
int a[10]={10,2,4};
A. 20
B.10
C.6
D.3
答:A
解析:題目中,根據(jù) int a[10] ,表示定義了數(shù)組的長度是 10 ,每個(gè)變量占用兩個(gè)字節(jié),一共就是 20 個(gè)字節(jié)。
2.若有定義:int a[2][3]
;以下選項(xiàng)中對(duì)數(shù)組元素正確引用的是( )。
A. a[2][0]
B. a[2][3]
C. a[0][3]
D. a[1>2][1]
答:D
解析:
題目中定義了二維數(shù)組 a[2][3]
,那么該數(shù)組表示一個(gè) 2 行 3 列的矩陣,行的下標(biāo)(第一個(gè)下標(biāo))的取值范圍就是 0,1,列的下標(biāo)(第二個(gè)下標(biāo))的取值范圍就是 0,1,2。這里是有選項(xiàng) D,a[1>2][1]
,實(shí)際上是 a[0][1]
,下標(biāo)的數(shù)值沒有越界。
3.以下程序段的輸出結(jié)果是( )。
int aa[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}};
int i, s=0;
for(i=0; i<4; i++)
s+=aa[i][3];
printf("%d\n", s);
A.11
B.19
C.13
D.20
答:D
解析:
題目中定義的是二維數(shù)組,4X4 的矩陣。
1 2 3 4
5 6 7 8
3 9 10 2
4 2 9 6
循環(huán)中 i 的值表示行,從 0 取到 3,而列的下標(biāo)固定是 3,所以表示累加最后一列的值。4+8+2+6 = 20。
4.設(shè)有數(shù)組定義:char array[]=“China” ; 則數(shù)組 array 所占的空間為( )字節(jié)。
A.4個(gè)
B.5個(gè)
C.6個(gè)
D.7個(gè)
答:C
解析:在題目的定義方式中,系統(tǒng)會(huì)自動(dòng)在數(shù)組最后加入一個(gè)’\0’,表示字符數(shù)組的結(jié)束,因此數(shù)組的長度就是 6 個(gè)字節(jié)。
5.下述對(duì)字符數(shù)組的描述中錯(cuò)誤的是( )。
A.字符數(shù)組可以存放字符串
B.字符數(shù)組中的字符串可以整體輸入、輸出
C.可以在賦值語句中通過賦值運(yùn)算符"="對(duì)字符數(shù)組整體賦值
D.不可以用關(guān)系運(yùn)算符對(duì)字符數(shù)組中的字符串進(jìn)行比較
答:C
解析:
選項(xiàng) A 正確,在 C 語言中可以將字符串作為一個(gè)特殊的一位字符數(shù)組來處理。例如:char array[]=“China” ;
選項(xiàng) B 正確,因?yàn)樽址麛?shù)組中直接使用數(shù)組名稱時(shí)數(shù)組會(huì)退化為指針而且字符串結(jié)尾會(huì)有“\0”,指針遇到“\0”會(huì)結(jié)束輸入或者輸出。用到的代碼是: char ch[100]; gets(ch); //整體輸入puts(ch);整體輸出。(同時(shí)這里提個(gè)醒字符數(shù)組可以進(jìn)行整體的輸入輸出,但是整型輸出是不可以進(jìn)行的整體輸入輸出)
選項(xiàng) C 不正確。在賦值語句中通過賦值運(yùn)算符"="對(duì)字符數(shù)組整體賦值,則就需要用到字符數(shù)組名,而對(duì)字符數(shù)組名進(jìn)行操作時(shí)其會(huì)退化為常量指針,而進(jìn)行賦值時(shí)左值必須是可以修改的變量。所以錯(cuò)誤。
選項(xiàng) D 正確。數(shù)組名會(huì)退化為指針,所以比較的其實(shí)就是指針?biāo)赶虻膬?nèi)存地址的大小,這個(gè)跟比較字符串的大小沒有關(guān)系。
6.對(duì)于以下定義,正確的敘述為( )。
char x[]="abcdefg", char y[]={'a','b','c','a','e','f','g'};
A.數(shù)組 x 和數(shù)組 y 等價(jià)
B.數(shù)組 x 的長度大于數(shù)組 y 的長度
C.數(shù)組 x 和數(shù)組 y 的長度相同
D.數(shù)組 x 的長度小于數(shù)組 y 的長度
答:B
解析:
char x[]=“abcdefg”,數(shù)組 x 的長度是 8,7個(gè)字符,以及系統(tǒng)自動(dòng)加的 ‘\0’。
char y[]={‘a(chǎn)’,‘b’,‘c’,‘a(chǎn)’,‘e’,‘f’,‘g’},數(shù)組 y 的長度是 7。
char x[]=”abcdefg”;
//等價(jià)于
char x[]={‘a(chǎn)’,'b’,'c’,'d’,'e’,‘f’,‘g’,’\0’};
二、填空題
1.寫出以下程序段的輸出結(jié)果:輸入4,則輸出( ),輸入5,則輸出( ),輸入12,則輸出( ),輸入-5,則輸出( )。
int i, n = 5, x, a[10] = {1, 3, 5, 7, 9};
scanf("%d", &x);
for (i = n - 1; i >= 0; i--)
if (x < a[i])
a[i + 1] = a[i];
else
break;
a[i + 1] = x;
n++;
printf("%d", i + 1);
答:2 3 5 0
解析:
循環(huán)中 i 的取值為 4,3,2,1,0。當(dāng)取到 -1 時(shí)結(jié)束 for循環(huán)。循環(huán)里就是在比較 x 和 a[i] 的大小。
第一個(gè)空,當(dāng) x 的值為 4 時(shí), 下標(biāo) i 的值為 1,對(duì)應(yīng)數(shù)組中的 3,if 語句不成立,break 了循環(huán),此時(shí) i 的值為1 。最終打印 i+1的值就是 2。
第二個(gè)空,當(dāng) x 的值為 5 時(shí),下標(biāo) i 的值為 2,對(duì)應(yīng)數(shù)組中的的 5,if 語句不成立,break 了循環(huán),此時(shí) i 的值為 2。最終打印 i+1 的值就是 3。
第三個(gè)空,當(dāng) x 的值為 12 時(shí),下標(biāo) i 的值為 4,對(duì)應(yīng)數(shù)組中的 9,if 語句不成立,break 循環(huán),此時(shí) i 的值為 4。最終打印 i+1 的值就是 5。
第四個(gè)空,當(dāng) x 的值為 -5 時(shí),整個(gè)數(shù)組中的所有值都比 x 大,循環(huán)結(jié)束時(shí) i 的值為 -1 。最終打印 i+1 的值就是 0。
2.求數(shù)組中相鄰元素之和。將數(shù)組 x 中相鄰兩個(gè)元素的和依次存放到 a 數(shù)組中。請(qǐng)?zhí)羁铡?/p>
int i, a[9], x[10];
for (i = 0; 1 < 10; i++)
scanf("%d", &x[i]);
for (_______; i < 10; i++)
a[i - 1] = _______ + x[i];
答:i = 1 x[i - 1]
解析:因?yàn)橐硎緮?shù)組中相鄰的元素,可以使用 x[i-1] 和 x[i],所以在第二個(gè) for 循環(huán)中,i 的初始值為 1。
3.簡化的插入法排序。將一個(gè)給定的整數(shù) x 插到已按升序排列的整型數(shù)組 a 中,使 a 數(shù)組仍然按升序排列。假定變量都已正確定義并賦值,請(qǐng)?zhí)羁铡?/p>
for (i = 0; i < n; i++)
{
if (________)
{
break;
}
}
for (________)
{
a[j + 1] = a[j];
}
________;
n++;
答:
x < a[i]
j = n - 1; j >= i; j–
a[i] = x
解析:
這里的思路是:第一個(gè) for 循環(huán),比較 x 和 數(shù)組中的元素,直到 x 大于數(shù)組中的某一個(gè)元素。然后記錄該值的下標(biāo)。
然后第二個(gè)循環(huán)將 i 后的每一個(gè)元素向后移動(dòng)一個(gè)位置。
最后將 x 插入到 下表 i 的位置上。
4.輸入 8 ,以下程序段的輸出結(jié)果為( ),輸入 5 ,輸出結(jié)果為( )。
int i, max_sum, n, this_sum, a[] = {-1, 3, -2, 4, -6, 1, 6, -1};
scanf("%d", &n);
max_sum = this_sum = 0;
for (i = 0; i < n; i++)
{
this_sum += a[i];
if (this_sum > max_sum)
max_sum = this_sum;
else if (this_sum < 0)
this_sum = 0;
}
printf("%d\n", max_sum);
答:7 5
解析:
第一空,當(dāng) n = 8 時(shí),for 循環(huán)遍歷了數(shù)組中的所有的元素,下標(biāo)從 0 到 7 。
i = 0 時(shí),循環(huán)條件成立,進(jìn)入循環(huán),this_sum 累加完 a[0] = -1 ,值為 -1,執(zhí)行 else if 的內(nèi)容,this_sum 的值被修改為 0。
i = 1 時(shí),循環(huán)條件成立,進(jìn)入循環(huán),this_sum 累加完 a[1] = 3,值為 3,執(zhí)行 if 的內(nèi)容,max_sum 的值為 3。
i = 2 時(shí),循環(huán)條件成立,進(jìn)入循環(huán),this_sum 累加完 a[2] = -2,值為 1,不執(zhí)行 if 也不執(zhí)行 else if,然后下一次循環(huán)。
i = 3 時(shí),循環(huán)條件成立,進(jìn)入循環(huán),this_sum 累加完 a[3] = 4,值為 5,執(zhí)行 if 的內(nèi)容,max_sum 的值為 5。
i = 4 時(shí),循環(huán)條件成立,進(jìn)入循環(huán),this_sum 累加完 a[4] = -6,值為 -1,執(zhí)行 else if 的內(nèi)容,this_sum 的值被修改為 0。
i = 5 時(shí),循環(huán)條件成立,進(jìn)入循環(huán),this_sum 累加完 a[5] =1,值為 1,不執(zhí)行if 也不執(zhí)行 else if,然后下一次循環(huán)。
i = 6 時(shí),循環(huán)條件成立,進(jìn)入循環(huán),this_sum 累加完 a[6]= 6,值為 7,執(zhí)行 if 的內(nèi)容,max_sum 的值修改為 7。
i = 7 時(shí),循環(huán)條件成立,進(jìn)入循環(huán),this_sum 累加完 a[7] = -1,值為 6。不執(zhí)行if 也不執(zhí)行 else if。
i = 8 時(shí),結(jié)束循環(huán)。
第二空,當(dāng) n = 5 時(shí),for 循環(huán)遍歷了下標(biāo)從 0 到 4。數(shù)值的遍歷從 -1 到 -6 。分析過程如上。
5.輸入 1 2 3 4 5 6 ,則程序段 A 的輸出結(jié)果是( ),程序段 B 的輸出結(jié)果是( )。
程序段 A
int i, j, table[3][2];
for (i = 0; i < 3; i++)
for (j = 0; j < 2; j++)
scanf("%d", &table[i][j]);
for (i = 0; i < 3; i++)
for (j = 0; j < 2; j++)
printf("%d#", table[i][j]);
程序段 B
int i, j, table[3][2];
for (j = 0; j < 2; j++)
for (i = 0; i < 3; i++)
scanf("%d", &table[i][j]);
for (i = 0; i < 3; i++)
for (j = 0; j < 2; j++)
printf("%d#", table[i][j]);
答:
1#2#3#4#5#6#
1#4#2#5#3#6#
分析:
6.判斷二維數(shù)組是否對(duì)稱。檢查二維數(shù)組 a 是否對(duì)稱,即對(duì)所有 i ,j 都滿足a[i][j]
和a[j][i]
的值相等。假定變量都已正確定義并賦值,請(qǐng)?zhí)羁铡?/p>
found = 1;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
if (___________)
{
___________;
break;
}
}
if (___________)
break;
}
if (found != 0)
printf("該二維數(shù)組對(duì)稱\n");
else
printf("該二維數(shù)組不對(duì)稱\n");
答:
a[i][j] != a[j][i]
found = 0
found == 0
解析:
由打印輸出條件可以看的出來,found 的值為 1 時(shí),是對(duì)稱數(shù)組,found 為 0 時(shí),是非對(duì)稱數(shù)組。
所以第一個(gè)空,填入 a[i][j] != a[j][i]
,他倆的值不想等,那么就把 found 修改為 0。所以第二個(gè)空為 found = 0,執(zhí)行了 break,結(jié)束這個(gè) j 這個(gè)循環(huán)。第三個(gè)空要判斷 found 的值是否為 0 ,如果是 0 就結(jié)束整個(gè) i 的循環(huán),因?yàn)橐坏?found 被修改為 0,那么這個(gè)數(shù)組就不是對(duì)稱的了,后面的其他數(shù)值也不需要判斷了。
7.字符串復(fù)制。將字符串 str1 的內(nèi)容復(fù)制到字符串 str2 。 假定變量都已正確定義并賦值,請(qǐng)?zhí)羁铡?/p>
i = 0;
while (___________)
{
___________;
i++;
}
___________;
答:
str1[i] != ‘\0’
str2[i] = str1[i]
str2[i] = ‘\0’
解析:這里循環(huán)復(fù)制就可以了。只不過使用 char[] 數(shù)組操作字符串,最后一個(gè)字符存儲(chǔ) ‘\0’。
8.刪除字符串中的空格。將字符串 str 中的所有空格都刪除。假定變量都已正確定義并賦值,請(qǐng)?zhí)羁铡?/p>
i = j = 0;
while (__________)
{
if (__________)
{
str[j] = str[i];
__________
}
i++;
}
__________
答:
str[i] != ‘\0’
str[i] != ’ ’
j++;
str[j] = ‘\0’;
解析:
循環(huán)遍歷字符串,通過兩個(gè)下標(biāo) i 和 j 來操作。i 用于遍歷字符串中的每個(gè)字符,j 用于存儲(chǔ)非空格的字符。如果這個(gè)字符不是空格,就復(fù)制到 j 對(duì)應(yīng)的位置上。最后要記得末尾加 ‘\0’。
三、程序設(shè)計(jì)題
題目1:選擇法排序。輸入一個(gè)正整數(shù) n (1<n≤10),再輸入 n 個(gè)整數(shù),將它們從大到小排序后輸出。試編寫相應(yīng)程序。
答案代碼:
#include <stdio.h>
int max(int a[], int len);
int main()
{
// 習(xí)題(7.3.1)
/*
選擇法排序。輸入一個(gè)正整數(shù) n (1<n≤10),再輸入 n 個(gè)整數(shù),將它們從大到小排序后輸出。
*/
//數(shù)據(jù)存入
int i, n;
printf("input n number:");
scanf("%d", &n);
int a[n];
for (i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
int len = sizeof(a) / sizeof(a[0]);
//選擇排序
for (i = len - 1; i > 0; i--)
{
int maxid = max(a, i + 1);
int t = a[maxid];
a[maxid] = a[i];
a[i] = t;
}
for (i = len - 1; i >= 0; i--)
{
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
int max(int a[], int len) //找出數(shù)組中最大數(shù)
{
int i, maxid = 0;
for (i = 1; i < len; i++)
{
if (a[i] > a[maxid])
{
maxid = i;
}
}
return maxid;
}
運(yùn)行結(jié)果:
題目2:求一批整數(shù)中出現(xiàn)最多的數(shù)字。輸入一個(gè)正整數(shù) n(1<n≤1 000), 再輸入 n 個(gè)整數(shù),分析每個(gè)整數(shù)的每一位數(shù)字,求出現(xiàn)次數(shù)最多的數(shù)字。例如輸入 3 個(gè)整數(shù) 1234、2345、3456, 其中出現(xiàn)次數(shù)最多的數(shù)字是 3 和 4 ,均出現(xiàn)了 3 次。試編寫相應(yīng)程序。
答案代碼:
#include <stdio.h>
int main()
{
// 習(xí)題(7.3.2)
/*
求一批整數(shù)中出現(xiàn)最多的數(shù)字。輸入一個(gè)正整數(shù) n(1<n≤1 000), 再輸入 n 個(gè)整數(shù),分析每個(gè)整數(shù)的每一位數(shù)字,
求出現(xiàn)次數(shù)最多的數(shù)字。例如輸入 3 個(gè)整數(shù) 1234、2345、3456, 其中出現(xiàn)次數(shù)最多的數(shù)字是 3 和 4 ,均出現(xiàn)了 3 次。
*/
int n, i, max = 0, temp, time[10] = {0};
printf("input n:");
scanf("%d", &n);
printf("input %d integers:", n);
for (i = 0; i < n; i++)
{
scanf("%d", &temp);
while (temp != 0)
{
time[temp % 10]++;
temp /= 10;
}
}
for (i = 0; i < 10; i++)
{
if (max < time[i])
max = time[i];
}
printf("出現(xiàn)最多次數(shù) %d 次的數(shù)字是:", max);
for (i = 0; i < 10; i++)
if (time[i] == max)
printf("%d ", i);
printf("\n");
return 0;
}
運(yùn)行結(jié)果:
再輸入一組:
題目3:判斷上三角矩陣。輸入一個(gè)正整數(shù) n(1≤n≤6)和 n 階方陣 a 中的元素,如果 a 是上三角矩陣,輸出 “YES", 否則,輸出 “NO"。 上三角矩陣指主對(duì)角線以下的元素都為 0 的矩陣,主對(duì)角線為從矩陣的左上角至右下角的連線。試編寫相應(yīng)程序。
答案代碼:
#include <stdio.h>
int main()
{
// 習(xí)題(7.3.3)
/*
判斷上三角矩陣。輸入一個(gè)正整數(shù) n(1≤n≤6)和 n 階方陣 a 中的元素,如果 a 是上三角矩陣,輸出 “YES", 否則,輸出 “NO"。
上三角矩陣指主對(duì)角線以下的元素都為 0 的矩陣,主對(duì)角線為從矩陣的左上角至右下角的連線。
*/
int a[6][6], flag, i, j, n;
printf("input n: ");
scanf("%d", &n);
printf("input array: \n");
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
scanf("%d", &a[i][j]);
flag = 1;
for (i = 0; i < n; i++)
for (j = 0; j < i; j++)
if (a[i][j] != 0)
flag = 0;
if (flag)
printf("YES\n");
else
printf("NO\n");
return 0;
}
運(yùn)行結(jié)果:
題目4:求矩陣各行元素之和。輸入 2 個(gè)正整數(shù) m 和 n (1≤m≤6,1≤n≤6) ,然后輸入矩陣 a ( m 行 n 列 ) 中的元素,分別求出各行元素之和,并輸出。試編寫相應(yīng)程序。
答案代碼:
#include <stdio.h>
int main()
{
// 習(xí)題(7.3.4)
/*
求矩陣各行元素之和。輸入 2 個(gè)正整數(shù) m 和 n (1≤m≤6,1≤n≤6) ,然后輸入矩陣 a ( m 行 n 列 ) 中的元素,
分別求出各行元素之和,并輸出。
*/
int a[6][6], i, j, m, n, sum;
printf("input m,n : ");
scanf("%d%d", &m, &n);
printf("input array:\n");
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
scanf("%d", &a[i][j]);
for (i = 0; i < m; i++)
{
sum = 0;
for (j = 0; j < n; j++)
sum = sum + a[i][j];
printf("sum of row %d is %d\n", i, sum);
}
return 0;
}
運(yùn)行結(jié)果:
題目5:找鞍點(diǎn)。輸入 1 個(gè)正整數(shù) n ( 1≤n≤6) 和 n 階方陣 a 中的元素,假設(shè)方陣 a 最多有 1 個(gè)鞍點(diǎn),如果找到 a 的鞍點(diǎn),就輸出其下標(biāo),否則,輸出“NO"。 鞍點(diǎn)的元素值在該行上最大,在該列上最小。試編寫相應(yīng)程序。
答案代碼:
#include <stdio.h>
int main()
{
// 習(xí)題(7.3.5)
/*
找鞍點(diǎn)。輸入 1 個(gè)正整數(shù) n ( 1≤n≤6) 和 n 階方陣 a 中的元素,假設(shè)方陣 a 最多有 1 個(gè)鞍點(diǎn),
如果找到 a 的鞍點(diǎn),就輸出其下標(biāo),否則,輸出“NO"。 鞍點(diǎn)的元素值在該行上最大,在該列上最小。
*/
int flag, i, j, k, row, col, n, a[6][6];
printf("input n: ");
scanf("%d", &n);
printf("input array:\n");
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
scanf("%d", &a[i][j]);
for (i = 0; i < n; i++)
{
flag = 1;
col = 0;
for (j = 0; j < n; j++)
if (a[i][col] < a[i][j])
col = j;
for (k = 0; k < n; k++)
if (a[i][col] > a[k][col])
{
flag = 0;
break;
}
if (flag)
{
row = i;
break;
}
}
if (flag)
printf("a[%d][%d]=%d\n", row, col, a[row][col]);
else
printf("NO\n");
return 0;
}
運(yùn)行結(jié)果:
再輸入一組:
題目6:統(tǒng)計(jì)大寫輔音字母。輸入一個(gè)以回車結(jié)束的字符串(少于 80 個(gè)字符),統(tǒng)計(jì)并輸出其中大寫輔音字母的個(gè)數(shù)。大寫輔音字母是指除 ‘A’,‘E’ ,‘I’,‘O’, ‘U’ 以外的大寫字母。試編寫相應(yīng)程序。
答案代碼:
#include <stdio.h>
int main()
{
// 習(xí)題(7.3.6)
/*
統(tǒng)計(jì)大寫輔音字母。輸入一個(gè)以回車結(jié)束的字符串(少于 80 個(gè)字符),統(tǒng)計(jì)并輸出其中大寫輔音字母的個(gè)數(shù)。
大寫輔音字母是指除 'A','E' ,'T','O', 'U' 以外的大寫字母。
*/
int count, i;
char ch, str[80];
printf("input a string:");
i = 0;
while ((ch = getchar()) != '\n')
{
str[i++] = ch;
}
str[i] = '\0';
count = 0;
for (i = 0; str[i] != '\0'; i++)
if (str[i] <= 'Z' && str[i] > 'A' && str[i] != 'E' && str[i] != 'I' && str[i] != 'O' && str[i] != 'U')
count++;
printf("count = %d\n", count);
return 0;
}
運(yùn)行結(jié)果:
題目7:字符串替換。輸入一個(gè)以回車結(jié)束的字符串(少于 80 個(gè)字符),將其中的大寫字母用下面列出的對(duì)應(yīng)大寫字母替換,其余字符不變,輸出替換后的字符串。試編寫相應(yīng)程序。
原字母對(duì)應(yīng)字母
A→Z
B→Y
C→X
D→W
…
X→C
Y→B
Z→A
答案代碼:
#include <stdio.h>
int main()
{
// 習(xí)題(7.3.7)
/*
字符串替換。輸入一個(gè)以回車結(jié)束的字符串(少于 80 個(gè)字符),將其中的大寫字母用下面列出的對(duì)應(yīng)大寫字母替換,其余字符不變,輸出替換后的字符串。試編寫相應(yīng)程序。
原字母對(duì)應(yīng)字母
A→Z
B→Y
C→X
D→W
...
X→C
Y→B
Z→A
*/
int i;
char ch, str[80];
printf("input a string:");
i = 0;
while ((ch = getchar()) != '\n')
{
str[i++] = ch;
}
str[i] = '\0';
for (i = 0; str[i] != '\0'; i++)
if (str[i] <= 'Z' && str[i] >= 'A')
str[i] = 'A' + 'Z' - str[i];
printf("After replaced:");
for (i = 0; str[i] != '\0'; i++)
putchar(str[i]);
putchar('\n');
return 0;
}
運(yùn)行結(jié)果:
題目8:字符串轉(zhuǎn)換成十進(jìn)制整數(shù)。輸入一個(gè)以字符 “#” 結(jié)束的字符串,濾去所有的非十六進(jìn)制字符(不分太小寫),組成一個(gè)新的表示十六進(jìn)制數(shù)字的字存串,然后將其轉(zhuǎn)換為十進(jìn)制數(shù)后輸出。如果過濾后字符串的首字符為 “-“ 代表該數(shù)是負(fù)數(shù)。試編寫相應(yīng)程序。
答案代碼:
#include <stdio.h>
int main()
{
// 習(xí)題(7.3.2)
/*
求一批整數(shù)中出現(xiàn)最多的數(shù)字。輸入一個(gè)正整數(shù) n(1<n≤1 000), 再輸入 n 個(gè)整數(shù),分析每個(gè)整數(shù)的每一位數(shù)字,
求出現(xiàn)次數(shù)最多的數(shù)字。例如輸入 3 個(gè)整數(shù) 1234、2345、3456, 其中出現(xiàn)次數(shù)最多的數(shù)字是 3 和 4 ,均出現(xiàn)了 3 次。
*/
char str_old[81], str_new[81];
int i = 0, j, flag = 0, temp; // flag用來表示是否有負(fù)號(hào)存在,0表示負(fù)數(shù),1表示正數(shù)
long sum = 0;
printf("input s string:");
while ((str_old[i] = getchar()) != '#')
i++; //輸入一個(gè)以'#'結(jié)束的非空字符串
str_old[i] = '\0';
for (i = 0; str_old[i] != '\0'; i++)
if (str_old[i] == '-')
{
temp = i;
break;
} //找到第一個(gè)'-'出現(xiàn)的位置,用temp保存
for (i = 0; i < temp; i++)
{
if ((str_old[i] >= '0' && str_old[i] <= '9') || (str_old[i] >= 'a' && str_old[i] <= 'f') || (str_old[i] >= 'A' && str_old[i] <= 'F'))
{
flag = 1;
break;
}
} //遍歷字符串至temp,如果第一個(gè)'-'之前存在十六進(jìn)制數(shù)字,那么'-'無效,該數(shù)為正
for (i = 0, j = 0; str_old[i] != '\0'; i++)
{
if ((str_old[i] >= '0' && str_old[i] <= '9') || (str_old[i] >= 'a' && str_old[i] <= 'f') || (str_old[i] >= 'A' && str_old[i] <= 'F'))
{
str_new[j] = str_old[i];
j++;
}
} //濾去所有與十六進(jìn)制數(shù)無關(guān)的字符
str_new[j] = '\0';
for (j = 0; str_new[j] != '\0'; j++)
{
if (str_new[j] >= '0' && str_new[j] <= '9')
sum = 16 * sum + str_new[j] - '0';
else if (str_new[j] >= 'a' && str_new[j] <= 'f')
sum = 16 * sum + str_new[j] - 'a' + 10;
else if (str_new[j] >= 'A' && str_new[j] <= 'F')
sum = 16 * sum + str_new[j] - 'A' + 10;
} //十六進(jìn)制轉(zhuǎn)化為十進(jìn)制數(shù)
if (flag == 0)
sum = -sum;
printf("%ld\n", sum);
return 0;
}
運(yùn)行結(jié)果:文章來源:http://www.zghlxwxcb.cn/news/detail-417122.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-417122.html
到了這里,關(guān)于浙大版《C語言程序設(shè)計(jì)》第四版(何欽銘顏暉) 第7章 數(shù)組 課后習(xí)題答案的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!