期末C实验题目汇总

实验一

  1. 编写程序,程序中使用两种方法,将两个变量的值互换后输出。
#include<stdio.h>
int main(){
    int a, b , temp;
    printf("请输入两个用空格相间隔的数字");
    scanf("%d %d", &a, &b);
    temp = a;
    a = b;
    b = temp;
    printf("互换后:%d %d\n", a, b);
    return 0;
}
#include<stdio.h>
int main(){
    int a, b, sum;
    printf("请输入两个用空格相间隔的数字");
    scanf("%d %d",&a, &b);
    sum = a + b;
    a = sum - a;
    b = sum - b;
    printf("互换后:%d %d\n", a,b);
    return 0;
}

2.从键盘输入一个四位正整数,首先分离出该整数中的每一位数字,并按升序显示输出各位数字;然后用分离出的最大数做为十位数,最小数做为个位数组成一个新的数字,并显示输出结果。例如,若输入的四位正整数为 9215,按升序显示输出分离出的各位数字为 1 2 5 9;组成数字为 91。
具体要求: ①四位正整数由键盘输入,程序应该对输入的数字是否为四位正整数进行简单的判断; ②对输出结果要有具体说明。

#include<stdio.h>
void swap(int *i, int *n){
    int temp;
    temp = *i;
    *i = *n;
    *n = temp;
}
int main(){
    int number, a, b, c, d,e;
    printf("输入数字:");
    scanf("%d", &number);
    if(number < 10000 && number >= 1000){
        d = number % 10;
        c = (number % 100 - d) / 10;
        b = (number % 1000 - number % 100)/100;
        a = (number - b*100 - c*10 - d) / 1000;
        int str[4] = {a, b, c, d};
        for(int f = 0; f < 4; f++){ 
            for(int m = 0; m < 3-f; m++){
                if (str[m] > str[m+1]){
                    swap(&str[m], &str[m+1]);
                }
            }
        } 
        printf("排序后升序显示:");
        int i;
        for(i = 0; i < 4; i++){
            if(i != 0)printf(",");
                printf("%d", str[i]);
            if(i == 3)printf("\n");
        }
        printf("新组成的数字:%d%d\n", str[3], str[0]);
    }else{
        printf("输入的数字不符合要求!\n");
    }
    return 0;
}

3.编写程序,计算并输出下面分段函数的值:
x*x x<10
y= 2x+5 10≤x≤20
3x-7 其它

#include<stdio.h>
int main(){
    double x;
    printf("请输入数字x的值");
    scanf("%lf", &x);
    printf("分段函数计算结果为:");
    if(x < 10){
        printf("%lf\n", x * x);
    }else if(x <= 20 && x >= 10){
        printf("%lf\n", 2*x + 5);
    }else if(1){
        printf("%lf\n", 3*x +-7);
    }
    return 0;
}

4.将长整型数 s 中每一个数字位上为偶数的数依次取出,构成一个新数放在 t 中,数的高低位置不变。例如:s 中的数字数为:87653142 时,t 中的数为 8642。

#include<stdio.h>
long int fanzhuan(long int r){
    int a;
    long int sum;
    sum = 0;
    while(r != 0){
        a = r % 10;
        sum = sum*10 + a;
        r = r / 10;
    }
    return sum;
}
int main(){
    long int a;
    int b ;
    long int sum = 0;
    long int mus;
    printf("请输入长整型数字s:");
    scanf("%ld", &a);
    for(int i = 0; i < 99; i++){
        b = a % 10;
        if(b % 2 == 0 ){
            sum = sum*10 + b;
        }
        a = a / 10;
        if(a == 0)break;
    }
    mus = fanzhuan(sum);
    printf("依次取出偶数结果为:%ld\n", mus);
    return 0;
}

6.计算:
在这里插入图片描述
具体要求:
①最后一项若小于等于 0.001 时停止计算; ②输出形式为:n=具体值,s=和的具体值;
③按照上述要求,则程序的计算结果:n=500,S=2.985678。

#include<stdio.h>
int main(){
    double n = 1;
    double S = 0;
    int a;
    while ((2*n - 1)/(4*n*n) > 0.001){
        S = S + (2*n - 1)/(4*n*n);
        n = n + 1;
    }
    a = (double)n;
    printf("n = %d, S = %lf\n", a, S);
    return 0;
}

实验二 数组

  1. 从键盘输入 N 个正整数,完成下列的操作要求:
    (1).计算并显示这组整数的平均值。输入和求累加和的功能不要放在一个循环之中。
    (2).统计小于平均值的非素数的数量。若有小于平均值的非素数,首先显示这些素数的数量。然后再按照输入顺序显示这些非素数。
