1. 程式人生 > 其它 >C語言刷題訓練營-第二講

C語言刷題訓練營-第二講

技術標籤:C語言程式設計入門之刷題篇

BC6-小飛機

https://www.nowcoder.com/practice/5cd9598f28f74521805d2069ce4a108a?tpId=107&rp=1&ru=%2Fta%2Fbeginner-programmers&qru=%2Fta%2Fbeginner-programmers%2Fquestion-ranking

題目描述

KiKi學會了printf在螢幕輸出資訊,他想輸出一架小飛機。請幫他編寫程式輸出這架小飛機。

輸入描述:

輸出描述:

參考程式碼:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    printf("     **\n");
    printf("     **\n");
    printf("************\n");
    printf("************\n");
    printf("    *  *\n");
    printf("    *  *\n");
    return 0;
}

答案解析:

嚴格按照合適去列印就行了


BC8-十六進位制轉十進位制

https://www.nowcoder.com/practice/33e148570d5c4e728116e2f861638c9c?tpId=107&rp=1&ru=%2Fta%2Fbeginner-programmers&qru=%2Fta%2Fbeginner-programmers%2Fquestion-ranking
題目描述
BoBo寫了一個十六進位制整數ABCDEF,他問KiKi對應的十進位制整數是多少。

輸入描述:

輸出描述:

十六進位制整數ABCDEF對應的十進位制整數,所佔域寬為15。

備註:

printf可以使用使用格式控制串“%md”輸出域寬為m的十進位制整數。

參考程式碼:

#include <stdio.h>
int main()
{
   printf("%15d\n", 0XABCDEF);
   return 0;
}

答案解析:

用於存放輸出資料的寬度稱為“域寬”。如果域寬小於被列印資料的寬度,資料通常會在域內右對齊。如果輸出值的寬度大於域寬時,域寬是自動增長的

本題考查的就是%d的格式控制域寬指定。

BC9-printf函式的返回值

https://www.nowcoder.com/practice/a19ef1d8e55c4cc786f11cbf6b2fde61?tpId=107&rp=1&ru=%2Fta%2Fbeginner-programmers&qru=%2Fta%2Fbeginner-programmers%2Fquestion-ranking

題目描述

KiKi寫了一個輸出“Hello world!”的程式,BoBo老師告訴他printf函式有返回值,你能幫他寫個程式輸出
printf(“Hello world!”)的返回值嗎?

輸入描述:

輸出描述:

包括兩行:
第一行為“Hello world!”
第二行為printf(“Hello world!”)呼叫後的返回值。

參考程式碼:

#include <stdio.h>
int main()
{
	int ret = printf("Hello world!");
	printf("\n%d\n",ret);
	return 0;
}
#include <stdio.h>
int main()
{
	printf("\n%d\n", printf("Hello world!"));
	return 0;
}

答案解析:

printf()列印的是輸出字元的個數,錯誤返回負數

本題的重點是要嚴格按照題目要求的格式,輸出2行,先列印字串,再列印字串長度。

這裡就要控制好格式,寫法比較多。

BC11-學生基本資訊輸入輸出

https://www.nowcoder.com/practice/58b6a69b4bf943b49d2cd3c15770b9fd?tpId=107&rp=1&ru=%2Fta%2Fbeginner-programmers&qru=%2Fta%2Fbeginner-programmers%2Fquestion-ranking

題目描述

依次輸入一個學生的學號,以及3科(C語言,數學,英語)成績,在螢幕上輸出該學生的學號,3科成績。

輸入描述:

學號以及3科成績,學號和成績之間用英文分號隔開,成績之間用英文逗號隔開。

輸出描述:

學號,3科成績,輸出格式詳見輸出樣例。

示例1
輸入

17140216;80.845,90.55,100.00

輸出
The each subject score of No. 17140216 is 80.85, 90.55, 100.00.
參考程式碼:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
	int num = 0;
	float c_score = 0.0;
	float math_score = 0.0;
	float eng_score = 0.0;

	scanf("%d;%f,%f,%f", &num, &c_score, &math_score, &eng_score);
	//The each subject score of  No. 17140216 is 80.85, 90.55, 100.00.
	printf("The each subject score of  No. %d is %.2f, %.2f, %.2f.\n", num, c_score, math_score, eng_score);
	return 0;
}

答案解析:

這個題的最大坑,也是格式的指定,還有空格的控制,必須和題目要求的輸出結果一致,比如:of 的後邊有2個空格。
浮點數列印要指定小數點後邊的位數為2位。

BC35-判斷字母

https://www.nowcoder.com/practice/44d2d63103664913bc243d3836b4f341?tpId=107&rp=1&ru=%2Fta%2Fbeginner-programmers&qru=%2Fta%2Fbeginner-programmers%2Fquestion-ranking

題目描述

