[新]C语言期末复习,经典练习题+知识点总结+模拟考题 三位一体,(2)

2020-03-26 20:10

struct point makepoint(int x,int y) {

struct point temp; temp.x = x; temp.y = y; return temp; }

struct rect makerect(struct point p1,struct point p2) {

struct rect temp; temp.p1 = p1; temp.p2 = p2; return temp; }

struct rect guifanrect(struct rect r) {

struct rect temp;

temp.p1.x = min (r.p1.x, r.p2.x); temp.p1.y = min (r.p1.y, r.p2.y); temp.p2.x = max (r.p1.x, r.p2.x); temp.p2.y = max (r.p1.y, r.p2.y); return temp; }

6 / 30

3. 【问题描述】编写一个程序,当在一个字符串中出现子串时就删除它。

【输入形式】用户在第一行输入一个字符串,用户在第二行输入一个子串。

【输出形式】程序在下一行输出删除其中所有子串后的字符串。如果字符串不包含子串则输出原字符串本身。 【样例输入】 I am a boy! a 【样例输出】 I m boy!

【样例说明】用户首先输入字符串I am a boy!,然后输出子串a,程序会寻找字符串中的子串删除它,最后将删除后的结果输出:I#m##boy! #表示空格。

【评分标准】结果完全正确得20分,每个测试点4分。提交程序名为:delsubstring.c。 #include #include char source_str[1024]; char del_str[1024]; char dest_str[1024];

