精华内容
下载资源
问答
  • 考研复试编程题

    2019-02-22 13:39:56
    考研复试编程题统计,C语言实现数据结构,指针实现字符串逆转等
  • (完整版)C语言考试题库及答案-必考
  • 浙江工业大学C语言程序设计2018—2020年初试考研真题试题.pdf
  • 6、利用条件运算符的嵌套来完成此:学习成绩>=90分的同学用A表示,70-89分之间的用B表示,60-70分之间的用C表示,60以下的用D表示。 方法1: #include int main() { int s; printf("请输入你的成绩:") ; scanf...

    1、一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

    方法一:

         分析: 土办法,从1到10000遍历,符合两个条件的即为所求。

    #include <stdio.h>
    #include <math.h> 
    int main(){
    	int i,x,y;
    	for(i=1;i<10000;i++)
    	{
    		x=sqrt(i+100);
    		y=sqrt(i+268);
    		if(x*x==i+100 && y*y==i+268)
    		   printf("%d+100=%d*%d\n",i,x,x);		
    	}
    }
    
    运行结果:
    21+100=11*11
    261+100=19*19
    1581+100=41*41
    
    --------------------------------
    Process exited after 0.5004 seconds with return value 0
    请按任意键继续. . .
    

    方法二:

         分析:

    假设该数为 x。m和n分别为m2和n2的算术平方根。
    1、则:x + 100 = n2, x + 100 + 168 = m2
    2、计算等式:m2 - n2 = (m + n)(m - n) = 168
    3、设置: m + n = i,m - n = j,i * j =168,i 和 j 至少一个是偶数。绝对不可以全是奇数,例如33=9,55=9;(奇 * 奇=奇,奇 * 偶=偶,偶 * 偶=偶)
    4、可得: (i + j) =2m, (i - j)=2n,所以(i+j)和(i-j)全为偶数。(奇+奇=偶,奇-奇=偶,偶+偶=偶,偶-偶=偶),所以i 和 j 要么都是偶数,要么都是奇数。
    5、又由3知i和j至少有一个为偶数,所以i和j全为偶数。
    6、又由2知ij=168,所以i和 j均大于等于2。
    7、于是题目就转化为已知,i和j均为大于1的偶数,i
    j=168,m=(i+j)/2,n=(i-j)/2,x+100=nn,x+268=mm这6个条件的问题了

    #include <stdio.h>
    int main(void)
    {
    	int  i, j, m, n, x;
    	for (i = 1; i <=168; i++)
    	{
    	 if(i%2==0) //确定i是偶数 
    	 {
    	 	j=168/i;  
    	  	if(j%2==0)//确定j是偶数 
    	 		{
    	 			if(i>j&&i*j==168)//确定i*j=168,为防止i和j颠倒,设置i>j. 
    	 			{	
    				    n=(i-j)/2;				
    	 				m=(i+j)/2;
    					x=n*n-100;
    					x=m*m-268;
    				 
    					printf("%d+100=%d*%d\n",x,n,n);
    					printf("%d+268=%d*%d\n",x,m,m);
    					printf("===============\n" );
    				 } 
    	 			
    			}
    	 }
    	 	
    	}
     
    }
    
    运行结果:
    -99+100=1*1
    -99+268=13*13
    ===============
    21+100=11*11
    21+268=17*17
    ===============
    261+100=19*19
    261+268=23*23
    ===============
    1581+100=41*41
    1581+268=43*43
    ===============
    
    --------------------------------
    Process exited after 0.3052 seconds with return value 0
    请按任意键继续. . .
    

    2、有五个学生,每个学生有4门课的成绩,从键盘输入以上数据(包括学生号,姓名,4门课成绩),计算出平均成绩,将原有的数据和计算出的平均分数存放在磁盘文件“student”中。

    #include<stdio.h>
    #include<stdlib.h>
    typedef struct{
        int ID;
        int math;
        int English;
        int C;
        int python; 
        int avargrade;
        char name[20];
    }Stu;
    int main()
    {
        FILE *fp;
        Stu stu[5];
        int i,avargrade=0;
        printf("请输入5个同学的信息:学生号,姓名,4门成绩:\n");
        for(i=0;i<5;i++)
        {
            scanf("%d %s %d %d %d %d",&(stu[i].ID),stu[i].name,&(stu[i].math),&(stu[i].English),&(stu[i].C),&stu[i].python);
            stu[i].avargrade=(stu[i].math+stu[i].English+stu[i].C+stu[i].python)/4;
        }
        
        if((fp=fopen("student.txt","w"))==NULL)
        {
            printf("error :cannot open file!\n");
            exit(0);
        }
        for(i=0;i<5;i++)
            fprintf(fp,"%d %s %d %d %d %d %d\n",stu[i].ID,stu[i].name,stu[i].math,stu[i].English,
                    stu[i].C,stu[i].python,stu[i].avargrade);
        
        fclose(fp);
        system("pause");
        return 0;
    }
    
    运行结果:
    请输入5个同学的信息:学生号,姓名,4门成绩:
    1 谷歌 10 10 10 10
    2 的数据 10 10 10 10
    3 辅导班 11 11 11 11
    4 地方 22 22 22 22
    5 地的 55 55 55 55
    请按任意键继续. . .
    

    在这里插入图片描述

    3、一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出500以内的所有完数。

    分析:依次for循环从1到500遍历,找出每个数的所有因子,判断这些因子之和是否等于此数,若等于则是完数。

    注:数本身不是因子。

    #include<stdio.h>
    int main() {
    	int i,j,s,k;
    	int a[200];
    	for(i=1; i<=500; i++) {
    		s=0;
    		k=0;
    		for(j=1; j<i; j++) {
    			if(i%j==0) {
    				a[k++]=j;
    				s=s+j;
    			}
    		}
    		if(s==i) {
    			for(int n=0; n<k-1; n++) {
    				printf("%d+",a[n]);
    			}
    			printf("%d=%d\n",a[k-1],i);
    		}
    	}
    }
    

    运行结果:

    1+2+3=6
    1+2+4+7+14=28
    1+2+4+8+16+31+62+124+248=496
    
    --------------------------------
    Process exited after 1.831 seconds with return value 0
    请按任意键继续. . .
    
    

    4、有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。

    分析:分子为斐波那契数列,每一项为前两项之和,从2开始。分母也是斐波那契数列,从1开始。

    #include<stdio.h>
    int main(){
    	float a=2,b=1,s=0,t;
    	for(int i=1;i<=20;i++)
    	{
    		
    		s=s+a/b;
    		
    		t=a;
    		a=a+b;//后一个分数的分子为前一个数分子和分母之和,分母为前一个数的分子。
    		b=t; 
    	}
    	printf("%.6f\n",s); 
    }
    

    运行结果:

    32.660263
    
    --------------------------------
    Process exited after 1.499 seconds with return value 0
    请按任意键继续. . .
    

    5、编写一个函数,输入n为偶数时,调用函数求1/2+1/4+…+1/n;当输入n为奇数时,调用函数 1/1+1/3+…+1/n(利用指针函数)。

    #include<stdio.h>
    float even(int n)
    {
    	int i;
    	float sum=0;
    	for(i=2;i<=n;i=i+2)
    	{
    		sum+=(float)1/i;
    	}
    	return sum;
    }
    float odd(int n)
    {
    	int i;
    	float sum=0;
    	for(i=1;i<=n;i=i+2)
    	{
    		sum+=(float)1/i;
    	}
    	return sum;
    }
    
    int main()
    {
    	int n;
    	float t;
    	float (*p)(int);  //p是一个指向函数的指针变量  
    	printf("请输入一个数:");
    	scanf("%d",&n);
    	if(n%2==0)
    		p=even;
    	else
    		p=odd;
    	t=(*p)(n);   //note:写法
    	printf("%.2f",t);
    	return 0; 
    }
    
    

    运行结果:

    请输入一个数:4
    0.75
    --------------------------------
    Process exited after 3.825 seconds with return value 0
    请按任意键继续. . .
    
    

    6、利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,70-89分之间的用B表示,60-70分之间的用C表示,60以下的用D表示。

    方法1:

    #include<stdio.h>
    int main() {
    	int s;
    	printf("请输入你的成绩:") ;
    	scanf("%d",&s);
    	if(s>=90) {
    		printf("A");
    
    	}
    	if(70<=s&&s<90) {
    		printf("B");
    	}
    	if(60<=s&& s<70) {
    		printf("C");
    	}
    	if(s<60) {
    		printf("D");
    	}
    }
    

    运行结果:

    请输入你的成绩:1000
    A
    --------------------------------
    Process exited after 2.693 seconds with return value 0
    请按任意键继续. . .
    

    方法2:

    #include<stdio.h>
    int main(){
    	int s;
    	char g;
    	printf("请输入学习成绩:");
    	scanf("%d",&s); 
    	g=(s>=90)?'A':(s>=70?'B':(s>=60)?'C':'D');
    	printf("%c",g); 
    }
    

    运行结果:

    请输入学习成绩:99
    A
    --------------------------------
    Process exited after 4.177 seconds with return value 0
    请按任意键继续. . .
    
    

    7、求一个4*4矩阵对角线元素之和。

    #include<stdio.h>
    int main(){
    	int a[4][4],i,j,k;
    	int s=0;
    	for(i=0;i<4;i++)
    	{	printf("请输入矩阵第%d行元素:",i+1); 
    		for(j=0;j<4;j++)
    		{
    			scanf("%d",&a[i][j]);
    		}
    	}
    	printf("该矩阵的对角元素分别为:" );
    	for(k=0;k<4;k++){
    		s=s+a[k][k];
    		printf(" %d ",a[k][k]);
    	}
    	printf("\n该矩阵的对角元素之和为:%d",s);
    } 
    

    运行结果:

    请输入矩阵第1行元素:1 2 3 4
    请输入矩阵第2行元素:1 2 3 4
    请输入矩阵第3行元素:1 2 3 4
    请输入矩阵第4行元素:1 2 3 4
    该矩阵的对角元素分别为: 1  2  3  4
    该矩阵的对角元素之和为:10
    --------------------------------
    Process exited after 14.72 seconds with return value 0
    请按任意键继续. . .
    

    8、给一个不多于6位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

    分析:利用取余可得个位,取整得除个位以外的位,将一个数的各位分割开来。

    例如345623 对10取余得个位,对10取整得十、百、千、万、十万位。

    第一次循环为:3,34562

    第二次循环为:2,3456

    第三次循环为:6,345

    第四次循环为:5,34

    第五次循环为:4,3

    第六次循环为:3,0

    此时n=0,循环结束。

    #include<stdio.h>
    int main() {
    
    	char a[6][10]= {"个","十", "百","千","万","十万"};
    	int i=0,n; 
    	printf("请输入一个不大于6位的整数:");
    	scanf("%d",&n);
    	while(n!=0) 
    	{
    			printf("%s位为:%d\n",&a[i],(n%10));//依次从个位输出
    		    n=n/10;//得个位以上;
    			i++;//计算有几位
     	
    	}
    	printf("==============");
    	printf("总共%d位",i);
    }
    

    运行结果:

    请输入一个不大于6位的整数:345623
    个位为:3
    十位为:2
    百位为:6
    千位为:5
    万位为:4
    十万位为:3
    ==============总共6--------------------------------
    Process exited after 15.84 seconds with return value 0
    请按任意键继续. . .
    

    9、求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如3+33+333+3333+33333(此时 共有5个数相加),几个数相加有键盘控制。

    #include<stdio.h>
    int main() {
    	int s=0,a,b,n;
    	int c[n];
    	printf("请分别输入数字和位数(以空格间隔):");
    	scanf("%d %d",&a,&n);
    	b=a;
    
    	for(int i=0; i<n; i++) {
    		c[i]=a;
    		s=s+a;
    		a=a*10+b;
    	}
    	for(int i=0; i<n-1; i++) {
    		printf("%d+",c[i]);
    	}
    	printf("%d=%d",c[n-1],s);
    
    }
    
    请分别输入数字和位数(以空格间隔)3 4
    3+33+333+3333=3702
    --------------------------------
    Process exited after 7.882 seconds with return value 0
    请按任意键继续. . .
    

    10、将一个正整数分解质因数。例如:输入42,打印出42=237。

    分析:通过取余运算先找出可以整除此正整数的因子,每找到一个因子就通过取整将此正整数缩小

    #include<stdio.h>
    int main() {
    	int i,n;
    	scanf("%d",&n);
    	printf("%d=",n);
    	for(i=2; i<=n; i++) {
    		while(n%i==0) { //找到一个因子
    			printf("%d",i);
    			n=n/i;//缩小
    			if(n!=1) 
    			{
    				printf("*");
    			}
    		}
      }
    }
    
    756
    756=2*2*3*3*3*7
    --------------------------------
    Process exited after 3.489 seconds with return value 0
    请按任意键继续. . .
    
    
    展开全文
  • C语言考研试题和历年考试

    热门讨论 2009-05-07 00:41:59
    C语言考研试题和历年考试和数据结构的知识·
  • 分析 对于一行普通文本来说,分隔单词的可以是标点符号,空格等,这简化了,但要值得注意的是,单词之间可能有多个空格 #include int main() { int ch; int count = 0; //用于统计单词数 _Bool split = 0; //遇到...

    6

    题目

    在这里插入图片描述

    #include <stdio.h>
    int main()
    {
        int sum = 0;
        int fac;
        for (int i = 1; i <= 10; ++i) {
            fac = 1;
            for (int j = 1; j <= i; ++j) {
                fac *= j;
            }
            fac += 3;
            sum += fac;
        }
        printf("The sum of number is %d.\n",sum);
        return 0;
    }
    

    7

    题目

    在这里插入图片描述

    分析

    后一项的分子为前一项的分母,后一项的分母为前一项分子分母之和。

    #include <stdio.h>
    int main()
    {
        double sum = 0;
        double numerator = 1,denominator = 2;
        double a,temp;
        for (int i = 0; i < 20; ++i) {
            a = numerator / denominator;
            sum += a;
            temp = numerator;
            numerator = denominator;
            denominator += temp;
        }
        printf("The sum is %.2f",sum);
        return 0;
    }
    

    8

    题目

    输出小于 500 的所有的“水仙花数”,所谓“水仙花数”是指一个 3 位数,其各位数字立方和等于该数本身。例如,153 是一个水仙花数,因为153 = 13 + 53 + 33

    分析

    利用 / % 操作获得各个数位上的数字即可

    #include <stdio.h>
    #define CUBE(X) ( X * X * X)
    int main()
    {
        int a, b, c;        //分别记录个,十, 百位上的数字
        int sum;
        for (int i = 100; i < 500; ++i) {
            a = i % 10;
            b = i % 100 / 10;
            c = i / 100;
            sum  = CUBE(a) + CUBE(b) + CUBE(c);
            if(sum == i)
                printf("%5d",i);
        }
        printf("\n");
        return 0;
    }
    

    9

    题目

    给一个不多于 6 位的正整数,要求:①求出它是几位数;②分别输出每一位 数字;③按逆序输出各位数字,例如原数为 158,应输出 851。

    #include <stdio.h>
    int main()
    {
        int count = 0;              //记录位数
        int left;                   //记录最低位的数字
        long cur;                   //记录当前的操作数
        int stack[6];               //用于正序序输出的栈
        int top = -1;
        puts("please input an integer less than 100 0000");
        scanf("%ld",&cur);
        printf("逆序输出为");
        while(cur != 0)
        {
            left = cur % 10;
            count++;
            stack[++top] = left;
            printf("%3d",left);
            cur /= 10;      //十进制右移一位
        }
        putchar('\n');
        printf("数字总共有 %d 位\n正序输出为",count);
        for (; top >= 0 ; --top) {
            printf("%3d",stack[top]);
        }
        putchar('\n');
        return 0;
    }
    

    分析

    对于一个十进制的数,可以通过对10求模来获得当前的最低位
    利用整型的趋零阶段 ,除以10 可以实现右移一位。

    10

    题目

    求 5+55+555+5555+55555 的值。(拓展输入一个数 a,求 a+ aa + aaa + aaaa + aaaaa,a是小于10的数,总共是a项求和)

    #include <stdio.h>
    int main()
    {
        int n;
        puts("Please input an positive integer less than 10");
        scanf("%d",&n);
        long sum = 0;
        long cur = 0;
        for (int i = 1; i <= n ; ++i) {
            cur *= 10;
            cur += n;
            sum += cur;
        }
        printf("The sum is %d\n",sum);
        return 0;
    }
    

    11

    题目

    输入 10 个整型整数,用起泡法对这 10 个数排序,并该由小到大顺序在屏幕上输出。

    #include <stdio.h>
    #define N 10
    void swap(int *a,int *b);
    void bubble_sort(int a[],int n);
    int main()
    {
        int a[N];
        int i;
        puts("please enter ten positive integers.");
        for (i = 0; i < N; ++i)
            scanf("%d",a + i);
        bubble_sort(a,N);
        for(i = 0;i < N;++i)
            printf("%5d",a[i]);
        putc('\n',stdout);
    
    }
    void bubble_sort(int a[],int n)
    {
        _Bool flag;
        for (int i = 0; i < n; ++i) {
            flag = 0;
            for (int j = n - 1; j > i  ; --j) {
                if(a[j] < a[j - 1]){
                    swap(&a[j],&a[j-1]);
                    flag = 1;
                }
            }
            if(!flag)
                break;
        }
    }
    void swap(int * a,int *b)
    {
        int temp;
        temp = *a;
        *a = *b;
        *b = temp;
    }
    

    12

    题目

    将一个二维数组 a 的行和列的元素互换(即行列互换),存到另一个二维数组 b 中。

    #include <stdio.h>
    #define M 3
    #define N 4
    int main()
    {
        printf("Please input %d rows and %d cols integers ",M,N);
        int a[M][N];
        int b[N][M];
        int i,j;
        for (i = 0; i < M; ++i) {
            for (j = 0; j < N; ++j) {
                scanf("%d",&a[i][j]);
            }
        }
        for (i = 0;  i< N; i++) {
            for (j = 0;  j< M; j++) {
                b[i][j] = a[j][i];
                printf("%3d",b[i][j]);
            }
            printf("\n");
        }
        return 0;
    }
    

    13

    题目

    在一个 3*4 的二维数组 a 中,要求编程求出其中值最大的那个元素的值,并输出其所在的行号和列号。

    #include <stdio.h>
    int main()
    {
        int a[3][4] = {12,23,1,4,115,23,64,111,24,6,11,39};
        int maxR,maxC,max;
        maxR = maxC = 0;
        max = a[0][0];
        for (int i = 0; i < 3; ++i) {
            for (int j = 0; j < 4; ++j) {
                if(a[i][j] > max)
                {
                    max = a[i][j];
                    maxR = i;
                    maxC = j;
                }
            }
        }
        printf("The maximum %d is at %d row %d col.",max,maxR,maxC);
    }
    

    14

    题目

    输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。

    分析

    对于一行普通文本来说,分隔单词的可以是标点符号,空格等,这题简化了,但要值得注意的是,单词之间可能有多个空格

    #include <stdio.h>
    int main()
    {
        int ch;
        int count = 0; //用于统计单词数
        _Bool split = 0; //遇到单词就置为1,遇到空格就置为0
        puts("Please input a line.");
        while((ch = getchar()) != '\n')
        {
            if(ch == ' ' && split)
                split = 0;
            if(ch != ' ' && !split)
            {
                count++;
                split = 1;
            }
        }
        printf("The line has %d words\n",count);
        return 0;
    }
    

    15

    题目

    获得输入三个字符串的最大值

    分析

    比较字符串大小的规则时,两个字符串从左到右依次比较字符的ASCII,遇到第一个不同的为止,与字符串长度无关。
    **strcmp(s1,s2)**当s1大于s2时返回一个正数,一般是第一个不同字符对应ASCII的差值。

    #include <stdio.h>
    #include <string.h>
    #define LEN 81
    int main()
    {
        char s1[LEN], s2[LEN], s3[LEN], *biggest;
        puts("please input the first string");
        gets(s1);
        puts("please input the second string");
        gets(s2);
        puts("please input the third string");
        gets(s3);
        biggest = s1;
        if(strcmp(s2,biggest) > 0)
            biggest = s2;
        if(strcmp(s3,biggest) > 0)
            biggest = s3;
        printf("%s\n",biggest);
    }
    
    展开全文
  • 计算机考研复试之C语言编程题

    千次阅读 多人点赞 2020-03-24 22:45:51
    编程将那些在数组a中而不在数组b中的数据组成新数组c并输出。 28.已知a是3x4的整型二维数组,编程求数组a中所有外围元素之和。 29.不用strcmp函数,编程判断两个长度不超过20的字符串的大小:若第一个字符串大于第二...

    博主本人整理资料不易,如果文章对大家有用的话,恳请大家能够动动小手帮忙点个赞,如果能点个关注的话那就更好了…

    文章目录

    将三个整数按从小到大的顺序排列

    #include<stdio.h>
    int main(){
    
        int a,b,c,t;
        scanf("%d %d %d",&a,&b,&c);
        if(a>b){
            t = a;
            a = b;
            b = t;
        }
        if(a>c){
            t = a;
            a = c;
            c = t;
        }
        if(b>c){
            t = b;
            b = c;
            c = t;
        }
    
        printf("%d %d %d",a,b,c);
        return 0;
    
    
    }
    
    

    输入三边长,求三角形的面积

    #include<stdio.h>
    #include<math.h>
    int main(){
    
     double a,b,c,s,area,perimeter;
     printf("Enter 3 sides of the triangle:");
     scanf("%lf %lf %lf",&a,&b,&c);
     if(a+b <= c || a+c <= b || b+c <= a){
        printf("These sides do not correspond to avalid triangle");
     }else{
        s = (a+b+c)/2;
        area = sqrt(s*(s-a)*(s-b)*(s-c));
        perimeter = a + b + c;
        printf("area=%.2lf;perimeter=%.2lf",area,perimeter);
    
     }
        return 0;
    
    
    }
    
    

    求两个数字的最小公倍数和最大公约数

    #include<stdio.h>
    int main(){
    
        int m,n,p,q,t,s;
        scanf("%d %d",&m,&n);
        if(m<n){
            t = m;
            m = n;
            n = t;
        }
        s = m*n;
        while((m%n)!=0){
            q = m%n;
            m = n;
            n = q;
        }
        printf("%d %d",n,s/n);
        return 0;
    }
    

    求区间范围内的水仙花数

    #include<stdio.h>
    int main(){
    
       int num,start,end,a,b,c;
       scanf("%d %d",&start,&end);
       printf("Narc No:");
       for(num=start;num<=end;num++){
          a=num/100;
          b=num%100/10;
          c=num%100%10;
          if(num==a*a*a+b*b*b+c*c*c){
             printf("%d ",num);
          }
       }
    
    }
    

    将十个数字排序

    #include<stdio.h>
    int main(){
    
        int arr[10];
        int i,j,temp;
        for(i=0;i<10;i++){
            scanf("%d",&arr[i]);
        }
    
        for(i=0;i<10;i++){
            for(j=0;j<10-i-1;j++){
                if(arr[j]>arr[j+1]){
                    temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
        for(i=0;i<10;i++){
            printf("%d ",arr[i]);
        }
        return 0;
    
    
    }
    
    

    单链表的操作

    #include<stdio.h>
    #include<stdlib.h>
    struct stud_node{
    	int num;
    	char name[20];
    	int score;
    	struct stud_node *next;
    };
    
    struct stud_node *Creat_Stu_Doc()  //创建
    {
    	struct stud_node *p, *q, *head=NULL;
    	while(1)
    	{
    		p=(struct stud_node *)malloc(sizeof(struct stud_node));
    		scanf("%d", &p->num);
    		if(p->num==0)
    			break;
    		scanf("%s %d", p->name, &p->score);
    		p->next=NULL;
    		if(head==NULL)
    			head=p;
    		else
    			q->next=p;
    		q=p;
    	}
    	return head;
    }
    struct stud_node *DeleteDoc(struct stud_node *head,int min_score)   //链表的删除
    {
    	struct stud_node *p, *q;
    	while(head!=NULL && head->score<min_score)   //先删除头结点满足的情况
        {																				//使头结点不能再删;
            p=head;
            head=head->next;
            free(p);
        }
        if(head==NULL)    //判断头结点是否为空,如果为空则链表为空
            return NULL;
        p=head;
        q=head->next;
        while(q!=NULL)    //删除除过头结点之外的可删的结点
        {
            if(q->score<min_score)
            {
                p->next=q->next;
                free(q);
            }
            else
                p=q;
            q=p->next;
        }
    
    	return head;
    }
    void Ptrint_Stu_Doc(struct stud_node *head) //输出链表
    {
    	while(head!=NULL)
    	{
    		printf("%d %s %d\n", head->num, head->name, head->score);
    		head=head->next;
    	}
    }
    int main()
    {
    	struct stud_node *head;
    	int n;
    	head=Creat_Stu_Doc();
    	scanf("%d", &n);
    	head=DeleteDoc(head, n);
    	Ptrint_Stu_Doc(head);
    	return 0;
    }
    
    

    求区间内素数之和

    #include<stdio.h>
    int prime(int m);
    int  main(){
            int  m,n,ct=0,sum=0,i;
            scanf("%d%d",&m,&n);
            if(m<2)  m=2;
            for(i=m;i<=n;i++){
                if(prime(i)){
                        ct++;
                        sum=sum+i;
                }
            }
            printf("count=%d,sum=%d\n",ct,sum);
            return  0;
    
    
    }
    int prime(int m){
    
       int i;
       for(i=2;i<m;i++){
          if(m%i==0){
            return 0;
          }
       }
       if(i==m){
          return 1;
       }
    
    }
    
    

    1.设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积(4πR²)、圆球体积(V=4πR三次方)、圆柱体积。用scanf()输入数据,输出计算结果,输出时要求有文字说明。取小数点后2位数字。请编写程序。

    #include<stdio.h>
    int main(){
    
        float r,h,C,S,Sa,Sb,V;
        scanf("%f,%f",&r,&h);
        C=2*3.14*r;
        S=3.14*r*r;
        Sa=4*S;
        Sb=4*3.14*r*r*r/3;
        V=S*h;
        printf("C=%5.2f\nS=%5.2f\nSa=%5.2f\nSb=%5.2f\nV=%5.2f",C,S,Sa,Sb,V);
    
    }
    

    2.输入一个华氏温度,要求输出摄氏温度。公式为c=5/9(F-32),输出时要有文字说明,取2位小数。

    #include<stdio.h>
    int main(){
    
       float c,F;
       printf("请输入一个华氏温度:\n");
       scanf("%f",&F);
       c=5.0*(F-32)/9.0;
       printf("摄氏温度为:%5.2f°\n",c);
       return 0;
    
    }
    
    

    3.编写程序,从终端键盘输入圆的半径r,圆柱的高h,分别计算出圆周c1、圆面积cs和圆柱的体积cvz。输出计算结果要求有文字说明,并取小数点后两位数字。

    #include<stdio.h>
    #define PI 3.14159
    int main(){
    
      float r,h,c1,cs,cvz;
      printf("请输入圆的半径r和圆柱的高h:\n");
      scanf("%f,%f",&r,&h);
      c1=2.0*PI*PI;
      cs=PI*r*r;
      cvz=cs*h;
      printf("圆周c1=%5.2f\n圆面积cs=%5.2f\n圆柱的体积cvz=%6.2f",c1,cs,cvz);
    
    }
    
    

    4.编写程序,读入一个字母,输出与之对应的ASCII码,输入输出都要有相应的文字提示。

    #include<stdio.h>
    int main(){
    
      char ch;
      printf("请输入一个字母:\n");
      scanf("%c",&ch);
      printf("与输入字母相对应的ASCII码是:%d",ch);
      return 0;
    
    }
    

    5.有一函数

    在这里插入图片描述

    写一程序,输入x,求出y值

    #include<stdio.h>
    int main(){
    
       int x,y;
       printf("请输入x的值:\n");
       scanf("%d",&x);
       if(x<1){
         y=x;
       }else if(x>=1 && x<10){
         y=2*x-1;
       }else if(x>=100){
         y=3*x-11;
       }
       printf("y的值为:%d\n",y);
       return 0;
    }
    
    

    6.给出一个不多于5位的正整数:,要求:①求出它是几位数;②分别打印出每一位数字;③按逆序打印出各位数字,例如原数为321,应输出123。

    #include<stdio.h>
    int main(){
    
       long int num;
       int wan,qian,bai,shi,ge;
       int place;
       printf("请输入一个不多于5位的正整数:\n");
       scanf("%d",&num);
       if(num>9999){
          place=5;
       }else if(num>999){
          place=4;
       }else if(num>99){
          place=3;
       }else if(num>9){
          place=2;
       }else{
          place=1;
       }
       printf("%d是%d位数\n",num,place);
       wan=num/10000;
       qian=num/1000%10;
       bai=num/100%10;
       shi=num/10%10;
       ge=num%10;
       switch(place){
    
          case 5:
              printf("分别打印出每位数字:\n");
              printf("%d\n%d\n%d\n%d\n%d\n",wan,qian,bai,shi,ge);
              printf("逆序打印出每位数字:\n");
              printf("%d\n%d\n%d\n%d\n%d\n",ge,shi,bai,qian,wan);
              break;
          case 4:
              printf("分别打印出每位数字:\n");
              printf("%d\n%d\n%d\n%d\n",qian,bai,shi,ge);
              printf("逆序打印出每位数字:\n");
              printf("%d\n%d\n%d\n%d\n",ge,shi,bai,qian);
              break;
          case 3:
              printf("分别打印出每位数字:\n");
              printf("%d\n%d\n%d\n",bai,shi,ge);
              printf("逆序打印出每位数字:\n");
              printf("%d\n%d\n%d\n",ge,shi,bai);
              break;
          case 2:
              printf("分别打印出每位数字:\n");
              printf("%d\n%d\n",shi,ge);
              printf("逆序打印出每位数字:\n");
              printf("%d\n%d\n",ge,shi);
              break;
          case 1:
              printf("分别打印出每位数字:\n");
              printf("%d\n",ge);
              printf("逆序打印出每位数字:\n");
              printf("%d\n",ge);
              break;
          default:
              break;
       }
       return 0;
    
    }
    

    7.输入4个正整数,要求按从小到大的顺序输出。

    #include<stdio.h>
    int main(){
    
       int a,b,c,d,t;
       printf("请输入4个正整数:\n");
       scanf("%d,%d,%d,%d",&a,&b,&c,&d);
       if(a>b){
          t=a;
          a=b;
          b=t;
          if(a>c){
              t=a;
              a=c;
              c=t;
              if(a>d){
                  t=a;
                  a=d;
                  d=t;
              }
          }
       }
       if(b>c){
          t=b;
          b=c;
          c=t;
          if(b>d){
              t=b;
              b=d;
              d=t;
          }
       }
       if(c>d){
          t=c;
          c=d;
          d=t;
       }
       printf("从小到大的顺序为:%d,%d,%d,%d\n",a,b,c,d);
       return 0;
    
    }
    

    8.输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。

    #include<stdio.h>
    int main(){
    
      char c;
      int letter=0,space=0,dight=0,other=0;
      while((c=getchar())!='\n'){
          if((c>='a' && c<='z')||(c>='A' && c<='Z')){
              letter++;
          }else if(c==' '){
              space++;
          }else if(c>='0'&&c<='9'){
              dight++;
          }else{
              other++;
          }
      }
      printf("英文字母数为:%d\n空格数为:%d\n数字数为:%d\n其他字符数为:%d\n"
             ,letter,space,dight,other);
    
    }
    

    9.输入两个正整数m和n,求其最大公约数和最小公倍数。

    • 将大数给m,小数给n。对m%n进行取余操作,将n赋值给m,将m%n的余数赋值给n,然后再循环进行取余操作,直到余数为0时,n即为最大公约数,一开始的m乘n再除以最大公约数所得即为最小公倍数。
    #include<stdio.h>
    int main(){
    
       int m,n,p,r,t;
       printf("请输入两个正整数m和n:\n");
       scanf("%d,%d",&m,&n);
       if(n>m){  //大数在前小数在后
          t=n;
          n=m;
          m=t;
       }
       p=m*n;  //用于求最小公倍数
       while((m%n)!=0){
          r=m%n;
          m=n;
          n=r;
       }
       printf("最大公约数为:%d\n",n);
       printf("最小公倍数为:%d\n",p/n);
    
    }
    
    

    10.编写程序实现功能:输入整数a和b,若a²+b²>100,则输出a²+b²之和的百位以上的数字,否则直接输出a²+b²的和。

    #include<stdio.h>
    int main(){
    
       int a,b,m,p;
       printf("请输入两个整数a和b:\n");
       scanf("%d,%d",&a,&b);
       m=a*a+b*b;
       if(m>100){
          p=m/100;
          printf("百位以上的数字为:%d\n",p);
       }else{
          printf("两数之和为:%d\n",m);
       }
       return 0;
    }
    

    11.编写程序判断输入的正整数既是5又是7的整数倍。若是则输出“yes”,否则输入“no”。

    #include<stdio.h>
    int main(){
    
       int num;
       printf("请输入一个整数:\n");
       scanf("%d",&num);
       if(num%5==0 && num%7==0){
          printf("yes\n");
       }else{
          printf("no\n");
       }
       return 0;
    
    }
    
    

    12.用switch编程实现以下函数关系:在这里插入图片描述

    #include<stdio.h>
    int main(){
    
       int x,y;
       printf("请输入x的值:\n");
       scanf("%d",&x);
       switch(x<0){
          case 1:
            y=-1;
            break;
          case 0:
            switch(x==0){
              case 1:
                y=0;
                break;
              default:
                y=1;
                break;
            }
       }
       printf("y的值为:%d",y);
       return 0;
    
    }
    

    13.编写程序,用switch实现:对于给定的百分制成绩,改成相应的A、B、C、D、E表示,90分以上为A,80到89为B,70到79为C,60到69为D,60以下为E。

    #include<stdio.h>
    int main(){
    
      int score,temp,log;
      char grade;
      log=1;
      while(log){
        printf("请输入成绩:\n");
        scanf("%d",&score);
        if(score>100 || score<0){
            printf("\n 输入错误,请重试!\n");
        }else{
          log=0;
        }
      }
      if(score==100){
        temp=9;
      }else{
        temp=(score-score%10)/10;
      }
      switch(temp){
    
      case 0:
      case 1:
      case 2:
      case 3:
      case 4:
      case 5:
        grade='E';
        break;
      case 6:
        grade='D';
        break;
      case 7:
        grade='C';
        break;
      case 8:
        grade='B';
        break;
      case 9:
        grade='A';
        break;
      }
      printf("score=%d,grade=%c\n",score,grade);
      return 0;
    }
    

    14.编写程序实现功能:输入一个复数,输出其共轭复数,如,输入2+3i<回车>,输出2-3i。

    #include<stdio.h>
    int main(){
    
       int a,b;
       char symbol;
       printf("请输入原始数据:\n");
       scanf("%d%c%di\n",&a,&symbol,&b);
       printf("原使复数为:%d%c%di\n",a,symbol,b);
       if(symbol=='-'){
          symbol='+';
       }else{
          symbol='-';
       }
       printf("其共轭复数为:%d%c%di\n",a,symbol,b);
       return 0;
    
    }
    

    15.求Sn=a+aa+aaa+…+aa…a(n个a)之值,其中a是一个数字。例如:2+22+222+2222+22222(此时n=5),n由键盘输入。

    #include<stdio.h>
    int main(){
    
       int a,n,tn=0,sn=0,i=1;
       printf("请输入a和n的值:\n");
       scanf("%d,%d",&a,&n);
       while(i<=n){
          tn=tn+a;   //用来表示第i个位置上的值
          sn=sn+tn;  //求和
          a=a*10;   //第i个位置为i的i位数
          ++i;
       }
       printf("a+aa+aaa+...+aa..a的值为:%d\n",sn);
       return 0;
    
    
    }
    

    16.求从1到20之间的每个整数的阶乘之和。在这里插入图片描述

    #include<stdio.h>
    int main(){
    
       int n,t=1,s=0;
       for(n=1;n<=20;n++){
          t=t*n;   //第几个位置时,该位置数的阶乘
          s=s+t;   //求和
       }
       printf("1!+2!+3!+4!+...+20!等于:%d\n",s);
       return 0;
    
    }
    
    

    17.在这里插入图片描述

    #include<stdio.h>
    int main(){
    
      int n1=100,n2=50,n3=10;
      float k;
      float s1=0,s2=0,s3=0;
      for(k=1;k<=n1;k++){
        s1=s1+k;
      }
      for(k=1;k<=n2;k++){
        s2=s2+k*k;
      }
      for(k=1;k<=n3;k++){
        s3=s3+1/k;
      }
      printf("总和=%8.2f\n",s1+s2+s3);
      return 0;
    
    }
    
    

    18.打印出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如,153是一水仙花数,因为在这里插入图片描述

    #include<stdio.h>
    int main(){
    
       int num,a,b,c;
       for(num=100;num<=999;num++){
          a=num/100;
          b=num%100/10;
          c=num%100%10;
          if(num==a*a*a+b*b*b+c*c*c){
             printf("%d是水仙花数\n",num);
          }
       }
    
    }
    
    

    19.每个苹果0.8元,第一天买了2个苹果;从第二天开始,每天买前一天的两倍,直到每天购买的苹果个数达到不超过100的最大值,编写程序求每天平均花多少钱。

    #include<stdio.h>
    int main(){
    
    
      float price=0.8,sumprice=0.0,aveprice;
      int k=0,num,sum=0;
      for(num=2;num<=100;num=num*2){
         ++k;
         sum=sum+num;
    
      }
      sumprice=sum*price;
      aveprice=sumprice/k;
      printf("每天平均花的钱数为:%5.2f元\n",aveprice);
      return 0;
    
    }
    
    

    20.试编写程序,找出1~99之间的全部同构数。同构数是这样一组数,它出现在平方数的右边。例如,5是25的右边数,25是625的右边数,所以5和25都是同构数。

    #include<stdio.h>
    int main(){
    
       int i;
       for(i=1;i<100;i++){
          if(i*i%10==i || i*i%100==i){
              printf("%3d",i);
          }
       }
    
    }
    

    21.假设x、y是整数,编写程序x的y次方的最后三位数,要求x、y从键盘输入。

    #include<stdio.h>
    int main(){
    
       int i,x,y;
       long last=1;
       printf("Input x,y:");
       scanf("%d,%d",&x,&y);
       for(i=1;i<=y;i++){
          last=last*x%1000;
          printf("The 3 digits:%ld\n",last);
       }
    
    }
    

    22.一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数”。编程序找出1000之内的所有完数,并按下面格式输出其因子:

    • 6 its factors are 1,2,3
    #include<stdio.h>
    int main(){
    
    
      int k[100];
      int a,s,i,n;
      for(a=2;a<1000;a++){
        s=a;
        n=0;
        for(i=1;i<a;i++){
            if((a%i)==0){
               n++;
               k[n]=i; //将其除数放到数组中
               s=s-i; //该数前去其除数,然后判断最后结果是否为0
            }
        }
        if(s==0){
            printf("%d its factors are:",a);
            for(i=1;i<=n;i++){
                printf("%d,",k[i]);
            }
        printf("\n");
        }
      }
    
    }
    
    

    23.一球从100m高度自由落下,每次落地后反跳回原高度的一半,再落下。求它在第10次落地时,共经过多少米?第10次反弹多高?

    #include<stdio.h>
    int main(){
    
       float sn=100,hn=sn/2;
       int n;
       for(n=2;n<=10;n++){
          sn=sn+2*hn;
          hn=hn/2;
       }
       printf("第10次反弹高为:%5.2f米\n",hn);
       printf("第10次落地时共经过:%5.2f米\n",sn);
    
    }
    
    

    24.编程打印出以下图案

    在这里插入图片描述
    代码一:

    #include<stdio.h>
    int main(){
    
       int i,j,k;
       for(i=0;i<=3;i++){  //输出上面4行*号
          for(j=0;j<=2-i;j++)  //输出*号前面的空格
            printf(" ");
          for(k=0;k<=2*i;k++)  //输出*号
            printf("*");
          printf("\n");  //输出完一行*号后换行
       }
       for(i=0;i<=2;i++){  //输出下面3行*号
          for(j=0;j<=i;j++)  //输出*号前面的空格
            printf(" ");
          for(k=0;k<=4-2*i;k++)  //输出*号
            printf("*");
          printf("\n");  //输出完一行*号后换行
       }
    
    }
    

    代码二:

    #include<stdio.h>
    int main(){
    
       int i,j,k;
       for(i=0;i<=3;i++){
          for(j=0;j<=2-i;j++)
            printf(" ");
          for(k=0;k<(2*(i+1)-1);k++)
            printf("*");
          printf("\n");
       }
       for(i=0;i<=2;i++){
          for(j=0;j<=i;j++)
            printf(" ");
          for(k=0;k<(2*(3-i)-1);k++)
            printf("*");
          printf("\n");
       }
    
    }
    
    

    25.编写递归程序的杨辉三角形

    • 从杨辉三角形的特点出发,可以总结出:
      (1)第N行有N+1个值(设起始行为第0行);
      (2)对于第N行的第J个值:(N>=2)
      当J=1或J=N+1时:其值为1
      当J!=1且J!=N+1时:其值为第N-1行的第J-1个值与第N-1行第J个值之和。
      将这些特点提炼成数学公式可表示为:
      c(x,y)=1 当x=1或x=N+1
      c(x,y)=c(x-1,y-1)+c(x-1,y); 其它
      程序如下:
    #include<stdio.h>
    int c(int x,int y){
      if((y==1)||(y==x+1))
        return (1);
      else
        return c(x-1,y-1)+c(x-1,y);
    }
    int main(){
    
      int i,j,n=13;
      printf("N=");
      while(n>12)
        scanf("%d",&n);
      for(i=0;i<=n;i++){
        for(j=0;j<n-i;j++)
            printf(" ");
        for(j=1;j<i+2;j++)
            printf("%6d",c(i,j));
        printf("\n");
      }
    
    
    }
    
    

    在这里插入图片描述

    26.编写程序计算1~100之间的素数,并按照由大到小的次序输出。

    • 素数(质数):指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也可定义为只有1与该数本身两个正因数的数)。
    #include<stdio.h>
    int main(){
       void IsPrime(int k);
       int k;
       printf("1到100之间的所有素数:\n");
       for(k=2;k<=100;k++){
          IsPrime(k);
       }
    }
    void IsPrime(int k){
          int j;
          for(j=2;j<=k-1;j++){
            if(k%j==0){
                break;
            }
          }
          if(j==k){
            printf("%d,",k);
          }
    }
    
    

    27.已知整形数组a中有10个元素,整型数组b中有6个元素。编程将那些在数组a中而不在数组b中的数据组成新数组c并输出。

    #include<stdio.h>
    int main(){
    
       int a[10]={1,2,3,4,5,6,7,8,9,10};
       int b[6]={2,4,6,8,11,13};
       int c[16];
       int i,j,k=0;
       for(i=0;i<10;i++){
          for(j=0;j<6;j++){
             if(a[i]==b[j]){
                break;
             }
          }
          if(j==6){
             c[k]=a[i];
             k++;
          }
       }
       for(i=0;i<k;i++){
          printf("%d,",c[i]);
       }
    
    }
    
    

    28.已知a是3x4的整型二维数组,编程求数组a中所有外围元素之和。

    #include<stdio.h>
    int main(){
    
       int a[3][4]={{1,2,3,4},{5,6,7,8},{1,2,3,4}};
       int i,j,k,sum;
       for(i=0;i<3;i++){
          for(j=0;j<4;j++){
             printf("%d",a[i][j]);
          }
          printf("\n");
       }
       sum=0;
       for(i=0;i<4;i++){
          sum=sum+a[0][i]+a[2][i];
       }
       for(j=1;j<2;j++){
          sum=sum+a[j][0]+a[j][3];
       }
       printf("sum=%d",sum);
    
    
    }
    

    29.不用strcmp函数,编程判断两个长度不超过20的字符串的大小:若第一个字符串大于第二个字符串输出1;若两个字符串相等输出0;否则输出-1。

    #include<stdio.h>
    #include<string.h>
    int main(){
    
       char a[20];
       char b[20];
       int m,n,k=0;
       gets(a);
       gets(b);
       m=strlen(a);
       n=strlen(b);
       while((a[k]==b[k])&&k<m&&k<n){
          k++;
       }
       if(k==m&&k==n){
          printf("0\n");
       }
       else if(a[k]>b[k]){
          printf("1\n");
       }else{
          printf("-1\n");
       }
       return 0;
    
    
    }
    
    

    30.输入长度不超过20的字符串,编程判断其中字母的个数。

    #include<stdio.h>
    #include<string.h>
    int main(){
    
        char a[20];
        int i,m,n=0;
        gets(a);
        m=strlen(a);
        for(i=0;i<m;i++){
            if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z')){
                n++;
            }
        }
        printf("字母的个数为:%d\n",n);
    
    }
    

    31.已知整型数组a中有10个元素,编程将其中某个数k删除,输出删除后的数组。

    #include<stdio.h>
    int main(){
    
        int a[10];
        int i,m,j,k;
        printf("请向数组中输入数据:\n");
        for(i=0;i<10;i++){
            scanf("%d",&a[i]);
        }
        printf("请输入要删除的数k:\n");
        scanf("%d",&k);
        for(i=0;i<10;i++){
            if(k==a[i]){
                m=i;
                break;
            }
        }
        for(j=m;j<10;j++){
            a[j]=a[j+1];
        }
        printf("删除k后的数组为:\n");
        for(i=0;i<9;i++){
            printf("%d,",a[i]);
        }
    
    }
    
    

    32.有n个整数,设计程序,将前面各个数按顺序向后移动k个位置,将最后k个数按顺序移动到最前面。

    • 方法一:先将最后k个数装入数组2中,然后将数组1拼接到数组2后面即可;
    #include<stdio.h>
    int main(){
    
        int n,i,k;
        printf("输入数组的大小:n=\n");
        scanf("%d",&n);
        int arr1[n];
        printf("向数组中填入数据:\n");
        for(i=0;i<n;i++){
            scanf("%d",&arr1[i]);
        }
        printf("请输入要移动的位置数:k=\n");
        scanf("%d",&k);
        int arr2[n];
        int m=0;
        for(i=n-k;i<n;i++){
            arr2[m]=arr1[i];
            m++;
        }
        for(i=k;i<n;i++){
            arr2[i]=arr1[i-k];
        }
        for(i=0;i<n;i++){
            printf("%d,",arr2[i]);
        }
    
    
    }
    

    33.编写程序判断是否是回文字符串。回文是一种“从前向后读”和“从后向前读”都相同的字符串。如:“rotor”。

    • 方法一:
    #include<stdio.h>
    #include<string.h>
    int main(){
    
        char str[20];
        gets(str);
        int n,i;
        n=strlen(str);
        for(i=0;i<n/2;i++){
            if(str[i]!=str[n-i-1])
                break;
        }
        if(i==n/2){
            printf("true");
        }else{
            printf("false");
        }
    
    
    }
    
    
    • 方法二:
    #include<stdio.h>
    int main(){
    
    
       char str[50],*p,*q;
       gets(str);
       p=str;
       q=str;
       while((*q)!='\0'){
          q++;
       }
       q--;
       while((*p)==(*q)&&p<q){
          p++;
          q--;
       }
       if(p==q||(q+1)==p){
          printf("yes");
       }else{
          printf("no");
       }
    
    }
    

    34.编制一个字符替换函数,实现已知字符串str中,所有属于ch中的字符都用ch2中对应字符代替。

    函数原型:void replace(char *str,char ch,char ch2)

    #include<stdio.h>
    #include<string.h>
    int main(){
    
       void replace(char *str,char ch,char ch2);
       char arr[50];
       char ch,ch2;
       printf("请输入字符串str:\n");
       gets(arr);
       printf("请输入字符ch和ch2:\n");
       scanf("%c,%c",&ch,&ch2);
       replace(arr,ch,ch2);
       puts(arr);
    
    }
    void replace(char *str,char ch,char ch2){
    
        char *p;
        p=str;
        while(*p!='\0'){
            if(*p==ch){
                *p=ch2;
            }
            p++;
        }
    }
    

    35.编写一个函数,删除一个字符串的指定字符,函数原型:

    int delStr(char *str,char ch)

    先判断字符是否出现在字符串中,如果未出现,则返回0,如果字符出现一次或多次,则返回字符的个数。

    #include<stdio.h>
    #include<string.h>
    int main(){
    
       int delStr(char *str,char ch);
       char str[80]="wearegoodfriends";
       char ch;
       int i;
       scanf("%c",&ch);
       printf("%s\n",str);
       i=delStr(str,ch);
       printf("%s\n",str);
    
    }
    int delStr(char *str,char ch){
    
       int i,j,total,k,sum;
       char *p;
       i=0;
       total=0;
       p=str;
       while(*(p+i)!='\0'){  //p1字符串是否结束
          k=i;
          sum=0;
          while(*(p+k)==ch){  //k移动到不要删除的位置
             k++;
             sum++;        //删除字符个数
          }
          total+=sum;
          if(*(p+i)==ch){
             for(j=i;*(p+j+sum)!='\0';j++){
                 *(p+j)=*(p+j+sum);
             }
             *(p+j)='\0';
          }
          i++;
       }
       return total;
    }
    
    

    36.编写函数把参数字符串中的字符反序排列,函数原型:

    void reversestr(char *str)

    使用指针,不要用数组下标,也不要声明局部数组来临时存储。

    #include<stdio.h>
    #include<string.h>
    int main(){
    
       void reversestr(char *str);
       char arr[50];
       gets(arr);
       reversestr(arr);
       printf("%s",arr);
    
    }
    void reversestr(char *str){
    
       char *p,*q;
       char ch;
       p=str;
       q=str;
       while(*q!='\0'){
          q++;
       }
       q--;
       while(p<q){
          ch=*p;
          *p=*q;
          *q=ch;
          p++;
          q--;
       }
    
    }
    
    

    37.编写程序。从键盘输入10本书的名称和定价,并存在结构体数组中,从中查找出定价最高和最低的书的名称和定价,并打印出来。

    #include<stdio.h>
    struct Book{
    
       char name[50];
       float price;
    };
    int main(){
    
       int i;
       struct Book book[10];
       printf("请输入10本书的名称和定价:\n");
       for(i=0;i<10;i++){
          scanf("%s %f",book[i].name,&book[i].price);
       }
       struct Book minbook=book[0],maxbook=book[0];
       for(i=1;i<10;i++){
          if(book[i].price>maxbook.price){
              maxbook=book[i];
          }
          if(book[i].price<minbook.price){
              minbook=book[i];
          }
       }
       printf("定价最高的书的名称为:%s,书的价格为:%5.2f\n",maxbook.name,maxbook.price);
       printf("定价最低的书的名称为:%s,书的价格为:%5.2f\n",minbook.name,minbook.price);
    
    
    }
    

    38.编写程序。设有以下结构体类型说明:

    			struct student{
    			    char num[10],name[10];
    			    float s[4];
    			    double ave;
    			};
    

    要求:编写两个函数,函数fun1把10名学生放在一个结构体数组中。从键盘输入学生的学号、姓名和4门成绩,然后计算出平均分放在结构体对应的域中;函数fun2输出10名学生的记录。主函数调用函数fun1和函数fun2,不使用全局变量,函数之间的数据全部用参数传递。

    #include<stdio.h>
    struct student{
        char num[10],name[10];
        float s[4];
        float ave;
    };
    int main(){
        void fun1(struct student stu[]);
        void fun2(struct student stu[]);
        struct student stu[3];
        fun1(stu);
        fun2(stu);
    }
    void fun1(struct student stu[]){
      printf("请分别输入10名学生的学号、姓名和4分成绩:\n");
      int i;
      for(i=0;i<3;i++){
        scanf("%s %s %f %f %f %f",stu[i].num,stu[i].name,&stu[i].s[0],
              &stu[i].s[1],&stu[i].s[2],&stu[i].s[3]);
        stu[i].ave=(stu[i].s[0]+stu[i].s[1]+stu[i].s[2]+stu[i].s[3])/4.0;
      }
    
    }
    void fun2(struct student stu[]){
      int i;
      for(i=0;i<3;i++){
         printf("学号:%s\n姓名:%s\n4门成绩:%f,%f,%f,%f\n平均分:%5.2f\n",
                stu[i].num,stu[i].name,stu[i].s[0],stu[i].s[1],stu[i].s[2],stu[i].s[3],
                stu[i].ave);
      }
    }
    
    

    39.已有两个链表x和y,每个链表的节点包括学号和成绩,要求把两个链表和并,按学号升序排列。

    struct node *Merge(struct node *h1,struct node *h2){
      struct node *p,*q,*r,*s,*h;
      p=h1;
      q=h2;
      if(p->num<q->num){
         h=s=p;
         r=p;
         p=p->next;
         r->next=NULL;
      }else{
         h=s=q;
         r=q;
         q=q->next;
         r-next=NULL;
      }
      while(p&&q){
         if(p->num<q->num){
            r=p;
            p=p->next;
         }else{
            r=q;
            q=q->next;
         }
         s->next=r;
         s=s->next;
      }
      if(p){
        s->next=p;
      }else{
        s->next=q;
      }
      return h;
    }
    

    40.编写一个程序,将两个文件的内容合并输出到另一个文件中。

    #include<stdio.h>
    #include<string.h>
    int main(){
    
       FILE *fp1,*fp2,*fp3;
       char str[128];
       if(fp1==fopen("t1.text","r")==NULL){
          printf("不能打开文件\n");
          exit(0);
       }
       if(fp2==fopen("t2.txt","r")==NULL){
          printf("不能打开文件\n");
          exit(0);
       }
       if(fp3==fopen("t3.txt","w")==NULL){
          printf("不能打开文件\n");
          exit(0);
       }
       while((strlen(fgets(str,128,fp2)))>0){
          fputs(str,fp3);
          printf("%s",str);
       }
       fclose(fp1);
       fclose(fp2);
       fclose(fp3);
    }
    
    

    41.求一元二次方程:ax2+bx+c=0 的根。

    输入三个实数a,b,c的值,且a不等于0。

    #include<stdio.h>
    #include<math.h>
    int main(){
    
       float a,b,c,d,x1,x2;
       printf("请输入a,b,c的值:\n");
       scanf("%f %f %f",&a,&b,&c);
       if(a!=0){
          d=sqrt(b*b-4*a*c);
          x1=(-b+d)/(2*a);
          x2=(-b-d)/(2*a);
          printf("x1=%0.2f\tx2=%0.2f\n",x1,x2);
       }
    
    
    }
    

    42.用户输入年份,判断该年份是否为闰年

    • 思路:先把百年的年份拿出来,是400的倍数,是闰年,不是400的倍数,不是闰年。非百年的年份按照4处理。
    #include<stdio.h>
    int main(){
       /**
       思路:先把百年的年份拿出来,是400的倍数,是闰年,不是400的倍数,不是闰年。
              非百年的年份按照4处理。
       **/
       int year;
       printf("请输入年份:\n");
       scanf("%d",&year);
       //先处理百年年份
       if(year%100==0){
          //是400的倍数为闰年
          if(year%400==0){
             printf("y\n");
          }else{
             printf("n\n");
          }
       }
       //再处理非百年的年份
       else{
          if(year%4==0){
             printf("y\n");
          }else{
             printf("n\n");
          }
    
       }
    
    }
    
    

    43.九九乘法口诀表

    #include<stdio.h>
    int main(){
    
       int i,j;
       for(i=1;i<=9;i++){  //外层循环控制行
          for(j=1;j<=i;j++){  //内层循环控制列
              printf("%dx%d=%d\t",i,j,i*j);
          }
          printf("\n");
       }
    
    }
    

    在这里插入图片描述

    44.表格形式输出数据。将1~100的数据以10x10矩阵格式输出。

    在这里插入图片描述

    #include<stdio.h>
    int main(){
    
        int i,j,k;
        for(i=1;i<=10;i++){
            k=i;
            for(j=0;j<=9;j++){
                printf("%3d",j*10+k);
            }
            printf("\n");
        }
    
    
    }
    
    

    45.计算一个数是否可为两个素数之和

    • 思路:先写出判断数字是否为素数的函数,然后再循环遍历该数范围内的数,当范围内遇到素数时,然后再判断输入数字减去遇到的素数之差是否仍为素数,若仍为素数则可以分解为两个素数之和,否则不行。
    #include<stdio.h>
    int main(){
    
       int checkPrime(int number);
       int num,i,flag=0;
       printf("请输入一个整数:\n");
       scanf("%d",&num);
       for(i=2;i<=num/2;i++){
         if(checkPrime(i)==1){
            if(checkPrime(num-i)==1){
                printf("%d是%d和%d两个素数的和\n",num,i,num-i);
                flag=1;
            }
         }
    
       }
       if(flag==0){
          printf("%d不能分解成两个素数",num);
       }
    
    }
    //判断素数
    int checkPrime(int number){
    
        int i;
        for(i=2;i<number;i++){
            if(number%i==0){
                return 0;
            }
        }
        if(i==number){
            return 1;
        }
    
    }
    

    46.二进制与十进制的相互转换

    • 二进制转十进制
    #include <stdio.h>
    #include <math.h>
    int main(){
    
       int converTo(long long number);
       long long num;
       printf("请输入一个二进制数:\n");
       scanf("%lld",&num);
       printf("二进制数%lld转换为十进制数为:%d",num,converTo(num));
    
    
    }
    int converTo(long long number){
    
       int reminder,decimalNumber=0,i=0;
       while(number!=0){
          reminder=number%10; //余数
          number=number/10;  //每次去掉最后一位再计算
          decimalNumber=decimalNumber+reminder*pow(2,i);
          i++;
       }
       return decimalNumber;
    
    }
    
    • 十进制转二进制
    #include <stdio.h>
    #include <math.h>
    int main(){
    
       long long convertDecimalToBinary(int number);
       int num2;
       printf("请输入一个数:\n");
       scanf("%d",&num2);
       printf("十进制数%d转换为二进制数为:%lld",num2,convertDecimalToBinary(num2));
    
    }
    //十进制转换为二进制数
    long long convertDecimalToBinary(int number){
    
       int reminder,i=1;
       long long binaryNumber=0;
       while(number!=0){
         reminder=number%2; //每次记录二进制末尾数
         binaryNumber=binaryNumber+reminder*i;  //通过乘10法进位
         number=number/2;
         i=i*10;
       }
       return binaryNumber;
    
    }
    
    展开全文
  • C语言编程经典100例(含答案),适合刚刚入门的萌新。
  • 这本书非常适合初学者,从入门到精通,推荐给大家,希望大家喜欢!
  • } 十九,编程1!+2!+3!+4!+5!+6!…的值 #include int main() { int i, j, k, sum=0,ret = 1; scanf("%d",&k); for ( i = 1; i ; i++) { ret = i*ret; sum = sum + ret; } printf("%d", sum); ...

    一,求三个整数的最大值

    #include <stdio.h>
    
    int main(void)
    {
    	int a, b, c;
    	int x=0;
    	printf("请输入三个数:\n");
    	scanf("%d %d %d",&a,&b,&c);
    
    	if(a>b&&a>c)
    		x=a;
    	if(b>a&&b>c)
    		x=b;
    	if(c>a&&c>b)
    		x=c;
    	printf("max=%d\n",x);
    
    	return 0;
    }
    

    二,输入10个数,输出最大的那个数

    #include <stdio.h>
    
    int main(void)
    {
    	int i, a[10], s=0;
    	printf("请输入十个数:\n");
    	for(i=0;i<=9;i++)
    	scanf("%d",&a[i]);
    	for(i=0;i<=9;i++)
    	if(s<a[i])
    	s=a[i];
    	printf("最大的数是:%d\n",s);
    	
    	return 0;
    }
    

    三,判断2000-2500年的闰年,并输出

    #include <stdio.h>
    
    int main(void)
    {
    	int i, x=0;
    	for(i=2000;i<=2500;i++){
    		if((i%4==0&& i%100!=0)||i%400==0)
    			printf("%d is a leap year!\n",i);
    		else
    			printf("%d is not a leap year!\n",i);
    	}
    }
    

    四,1加到100

    #include <stdio.h>
    
    int main(void)
    {
    	int i, sum=0;
    	
    	for(i=1;i<=100;i++){
    		sum=sum+i; 
    	}
    	printf("sum=%d\n",sum);
    	
    	return 0;
    }
    

    五,1-1/2+1/3…-1/100

    #include <stdio.h>
    
    int main(void)
    {
    	float i, sign=1, sum=0;
    	for(i=1;i<=100;i++){
    		sum=sum+sign/i;
    		sign=(-1)*sign;
    	}
    	printf("%f\n",sum);
    
    	return 0;
    }
    

    六,判断一个数能否同时被3和5整除

    #include <stdio.h>
    
    int main(void)
    {
    	int n;
    	printf("输入一个数:")scanf("%d",&n);
    	if(n%3==0&&n%5==0)
    		printf("可以被整除\n",n);
    	else
    		printf("不可以被整除\n",n);
    
    	return 0;
    
    }
    

    七,n个元素的数组a中,数从小到大排列,从大到小输出

    #include <stdio.h>
    
    int main(void)
    {
    	int i,j,a[100],s=0,n;
    	printf("n:\n");
    	scanf("%d",&n);
    	printf(":\n"); 
    	for(i=0;i<n;i++)
    	scanf("%d",&a[i]);
    	for(i=0;i<n-1;i++){
    		for(j=i+1;j<n;j++){
    			if(a[i]>a[j]){
    				s=a[i];
    				a[i]=a[j];
    				a[j]=s;
    			}
    		}
    	}
    	for(i=0;i<n;i++)
    	printf("%d ",a[i]);
    	printf("\n");
    	for(i=n-1;i>=0;i--)
    	printf("%d ",a[i]);
    	
    	return 0;
    
    }
    

    八,九,将大写字母变成小写字母 (小->大)

    #include <stdio.h>
    
    int main(void)
    {
    	char c1, c2;
    	scanf("%c",&c1);
    	c2=c1+'a'-'A';   //c2=c1+'A'-'a';
    	printf("%c",c2);
    	 
    	return 0;
    
    }
    

    十,输入字符,最终按小写输出

    #include <stdio.h>
    
    int main(void)
    {
    	char ch;
    	scanf("%c",&ch);
    	ch=(ch>='A'&&ch<='a')?(ch+'a'-'A'):ch;
    	printf("%c\n",ch);
    	 
    	return 0;
    
    }
    

    十一,求三角形面积

    #include <stdio.h>
    #include <math.h>
    
    int main(void)
    {
    	double a, b, c, s, area;
    	printf("please input:");
    	scanf("%lf %lf %lf",&a,&b,&c);
    	
    	if(a+b>c&&a+c>b&&b+c>a){
    		s=(a+b+c)/2;
    		area=sqrt(s*(s-a)*(s-b)*(s-c));
    		printf("area is %f\n",area);
    		
    		return 0;
    	}
    	else;
    }
    

    十二,通过三角形三个点坐标求面积

    typedef struct
    {
    	double x;
    	double y;
    }Point;
    
    double get_square(Point p0, Point p1, Point p2)
    {
    	double area=0;
    	area=p0.x*p1.y+p1.x*p2.y+p2.x*p0.y-p1.x*p0.y-p2.x*p1.y-p0.x*p2.y;
    	return area/2;
    }
    

    十三,请编程序将“China”译成密码,分别用putchar和printf函数输出这5个字符

    #include<stdio.h>
    
    int main()
    {
    	char c1='C',c2='h',c3='i',c4='n',c5='a';	
    	c1 += 4;	
    	c2 += 4;	
    	c3 += 4;	
    	c4 += 4;	
    	c5 += 4;	
    	printf("用printf输出密码为:%c%c%c%c%c\n", c1, c2, c3, c4, c5);	
    	printf("用putchar输出密码为:");	
    	putchar(c1);	
    	putchar(c2);	
    	putchar(c3);	
    	putchar(c4);	
    	putchar(c5);	
    	printf("\n");
    	
    	return 0;
    }
    

    十四,输出成绩以ABCDE输出

    #include<stdio.h>
    
    int main()
    {
    	int mark;
    	scanf("%d",&mark);
    	switch (mark/10)
    	{
    		case 10:
    		case 9:
    			printf("A\n");
    			break;
    		case 8:
    			printf("B\n");
    			break;
    		case 7:
    			printf("C\n");
    			break;
    		case 6:
    			printf("D\n");
    			break;
    		default:
    			printf("E\n");
    			break;
    		}	
    }
    

    十五,输出2的N次幂:1,2,4,8…到2^N

    #include <stdio.h>
    #define N 16
    
    int main(void)
    {
    	int n;
    	int val=1;
    	
    	printf("\t  n \t     2^n\n");
    	printf("\t================\n");
    	for (n=0;n<=N;n++){
    		printf("\t%3d \t %6d\n",n,val);
    		val=2*val;
    	}
    	return 0;
    }
    

    十六,判断一个数是不是素数

    #include <stdio.h>
    
    int main(void)
    {
    	int i,num,tag=1;
    	scanf("%d",&num);
    	if(num==1)
    		return 0;
    	for(i=2;i<num;i++)
    	{
    		if(num%i==0)
    		{
    			tag=0;
    			break;
    		}
    	}
    	if(tag==1)
    		printf("it is do a prime number");
    	else
    		printf("it is not a prime number");
    
    	return 0;
    }
    

    十七,输出2-300间的素数

    #include <stdio.h>
    
    int main(void)
    {
    	int i;
    	for(i=2;i<=300;i++)
    		if(prime_num(i)==1)
    			printf("%d ",i);
    	return 0;
    }
    
    int prime_num(int m)
    {
    	int j;
    	for(j=2;j<m;j++)
    	{
    		if(m%j==0)
    			return 0;
    	}
    
    	return 1;
    }
    

    十八,求2+22+222+2222+…共五项

    #include <stdio.h>
    
    int main()
    {
    	int temp,i,j,a,n,sum=0;
    	scanf("%d %d",&a,&n);
    	temp=a;
    	for(i=0;i<n;i++)
    	{
    		sum=sum+a;
    		printf("%d + ",a);
    		a=a*10+temp;
    	}
    	printf("=%d",sum);
    
    	return 0;
    }
    

    十九,编程1!+2!+3!+4!+5!+6!…的值

    #include <stdio.h>
    
    int main()
    {
    	int i, j, k, sum=0,ret = 1;
    	scanf("%d",&k);
    	for ( i = 1; i <=k ; i++)
    	{
    		ret = i*ret;
    		sum = sum + ret;
    	}
    	printf("%d", sum);
    	
    	return 0;
    }
    

    二十,自然底数e的计算公式,最后一项<10^-10的时候结束

    #include <stdio.h>
    
    int main()
    {
    	float e=1.0,n=1.0;
    	int i=1;
    	while(1/n>1e-10)
    	{
    		e+=1/n;
    		i++;
    		n=i*n; 
    	}
    	printf("e的值为:%f\n",e);
    	
    	return 0;
    }
    
    展开全文
  • 编程题100道,填空题40道,阅读题100道,选择题100道,判断题170道,填空题140道。总结全面 应有尽有。过2级没问题。过期末考也没问题
  • 年北京理工大学软件工程 语言程序设 年北京理工大学软件工程 语言程序设 2020 C 2020 C 计考研复试核心题库之编程题精编 计考研复试核心题库之编程题精编 主编掌心博阅电子书 主编掌心博阅电子书 1 37 1 37 第 页 共...
  • #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #define MaxSize 50 typedef int ElemType ; //定义顺序表 typedef struct{ ElemType data[MaxSize];... E.
  • stdbool.h 可以用bool类型了 应用步骤: 根据题目的描述,定义合适的结构体。 根据题目要求,配合结构体写出功能,功能总结 顺序表遍历 链表遍历 链表排序 求两字符串中最长公共子串 二维数组中行最大,列...
  • 哈工大计算机考研复试编程题可运行C语言代码,哈工大计算机考研复试编程题可运行C语言代码,哈工大计算机考研复试编程题可运行C语言代码
  • 内蒙古大学计算机研究生复试编程采用笔试形式,C++ 本文档收录了13,14,15,16,17年的真题 有的附有代码 供大家参考
  • 经典C语言编程100例——题目+答案代码(1-10)

    千次阅读 多人点赞 2019-11-17 21:10:15
    【程序 1】 题目:有 1、2、3、4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都是 1、2、3、4。组成所有的排列后再去掉不满足条件的排列。...
  • C语言程序设计课程题型选择 序号 试题内容 1 以下斜述正确是c A)在C程序中main函数必需在程序最前面 B)在C程序中每行只能写一条语句 C)C语言本身没有输入输出语句 D)在对C程序进行编译过程中能够发觉注释中拼写...
  • 本人是21届考生,复试复习期间,深感C语言笔试复习的困难。资料混乱,没什么章法,特此进行整理工作,方便自己复习,也为后来者提供帮助。 本着实简单,估计是早年或者是送分用的。 #include<stdio.h> ...
  • A解题思路 根据图上的公式转为c语言的数学代码即可,在使用sqrt函数时记得要引用math.h函数库。 B代码部分 #include #include float disc;//定义全局变量判别式 float x1, x2; float p, q; void greater(int a, int...
  • 年沈阳师范大学 语言程序设计考研复 年沈阳师范大学 语言程序设计考研复 2020 C 2020 C 试核心题库之编程题精编 试核心题库之编程题精编 主编掌心博阅电子书 主编掌心博阅电子书 1 33 1 33 第 页 共 页 第 页 共 页 ...
  • 无偿奉献,祝君成功!无偿奉献,祝君成功!无偿奉献,祝君成功!无偿奉献,祝君成功!无偿奉献,祝君成功!无偿奉献,祝君成功!无偿奉献,祝君成功!无偿奉献,祝君成功!无偿奉献,祝君成功!...
  • 某高校考研真题c语言

    千次阅读 2019-10-24 21:59:31
    #include <stdio.h> #define N 5 int Min(int a,int b){ int k; if(a<=b) k=a; else k=b; return k; } int main() { int i,j=0,k=0,m,n,x=0,y=0;... int a[N][N]={{11,4,2,7,...
  • C程序设计(谭浩强第五版)第三章习题...答:不是,因为两者的存储范围不同,如果整数超出了字符的存储范围,则不能相互替换 本章完结,欢迎关注我的博客一起交流C语言相关的知识,博主目前考研的专业课科目是C语言。 
  • //2 3 4 c语言的左结合与右结合。 左结合:从左到右算 右结合:从右到左算 -> 比++、–优先度高: p+±>n,先取n,再++ ++p->n, 同理 ++、–比+、-、*、%优先度高 x *= x + 1; 等价于 x *= (x+1); p = &&i,错误,...
  • 考研复试-----C语言上机操作(三)

    千次阅读 2019-03-12 16:53:21
    上接(考研复试-----C语言上机操作(二)) 【注】为了大家更方便的看完题目,从此以后将代码放在文章末尾! 第一: 1,问题描述:输入3个数a,b,c,按大小顺序输出。 2,问题思路: 三个数你可以选择采用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,465
精华内容 1,386
关键字:

c语言考研编程题

c语言 订阅