從鍵盤任意輸入一個字元,程式設計判斷是否是字母(包括大小寫)。

輸入描述:

多組輸入,每行輸入包括一個字元。

輸出描述:

針對每行輸入,輸出該字元是字母(YES)或不是(NO)。

示例1
輸入

H
9

輸出

YES
NO

參考程式碼:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
	int ch = 0;
	while ((ch = getchar()) != EOF)
	{
		//判斷是不是字母
		if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
			printf("YES\n");
		else
			printf("NO\n");
		getchar();
	}
	return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
	int ch = 0;
	while ((ch = getchar()) != EOF)
	{
		//判斷是不是字母
		if (isalpha(ch))
			printf("YES\n");
		else
			printf("NO\n");
		getchar();
	}
	return 0;
}

程式碼解析:
1. 本地是多組輸入,一定要注意迴圈輸入的問題
2. 字元的判斷可以自己寫,也可以藉助於庫函式,要熟悉庫函式都有哪些。

BC12-字元金字塔

https://www.nowcoder.com/practice/0fae60c3b5c64699b7c0f031c2187dde?tpId=107&rp=1&ru=%2Fta%2Fbeginner-programmers&qru=%2Fta%2Fbeginner-programmers%2Fquestion-ranking

題目描述

輸入一個字元,用它構造一個三角形金字塔。

輸入描述:

輸入只有一行,一個字元。

輸出描述:

該字元構成的三角形金字塔。

示例1
輸入

1

輸出

1
1 1
1 1 1
1 1 1 1
1 1 1 1 1

參考程式碼:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
	char num = 0;
	scanf("%c",&num);
	printf("    %c\n",num);
	printf("   %c %c\n", num, num);
	printf("  %c %c %c\n", num, num, num);
	printf(" %c %c %c %c\n", num, num, num, num);
	printf("%c %c %c %c %c\n", num, num, num, num, num);
	return 0;
}

答案解析:

每一行的輸出是前邊空格,後邊1
本題的難點就是精確的控制空格的個數和1的個數。

BC13-ASCII碼

https://www.nowcoder.com/practice/4280d330fe314e8f98cd5c593e3e9190?tpId=107&rp=1&ru=%2Fta%2Fbeginner-programmers&qru=%2Fta%2Fbeginner-programmers%2Fquestion-ranking

題目描述
BoBo教KiKi字元常量或字元變量表示的字元在記憶體中以ASCII碼形式儲存。BoBo出了一個問題給KiKi,
轉換以下ASCII碼為對應字元並輸出他們。
73, 32, 99, 97, 110, 32, 100, 111, 32, 105, 116 , 33

輸入描述:

輸出描述:

轉換輸出題目中給出的所有ASCII到對應的字元。

參考程式碼:

#include <stdio.h>
int main()
{
    char arr[] = { 73, 32, 99, 97, 110, 32, 100, 111, 32, 105, 116 , 33 };
    int i = 0;
    //計算陣列的元素個數
    int sz = sizeof(arr) / sizeof(arr[0]);
    //迴圈遍歷輸出每一個元素
    for (i = 0; i < sz; i++)
    {
        //%c 控制列印字元
        printf("%c", arr[i]);//每個字元不要隔開
    }
    return 0;
}


答案解析:
這裡得了解清楚ASCII編碼,如果採用ASCII編碼,每個字元都有一個對應的數字,

這個數字被稱為這個字元的ASCII碼,如果把這個數字按照%c列印,列印的就是字元。

BC14-出生日期輸入輸出

https://www.nowcoder.com/practice/4a4a9dd1edb6453ba4a0432319200743?tpId=107&rp=1&ru=%2Fta%2Fbeginner-programmers&qru=%2Fta%2Fbeginner-programmers%2Fquestion-ranking

題目描述

輸入一個人的出生日期(包括年月日),將該生日中的年、月、日分別輸出。

輸入描述:

輸入只有一行,出生日期,包括年月日,年月日之間的數字沒有分隔符。

輸出描述:

三行,第一行為出生年份,第二行為出生月份,第三行為出生日期。輸出時如果月份或天數為1位數,需要在1
位數前面補0。

示例1
輸入

20130225

輸出

year=2013
month=02
date=25

備註:

通過scanf函式的%m格式控制可以指定輸入域寬,輸入資料域寬(列數),按此寬度擷取所需資料;
通過printf函式的%0格式控制符,輸出數值時指定左面不使用的空位置自動填0。

參考程式碼:

#include <stdio.h>
int main()
{
   int year=0;
   int month = 0;
   int date = 0;
   scanf("%4d%2d%2d", &year, &month, &date);//%4d就是讀取4位整數
   printf("year=%d\n", year);
   printf("month=%02d\n", month);//輸出不夠2位時,左邊拿0填充
   printf("date=%02d\n", date);
   return 0;
}

答案解析:

