编程题(共10题; 共100.0分)(给猛男妙妙屋更一篇模拟考试)
从键盘输入两个整数[m,n], 输出m和n之间的所有素数。
输入样例:3,20
输出样例:3 5 7 11 13 17 19 (输出数据之间用空格间隔)
#include
#include
int isPrime(int r)
{
if (r < 2)
{
return 0;
}
for (int i = 2;i <= sqrt(r);i++)
{
if (r % i == 0)
{
return 0;
}
}
return 1;
}
int main()
{
int m = 0, n = 0;
scanf("%d%d", &m, &n);
for (int i = m;i <= n;i++)
{
if (isPrime(i))
{
printf("%d ", i);
}
}
return 0;
}
从键盘输入10个整数存入数组中,从键盘输入一个整数,
判断从键盘输入的整数是否在数组中,如果找到了,输出该数所在的位置,
否者提示“not found”。同时按由小到大次序对这批数据进行排序,并输出。
输入要求:第一行输入10个整数,数据间使用空格间隔
第二行 输入一个待查找的整数
输出要求: 第一行输出是否找待查找的数据的信息
第二行输出排序后的数据,要求数据间用空格间隔
#include
void bubble_sort(int arr[], int sz)//sz是传入数组大小,此题是10,也可以不加
{
for (int i = 0;i < sz - 1;i++)
{
int flag = 1;//优化(外面标记一下)(可以不写)
for (int j = 0;j < sz - 1 - i;j++)
{
if (arr[j] > arr[j + 1])
{
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
flag = 0;//如果内循环没有一次是要交换的,说明全部的数都排好了,此时flag为1,等下会break
}
}
if (flag)
{
break;
}
}
}
int main()
{
int arr[10] = { 0 };
for (int i = 0;i < 10;i++)
{
scanf("%d", &arr[i]);
}
int n = 0;
scanf("%d", &n);
int flag = 0;
for (int i = 0;i < 10;i++)
{
if (arr[i] == n)
{
printf("%d ", i);
flag++;
}
}
if (flag == 0)
{
printf("not found");
}
printf("\n");
int sz = sizeof(arr) / sizeof(arr[0]);//这题sz可以直接等于10
bubble_sort(arr, sz);//sz可以直接变成传入10
for (int i = 0;i < 10;i++)
{
printf("%d ", arr[i]);
}
return 0;
}
从键盘输入一个字符,在给定的字符串中寻找该输入字符,
若找到打印输出该字符,没有找到给出提示信息“not found”。
给定的字符串:“the people's republic of china”
输入样例:p
输出样例:p
输入样例:t
输出样例:not found
#include
#include
int main()
{
char arr[50] = "the people's republic of china";
char c = '0';
scanf("%c", &c);
for (int i = 0;i < strlen(arr);i++)
{
if (arr[i] == c)
{
printf("%c", c);
return 0;
}
}
printf("not found");
return 0;
}
设某公司的业务员工资的计算方法为:工资=基本工资+提成。
其中,提成的计算方法为:当销售额在10000元以下时,只发基本工资1000元;
当销售额在10000元以上才可以拿提成。提成的比率为:
当销售额在20000元以下时,超出10000元的部分可按5% 提成;
当销售额在20000元以上50000元以下时,超出20000元的部分可按6% 提成;
当销售额在50000元以上100000元以下时,超出50000元的部分可按7% 提成;
当销售额在100000元以上时,超出100000元的部分可按8% 提成。
输入一个业务员的销售额,计算其应发的工资额。
输入提示信息:"Please input sale: \n"
输入格式:"%d"
输出格式:"%.3f\n"示例:
Please input sale : 23456
1707.360
#include
int main()
{
float sale = 0, wage = 0;
printf("Please input sale: \n");
scanf("%f", &sale);
if (sale <= 10000)
wage = 1000;
if (sale > 10000 && sale <= 20000)
wage = 1000 + (sale - 10000) * 0.05;
if (sale > 20000 && sale <= 50000)
wage = 1000 + 10000 * 0.05 + (sale - 20000) * 0.06;
if (sale > 50000 && sale <= 100000)
wage = 1000 + 10000 * 0.05 + 30000 * 0.06 + (sale - 50000) * 0.07;
if (sale > 100000)
wage = 1000 + 10000 * 0.05 + 30000 * 0.06 + 50000 * 0.07 + (sale - 100000) * 0.08;
printf("%.3f\n", wage);
return 0;
}
编写程序,输入一个整数,将它逆序输出。要求定义并调用函数reverse(number),
它的功能是返回number的逆序数。例如reverse(12345)的返回值是54321.
#include
int reverse(int x)
{
int m = 0;
int sum = 0;
while (x != 0)
{
m = x % 10;
x = x / 10;
sum = (sum * 10) + m;
}
return sum;
}
//数组逆序
void reverse2(int* p, int left, int right)
{
while (left < right)
{
int tmp = p[left];
p[left] = p[right];
p[right] = tmp;
left++;
right--;
}
}
int main()
{
int n = 0;
scanf("%d", &n);
printf("%d\n", reverse(n));
return 0;
}
某班进行了大学计算机基础考试,
现要求的定义函数count帮助任课老师统计优秀率(90分以上为优秀)。
要求学生成绩使用数组来存储。
输入样例:78 90 87 65 45 78 23 94 67 77
输出样例:2
#include
int count(int arr[], int sz)
{
int count = 0;
for (int i = 0;i < sz;i++)
{
if (arr[i] >= 90)
{
count++;
}
}
return count;
}
int main()
{
int arr[10] = { 0 };
for (int i = 0;i < 10;i++)
{
scanf("%d", &arr[i]);
}
printf("%d", count(arr, 10));
return 0;
}
”20211202“是一个特殊的日子,是完全对称日。
所谓完全对称日即正读和反读得到的字符串是相同的,
实质就是一个回文词。英文中有很多的回文词,回文词的拼法十分有趣,无论是从前往后拼读,
还是从后往前拼读,他们的拼法和词义都不变。例如:dad(爸爸),mum(妈妈),noon(中午),
eve(前夕),eye(眼睛),pop(流行),deed(行为),level(水平)等。
现在请你编程输入一个字符串,判断它是否是回文。
提示:
(1)设置两个指针pStart和pEnd,让pStart指向字符串首部,让pEnd指向字符串尾部。
或者设置两个循环变量i和j,i指向首字符,j指向结束符。
(2)利用循环从字符串两边对指针所指字符进行比较,当对应的两字符相等且两指针未超越对方时,
使指针pStart向前移动一个字符位置(加1),使指针pEnd向后移动一个字符位置(减1),
一旦发现两字符不等或两指针已互相超越(不可能是回文),则立即停止循环。
(3)根据退出循环时两指针的位置,判断字符串是否为回文。
输入样例:ABCCBA
输出样例:YES!
输入样例:student
输出样例:NO!
#include
#include
int main()
{
char str[100] = { 0 };
gets(str);
char* pStart = str, * pEed = &str[strlen(str) - 1];
while (pStart < pEed)
{
if (*pStart != *pEed)
{
break;
}
pStart++;
pEed--;
}
if (pStart >= pEed)
{
printf("yes");
}
else
{
printf("no");
}
return 0;
}
#include
#include
int main()
{
char arr[100] = { 0 }, arr_tmp[100] = { 0 };//把arr反过来拷贝
gets(arr);
int len = strlen(arr);
int end = len - 1;
for (int i = 0;i < len;i++)
{
arr_tmp[i] = arr[end--];
}
if (strcmp(arr, arr_tmp) == 0)
{
printf("yes");
}
else
{
printf("no");
}
return 0;
}
从3个红球,5个白球,6个黑球中任意取出8个作为一组。在每组中可以没有黑球,
但必须要有红球和白球。编程实现复合要求的组合数。
#include
int main()
{
int sum = 0;
for (int red = 1; red <= 3; red++)
{
for (int white = 1; white <= 5; white++)
{
for (int black = 0; black <= 6; black++)//可以没有黑球,从0开始
{
if (red + white + black == 8)
{
printf("red:%d white:%d black:%d\n", red, white, black);
sum++;
}
}
}
}
printf("sum = %d", sum);
return 0;
}
编程实现判断用户在某购物网站注册时输入的密码是否合法,要求密码长度不能超过20,
且密码是混合字符,必须包含英文大写字母,英文小写字母和数字字符三种字符。
如果用户输入的注册密码复合要求,输出“yes ”否者输出 "no"
#include
#include
int main()
{
char arr[100];
gets(arr);
int lower = 0, upper = 0, digit = 0;
int len = strlen(arr);
if (len <= 20)
{
for (int i = 0;i < len;i++)
{
if (arr[i] >= 'a' && arr[i] <= 'z')
{
lower++;
}
if (arr[i] >= 'A' && arr[i] <= 'Z')
{
upper++;
}
if (arr[i] >= '0' && arr[i] <= '9')
{
digit++;
}
}
}
//如果不能是混合字符就加上k+upper+digit==i
if (lower != 0 && upper != 0 && digit != 0)
{
printf("yes");
}
else
{
printf("no");
}
return 0;
}
应用结构体类型,编程输入4名学生的姓名和高等数学、
大学英语、模拟电路三门课程的成绩,输出平均分最高的学生的姓名。
输入样例:
zhangsan 80 90 100
lisi 95 85 98
wangwu 95 85 95
zhaoliu 100 80 88
输出样例:
lisi
#include
struct student
{
char name[20];
float score[3];
float aver;
};
int main()
{
struct student s[4];
for (int i = 0;i < 4;i++)
{
scanf("%s%f%f%f", &s[i].name, &s[i].score[0], &s[i].score[1], &s[i].score[2]);
s[i].aver = (s[i].score[0] + s[i].score[1] + s[i].score[2]) / 3;
}
float max = -1;
int i = 0, tmp = 0;
for (i = 0;i < 4;i++)
{
if (s[i].aver > max)
{
max = s[i].aver;
tmp = i;
}
}
printf("%s", s[tmp].name);
return 0;
}
期末考试题(共10题; 共100.0分)(考试时长:120分钟)
1.某百货公司采用购物打折扣的方法来促销商品, 该公司根据输入的购物金额,
计算并输出顾客实际付款金额, 顾客一次性购物的折扣率是:
(1)少于500元不打折;
(2)500元及以上且少于1000元者, 按九五折优惠;
(3)1000元及以上且少于2000元者, 按九折优惠;
(4)2000元及以上且少于3000元者, 按八五折优惠;
(5)3000元及以上者, 按八折优惠。
编程输入购物金额和实付金额, 输出折扣率及实际应付款金额和找零金额。
输入格式 :
一行中有两个实数以空格隔开,第一个数是消费总金额,第二个数是实付金额。
输出格式:
输出共三行,第一行输出折扣信息,第二行输出打折后金额,第三行输出找零金额。
输入样例 :
5013 4050
输出样例 :
80 %
4010.40
39.60
#include
#include
int main()
{
float money = 0, sum = 0;//money是购物金额,sum是实付金额
scanf("%f%f", &money, &sum);
float s = 0, putm = 0, ret = 0;//s是折扣率,putm是打折后金额,ret是找零
if (money < 500)
{
s = 1.00;
}
if (money >= 500 && money < 1000)
{
s = 0.95;
}
if (money >= 1000 && money < 2000)
{
s = 0.90;
}
if (money >= 2000 && money < 3000)
{
s = 0.85;
}
if (money >= 3000)
{
s = 0.80;
}
putm = money * s;
ret = sum - putm;
printf("%.0f", s * 100);
putchar('%');
printf("\n");
printf("%.2f\n", putm);
printf("%.2f", ret);
return 0;
}
一个大于1的自然数p,除了1和本身p以外,不能被其他自然数整除,
称p为素数(又称质数,prime number)。已知素数有无限多个,但是到目前为止,
人们未找到一个公式可求出所有质数。2016年1月,发现世界上迄今为止最大的质数,
长达2233万位,如果用普通字号将它打印出来长度将超过65公里。
编程实现,输入一个大于1的正整数N,输出其是否为素数,如果是输出YES,否则输出NO。
输入样例 :
15
输出样例 :
NO
输入样例 :
53
输出样例 :
YES
#include
#include
int is_prime(int n)
{
if (n < 2)
{
return 0;
}
for (int i = 2; i <= sqrt(n); i++)
{
if (n % i == 0)
{
return 0;
}
}
return 1;
}
int main()
{
int n = 0;
scanf("%d", &n);
if (is_prime(n))
{
printf("YES");
}
else
{
printf("NO");
}
return 0;
}
应用结构体类型,编程输入n个学生的姓名和高级语言、数据结构、
算法分析三门课程的成绩,输出总分第一名的学生姓名。
输入样例 :
Madaha 80 90 100
Jibuzhu 95 85 98
Burenzhen 95 85 90
Xueba 100 80 98
输出样例 :
Jibuzhu 278
#include
#define N 4
struct student
{
char name[20];
float score[3];
float sum;
};
int main()
{
struct student s[N];
for (int i = 0; i < N; i++)
{
scanf("%s%f%f%f", &s[i].name, &s[i].score[0], &s[i].score[1], &s[i].score[2]);
s[i].sum = s[i].score[0] + s[i].score[1] + s[i].score[2];
}
int tmp = 0;
float max = -1;
for (int i = 0; i < N; i++)
{
if (s[i].sum > max)
{
max = s[i].sum;
tmp = i;
}
}
printf("%s %.0f", s[tmp].name, s[tmp].sum);
return 0;
}
学生成绩系统中常常需要统计各分数段的学生占比,
请编写一个名为CountRate函数计算优秀学生的比例,其中成绩的分值从0至100,
优秀成绩是指90分以上(含90分),函数有两个形式参数:一个用于接收学生成绩的数组,
另一个用于接收数组的长度,并在main函数调用。
输入样例:80.7 90 68.5 90.8 100 98.6 75.8 60 100 69 92(成绩)
11 (数组长度)
输出样例:54.55 %
#include
float CountRate(float arr[], int sz)
{
float count = 0;
for (int i = 0; i < sz; i++)
{
if (arr[i] >= 90)
{
count++;
}
}
float ret = (count / sz) * 100;
return ret;
}
int main()
{
float arr[11] = { 0 };
for (int i = 0; i < 11; i++)
{
scanf("%f", &arr[i]);
}
int sz = sizeof(arr) / sizeof(arr[0]);//这题sz可以直接等于11
printf("%.2f", CountRate(arr, sz));
putchar('%');
return 0;
}
Median(中位数) is an important concept in statistics(统计学).It refers to the average value of the middle two numbers in a series of numbers arranged from small to large.Of course, if the number of data is odd(奇数), the middle number is the median.In order to evaluate(评估) students' course learning, assume that there are 10 students whose grades are 80.7, 90, 68.5, 90.8, 100, 98.6, 75.8, 60, 100, 69. Please define an array to hold(保存) these scores. And sort them in ascending order(升序排序), and then calculate the median of the array.
Output format: % .2f
#include
#include
//int cmp(const void* p1, const void* p2)
//{
// return *(float*)p1 > *(float*)p2 ? 1 : 0;
//}
void bubble_sort(float arr[], int sz)
{
for (int i = 0;i < sz - 1;i++)
{
int flag = 1;
for (int j = 0;j < sz - 1 - i;j++)
{
if (arr[j] > arr[j + 1])
{
float tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
flag = 0;
}
}
if (flag)
{
break;
}
}
}
int main()
{
float arr[10] = { 0 };
for (int i = 0; i < 10; i++)
{
scanf("%f", &arr[i]);
}
int sz = sizeof(arr) / sizeof(arr[0]);//这题sz可以直接等于10
bubble_sort(arr, sz);
//for (int i = 0; i < 10; i++)//考试时可以把这段注释放开看看排序对不对
//{
// printf("%.2f ", arr[i]);
//}
//printf("\n");
printf("%.2f", (arr[4] + arr[5]) / 2.0);
return 0;
//qsort(arr,sz,sizeof(float),cmp);
//for (int i = 0; i < 10; i++)
//{
// printf("%.2f ",arr[i]);
//}
//printf("\n");
//if (sz % 2 == 0)
//{
// printf("%.2f", (arr[4] + arr[5]) / 2.0);
//}
//else
//{
// printf("%.2f", arr[sz / 2]);
//}
}
Pointer is an important means to improve the running efficiency of programs(程序运行效率), especially for the operation of arrays with large amounts of data.During system registration(系统注册), the system generally requires to input mixed characters(混合字符) to improve the security of the system(系统安全性).Assume that the valid password must contain digits, uppercase letters, and lowercase letters.Define a variable that can save the password(the password length does not exceed 20)(密码长度不超过20), and use the pointer to determine whether the password is valid.
input sample:Song123wjk123
output sample:valid
input sample:songwjk123123
output sample:invalid
#include
#include
int main()
{
char array[100] = { 0 };
gets(array);
int sz = strlen(array);
int digits = 0, uppercase = 0, lowercase = 0;
char* arr = array;//指针像数组一样用,arr[1] = *(arr+1)
if (sz <= 20)
{
for (int i = 0;i < sz;i++)
{
if (arr[i] >= 'a' && arr[i] <= 'z')
{
lowercase++;
}
if (arr[i] >= 'A' && arr[i] <= 'Z')
{
uppercase++;
}
if (arr[i] >= '0' && arr[i] <= '9')
{
digits++;
}
}
}
if (digits != 0 && uppercase != 0 && lowercase != 0 /*&& digits+uppercase+lowercase==sz*/)
{
printf("valid\n");
}
else
{
printf("invalid\n");
}
return 0;
}