#include<stdio.h>
int panduan(int a){
    int x;
    if(a == 1 || a == 0)return 1;
    else if(a == 2)return 0;
    else if(a > 2){
        for(x = 2; x <= a; x++){
            if(a % x == 0 && a != x)return 1;
            if(a == x)return 0;
        }
    }
}
int main(){
    int str[9];
    double sum = 0;
    int i, n, a = 0;
    double average;
    printf("输入10个整数,将显示小于平均值的非素数。\n");
    for(i = 0; i <= 9; i++){
        printf("输入第%d个数字:", i + 1);
        scanf("%d", &str[i]);
    }
    for(i = 0; i <= 9; i++){
        sum = sum + str[i];
    }
    average = sum / 10;
    printf("平均值:%0.2lf\n", average);
    for(i = 0;i <= 9; i++){
        if(panduan(str[i]) && str[i] < average) a = a + 1;
    }
    printf("符合条件的非素数共有%d个\n", a);
    printf("分别是:\n");
    for(i = 0; i <= 9; i++){
        if(panduan(str[i]) && str[i] < average)printf("第%d个数字:%d\n", i+1,str[i]);
    }
    return 0;
}   
  1. 从键盘输入一个(合理的)身份证号码,显示该号码中对应的出生日期及性别信息。具体要求:不允许输入空串。
#include<stdio.h>
int main(){
    char str[19];
	int i;
    int a;
	printf("请输入身份证号:");
	for(i = 0; i < 19; i++){
		scanf("%c", &str[i]);
	}
	a = str[16] - '0';
	if(a % 2 == 0){
	printf("出生日期为%c%c%c%c年%c%c月%c%c日, 性别为女性。\n", str[6], str[7], str[8], str[9], str[10], str[11], str[12], str[13]);
	}else{
	printf("出生日期为%c%c%c%c年%c%c月%c%c日, 性别为男性。\n", str[6], str[7], str[8], str[9], str[10], str[11], str[12], str[13]);
	} 
	return 0;
}
  1. 将字符串中下标为奇数的字符右移到下一个奇数位置,最右边被移出的字符绕回到第一个奇数位置。下标为偶数的字符不动。例如:原字符串的内容:“abcdefgh”,移动后的字符串内容:“ahcbedgf”。字符串可以直接在定义时赋初值。
#include<stdio.h>
int main(){
    char str[8] = {"abcdefgh"};
    char str2[4];
    int i;
    printf("原字符串为:");
    for(i = 0; i < 8; i++){
        printf("%c", str[i]);
    }
    printf("\n");
    str2 [0] = str [7];
    for(i = 0; i < 3; i++){
        str2[i + 1] = str[2 * i + 1];
    }
    printf("移动后的字符串为:");
    for(i = 0; i < 8; i++){
        if(i % 2 == 0)printf("%c", str[i]);
        if(i % 2 != 0)printf("%c", str2[(i-1) / 2]);
    }
    printf("\n");
    return 0;
}

实验三 函数

  1. 从键盘输入整数 m(10-100 之间),将所有大于 1 小于整数 m 的非素数存放到一个数组中,最后将该数组中的这些非素数显示在屏幕上。
    例如:输入:17,则应输出:4 6 8 9 10 12 14 15 16。
    程序设计要求: main 函数完成数据结构的定义,并调用自定义函数完成题目要求的工作; 自定函数 F1 完成找出非素数的工作; 自定函数 F2 完成输出非素数的工作。
#include<stdio.h>
int F1 (int a){
    int x;
	for(x =2; x <=a; x++){
        if(a % x == 0 && a != x)return 1;
		if(a == x)return 2;;
    }
}
void F2(int a,  int *str){
    int i;
	for(i = 0; i < a; i++){
		printf("%d ", str[i]);
	}
}
int main(){
	int i, a, b = 0, c = 0;
	int str[50];
    printf("输入一个整数(10 - 100之间):");
	scanf("%d", &a);
    for(i = 4; i <= a; i++){
	    if(F1(i) == 1){
			b = b + 1;
			str[c] = i;
			c++;
		}
	}
    printf("共有%d个非素数!\n",b);
    F2(c, str);
	return 0;
}
  1. 保证从键盘上输入一个 N(N 值在程序中指定)位正整数,将数字中的奇数数字按照逆序组成一个新的数字并输出结果。例如:输入:四位数字 2349,则最后的结果应输出:93。
    程序设计要求: main 函数完成数据结构的定义及输出最终结果,并调用自定义函数完成题目要求的工作; 自定函数 F4 完成输入 N 位正整数的工作; 自定函数 F5 完成将数字中的奇数数字按照逆序保存的工作; 自定函数 F6 完成逆序组成数字的工作。