本地的難點在於如何按照指定域寬讀取資料,如何按照指定格式列印資料。

BC29-2的n次方計算

https://www.nowcoder.com/practice/35a1e8b18658411388bc1672439de1d9?tpId=107&rp=1&ru=%2Fta%2Fbeginner-programmers&qru=%2Fta%2Fbeginner-programmers%2Fquestion-ranking

題目描述

不使用累計乘法的基礎上,通過移位運算(<<)實現2的n次方的計算。

輸入描述:

多組輸入,每一行輸入整數n(0 <= n < 31)。

輸出描述:

針對每組輸入輸出對應的2的n次方的結果。

示例1
輸入

2
10

輸出

4
1024

參考程式碼:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int n = 0;
    while (scanf("%d", &n) != EOF)
    {
        printf("%d\n", 1 << n);
    }
    return 0;
}

答案解析:

本題為多組輸入,要使用迴圈輸入
注意<<(左移操作符的使用,左移一位有乘2的效果)

BC15-按照格式輸入並交換輸出

https://www.nowcoder.com/practice/95eb723a3e854376a7eb6d116cc7d875?tpId=107&rp=1&ru=%2Fta%2Fbeginner-programmers&qru=%2Fta%2Fbeginner-programmers%2Fquestion-ranking

題目描述

輸入兩個整數,範圍-2^31~2^31-1,交換兩個數並輸出。

輸入描述:

輸入只有一行,按照格式輸入兩個整數,範圍,中間用“,”分隔。

輸出描述:

把兩個整數按格式輸出,中間用“,”分隔。

示例1
輸入

a=1,b=2

輸出

a=2,b=1

備註:

如果格式控制串中有非格式字元則輸入時也要輸入該非格式字元。

參考答案:

#include <stdio.h>

int main()
{
   int a = 0;
   int b = 0;
   scanf("a=%d,b=%d", &a, &b);
   int c = a;
   a = b;
   b = c;
   printf("a=%d,b=%d\n",a, b);
}

答案解析:

輸入和輸出格式的控制,如果格式控制串中有非格式字元則輸入時也要輸入該非格式字元。

BC16-字元轉ASCII碼

https://www.nowcoder.com/practice/93f4d05a02d9468db424ed4316bfc8fd?tpId=107&rp=1&ru=%2Fta%2Fbeginner-programmers&qru=%2Fta%2Fbeginner-programmers%2Fquestion-ranking

題目描述

BoBo教KiKi字元常量或字元變量表示的字元在記憶體中以ASCII碼形式儲存。BoBo出了一個問題給KiKi,
輸入一個字元,輸出該字元相應的ASCII碼。

輸入描述:

一行,一個字元。

輸出描述:

一行,輸出輸入字元對應的ASCII碼。

示例1
輸入

c

輸出

99

參考程式碼:

#include <stdio.h>
int main()
{
   char ch = 0;
   scanf("%c", &ch);
   printf("%d\n",ch);
   return 0;
}


答案解析:

直接按照%d列印,就是字元對應的ascii碼值

BC17-計算機表示式的值

https://www.nowcoder.com/practice/58457d27f91043edaf95b6591bb64fd6?tpId=107&rp=1&ru=%2Fta%2Fbeginner-programmers&qru=%2Fta%2Fbeginner-programmers%2Fquestion-ranking

題目描述

請計算表示式“(-8+22)×a-10+c÷2”,其中,a = 40,c = 212。

輸入描述:

無。

輸出描述:

(-8+22)×a-10+c÷2計算之後的結果,為一個整數。

參考程式碼:

#include <stdio.h>
int main()
{
   int a = 40;
   int c = 212;
   int ret = (-8+22)*a-10+c/2;
   printf("%d\n", ret);
   return 0;
}

答案解析:

按照操作符的優先順序直接設計表示式,計算輸出就行。

BC18-計算帶餘除法

https://www.nowcoder.com/practice/34d3911bf2fd48a285f6396e886a1259?tpId=107&rp=1&ru=%2Fta%2Fbeginner-programmers&qru=%2Fta%2Fbeginner-programmers%2Fquestion-ranking

題目描述

給定兩個整數a和b (-10,000 < a,b < 10,000),計算a除以b的整數商和餘數。

輸入描述:

一行,包括兩個整數a和b,依次為被除數和除數(不為零),中間用空格隔開。

輸出描述:

一行,包含兩個整數,依次為整數商和餘數,中間用一個空格隔開。

示例1
輸入

15 2

輸出

7 1

參考程式碼:

#include <stdio.h>
int main()
{
   int a = 0;
   int b = 0;
   scanf("%d %d", &a, &b);
   int m = a/b;
   int n = a%b;
   printf("%d %d\n", m, n);
   return 0;
}

答案解析:

掌握 % 和 / 兩個操作符的使用,按照格式輸出就行。