2025年模擬題
題型1:數組元素排序
- 1.輸入5個隨機整數存入數組,將元素從小到大排序并輸出,每行輸出1個數字
#include <stdio.h>
int main(){
int a[5] = {0};
int i = 0, j = 0, temp = 0;
printf("請輸入數組元素:\n");
for(i = 0;i < 5;i++){
scanf("%d", &a[i]);
}
for(i = 0; i < 4; i++){
for(j = i + 1; j < 5; j++){
if(a[i] > a[j]){
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
for(i = 0;i < 5;i++){
printf("%d\n", a[i]);
}
return 0;
}
#include <stdio.h>
int main(){
int a[5] = {0};
int i = 0, j = 0, temp = 0;
printf("請輸入數組元素:\n");
for(i = 0; i < 5; i++){
scanf("%d", &a[i]);
}
for(i = 0; i < 4; i++){
for(j = 0; j < 5 - i - 1; j++){
if(a[j] > a[j+1]){
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
for(i = 0;i < 5;i++){
printf("%d\n", a[i]);
}
return 0;
}
#include <stdio.h>
int main(){
int a[5] = {0};
int i = 0, j = 0, temp = 0, flag = 0;
printf("請輸入數組元素:\n");
for(i = 0;i < 5;i++){
scanf("%d", &a[i]);
}
for(i = 0;i < 4;i++){
flag = 0;
for(j = 0;j < 5 - i - 1; j++){
if(a[j] > a[j+1]){
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
flag = 1;
}
}
if(!flag){
break;
}
}
for(i = 0;i < 5;i++){
printf("%d\n", a[i]);
}
return 0;
}
題型2:進制轉換
#include <stdio.h> // 方法1
int main(){
int num = 0, a = 0;
int t = 1, sum = 0;
printf("請輸入一個合法的八進制數:\n");
scanf("%d", &num);
while(num){
a = num % 10;
sum = sum + a * t;
num /= 10;
t *= 8;
}
printf("sum=%d\n", sum);
return 0;
}
#include <stdio.h> // 方法2
#include <math.h>
int main(){
int num = 0, a = 0;
int t = 0, sum = 0;
printf("請輸入一個合法的八進制數:\n");
scanf("%d", &num);
while(num){
a = num % 10;
sum = sum + a * pow(8, t);
num /= 10;
t++;
}
printf("sum=%d", sum);
return 0;
}
題型3:處理字符串
- 3.輸入一個字符串,長度不超過100個字符,再輸入一個整數n,從字符串右邊截取n個字符組成新的字符串并輸出。例如輸入 ABCDEF 3,則輸出DEF
#include <stdio.h>
#define MAX 100
int main(){
char s[MAX] = {0}, t[MAX] = {0};
int num = 0, length = 0, i = 0, j = 0;
printf("請輸入一個字符串:");
gets(s);
printf("請輸入一個整數:");
scanf("%d", &num);
while(s[i] != '\0'){
i++;
}
length = i;
i = length - num;
while(s[i] != '\0'){
t[j] = s[i];
i++;
j++;
}
t[j] = '\0';
puts(t);
return 0;
}
2024年考題回憶版
題型1:簡單的多位數拆分 題源:課本例2-20
- 1.輸入一個三位數的整數,輸出百位數、十位數和個位數
#include <stdio.h>
int main(){
int num = 0;
int hundred = 0, ten = 0, unit = 0;
scanf("%d", &num);
hundred = num / 100; // 求百位數
ten = num / 10 % 10; // 求十位數
unit = num % 10; // 求個位數
printf("%d %d %d", hundred, ten, unit);
return 0;
}
- 2.輸入一個整數,求出個位數和十位數,并輸出十位和個位的乘積
#include <stdio.h>
int main(){
int num = 0;
int ten = 0, unit = 0, multi = 0;
scanf("%d", &num);
ten = num / 10 % 10;
unit = num % 10;
multi = ten * unit;
printf("%d %d %d", ten, unit, multi);
return 0;
}
題型2:多位數拆分+循環 題源:課本例2-18 例4-3
#include <stdio.h>
int main(){
int num = 0, unit = 0;
for(num = 8; num <= 100; num++){
unit = num % 10;
if (num % 4 == 0 && unit == 8){
printf("%d ",num);
}
}
return 0;
}
- 2.打印由0-9組成且每一位都不重復的三位數的個數
#include <stdio.h>
int main(){
int num = 0;
int unit = 0, ten = 0, hundred = 0;
int count = 0;
for(num = 100; num <= 999; num++){
unit = num % 10;
ten = num / 10 % 10;
hundred = num / 100;
if(unit != ten && unit != hundred && ten != hundred){
printf("%d ", num);
count ++;
}
}
printf("\ncount = %d\n", count);
return 0;
}
#include <stdio.h>
int main(){
int i = 0, j = 0, k = 0;
int count = 0;
for(i = 1; i <= 9; i++){
for(j = 0; j <= 9; j++){
for(k = 0; k <= 9; k++){
if(i != j && i != k && j != k){
printf("%d ", i * 100 + j * 10 + k);
count++;
}
}
}
}
printf("\ncount = %d\n", count);
return 0;
}
- 3.輸出10-50中個位和十位的乘積大于個位和十位之和的數
#include <stdio.h>
int main(){
int num = 0, unit = 0, ten = 0;
for(num = 10; num <= 50; num++){
unit = num % 10;
ten = num / 10 % 10;
if(unit * ten > unit + ten){
printf("%d ", num);
}
}
return 0;
}
- 4.打印輸出10-1000中各位數之和等于10的整數,如19、190
#include <stdio.h>
int main(){
int num = 0, b = 0;
int t = 0, sum = 0;
for(num = 10; num <= 1000; num++){
t = num;
sum = 0;
while(t){
b = t % 10;
sum = sum + b;
t = t / 10;
}
if(10 == sum){
printf("%d ", num);
}
}
return 0;
}
- 5.打印輸出100-999中各位數之和等于10的整數的個數
#include <stdio.h>
int main() {
int num = 0, count = 0;;
int unit = 0, ten = 0, hundred = 0;
for(num = 100; num <= 999; num++){
unit = num % 10;
ten = num / 10 % 10;
hundred = num / 100;
if(unit + ten + hundred == 10){
count++;
}
}
printf("各位數之和等于10的有%d個", count);
return 0;
}
#include <stdio.h>
int main(){
int num = 0, hundred = 0;
for(num = 100; num <= 999; num++){
hundred = num / 100;
if(7 == hundred){
printf("%d ", num);
}
}
return 0;
}
- 7.打印1-100中能被3和7同時整除的數,并計算個數
#include <stdio.h>
int main(){
int i = 0, count = 0;
for(i = 1; i <= 100; i++) {
//if(i%3 == 0&&i%7 == 0) {
// printf("%-4d", i);
// count++;
//}
if(i % 21 == 0) {
printf("%-4d", i);
count++;
}
}
printf("共%d個", count);
return 0;
}
題型3:給定數值進行組合+循環
- 1.一個由x、y、z三個數字組成的數xyz和zyx相加得1555,求x、y、z
// 在滿足條件的數中,x和z全不為0,因此x和y從1開始循環即可
#include <stdio.h>
int main(){
int x = 0, y = 0, z = 0;
int i = 0, j = 0;
for(x = 1; x <= 9; x++){
for(y = 0; y <= 9; y++){
for(z = 1;z <= 9; z++){
i = x * 100 + y * 10 + z;
j = z * 100 + y * 10 + x;
if(i + j == 1555){
printf("%d %d %d\n", x, y, z);
}
}
}
}
return 0;
}
- 2.打印10-99之間個位和十位相加不小于13的數
#include <stdio.h>
int main(){
int i = 0, unit = 0, ten = 0;
for(i = 10; i <= 99; i++) {
unit = i % 10;
ten = i / 10;
// ten = i / 10 % 10;
if(unit + ten >= 13) {
printf("%-4d", i);
}
}
return 0;
}
// 方法1:遍歷1-99之間的所有數
#include <stdio.h>
int main(){
int i = 0;
for(i = 1; i <= 99; i++) {
if(i % 3 == 0 && i % 2 == 1) {
printf("%-4d", i);
}
}
return 0;
}
// 方法2:遍歷1-99之間的所有奇數
#include <stdio.h>
int main(){
int i = 0;
for(i = 1; i <= 99; i+=2) {
if(i % 3 == 0) {
printf("%-4d", i);
}
}
return 0;
}
題型4:數組+奇偶數/最值
#include <stdio.h>
#define MAX 1000
void print_odd(char s[]){
int i = 0;
while(s[i] != '\0'){
if(i % 2){
putchar(s[i]);
}
i++;
}
}
int main(){
char s1[MAX] = {0}, s2[MAX] = {0};
printf("請輸入s1和s2的值:");
gets(s1);
gets(s2);
print_odd(s1);
print_odd(s2);
return 0;
}
- 2.給定一個數組s存儲字符串,從中獲取ASCII碼為奇數的字符并輸出
#include <stdio.h>
#define MAX 1000
int main(){
char s[MAX] = {0};
int i = 0;
printf("請輸入字符串的值:");
gets(s);
while(s[i] != '\0'){
if(s[i] % 2){
putchar(s[i]);
}
i++;
}
return 0;
}
#include <stdio.h>
#define LEN 10
int main(){
int i = 0, j = 0, index = 0;
int a[LEN] = {12, 63, 51, 7, 24, 10, 78, 67, 51, 90}, b[LEN] = {0};
for(i = 0; i < LEN; i++){
if(a[i] %2 == 0){
b[j] = a[i];
j++;
}
}
printf("數組b中的值為: ");
for(index = 0; index < j; index++){
printf("%d ", b[index]);
}
return 0;
}
- 4.現有一3行4列的二維數組,將數組的最大值和最小值交換位置后輸出新的數組
#include <stdio.h>
#define ROW 3
#define COL 4
int main(int argc, const char * argv[]) {
// insert code here...
int a[ROW][COL] = {{4, 6, 12, 7}, {1, 5, 3, 9}, {11, 8, 0, -2}};
int max = 0, min = 0, i = 0, j = 0;
int max_i = 0, max_j = 0, min_i = 0, min_j = 0, temp = 0;
max = min = a[0][0];
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j++) {
if (a[i][j] > max) {
max = a[i][j];
max_i = i;
max_j = j;
}
if (a[i][j] < min){
min = a[i][j];
min_i = i;
min_j = j;
}
}
}
printf("原數組最大值為%d (%d, %d), 最小值為%d (%d, %d)\n", max, max_i, max_j, min, min_i, min_j);
temp = a[max_i][max_j];
a[max_i][max_j] = a[min_i][min_j];
a[min_i][min_j] = temp;
printf("交換后新數組的值為:\n");
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j++) {
printf("%4d", a[i][j]);
}
printf("\n");
}
return 0;
}
![]()
- 5.現有一4行5列的二維數組,請將每一列上的最大數和最小數互換,然后輸出新數組
#include <stdio.h>
#define ROW 4
#define COL 5
void print_arr(int s[][5], int m) {
int i = 0, j = 0;
for (i = 0; i < m; i++) {
for (j = 0; j < COL; j++) {
printf("%4d", s[i][j]);
}
printf("\n");
}
}
int main(int argc, const char * argv[]) {
// insert code here...
int a[ROW][COL] = {{4, 7, 2, 10, 11}, {6, 3, 25, 12, 8}, {3, 5, 9, 15, 0}, {14, 13, 17, 1, 27}};
int i = 0, j = 0, max = 0, min = 0;
int max_i = 0, max_j = 0, min_i = 0, min_j = 0, temp = 0;
printf("交換之前的數組為:\n");
print_arr(a, ROW);
for (j = 0; j < COL; j++) {
max = min = a[0][j];
max_i = min_i = 0;
max_j = min_j = j;
for (i = 1; i < ROW; i++) {
if (a[i][j] > max) {
max = a[i][j];
max_i = i;
max_j = j;
}
if (a[i][j] < min) {
min = a[i][j];
min_i = i;
min_j = j;
}
}
temp = a[max_i][max_j];
a[max_i][max_j] = a[min_i][min_j];
a[min_i][min_j] = temp;
}
printf("\n交換之后的數組為:\n");
print_arr(a, ROW);
return 0;
}
![]()
- 6.已知數組a[10]中各元素的值,計算其中正數的平均值
#include <stdio.h>
int main(){
int a[10] = {-6, 33, 5, 21, 43, -39, -1, 0, 21, -7};
int i = 0, count = 0;
float avg = 0;
for(i = 0; i < 10; i++) {
if(a[i] > 0) {
avg += a[i];
count++;
}
}
avg /= count;
printf("數組中正數的平均值為:%.4f\n", avg);
return 0;
}
題型5:簡單的數學運算+循環
#include <stdio.h>
#include <math.h>
long func(int);
int main(){
long ret = 0;
int i = 0, n = 0;
printf("請輸入整數n的值:");
scanf("%d", &n);
for(i = 1; i <= n; i++){
ret = func(i);
printf("%d的階乘值為: %ld\n", i, ret); // long類型數據輸入和輸出都使用%ld格式符
}
return 0;
}
long func(int m){
long result = 1;
int i = 0;
for(i = 1; i <= m; i++){
result *= i;
}
return result;
}
- 2.輸入1-9其中的某個整數n,計算n + nn + nnn + nnnn。如果輸入的n不在1-9之間(含1-9),就提示"輸入的數據范圍不合法,請重新輸入!",直到輸入滿足的n,計算出結果后退出程序。
#include <stdio.h>
int main(){
int num = 0, t = 0;
int sum = 0, i = 0;
printf("請輸入num的值(1-9):\n");
scanf("%d", &num);
while(1){
if(num < 1 || num > 9){
printf("輸入的數據范圍不合法,請重新輸入!\n");
scanf("%d", &num);
continue;
}
t = num;
for(i = 1; i <= 4; i++){
sum = sum + t;
t = t * 10 + num;
}
printf("sum=%d", sum);
break;
}
return 0;
}
- 3.小明參加了賣書活動,每本書18元,第一天賣3本,以后每一天賣書的數量都是前一天的2倍,哪一天賣書的收入會超過1000元
#include <stdio.h>
int main(){
int day=1, num=3;
int price=18, money;
money = price*num;
while(money <= 1000){
num *= 2;// 6 12
money = price * num;//108 216
day++;//2 3
}
printf("day=%d", day);
return 0;
}
- 4.輸入整數n,計算12 + 22 + 32 + ... + n2的結果
#include <stdio.h>
int main(){
int i, n, sum = 0.0;
printf("請輸入n的值:\n");
scanf("%d", &n);
for(i=1;i<=n;i++){
sum = sum + i * i;
}
printf("sum=%d", sum);
return 0;
}
- 5.用戶一直輸入一個整數,計算它們的和,直到輸入的數不大于0就結束
#include <stdio.h>
int main(){
int num = 0, sum=0;
printf("請輸入一個整數:");
scanf("%d", &num);
while(num > 0){
sum += num;
printf("請繼續輸入一個整數, 直到不大于0停止:");
scanf("%d", &num);
}
printf("sum=%d\n", sum);
return 0;
}
- 6.小明的身高為1.5米,一張紙的厚度為1毫米,請問這張紙對折多少次后的厚度會超過小明的高度?
#include <stdio.h>
int main(int argc, const char * argv[]) {
// insert code here...
int h1 = 1500, h2 = 1, count = 0;
while (h2 <= h1) {
h2 *= 2; // 2 4
count++; // 1 2
}
printf("總共折了%d次\n", count);
return 0;
}
題型6:簡單的數學運算+循環+數組
#include <stdio.h>
#define ROWS 3
#define COLS 4
int main(){
int a[ROWS][COLS] = {0};
int i = 0, j = 0, max = 0;
for(i = 0; i < ROWS; i++){
for(j = 0; j < COLS; j++){
scanf("%d", &a[i][j]);
}
}
max = a[0][0];
for(i = 0; i < ROWS; i++){
for(j = 0; j < COLS; j++){
if(a[i][j] > max){
max = a[i][j];
}
}
}
printf("max=%d\n", max);
return 0;
}
#include <stdio.h>
int main(){
float a[10] = {0}, sum = 0, avg = 0;
int i = 0;
for(i = 0; i < 10; i++){
// scanf("%f", a+i);
scanf("%f", &a[i]);
sum += a[i];
}
avg = sum/10;
printf("avg=%.4f\n", avg);
return 0;
}
- 3.現有三行四列的二維數組,找到最小的數并輸出行列號
#include <stdio.h>
#define ROWS 3
#define COLS 4
int main(){
int a[ROWS][COLS] = {0}, i = 0, j = 0;
int min = 0, row = 0, col = 0;
for(i = 0; i < ROWS; i++){
for(j = 0; j < COLS; j++){
scanf("%d", &a[i][j]);
}
}
min = a[0][0];
for(i = 0; i < ROWS; i++){
for(j = 0; j < COLS; j++){
if(a[i][j] < min){
min = a[i][j];
row = i;
col = j;
}
}
}
printf("min=%d,row=%d,col=%d\n", min, row, col);
return 0;
}
- 4.輸入三行四列二維數組的值,將每行的平均值放在一個一維數組中并輸出
#include <stdio.h>
int main(){
int a[3][4] = {0}, i = 0, j = 0;
float avg[3] = {0};
for(i = 0; i < 3; i++){
for(j = 0; j < 4; j++){
scanf("%d", &a[i][j]);
avg[i] += a[i][j];
}
avg[i] /= 4;
printf("第%d行的平均值為%f", i+1, avg[i]);
}
return 0;
}
- 5.現有5名員工,每名員工的信息包含員工號、時薪和工作時間計算每位員工的總工資并輸出
#include <stdio.h>
int main(){
int employee[5][3] = {{101, 80, 8}, {102, 60, 12}, {103, 62, 10}, {104, 45, 16}, {105, 120, 8}};
int i = 0, salary = 0;
for(i = 0; i < 5; i++){
salary = employee[i][1] * employee[i][2];
printf("工號為%d的員工總工資為%d\n", employee[i][0], salary);
}
return 0;
}
題型7:選擇語句的簡單應用
#include <stdio.h>
int main(){
int a = 0, b = 0, temp = 0;
scanf("%d %d", &a, &b);
if(a > b){
temp = a;
a = b;
b = temp;
}
printf("%d %d\n", a, b);
return 0;
}
- 2.輸入三條邊,判斷能否構成三角形。如果是三角形,判斷能否構成直角三角形
#include <stdio.h>
int main(){
int a = 0, b = 0, c = 0;
printf("請輸入三條邊的值:\n");
scanf("%d %d %d", &a, &b, &c);
if(a + b > c && a + c > b && b + c > a){
printf("能構成三角形\n");
if(a * a + b * b == c * c || b * b + c * c == a * a || a * a + c * c == b * b){
printf("是直角三角形\n");
}
}
else{
printf("不是三角形\n");
}
return 0;
}
#include <stdio.h>
int main(){
int a = 0, b = 0, c = 0, temp = 0;
scanf("%d %d %d", &a, &b, &c);
if(a < b){
temp = a;
a = b;
b = temp;
}
if(a < c){
temp = a;
a = c;
c = temp;
}
printf("最大的數是%d\n", a);
return 0;
}
#include <stdio.h>
int main(){
int a = 0, b = 0, c = 0, max = 0;
scanf("%d %d %d", &a, &b, &c);
max = (max = a < b? b : a) < c? c : max;
printf("最大的數是%d\n", max);
return 0;
}
題型8:選擇結構應用題
- 1.小明參與圖書促銷活動,每本書價格40元。周一到周五打七折,周六打八折,周日打九折。輸入當周第幾天和圖書數,輸出價格
#include <stdio.h>
int main(){
int price = 40, day = 0, num = 0;
float money = 0;
scanf("%d %d", &day, &num);
switch(day){
case 1:
case 2:
case 3:
case 4:
case 5:
money = price * 0.7 * num;
break;
case 6:
money = price * 0.8 * num;
break;
case 7:
money = price * 0.9 * num;
break;
}
printf("money=%f\n", money);
return 0;
}
- 2.輸入1打印開,輸入2打印關,輸入其他數字打印默認
#include <stdio.h>
int main(){
char sw = getchar();
switch(sw){
case '1':
printf("開");
break;
case '2':
printf("關");
break;
default:
printf("默認");
break;
}
return 0;
}
- 3.輸入近視度數,判斷是不是近視。度數低于100是不近視,不低于100但低于300就是輕度近視,度數不低于300但低于500就是中度近視,度數高于500就是高度近視
#include <stdio.h>
int main(){
int num = 0;
printf("請輸入近視度數:\n");
scanf("%d", &num);
if(num < 100){
printf("不近視\n");
}
else if(num < 300){
printf("輕度近視\n");
}
else if(num < 500){
printf("中度近視\n");
}
else{
printf("重度近視\n");
}
return 0;
}
- 4.輸入時間等于9是打開窗簾,等于8是關閉窗簾,其他輸出報錯
#include <stdio.h>
int main(){
int time = 0;
scanf("%d", &time);
switch(time){
case 9:
printf("打開窗簾");
break;
case 8:
printf("關閉窗簾");
break;
default:
printf("報錯");
break;
}
return 0;
}
題型9:二維數組應用題+循環
- 1.有三家商店,以及每個商店四個月的銷量,計算出月銷量的平均值,并確定哪一家商店是銷冠
#include <stdio.h>
int main(){
float a[3][4] = {0};
int i = 0, j = 0, max = 0;
float sum_store[3] = {0}, avg_month[4] = {0}, max_store = 0;
for(i = 0; i < 3; i++){
for(j = 0; j < 4; j++){
scanf("%f", &a[i][j]);
}
}
for(i = 0; i < 4; i++){
for(j = 0; j < 3; j++){
avg_month[i] += a[j][i];
}
avg_month[i] /= 3;
printf("%d月的平均銷量為%f\n", i + 1, avg_month[i]);
}
max_store = sum_store[0];
for(i = 0; i < 3; i++){
for(j = 0; j < 4; j++){
sum_store[i] += a[i][j];
}
if(sum_store[i] > max_store){
max_store = sum_store[i];
max = i;
}
}
printf("銷量冠軍是%d號公司,銷售額為%f\n", max + 1, max_store);
return 0;
}
- 2.定義二維數組,其中包含三名同學五門課的成績,輸出每門課的最大成績
#include <stdio.h>
int main(){
float a[3][5] = {0}, max = 0;
int i = 0, j = 0;
for(i = 0; i < 3; i++){
for(j = 0; j < 5; j++){
scanf("%f", &a[i][j]);
}
}
for(i = 0; i < 5; i++){
max = a[0][i];
for(j = 1; j < 3; j++){
if(a[j][i] > max){
max = a[j][i];
}
}
printf("第%d門課的最大成績為%f\n", i + 1, max);
}
return 0;
}
- 3.現有三個運動員,每位運動員都有五個項目成績,求每個項目的最高成績
#include <stdio.h>
int main(){
float score[3][5] = {0}, max = 0;
int i = 0, j = 0;
for(i = 0; i < 3; i++){
for(j = 0; j < 5; j++){
scanf("%f", &score[i][j]);
}
}
for(i = 0; i < 5; i++){
max = score[0][i];
for(j = 1; j < 3; j++){
if(score[j][i] > max){
max = score[j][i];
}
}
printf("第%d門課的最大成績為%f\n", i + 1, max);
}
return 0;
}
- 4.現有三條街,每條街上都有五個路燈,用0表示關燈,1表示開燈。實現輸入字符c查看路燈狀態,輸入字符d將路燈狀態置反,輸入字符q退出程序
#include <stdio.h>
void process_arr(int s[][5], int m, char ch){
int i = 0, j = 0;
for(i = 0; i < m; i++){
for(j = 0; j < 5; j++){
if(ch == 'c'){
printf("%d ", s[i][j]);
}
else if(ch == 'd'){
if(s[i][j] == 0){
s[i][j] = 1;
}
else{
s[i][j] = 0;
}
}
}
printf("\n");
}
}
int main(){
int a[3][5] = {{0, 0, 1, 0, 0}, {0, 1, 1, 0, 0}, {1, 0, 0, 1, 1}}, i, j;
char ch = 0;
printf("請輸入字符(c:查看狀態 d:狀態置反 q:退出程序):");
scanf("%c", &ch);
switch(ch){
case 'c':
printf("正在查看路燈狀態...\n");
process_arr(a, 3, ch);
break;
case 'd':
printf("正在置反路燈狀態...\n");
process_arr(a, 3, ch);
printf("置反后的路燈狀態為:\n");
process_arr(a, 3, 'c');
break;
case 'q':
printf("正在退出程序...已退出...\n");
break;
default:
printf("輸入的字符錯誤!\n");
break;
}
return 0;
}
- 5.在二維數組中輸入兩個人的身份證號,打印出生年月,并比較兩人年齡的大小
#include <stdio.h>
#include <string.h>
int main(int argc, const char * argv[]) {
// insert code here...
char id[2][19] = {0}, birth[2][9] = {0};
int i = 0, j = 0, k = 0;
printf("請輸入2人的身份證號信息:\n");
gets(id[0]);
gets(id[1]);
for (i = 0; i < 2; i++) {
k = 0;
for (j = 6; j < 14; j++) {
birth[i][k] = id[i][j];
k++;
}
// birth[i][k] = '\0';
}
puts(birth[0]);
puts(birth[1]);
if (strcmp(birth[0], birth[1]) < 0) {
printf("第1個人的年齡更大\n");
}
else if (strcmp(birth[0], birth[1]) > 0) {
printf("第2個人的年齡更大\n");
}
else {
printf("兩人的年齡一樣大\n");
}
return 0;
}
題型10:字符數組中字符的前后移動+循環
- 1.現有9個已經按照升序排完的字母放在一維數組中,添加一個字母到數組中并依然有序,輸出新數組
#include <stdio.h>
#include <string.h>
#define MAX 11
int main(){
char s[MAX] = {'a', 'c', 'f', 'g', 'k', 'p', 'q', 'r', 'x'}, c = 0;
int i = 0, length = strlen(s);
i = length - 1;
printf("請輸入一個新的字符:\n");
c = getchar();
while(i >= 0 && s[i] > c){
s[i+1] = s[i];
i--;
}
s[i+1] = c;
length ++;
puts(s);
return 0;
}
- 2.輸入一串含
*的字符串,將最后一個*后方的所有字符往前移動一個字符單位
#include <stdio.h>
#include <string.h>
#define MAX 100
int main(){
char s[MAX] = {0}, i = 0;
printf("請輸入一串帶*的字符串:\n");
gets(s);
int length = strlen(s);
if(s[length-1] == '*'){
printf("無需移動");
return 0;
}
i = length - 1;
while(i >= 0 && s[i] != '*'){
i--;
}
while(i <= length - 1){
s[i] = s[i+1];
i++;
}
puts(s);
return 0;
}
#include <stdio.h>
#include <string.h>
#define MAX 100
int main(){
char s[MAX] = {0}, i = 0;
printf("輸入一個字符串:\n");
gets(s);
int length = strlen(s);
i = length - 1;
s[length] = ' ';
while(i >= 0){
if(s[i] >= 'A'&& s[i] <= 'Z'){
s[i + 4] = s[i];
s[i] = ' ';
}
i--;
}
s[length + 4] = '\0';
//puts(s);
for(i = 0; i < length + 4; i++){
printf("%c", s[i]);
}
return 0;
}
- 4.在數組中輸入5個互不相同的正整數,找出其中的最大值刪除后并輸出新數組的值
#include <stdio.h>
#define LEN 5
int main(){
int a[5] = {0}, i = 0;
int max = 0, index = 0;
printf("輸入數組的值:\n");
for(i = 0; i < 5; i++){
scanf("%d", &a[i]);
}
max = a[0];
index = 0;
for(i = 1; i < 5; i++){
if(a[i] > max){
max = a[i];
index = i;
}
}
while(index <= LEN - 2){
a[index] = a[index + 1];
index++;
}
for(i = 0; i < length - 1; i++){
printf("%d ", a[i]);
}
return 0;
}
題型11:字符串特征判斷+循環
- 1.輸入一串字符,長度不超過20,判斷是否是回文數組
#include <stdio.h>
#include <string.h>
#define MAX 21
int main(){
char s[MAX] = {0}, i = 0, j = 0;
printf("請輸入不超過20的字符串:\n");
gets(s);
j = strlen(s) - 1;
while(i < j){ // while(i <= j)
if(s[i] != s[j]){
printf("不是回文數組!\n");
return -1;
}
i++;
j--;
}
printf("是回文數組!");
return 0;
}
#include <stdio.h>
#define MAX 100
int main(){
char s[MAX] = {0}, t = 0;
int i = 0, alpha_flag = 0, num_flag = 0, other_flag = 0;
printf("請輸入一串字符串:\n");
gets(s);
while(s[i] != '\0'){
t = s[i];
if(alpha_flag == 0&&((t>='A'&&t<='Z')||(t>='a'&&t<='z'))){
alpha_flag = 1;
}
else if(num_flag == 0&&(t>='0'&&t<='9')){
num_flag = 1;
}
else if(other_flag == 0&&(t<48||(t>57&&t<65)||(t>90&&t<97)||t>122)){
other_flag = 1;
}
i++;
}
if(alpha_flag==1&&num_flag==0&&other_flag==0){
printf("是字母字符串");
}
else if(alpha_flag==0&&num_flag==1&&other_flag==0){
printf("是數字符串");
}
else if(alpha_flag==0&&num_flag==0&&other_flag==1){
printf("是其他字符串");
}
else{
printf("是混合符串");
}
return 0;
}
- 3.輸入數組a[5]、b[5]的值,如果a[i]與b[i]的和能被4整除就將這兩個數存到數組c中,否則將和乘以4后輸出
#include <stdio.h>
#define MAX 5
void input_arr(int x[], int n){
int i = 0;
for(i = 0; i < n; i++){
scanf("%d", x + i);
}
}
void print_arr(int x[], int n){
int i = 0;
for(i = 0; i < n; i++){
printf("%d ", x[i]);
}
}
int main(){
int a[MAX] = {0}, b[MAX] = {0}, c[MAX*2] = {0};
int i = 0, j = 0, sum = 0;
printf("請輸入數組a的值:");
input_arr(a, MAX);
printf("請輸入數組b的值:");
input_arr(b, MAX);
for(i = 0; i < MAX; i++){
sum = a[i] + b[i];
if(sum % 4 == 0){
c[j++] = a[i];
c[j++] = b[i];
}
else{
printf("%d ", sum * 4);
}
}
printf("\n------------\n");
print_arr(c, j);
return 0;
}
- 4.輸入一串不高于80個字符的字符串,將其中的大小寫字母互換,其余字母不變,然后輸出
#include <stdio.h>
#include <ctype.h>
#define MAX 80
int main(){
char s[MAX];
int i = 0;
printf("請輸入s的值:");
gets(s);
while(s[i] != '\0'){
if(isupper(s[i])){
s[i] += 32;
}
else if(islower(s[i])){
s[i] -= 32;
}
i++;
}
printf("新字符串的內容為:%s", s);
return 0;
}
- 5.輸入一行字符,統計其中有多少個單詞,單詞之間用空格分開
#include <stdio.h>
int main(){
char s[50] = {0};
int i = 0, word=0, count=0;
printf("請輸入一行字符串:\n");
gets(s);
while(s[i] != '\0'){
if(s[i] != ' ' && word == 0){
word = 1;
count ++;
}
if(s[i] == ' '){
word = 0;
}
i++;
}
printf("count=%d\n", count);
return 0;
}
- 6.輸入一串字符串,如果存在B或E,則將其改為a,否則原樣輸出
#include <stdio.h>
#include <string.h>
#define MAX 1000
int main() {
char str[MAX] = {0};
int i = 0;
printf("請輸入一串字符串: ");
gets(str);
for (i = 0; i < strlen(str); i++) {
if (str[i] == 'B' || str[i] == 'E') {
str[i] = 'a';
}
}
// 輸出處理后的字符串
printf("處理后的字符串: %s\n", str);
return 0;
}
- 7.輸入一串字符串,如果存在A或a,則將其改為e,否則原樣輸出
#include <stdio.h>
#include <string.h>
#define MAX 1000
int main() {
char str[MAX] = {0};
int i = 0;
printf("請輸入一串字符串: ");
gets(str);
for (i = 0; i < strlen(str); i++) {
if (str[i] == 'A' || str[i] == 'a') {
str[i] = 'e';
}
}
// 輸出處理后的字符串
printf("處理后的字符串: %s\n", str);
return 0;
}
題型12:字符串拼接
- 1.將兩個字符串a[30]和b[30]拼接成一個新的字符串c[70],并打印輸出
#include <stdio.h>
#include <string.h>
#define LEN 30
int main(){
char a[LEN] = {0}, b[LEN] = {0}, c[70] = {0};
int i = 0, j = 0, k = 0;
printf("請輸入a的值:");
gets(a);
printf("請輸入b的值:");
gets(b);
while(a[i] != '\0'){
c[k++] = a[i++];
}
while(b[j] != '\0'){
c[k++] = b[j++];
}
printf("字符串拼接后的內容為:%s", c);
return 0;
}
題型13:字符串應用題+循環
- 1.假設小明的春考技能成績查詢密碼為wljspass666,用戶輸入密碼,若正確則輸出密碼;否則提示錯誤,當錯誤次數達到4次時輸出密碼鎖定,此時程序退出
#include <stdio.h>
#include <string.h>
int main(int argc, const char * argv[]){
char pwd[100] = {0};
int i = 0, count = 4;
printf("輸入密碼:");
gets(pwd);
while(count > 0){
if(strcmp(pwd, "wljspass666")==0){
printf("登錄成功!\n");
break;
}
else{
count--;
printf("密碼錯誤,剩余%d次機會.\n", count);
if(count == 0){
printf("次數已用完,賬戶被鎖定!\n");
break;
}
printf("輸入密碼:");
gets(pwd);
}
}
return 0;
}
考題補充
- 1.輸入兩個浮點數,以浮點數的形式格式化輸出,寬度為10,小數點后保留2位
#include <stdio.h>
int main() {
float num1 = 0, num2 = 0;
printf("請輸入兩個浮點數:");
scanf("%f %f", &num1, &num2);
// 格式化輸出:寬度10(總字符數),小數點后保留2位
// %10.2f 中:10 表示輸出占10個字符位置,.2 表示保留2位小數,不足時左側補空格
printf("\n第一個數:%10.2f\n", num1);
printf("第二個數:%10.2f\n", num2);
return 0;
}
- 2.某水費結算系統中輸入1表示民用水,每噸3.5元;輸入2表示商用水,每噸4.0元。輸入水費標識(1或2)和用水量,輸出水費
#include <stdio.h>
int main(){
int flag = 0, weight = 0;
float price = 0, money = 0;
printf("請輸入水費標識(1或2)和用水量(噸):");
scanf("%d %d", &flag, &weight);
if(flag == 1){
price = 3.5;
}
else if(flag == 2){
price = 4.0;
}
else {
printf("輸入異常,只能輸入1或2!\n");
return -1;
}
money = price * weight;
printf("水費共計%.2f元\n", money);
return 0;
}
- 3.輸入10個人的年齡,求平均年齡,并輸出最接近且不大于平均值的年齡
#include <stdio.h>
int main(int argc, const char * argv[]) {
// insert code here...
int age[10] = {0}, below_avg_age[10] = {0};
int i = 0, j = 0, k = 0;
float avg_age = 0, min = 0;
for (i = 0; i < 10; i++) {
scanf("%d", age + i);
avg_age += age[i];
}
avg_age /= 10;
printf("平均年齡為%.4f\n", avg_age);
for (i = 0; i < 10; i++) {
if (avg_age >= age[i]) {
below_avg_age[j++] = age[i];
}
}
min = avg_age - below_avg_age[0];
k = 0;
for (i = 1; i < j; i++) {
if (avg_age - below_avg_age[i] < min) {
min = avg_age - below_avg_age[i];
k = i;
}
}
printf("最接近且不大于平均值的年齡是%d", below_avg_age[k]);
return 0;
}
- 4.使用函數func打印輸出1000以內能被7整除的偶數,每行打印12個,輸出格式為%7d
#include <stdio.h>
void func(int num) {
int i = 0;
for(i = 0; i <= num; i+=2){
if(i % 7 == 0){
printf("%7d", i);
count++;
if(count % 12 == 0){
printf("\n");
}
}
}
}
int main(){
int num = 1000;
func(num);
return 0;
}
- 5.輸入一串字符串,將其中的數字字符加6。注意:字符'4'加6后的結果按字符'0'計算,字符'5'加6后的結果按字符'1'計算
#include <stdio.h>
#define MAX 1000
int main(int argc, const char * argv[]) {
// insert code here...
char s[MAX] = {0}, t = {0};
int i = 0;
printf("請輸入一串字符:");
gets(s);
while (s[i] != '\0') {
t = s[i];
if (t >= '0' && t <= '3') {
s[i] += 6;
}
else if (t >= '4' && t <= '9') {
s[i] -= 4;
}
i++;
}
puts(s);
return 0;
}
- 6.輸入n個數,傳入func函數中,打印輸出n個數中的最小值
#include <stdio.h> // 方法1:不用數組,靜態變量存儲上一次傳進來的值
float func(float num){
static float m = 10e20;
if(num < m) {
m = num;
}
return m;
}
int main(){
int i, n;
float num, ret;
printf("請輸入n的值:");
scanf("%d", &n);
for(i = 0; i < n; i++){
printf("請輸入第%d個數:", i + 1);
scanf("%f", &num);
ret = func(num);
}
printf("最小值為:%f", ret);
return 0;
}
#include <stdio.h> // 方法2:可變長度數組VLA,在 C99 (1999年發布)及之后的標準里,支持可變長度數組,能夠使用變量來指定數組的長度。1989年發布的C89/C90標準不支持VLA,以下代碼可能會報錯
int func(int arr[], int n){
int min = arr[0], i;
for(i = 1; i < n; i++){
if(arr[i] < min){
min = arr[i];
}
}
return min;
}
int main(){
int i, n, min;
printf("請輸入n的值:");
scanf("%d", &n);
int arr[n];
for(i = 0; i < n; i++){
printf("請輸入第%d個數:", i + 1);
scanf("%d", arr+i);
}
min = func(arr, n);
printf("最小值為%d", min);
return 0;
}
#include <stdio.h> // 方法3:在C89/C90標準下不可使用可變長度數組時,能夠借助動態內存分配函數像malloc、calloc或者realloc)來創建數組
#include <stdlib.h>
int func(int arr[], int n){
int min = arr[0], i;
for(i = 1; i < n; i++){
if(arr[i] < min){
min = arr[i];
}
}
return min;
}
int main(int argc, const char * argv[]) {
// insert code here...
int i, n, min;
int *arr;
printf("請輸入n的值:");
scanf("%d", &n);
arr = (int *)malloc(n * sizeof(int));
if (arr == NULL) {
printf("內存分配失敗!\n");
return -1;
}
for(i = 0; i < n; i++){
printf("請輸入第%d個數:", i + 1);
scanf("%d", arr+i);
}
min = func(arr, n);
printf("最小值為%d\n", min);
return 0;
}
- 7.輸入n,找出1-n之間的所有奇數,輸出奇數的個數和奇數的平均值
#include <stdio.h>
int main(){
int n, i, count = 0;
float avg = 0;
printf("請輸入n的值:");
scanf("%d", &n);
for(i = 1; i <= n; i+=2) {
count++;
avg += i;
}
avg /= count;
printf("共有奇數%d個,平均值為%.4f\n", count, avg);
return 0;
}
- 8.用函數調用一個公式,結果如果是正數則返回,是負數則返回0
#include <stdio.h>
int func(int a, int b, int c){
return a*a+b*b-c*c;
}
int main(){
int a, b, c, ret;
printf("請輸入a b c的值:");
scanf("%d %d %d", &a, &b, &c);
ret = func(a, b, c);
printf("ret=%d", ret);
return 0;
}
#include <stdio.h>
int main(){
int n, i, cnt_pos = 0, cnt_neg = 0, cnt_zero = 0;
printf("請輸入n的值:");
scanf("%d", &n);
int a[n]; // 部分編譯器不支持該語句
printf("請輸入%d個整數:", n);
for(i = 0; i < n; i++) {
scanf("%d", a+i);
if(a[i] > 0) {
cnt_pos++;
}
else if(a[i] < 0) {
cnt_neg++;
}
else {
cnt_zero++;
}
}
printf("數組中有%d個正數,%d個負數,%d個0", cnt_pos, cnt_neg, cnt_zero);
return 0;
}
- 10.數組a中有5位同學的成績,輸出最高成績和最低成績,要用指針
- 11.輸入一個4位數,計算每一位平方的和。如輸入1234,輸出30
#include <stdio.h>
int main(){
int num, sum = 0, b;
printf("請輸入一個4位數:");
scanf("%d", &num);
while(num){
b = num%10;
sum += b*b;
num /= 10;
}
printf("sum=%d", sum);
return 0;
}
- 12.將二進制數11001110置反,輸出00110001
#include <stdio.h>
int main(){
int a[8] = {1, 1, 0, 0, 1, 1, 1, 0}, i;
for(i = 0; i < 8; i++){
if(a[i]){
a[i] = 0;
printf("%d", a[i]);
}
else {
a[i] = 1;
printf("%d", a[i]);
}
}
return 0;
}
- 13.在數組a中輸入5個字符(不含'\0'),數組b中已有'a'、'b'兩個字符,將數組a連接到數組b后方
#include <stdio.h>
#include <string.h>
int main(){
char a[6], b[8] = "ab";
int i, length_b = strlen(b);
printf("請輸入5個字符(不含\'\\0\'):");
for(i = 0; i < 5; i++){
scanf("%c", a+i);
b[length_b++] = a[i];
}
b[length_b] = '\0';
printf("連接后的新字符串為:");
puts(b);
return 0;
}
- 14.用戶輸入6個學生的成績,計算平均成績和高于平均成績的學生的平均成績
#include <stdio.h>
int main(){
int score[6], i, count = 0;
float avg1 = 0, avg2 = 0;
printf("請輸入6名學生的成績:\n");
for(i = 0; i < 6; i++) {
scanf("%d", score+i);
avg1 += score[i];
}
avg1 /= 6;
for(i = 0; i < 6; i++) {
if(score[i] > avg1) {
avg2 += score[i];
count++;
}
}
avg2 /= count;
printf("平均成績為%.2f,高于平均成績的共%d人,其平均成績為%.2f", avg1, count, avg2);
return 0;
}
- 15.某商場舉行促銷活動,滿600元減200元,不滿600元但高于200元,打八折,不高于200元打九折。輸入消費金額,輸出應付金額
#include <stdio.h>
int main(){
float money, pay;
printf("請輸入消費金額:");
scanf("%f", &money);
if(money < 0){
printf("輸入異常, end...");
return -1;
}
else if(money <= 200){
pay = money * 0.9;
}
else if(money < 600){
pay = money * 0.8;
}
else {
pay = money - 200;
}
printf("消費%.2f元,支付%.2f元.", money, pay);
return 0;
}
- 16.現有5位同學的綜合得分(2位數),將得分乘以3加上5后輸出
- 17.現有元素只為0或1的5行5列二維數組a,第5行和第5列元素未初始化。若每行1的個數為偶數個,則該行第5個數初始化為1,反之為0。若每列1的個數是偶數,則該列第5個數初始化為1,反之為0。
// 示例
0 0 1 1
1 1 1 0
1 0 0 1
0 1 0 0
#include <stdio.h>
#define ROW 5
#define COL 5
void print_arr(int s[][COL], int m, int n){
int i, j;
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
printf("%4d", s[i][j]);
}
printf("\n");
}
}
int main(int argc, const char * argv[]) {
// insert code here...
int a[ROW][COL] = {{0, 0, 1, 0}, {1, 0, 1, 1}, {0, 1, 1, 0}, {0, 1, 1, 1}};
int i, j, sum;
printf("數組前4行4列元素的值為:\n");
print_arr(a, 4, 4);
for (i = 0; i < ROW - 1; i++) {
sum = 0;
for (j = 0; j < COL - 1; j++) {
sum += a[i][j];
}
if (!(sum%2)) {
a[i][j] = 1;
}
}
for (j = 0; j < COL; j++) {
sum = 0;
for (i = 0; i < ROW - 1; i++) {
sum += a[i][j];
}
if (!(sum%2)) {
a[i][j] = 1;
}
}
printf("填充完畢后數組元素的值為:\n");
print_arr(a, 5, 5);
return 0;
}
- 18.求和:1-1/3+1/5-1/7+...,一直到1/99
- 19.現有3*3矩陣,計算第4列各行元素的值,要求每行4個元素相加的和為20
#include <stdio.h>
void print_arr(int s[][4], int m, int n){
int i, j;
for(i = 0; i < m; i++){
for(j = 0; j < n; j++){
printf("%4d", s[i][j]);
}
printf("\n");
}
}
int main(){
int a[3][4] = {{1, 8, 17}, {12, 4, -5}, {6, 7, 1}}, i, j, sum;
printf("3*3數組元素為:\n");
print_arr(a, 3, 3);
for(i = 0; i < 3; i++){
sum = 0;
for(j = 0; j < 3; j++){
sum += a[i][j];
}
a[i][3] = 20 - sum;
}
printf("填充后3*4數組元素為:\n");
print_arr(a, 3, 4);
return 0;
}
- 20.求和:1+1/2+1/3+...,一直到1/99
- 21.定義一個數組并賦值,輸出數組前n個數的和與后n個數的和
#include <stdio.h>
#define N 10
void print_arr(int s[], int n, int m){
int i;
for(i = n; i <= m; i++){
printf("%4d", s[i]);
}
}
int main(){
int a[N] = {9, 4, 6, 7, 1, 3, 8, 5, 2, 0}, n, i, j;
printf("請輸入n的值(n<=%d):", N);
scanf("%d", &n);
if(n > N){
printf("下標越界,end...\n");
return -1;
}
printf("前%d個數為:", n);
print_arr(a, 0, n-1);
printf("\n后%d個數為:", n);
print_arr(a, N-n, N-1);
return 0;
}
- 22.模擬點餐程序:定義數組food和price,定義整型變量c、n和op,其中c為食物編號,n為食物數量,op為功能選項(0:點餐 1:查看 2:結賬 其他值:錯誤)。現要求用戶輸入c、n和op值,打印輸出相應的結果。
food[3][40] = {"漢堡", "薯條", "可樂"} price[3] = {20, 10, 5}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define ITEM 3 // 食物種類
#define LEN 1000 // 每種食物占據的最長字節數
#define MAX 1000 // 購物車可加食物數量上限
int car_length = 0; // 購物車數組的長度,全局變量
void print_food(char food[][LEN]) {
int i;
for (i = 0; i < ITEM; i++) {
printf("%s ", food[i]);
}
}
void add_food(char food[][LEN], char car[][LEN], int c, int n) { // c:食物編號 n:食物數量
int i;
for (i = car_length; i < car_length + n; i++) {
strcpy(car[i] ,food[c]);
}
car_length = i; // 更新長度,后續可能會繼續在購物車中增加物品,所以當前的長度需要保存
}
void print_car(char car[][LEN]){
int i = 0;
while (car[i][0] != '\0') { // 購物車數組中某行的字符串中0列為'\0',代表此處為空的,未存儲食物
printf("%s ", car[i]);
i++;
}
if (i == 0) {
printf("購物車為空!");
}
printf("\n");
}
int cal_pay(char car[][LEN], int price[]) {
int pay = 0, i;
for (i = 0; car[i][0] != '\0'; i++) { // 遍歷購物車結束條件也是某行0列字符為'\0'
if (strcmp(car[i], "漢堡") == 0) {
pay += price[0];
}
else if (strcmp(car[i], "薯條") == 0) {
pay += price[1];
}
else {
pay += price[2];
}
strcpy(car[i], "\0"); // i位置處的食物算入總價后,就將i位置處的內容置為"\0",支付的過程即伴隨著清空購物車.此處清空購物車只是數組中每行為"\0",但購物車長度不是0
}
car_length = 0; // 所以此處也要將購物車的長度置零,在下方case 2處置零也可以
return pay;
}
int main(int argc, const char * argv[]) {
// insert code here...
char food[ITEM][LEN] = {"漢堡", "薯條", "可樂"};
int c, n, op, money, price[ITEM] = {20, 10, 5}; // c:食物編號 n:食物數量 op:功能選項
char car[MAX][LEN] = {'\0'}; // 購物車,直接初始化為'\0',利于后續處理中找到car數組的邊界
while (1) {
printf("開始操作(0:點餐 1:查看購物車 2:結賬 3:退出):");
scanf("%d", &op);
switch (op) {
case 0:
printf("有以下食物:\n");
print_food(food);
printf("\n開始點餐...請輸入食物編號(0 1 2)和食物數量\n");
scanf("%d %d", &c, &n);
add_food(food, car, c, n);
break;
case 1:
printf("正在查看購物車...\n");
print_car(car);
break;
case 2:
printf("正在結賬...\n");
money = cal_pay(car, price);
printf("共支付%d元\n", money);
// car_length = 0;
break;
case 3:
printf("正在退出...\n");
exit(-1);
default:
printf("功能選項輸入錯誤,請重新輸入!\n");
}
}
return 0;
}
- 23.輸入一個整數,判斷100以內能被這個數整除的數
-
2023年考題回憶版
- 1.輸入整數直徑,求圓的面積,如果輸入的是負數,就打印提示“異常”
#include <stdio.h>
#define PI 3.14159
int main(){
int d;
float r, s;
printf("請輸入圓的直徑:");
scanf("%d", &d);
if(d < 0){
printf("直徑值異常!\n");
return -1;
}
r = d / 2;
s = PI * r * r;
printf("面積為%.2f", s);
return 0;
}
- 2.輸入一個1800-2800之間的整數作為年份,判斷該年份是否為閏年
#include <stdio.h>
int main(){
int year;
printf("請輸入一個年份(1800-2800):");
scanf("%d", &year);
if(year >= 1800&&year <= 2800){
if(year % 4 == 0&&year % 100 != 0||year % 400 == 0){
printf("%d是閏年!", year);
}
else{
printf("%d不是閏年!", year);
}
}
else{
printf("輸入的年份非法!");
}
return 0;
}
- 3.輸入一個長度不超過80的字符串,將其中的大寫字母轉換成小寫字母,其他字符不變,輸出轉換后的字符串
#include <stdio.h>
#include <string.h>
#define MAX 100
int main(){
char s[MAX];
int i = 0;
printf("請輸入字符串:");
gets(s);
if(strlen(s) <= 80){
while(s[i] != '\0'){
if(s[i] >= 'A'&&s[i] <= 'Z'){
s[i] += 32;
}
i++;
}
puts(s);
}
else{
printf("字符串長度不合法!");
}
return 0;
}
2022年考題回憶版
#include <stdio.h>
#define ROW 10
#define COL 10
int main(){
int i = 0, j = 0, s[ROW][COL] = {0};
for(i = 0; i < ROW; i++){
s[i][0] = 1; // 每一行下標為0的元素置為1
s[i][i] = 1; // 對角線元素置為1
}
for(i = 2; i < ROW; i++){
for(j = 1; j < i; j++){
s[i][j] = s[i-1][j] + s[i-1][j-1]; // 每一行下標為1至倒數第2個元素的值為正上方與左斜上方元素的和
}
}
for(i = 0; i < ROW; i++){
for(j = 0; j <= i; j++){
printf("%4d", s[i][j]);
}
printf("\n");
}
return 0;
}
- 2.輸入購買商品總價,若總價小于1000則八折出售;若總價高于1000則將超出的部分六折出售,輸出優惠金額和實付金額
#include <stdio.h>
int main(){
float total, discount, pay;
printf("請輸入商品總價:");
scanf("%f", &total);
if(total < 0){
printf("輸入數據異常!");
return -1;
}
else if(total < 1000){
discount = total * (1 - 0.8);
pay = total * 0.8;
}
else{
discount = (total - 1000) * (1 - 0.6);
pay = 1000 + (total - 1000) * 0.6;
}
printf("總價%.2f,優惠金額%.2f,實付金額%.2f", total, discount, pay);
return 0;
}
- 3.輸入本月用電度數:若在50度以下(含50度)每度1.3元,若高于50度,超出的部分按每度2.3元收,請輸出電費
#include <stdio.h>
int main(){
float total, pay;
printf("請輸入本月用電度數:");
scanf("%f", &total);
if(total < 0){
printf("數值異常!");
return -1;
}
else if(total <= 50){
pay = total * 1.3;
}
else{
pay = 50 * 1.3 + (total - 50) * 2.3;
}
printf("用了%.2f度電, 電費%.2f元", total, pay);
return 0;
}
- 4.輸入兩個字符串s1和s2,將s2鏈接到s1后方,不能使用字符串連接函數
#include <stdio.h>
#include <string.h>
#define MAX 1000
int main(){
char s1[MAX], s2[100];
int len, i = 0;
printf("請輸入s1的值:");
gets(s1);
len = strlen(s1); // 定位到s1字符串'\0'的位置
printf("請輸入s2的值:");
gets(s2);
while(s2[i] != '\0'){ // 從頭遍歷字符串s2
s1[len++] = s2[i++]; // 依次將字符串s2的字符連接到s1后方
}
s1[len] = '\0'; // 為字符串s1添加結束標志
printf("s2連接到s1后方的新字符串為:%s", s1);
return 0;
}
#include <stdio.h>
int main(){
int i, sum = 0;
for(i = 1; i <= 100; i++){
sum += i;
}
printf("sum=%d", sum);
return 0;
}
- 6.(變式)計算1-2+3-4+5-...+99-100的值
// 方法1:將加減號看成乘以1或乘以-1
#include <stdio.h>
int main() {
int i = 1, sum = 0;
int t = 1;
while(i <= 100 {
sum = sum + i * t;
i ++;
t = -t;
}
printf("%d", sum);
return 0;
}
// 方法2:利用奇偶數,觀察原式發現奇數前方的符號為“+”,偶數前方的符號為“-”。
#include <stdio.h>
int main(){
int i = 1, sum = 0;
while(i <= 100){
if(i % 2 != 0){
sum = sum + i;
}
else {
sum = sum - i;
}
i++;
}
printf("sum=%d", sum);
return 0;
}