#include<stdio.h>
void swap(int *i, int *n){
    int temp;
    temp = *i;
    *i = *n;
    *n = temp;
}
int main(){
    int number;
	int f, m;
	int str[4];
	int i;
    printf("输入数字:");
    scanf("%d", &number);
    if(number < 10000 && number >= 1000){
		for(i = 0;i < 4;i++){
		    str[i] = number % 10;
			number = number / 10;
		} 
        for(f = 0; f < 4; f++){
            for(m = 0; m < 3-f; m++){
                if (str[m] > str[m+1]){
                    swap(&str[m], &str[m+1]);
                }
            }
        }
        printf("排序后升序显示:");
        
        for(i = 0; i < 4; i++){
            if(i != 0)printf(",");
                printf("%d", str[i]);
            if(i == 3)printf("\n");
        }
        printf("新组成的数字:%d%d\n", str[3], str[0]);
    }else{
        printf("输入的数字不符合要求!\n");
    }
    return 0;
}
  1. 按下面递归公式编写程序求函数值
    fun(n)= 10 (n=1)
    fun(n)= fun(n-1)+2 (n>1)
    例如:当输入 5 时,函数值为 18;当输入 3 时,函数值为 14。
    程序设计要求: main 函数完成变量 n 值的输入,调用自定义递归函数完成题目要求的工作,并输出最终的结果。
#include<stdio.h>
int fun(int n){
    int y;
    if(n == 1){
        y = 10;
    }else{
       y = fun(n - 1) + 2;
    }
    return (y);
}
int main(){
    int n;
    printf("请输入n的值:");
    scanf("%d", &n);
    printf("%d", fun(n));
    return 0;
}

实验四,五 指针

  1. 移动一维数组中的内容;若数组中有 n 个整数,要求把下标从 0 到 p(含 p,p小于等于 n-1)的数组元素平移到数组的最后。
    例如:一维数组的原始内容为:1,2,3,4,5,6,7,8,9,10;p 的值为 3。移动后,一维数组中的内容应为:5,6,7,8,9,10,1,2,3,4。
    程序设计要求:
    main 函数完成数据结构的定义,调用自定义函数完成题目要求的工作,输出最终的结果,变量 p 的值可以再 main 函数中输入; 自定函数 fun1 完成移动数组中数据的工作; 自定函数 f1 完成输出数组中数据的工作。
    ※函数调用的实际参数传递的数据若是指针,形式参数必须是指针变量的形态。
#include<stdio.h>
void fun1(int str[], int p){
     int a, i, x, *b, *c;
     b = str;
     c = b + 1;
     for(x = 0; x < p + 1; x++){
        a = str[0];
        for(i = 0; i < 10; i++){
        *b++ = *c++;
        }
        str[9] = a;
        b = str;
        c = str + 1;
    }
}
void f1(int str[]){
     int i;
     for(i = 0; i < 10; i++){
         printf("%d ", str[i]);
     }
     printf("\n");
}
int main(){
    int str[12] = {1,2,3,4,5,6,7,8,9,10};
    int p;
    printf("请输入p的值");
    scanf("%d", &p);
    fun1(str, p);
    f1(str);
    return 0;
}
  1. 从键盘输入一个非空字符串,右截取 n 个字符并输出结果。此题应考虑使用返回指针值的函数的方法来完成程序设计。
    程序设计要求: main 函数完成数据结构的定义,调用自定义函数完成题目要求的工作,并输出最终的结果; 自定函数 f3 完成输入非空字符串的工作; 自定函数 fun5 完成右截取定位数据指针的工作。
    ※函数调用的实际参数传递的数据若是指针,形式参数必须是指针变量的形态。
#include<stdio.h>
#include<string.h>
void f3(char *str){
    printf("请输入非空字符串:\n");
    gets(str);
}
void fun5(char *str, char *str2, int n){
    char *p = str2;
    char *p2 = str;
    int len = strlen(str);
    if(n > len) len = n;
    p2 = p2 + (len - n);
    while(*p2 != '\0'){
        *p++ = *p2++;
    }
}
int main(){
    char str[99] = "";
    int n;
    char str2[99] = "";
    printf("请输入右截取的字符个数n:\n");
    scanf("%d", &n);getchar();
    f3(str);
    fun5(str, str2, n);
    printf("%s\n", str2);
    return 0;
}

版权声明:本文为qq_45948139原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。