int main( void ) {

char *pdest; int result;

fgets(source_str, 1024, stdin);

fgets(del_str, 1024, stdin);

source_str[strlen(source_str)-1] = '\\0'; del_str[strlen(del_str)-1] = '\\0';

pdest = strstr(source_str, del_str); result = 0;

while(pdest != NULL) {

strncat(dest_str, &source_str[result], (int)(pdest - &source_str[result])); result += (int)(pdest -

&source_str[result]) + strlen(del_str);

pdest = strstr(&source_str[result], del_str); }

if(result < strlen(source_str)) {

strncat(dest_str, &source_str[result], strlen(source_str) - result); }

printf(\ return 0; } 4.

【问题描述】

编写一个函数char * str_bin(char* str1, char* str2), str1、str2是两个有序字符串(其中字符按ASCII码从小到大排序),将str2合并到字符串str1中,要求合并后的字符串仍是有序的,允许字符重复。在main函数中测试该函数:从键盘输入两个有序字符串,然后调用该函数,最后输出合并后的结果。

7 / 30

【输入形式】

分行从键盘输入两个有序字符串(不超过100个字符) 【输出形式】

输出合并后的有序字符串 【输入样例】 aceg bdfh

【输出样例】 abcdefgh 【样例说明】

输入两个有序字符串aceg和bdfh,输出合并后的有序字符串abcdefgh 【评分标准】

结果完全正确得20分,每个测试点4分,提交程序文件名为combine.c。 #include

char * str_bin(char* str1, char* str2) {

static char str[100]; int i = 0;

while (*str1 && *str2) {

if (*str1 < *str2) str[i++] = *str1++; else

str[i++] = *str2++;

} if (*str1)

while (str[i++] = *str1++); else

while (str[i++] = *str2++); return str; }

int main () { char a[100]; char b[100];

scanf(\ printf (\ return 0; } 作业四

填空题

# 题目

1. 已知: int a=2, b=7; 计算下列表达式的值:5

a=4,b=1,a>b?++a:++b;

选择题

# 题目 1. 已知:char a=’a’;float b=2.3;double c=41;int d;则执行语句d=a+b+c;后变量d的数据类型为A

8 / 30

(A) int (B) char (C) float (D) double

2. 字符串“\\ta\\017bc”的长度(不包括结束符)是C (A) 9 (B) 5 (C) 6

(D) 7

3. 设整型变量x和y的值均为7,则表达式“x/(y-4)”的值是C A. 3

B. -3 C. 2 D. 1

4. 题目内容: 有输入语句:int a,b,c; scanf(\&a, &b, &c); 为使变量a的值为1,b的值为3,c的值为2,

从键盘输入数据的正确形式应当是(注:#表示空格)D

(A) 132<回车> (B) 1,3,2<回车>

(C) a=1#b=3#c=2<回车> (D) a=1,b=3,c=2<回车> 编程题

作业四---反弹

1. 【问题描述】

已知一球从高空落下时,每次落地后反弹至原高度的四分之一再落下。编写一程序,从键盘输入整数n和m,求该球从n米的高空落下后,第m次落地时共经过的路程以及第m次落地后反弹的高度,并输出结果。 【输入形式】

从键盘输入整数n和m,以空格隔开。 【输出形式】 输出两行:

第一行输出总路程,保留小数点后两位; 第二行输出第m次落地后反弹的高度,保留小数点后两位。 【输入样例】 40 3

【输出样例】 65.00 0.63

【评分标准】

结果完全正确得20分,每个测试点4分,提交程序文件high.c。

---日期天数转换

2. 【问题描述】编写一个程序,用户输入日期,计算该日期是这一年的第几天。

【输入形式】用户在第一行输入一个日期(年月日,中间以空格分割)

【输出形式】程序在下一行输出一个整数 【样例输入】2006 2 21 【样例输出】52

【样例说明】用户以年月日的格式输入,中间以空格分割,程序计算出该天是输入年份的第几天并输出该天数。另外还需要判断这一年是否为闰年。

【评分标准】结果完全正确得20分,每个测试点4分。提交程序名为:datetoday.c

#include struct tian { int year; int month; int day;};

int days(int year,int month,int day) { int

s=0,i,a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; if(year%4==0&&year0!=0||year@0==0) a[2]=29; for(i=1;i

9 / 30

return s; }

void main() { int k=0; struct tian a; scanf(\day); k=days(a.year,a.month,a.day); printf(\}

第五次走也 填空题

# 题目

1. 已知:int k= 4,a=3,b=2,c=1;则表达式“k

2. 已知:char x=’A’, y=’B’; 执行“(x=’B’)||(y=’C’)”的运算后,变量x,y的值分别为(答案用逗号隔开) 'B','B'

3. 已知:int a=5,b=6,w=1,x=2,y=3,z=4;执行语句“(a=w>x)&&(b=y>z);”后b 的值为6

选择题

# 题目

1. 执行以下程序段后,变量a,b,c的值分别是B

int x = 10, y = 9;

int a, b, c;

a = (--x == y++)? --x: ++y; b = x++; c = y;

(A) a = 9, b = 9, c = 9 (B) a = 8, b= 8, c = 10 (C) a = 9, b = 10, c = 9 (D) a = 11, b = 11, c = 10

编程题

作业五---删数问题

1. 【问题描述】输入一个高精度的大正整数S(S最长可达240位),去掉其中任意N位数字后剩下的数字按原次序组成一个新的正整数S’。编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数S’最小。 【输入形式】输入有两行:

1.第一行是大整数S。其中S最长可达240位。

2.第二行是整数N。S、N均以非0数字开头。 【输出形式】输出有一行,是在S中删除N位后所得的最小数字S’。 【样例输入1】 178543 4

【样例输出1】13

【样例输入2】 1002 1

【样例输出2】002

【样例说明】样例1中输入整数S=178543,N=4,要求在178543中删除4位,使剩下的数字最小。正确答案为S’ = 13。样例2中输入整数S=1002,N=1,删完一位后S’ = 002,而不是2,即2之前的0也必须输出。 【运行时限】程序一次运行的最长时间限制在15秒内,超出则认为程序错误。

10 / 30

【算法提示】将整数看作字符串形式读入;删数时,从前往后寻找第一个比后一个数字大的数字,然后删除之,按照这种方法删除N个数字即得最小数字。

【评分标准】该题要求输出一个大整数的各位数字。结果完全正确得20分,每个测试点4分。上传C语言文件名为delete.c。

#include #include

/* scan from 0 - 9, test the input, rescan if get the result. */ int main() {

char integer[250], result[250];

int start = 0, strlength, n, i = 0, j, temp, k = 0;

fgets(integer, 249, stdin); strlength = strlen(integer) - 1; integer[strlength] = '\\0'; scanf(\ for (i = 0; i <= 9; i++) { temp = i;

for (j = start; j <= n && n < strlength; j++)

if (integer[j] == temp + '0') { result[k++] = temp + '0'; n++;

start = j + 1; i = -1; break; } }

for (i = 0; i < k; i++)

printf(\ return 0; }


[新]C语言期末复习,经典练习题+知识点总结+模拟考题 三位一体,(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:定语从句The Relative Clause

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: