内容正文:
《C语言程序设计》
期末复习卷(九)
时间:90分钟 总分:100分
班级 姓名 学号 成绩
一.程序设计题(本大题共10小题,每小题10分,共100分)
1.请编写函数fun, 它的功能是:计算并输出 n(包括 n)以内能被5或9整除的所有自然数的倒数之和。例如,在主函数中从键盘给n输入20后,输出为:s=0.583333,注意:要求n的值不大于100。
#include <stdio.h>
double fun(int n){
/*******space*******/
double sum = 0.0;
int i;
for(i=1; i<=n;i++){
if(i % 5 == 0 || i % 9 == 0) {
sum += 1.0 / i;
}
}
return sum;
/*******space*******/
}
int main() {
int n;
printf("【请输入一个不大于 100 的整数 n: 】");
scanf("%d", &n);
if (n > 100) {
printf("输入的数应不大于 100。
");
return 1;
}
double result = fun(n);
printf("s=%.6f
", result);
return 0;
}
2.请编写函数fun ,它的功能是:将十进制正整数 m 转换成 k(2≤k≤9)进制数, 并按高位到低位顺序输出。例如,若输入8和2,则应输出1000(即十进制数8转换成二进制表示是 1000)
#include <stdio.h>
int fun(int m, int k, int result[]) {
/*******space*******/
int i = 0;
if(m == 0){
result[i++]=0;
}else{
while(m>0){
result[i++] = m % k;
m /= k;
}
}
return i;
/*******space*******/
}
int main() {
int m, k;
int result[32];
printf("【请输入一个十进制正整数 m 和进制 k(2 ≤ k ≤ 9),用空格分隔:】");
scanf("%d %d", &m, &k);
if (k < 2 || k > 9) {
printf("输入的 k 不在 2 到 9 的范围内,请重新输入。
");
return 1;
}
int digitCount = fun(m, k, result);
for (int i = digitCount - 1; i >= 0; i--) {
printf("%d", result[i]);
}
printf("
");
return 0;
}
3.请编写函数fun,它的功能是:求出s所指字符串中最后一次出现的t所指子字符串的地
址,通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值为NULL。
注意不能使用C语言的库函数。
示例1
【请输入主字符串: 】abcdabfabcdx
【请输入子字符串: 】ab
abcdx
示例2
【请输入主字符串: 】abcdabfabcdx
【请输入子字符串: 】abd
not be found!
#include <stdio.h>
char* fun(char *s, char *t) {
/*******space*******/
char *last = NULL;
char *p, *q, *r;
for(p = s; *p != '\0';p++){
q = p;
r = t;
while(*r != '\0' && *q == *r){
q++;
r++;
}
if(*r == '\0'){
last = p;
}
}
return last;
/*******space*******/
}
int main(){
char s[100];
char t[20];
printf("【请输入主字符串: 】");
scanf("%99s", s);
printf("【请输入子字符串: 】");
scanf("%19s", t);
char *result = fun(s, t);
if (result != NULL) {
printf("%s
", result);
} else {
printf("not be found!
");
}
return 0;
}
4.已知一个数列从第 0 项开始的前三项分别为 0,0,1,以后的各项都是其相邻的前三项之和。编写函数fun,fun的功能是:计算并输出该数列前 n 项的平方根之和。n的值通过形参传入。例如,当 n=1 0 时,程序的输出结果应为:23.1 97745。
示例:
【请输入数列的项数 N=】10
【该数列前 10 项的和为:】23.197745
#include<math.h>
double fun(int n) {
if (n < 0) {
return 0.0;
}
double s0 = 0.0;
double s1 = 0.0;
double s2 = 1.0;
double sum = 0.0;
/*******space*******/
int i;
for(i = 0; i < n; i++){
if(i == 0) sum += sqrt(s0);
else if(i == 1) sum += sqrt(s1);
else if(i == 2) sum += sqrt(s2);
else{
double s3 = s0 + s1 + s2;
sum += sqrt(s3);
s0 = s1;
s1 = s2;
s2 = s3;
}
}
return sum;
/*******space*******/
}
int main() {
int n;
printf("【请输入数列的项数 N=】");
scanf("%d", &n);
printf("【该数列前 %d 项的和为:】%.6f
", n,fun(n));
return 0;
}
5.题目:编写一个函数 fun,它的功能是计算下列级数和:S = 1 + x + x^2/2! + x^3/3! + ... + x^n/n!(n的值由用户输入)。例如,当 n=10,x=0.3 时,函数值为 1.349859
示例:
【请输入级数的项数参数n(非负整数):】10
【请输入x的值:】0.3
【级数和为:】1.349859
#include <stdio.h>
double fun(int n, double x) {
/*******space*******/
double sum = 1.0;
double term = 1.0;
int i;
for(i = 1; i <= n; i++){
term = term * x / i;
sum += term;
}
return sum;
/*******space*******/
}
int main(){
int n;
double x, result;
printf("【请输入级数的项数参数n(非负整数):】");
while (scanf("%d", &n) != 1 || n < 0) {
printf("输入错误!请输入非负整数:");
while (getchar() != '
');
}
printf("【请输入x的值:】");
while (scanf("%lf", &x) != 1) {
printf("输入错误!请输入有效的数字:");
while (getchar() != '
');
}
result = fun(n, x);
printf("【级数和为:】%.6f
", result);
return 0;
}
6.题目:函数 fun 的功能是:将由键盘输入的字符串中所有 ASCII 码值小于等于97的字符存入形参 t 所指字符数组中,形成一个新串,并统计出符合条件的字符个数作为函数值返回。例如,形参 s 所指的字符串为:Abc@1 x56*,程序执行后 t 所指字符数组中的字符串应为:A@1 56*。
示例:
【请输入字符串:】Abc@1 x56*
【新字符串为:】A@1 56*
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int fun(const char *s, char *t) {
int count = 0;
/*******space*******/
while(*s != '\0'){
if(*s <= 97){
t[count++] = *s;
}
s++;
}
t[count] = '\0';
return count;
/*******space*******/
}
int main() {
char s[1000];
char t[1000];
int num;
printf("【请输入字符串:】");
if (fgets(s, sizeof(s), stdin) == NULL) {
printf("输入失败!
");
return 1;
}
s[strcspn(s, "
")] = '\0';
for (int i=0;s[i]!='\0';i++){
if ((unsigned char)s[i] > 127) {
printf("输入包含无ASCII码的字符,程序结束!
");
exit(1);
}
}
num = fun(s, t);
if (num == 0) {
printf("【新字符串为:】无符合条件的字符串
");
} else {
printf("【新字符串为:】%s
", t);
}
return 0;
}
7.编写函数fun,将十进制正整数m转换成二进制,并返回二进制表示中1的个数。例如,m=13,二进制为1101,返回3
#include<stdio.h>
int fun(int m){
/*******space*******/
int count = 0;
while(m > 0){
if(m % 2 == 1){
count++;
}
m /= 2;
}
return count;
/*******space*******/
}
int main(){
int m;
scanf("%d", &m);
printf("%d
", fun(m));
return 0;
}
8.编写函数fun,找出字符串s中第一个只出现一次的字符,通过函数值返回。若没有,返回'\0'。例如,s="abacbd",第一个只出现一次的字符是'c'。
#include<stdio.h>
char fun(char *s){
/*******space*******/
int count[256] = {0};
char *p = s;
while(*p != '\0'){
count[(int)*p]++;
p++;
}
p = s;
while(*p != '\0'){
if(count[(int)*p] == 1){
return *p;
}
p++;
}
return '\0';
/*******space*******/
}
int main(){
char s[200];
scanf("%s",s);
char result = fun(s);
if(result != '\0') printf("%c
", result);
else printf("无
");
return 0;
}
9.编写函数fun,计算斐波那契数列前n项中所有偶数的和。斐波那契数列:F(1)=1,F(2)=1,F(n)=F(n-1)+F(n-2)。例如,n=10,前10项为:1,1,2,3,5,8,13,21,34,55,偶数为2,8,34,和为44。
#include<stdio.h>
int fun(int n){
/*******space*******/
int sum = 0;
int a = 1, b = 1, c;
int i;
if(n >= 1 && a % 2 == 0) sum += a;
if(n >= 2 && b % 2 == 0) sum += b;
for(i = 3; i <= n; i++){
c = a + b;
if(c % 2 == 0){
sum += c;
}
a = b;
b = c;
}
return sum;
/*******space*******/
}
int main(){
int n;
scanf("%d", &n);
printf("%d
", fun(n));
return 0;
}
10.编写函数fun,将字符串s中的所有小写字母转换为大写字母,其他字符不变。不能使用库函数toupper()
#include<stdio.h>
void fun(char *s){
/*******space*******/
while(*s != '\0'){
if(*s >='a' && *s <= 'z'){
*s = *s - 32;
}
s++;
}
/*******space*******/
}int main(){
char s[200];
gets(s);
fun(s);
printf("%s
", s);
return 0;
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
《C语言程序设计》
期末复习卷(九)
时间:90分钟 总分:100分
班级 姓名 学号 成绩
一.程序设计题(本大题共10小题,每小题10分,共100分)
1.请编写函数fun, 它的功能是:计算并输出 n(包括 n)以内能被5或9整除的所有自然数的倒数之和。例如,在主函数中从键盘给n输入20后,输出为:s=0.583333,注意:要求n的值不大于100。
#include <stdio.h>
double fun(int n){
/*******space*******/
/*******space*******/
}
int main() {
int n;
printf("【请输入一个不大于 100 的整数 n: 】");
scanf("%d", &n);
if (n > 100) {
printf("输入的数应不大于 100。
");
return 1;
}
double result = fun(n);
printf("s=%.6f
", result);
return 0;
}
2.请编写函数fun ,它的功能是:将十进制正整数 m 转换成 k(2≤k≤9)进制数, 并按高位到低位顺序输出。例如,若输入8和2,则应输出1000(即十进制数8转换成二进制表示是 1000)
#include <stdio.h>
int fun(int m, int k, int result[]) {
/*******space*******/
/*******space*******/
}
int main() {
int m, k;
int result[32];
printf("【请输入一个十进制正整数 m 和进制 k(2 ≤ k ≤ 9),用空格分隔:】");
scanf("%d %d", &m, &k);
if (k < 2 || k > 9) {
printf("输入的 k 不在 2 到 9 的范围内,请重新输入。
");
return 1;
}
int digitCount = fun(m, k, result);
for (int i = digitCount - 1; i >= 0; i--) {
printf("%d", result[i]);
}
printf("
");
return 0;
}
3.请编写函数fun,它的功能是:求出s所指字符串中最后一次出现的t所指子字符串的地
址,通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值为NULL。
注意不能使用C语言的库函数。
示例1
【请输入主字符串: 】abcdabfabcdx
【请输入子字符串: 】ab
abcdx
示例2
【请输入主字符串: 】abcdabfabcdx
【请输入子字符串: 】abd
not be found!
#include <stdio.h>
char* fun(char *s, char *t) {
/*******space*******/
/*******space*******/
}
int main(){
char s[100];
char t[20];
printf("【请输入主字符串: 】");
scanf("%99s", s);
printf("【请输入子字符串: 】");
scanf("%19s", t);
char *result = fun(s, t);
if (result != NULL) {
printf("%s
", result);
} else {
printf("not be found!
");
}
return 0;
}
4.已知一个数列从第 0 项开始的前三项分别为 0,0,1,以后的各项都是其相邻的前三项之和。编写函数fun,fun的功能是:计算并输出该数列前 n 项的平方根之和。n的值通过形参传入。例如,当 n=1 0 时,程序的输出结果应为:23.1 97745。
示例:
【请输入数列的项数 N=】10
【该数列前 10 项的和为:】23.197745
#include<math.h>
double fun(int n) {
if (n < 0) {
return 0.0;
}
double s0 = 0.0;
double s1 = 0.0;
double s2 = 1.0;
double sum = 0.0;
/*******space*******/
/*******space*******/
}
int main() {
int n;
printf("【请输入数列的项数 N=】");
scanf("%d", &n);
printf("【该数列前 %d 项的和为:】%.6f
", n,fun(n));
return 0;
}
5.题目:编写一个函数 fun,它的功能是计算下列级数和:S = 1 + x + x^2/2! + x^3/3! + ... + x^n/n!(n的值由用户输入)。例如,当 n=10,x=0.3 时,函数值为 1.349859
示例:
【请输入级数的项数参数n(非负整数):】10
【请输入x的值:】0.3
【级数和为:】1.349859
#include <stdio.h>
double fun(int n, double x) {
/*******space*******/
/*******space*******/
}
int main(){
int n;
double x, result;
printf("【请输入级数的项数参数n(非负整数):】");
while (scanf("%d", &n) != 1 || n < 0) {
printf("输入错误!请输入非负整数:");
while (getchar() != '
');
}
printf("【请输入x的值:】");
while (scanf("%lf", &x) != 1) {
printf("输入错误!请输入有效的数字:");
while (getchar() != '
');
}
result = fun(n, x);
printf("【级数和为:】%.6f
", result);
return 0;
}
6.题目:函数 fun 的功能是:将由键盘输入的字符串中所有 ASCII 码值小于等于97的字符存入形参 t 所指字符数组中,形成一个新串,并统计出符合条件的字符个数作为函数值返回。例如,形参 s 所指的字符串为:Abc@1 x56*,程序执行后 t 所指字符数组中的字符串应为:A@1 56*。
示例:
【请输入字符串:】Abc@1 x56*
【新字符串为:】A@1 56*
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int fun(const char *s, char *t) {
int count = 0;
/*******space*******/
/*******space*******/
}
int main() {
char s[1000];
char t[1000];
int num;
printf("【请输入字符串:】");
if (fgets(s, sizeof(s), stdin) == NULL) {
printf("输入失败!
");
return 1;
}
s[strcspn(s, "
")] = '\0';
for (int i=0;s[i]!='\0';i++){
if ((unsigned char)s[i] > 127) {
printf("输入包含无ASCII码的字符,程序结束!
");
exit(1);
}
}
num = fun(s, t);
if (num == 0) {
printf("【新字符串为:】无符合条件的字符串
");
} else {
printf("【新字符串为:】%s
", t);
}
return 0;
}
7.编写函数fun,将十进制正整数m转换成二进制,并返回二进制表示中1的个数。例如,m=13,二进制为1101,返回3
#include<stdio.h>
int fun(int m){
/*******space*******/
/*******space*******/
}
int main(){
int m;
scanf("%d", &m);
printf("%d
", fun(m));
return 0;
}
8.编写函数fun,找出字符串s中第一个只出现一次的字符,通过函数值返回。若没有,返回'\0'。例如,s="abacbd",第一个只出现一次的字符是'c'。
#include<stdio.h>
char fun(char *s){
/*******space*******/
/*******space*******/
}
int main(){
char s[200];
scanf("%s",s);
char result = fun(s);
if(result != '\0') printf("%c
", result);
else printf("无
");
return 0;
}
9.编写函数fun,计算斐波那契数列前n项中所有偶数的和。斐波那契数列:F(1)=1,F(2)=1,F(n)=F(n-1)+F(n-2)。例如,n=10,前10项为:1,1,2,3,5,8,13,21,34,55,偶数为2,8,34,和为44。
#include<stdio.h>
int fun(int n){
/*******space*******/
/*******space*******/
}
int main(){
int n;
scanf("%d", &n);
printf("%d
", fun(n));
return 0;
}
10.编写函数fun,将字符串s中的所有小写字母转换为大写字母,其他字符不变。不能使用库函数toupper()
#include<stdio.h>
void fun(char *s){
/*******space*******/
/*******space*******/
}int main(){
char s[200];
gets(s);
fun(s);
printf("%s
", s);
return 0;
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$