期末程序设计题

一. 

      1. 

判断语句里面有表达式记得把表达式上括号

能被谁整除什么意思要搞清楚 

       2.判断字符类型

也可以这样:

 

如果要遍历字符串数组可以用str[i]!=‘\0’来判定,也可以用str

2.冒泡排序 

//冒泡排序函数
void bubble_sort(int num[],int n) //存放要排序数的数组,要排序数的个数 
{
	int i,j,t; //i,j为遍历变量,t为临时交换变量
	for(i=0;i<n-1;i++) //控制内层循环次数 
	{
		//控制每次循环最小的比较次数
		for(j=0;j<n-1-i;j++) //这里-i是因为每次冒完泡出来的那个数位置固定了不用管 
		{
			//比较相邻的两个数 
			if(num[j]>num[j+1]) //把大的数冒泡到后面,即从小到大排序 
			{
				//把第一个数与第二个数交换位置 
				t=num[j+1];
				num[j+1]=num[j];
				num[j]=t;
			}
		}
	} 
}
————————————————
版权声明:本文为CSDN博主「影龙武」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43594119/article/details/121915318

3.

4.杨辉三角

二.指针

要搞清楚什么叫值传递 ,形参实参共用内存空间

如果是全局变量可以没有return

 

2.统计字母个数进数组

/*    请编写一个函数void fun(char *tt,int pp[]),统计在tt字符串中'a'到'z'26个字母各自出现的次数,并依次放在pp所指数组中。
    例如,当输入字符串:abcdefgabcdeabc后,程序的输出结果应该是:3 3 3 2 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    注意:部分源程序存在文件prog.c中。
    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。*/
/*思路*/
/*遍历aa数组,运用switch语句,遇到相应的字母pp中对应的数字就加一下*/
#define  _CRT_SECURE_NO_WARNINGS
#include <conio.h>
#include <stdio.h>
void fun(char* tt, int pp[])
{
    int j;
    for (j = 0; j < 26; j++)
    {
        pp[j] = 0;
    }
    
    /**********  Begin  **********/
    while (*tt)//
    {
        switch (*tt) {
        case 'a':pp[0]++; break;
        case 'b':pp[1]++; break;
        case 'c':pp[2]++; break;
        case 'd':pp[3]++; break;
        case 'e':pp[4]++; break;
        case 'f':pp[5]++; break;
        case 'g':pp[1]++; break;
        case 'h':pp[1]++; break;
        case 'i':pp[1]++; break;
        case 'j':pp[1]++; break;
        case 'k':pp[1]++; break;
        case 'l':pp[1]++; break;
        case 'm':pp[1]++; break;
        case 'n':pp[1]++; break;
        case 'o':pp[1]++; break;
        case 'p':pp[1]++; break;
        case 'q':pp[1]++; break;
        case 'r':pp[1]++; break;
        case 's':pp[1]++; break;
        case 't':pp[1]++; break;
            
        case 'u':pp[1]++; break;
        case 'v':pp[1]++; break;
        case 'w':pp[1]++; break;
        case 'x':pp[1]++; break;
        case 'y':pp[1]++; break;
        case 'z':pp[1]++; break;
        }
        tt++;

   }
    




    /**********   End  ***********/
}
main()
{
    char aa[1000];
    int bb[26], k;
    
    printf("\nPlease enter a char string;"); scanf("%s", aa);
    fun(aa, bb);
    for (k = 0; k < 26; k++) printf("%d", bb[k]);
    printf("\n");
}

遍历数组时遇到字符数组也可以用’0‘和其余非零的字符判断 是否循环要继续

切记字符数组结尾的时候是‘\0'而不是'0'

三.数组 

 传过去是地址就不要return了,正反两个方向都成立,注意

1.删除元素 

删除重复元素 


/*------------------------------------------------------
【程序设计】
--------------------------------------------------------
此题思路:
首先先把原始的数组传到函数里面,删除后返回了删除后数组的长度,再遍历这个长度,把删除以后的数组输出
删改是在原地删改不建立新数组,所以数组首位元素不动,从a1
开始,设一个k作为比较的基石,把首位元素的值给了k,然后遍历数组,如果遇到ai不等于k的,把ai的值给了k,并且aj=ai,j自增,下次再遇到不等于的情况同理


功能:删去一维数组中所有重复的数,只保留不同的数。
数组中的数已按由小到大的顺序排列,
函数返回删除后数组中数据的个数。
例如:一维数组中的数据是: 2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10。
删除后,数组中的内容应该是: 2 3 4 5 6 7 8 9 10。
注意:请勿改动主函数main和其它函数中的任何内容。
------------------------------------------------------*/
#include "stdio.h"
#define N 80

int fun(int a[], int n)
{
    /*********Begin**********/
   

    int k;//比较的标准,即都与k作比较
    k = a[0];
    int i;
    int j = 1;
  
    for (i = 1; i < n; i++)
    {
        if (a[i] != k)
        {
            a[j] = a[i];
            j++;
            k = a[i];
        }
    }
    return j;
   
}

main()
{
    void TestFunc();
    int a[N] = { 2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10 }, i, n = 20;
    printf("The original data:\n");
    for (i = 0; i < n; i++) printf("%3d", a[i]);
    n = fun(a, n);
    printf("\n\nThe data after deleted:\n");
    for (i = 0; i < n; i++) printf("%3d", a[i]);
    printf("\n\n");

}

删除指定元素 

这种删除指定元素有两种方法,如果他的对立面即不删除元素的条件比较容易得出,就写对立面元素的条件,如果难表达,就用if-else,只不过让if执行空语句,else执行对立面元素的结果

/*    函数fun的功能是:将s所指字符串中下标为奇数同时ASCII值也为奇数的字符删除,
串中剩余的字符形成一个新串放在t所指的数组中。
    例如:若s所指串中的内容为:"ABCDEFG12345",其中C的ASCII码值虽为奇数,
但在数组中的下标为偶数,因此不能删除,而字符1的ASCII码值为奇数,在数组中的下标也为奇数,
因此应当删除,其他依次类推。最后,t所指的数组中的内容是"ABCDEFG24"。
    注意:部分源程序存在文件prog.c中。
    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。*/

#define _CRT_SECURE_NO_WARNINGS 1
#include <conio.h>
#include <stdio.h>
#include <string.h>
#include<windows.h>
void fun(char* s, char t[])
{
    /**********  Begin  **********/
    int n;
    n = strlen(s);
    int i;
    int j = 0;
    for (i = 0; i < n + 1; i++)
    {
        if (i % 2 == 0 || s[i] % 2 == 0)
        {
            t[j++] = s[i];
        }
    }
    t[j] = '\0';
    /**********   End  ***********/
}
main()
{
    char s[100], t[100];
    system("cls");
    printf("\nPlease enter string S:"); scanf("%s", s);
    fun(s, t);
    printf("\nThe result is:%s\n", t);
  
}

 重点!!!字符串相关的一定要在结尾添上结束的标志

2.找到最大元素

法一 

​
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:把20个随机数存入一个数组,然后输出该数组中的最大值。
思路:不要局限于只有找到了最大元素的值才可以,我们还可以找到最大元素值对应的下标,输出时也可以直接输出。
设最大元素下表为max遍历数组,如果有其他元素的值大于a[max],这时让max=i
------------------------------------------------*/

#include "stdio.h"
#include "stdlib.h"
#define VSIZE 20     

int fun(int list[], int size)
{
    /**********Begin**********/
    int max=0;
    int i;
    for (i = 0; i < size; i++)
    {
        if (list[i] > list[max])
        {
            max = i;
        }
    }
    return max;






    /**********  End  **********/

}
void main()
{
    int vector[VSIZE];
    int i;
    for (i = 0; i < VSIZE; i++)
    {
        vector[i] = rand();
        printf("Vector[%d]=%6d\n", i, vector[i]);
    }
    i = fun(vector, VSIZE);
    printf("\nMaxnum: Vector[%d]=%6d\n", i, vector[i]);
}

法二

​
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:把20个随机数存入一个数组,然后输出该数组中的最大值。
思路:还是暂定一个最大值max让数组中的数据和她比较并赋值,
如果找到了比max大的数,
把这个数的下标赋值给一个新的变量输出即可
------------------------------------------------*/

#include "stdio.h"
#include "stdlib.h"
#define VSIZE 20     

int fun(int list[], int size)
{
    /**********Begin**********/
    int max = list[0];
    int i;
    int xiabiao;
    for (i = 0; i < size; i++)
    {
        if (list[i] > max)
        {
            max = list[i];
            xiabiao = i;
        }
    }
    return xiabiao;
    /**********  End  **********/

}
void main()
{
    int vector[VSIZE];
    int i;
    for (i = 0; i < VSIZE; i++)
    {
        vector[i] = rand();
        printf("Vector[%d]=%6d\n", i, vector[i]);
    }
    i = fun(vector, VSIZE);
    printf("\nMaxnum: Vector[%d]=%6d\n", i, vector[i]);
}
​

3.二维数组之杨辉三角

/*-输出一个含有10行的杨辉三角形。
思路:
,此题中我们运用了二维数组,杨辉三角的规律就是第一列以及行数等于列数的那一列值为1,其余数等于前一行和的运算关系(自己看看就懂)
所以我们就拿列数作为判断条件*/
#include<stdio.h>
int main()
{
	int a[10][10];
	int i, j;//i表示行,j表示列
	for (i = 0; i < 10; i++)
	{
		for (j = 0; j <= i; j++)
		{
			
			
			if (j == 0)
			{
				a[i][j] = 1;
			}
			if (i == j)
			{
				a[i][j] = 1;
			}
			if (i != j && j != 0)
			{
				a[i][j] = a[i - 1][j - 1] + a[i - 1][j];

			}
			printf("%d ", a[i][j]);
		}
		printf("\n");
	}
	
}

对于二维数组在作为形参的时候,不能写成int a[][];出了第一个可以不写其余必须写 

4.九九乘法表 

5.矩阵

统计形式

/*读入4 * 3的二维数组,分别求各行、各列及表中所有数之和*/
/*思路*/
/*要输出类似统计表的形式,先把未计算统计前的数据输入进去,
再单独开一轮嵌套循环,
把计算后的数据在原来的基础上计算出来
对于每行的和,遍历数组,列数是固定的,把前面的数据加起来就好
对于每列的和,遍历数组,行数是固定的,相当于每列的和是把第一行的数先迁移到最后一行,
再用第二行的数往上叠加,以此类推叠加完成*/
#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int  i, j;
	int arry[5][4];
	for (i = 0; i < 5; i++)
	{
		for (j = 0; j < 4; j++)
		{
			arry[i][3] = 0;
			arry[4][j] = 0;
			arry[4][3] = 0;
		}
	}
	for (i = 0; i < 4; i++)
	{
		for (j = 0; j < 3; j++)
		{
			scanf("%d", &arry[i][j]);
		}
	}
	for (i = 0; i < 4; i++)
	{
		for (j = 0; j < 3; j++)
		{
			arry[i][3] += arry[i][j];
			arry[4][j] += arry[i][j];
			arry[4][3] += arry[i][j];
		}

	}
	for (i = 0; i < 5; i++)
	{
		for (j = 0; j < 4; j++)
		{
			printf("%d\t", arry[i][j]);
		}
		printf("\n");
	}
}

对于副对角线的规律是两坐标和为定值 

问题:部分元素初始化以后不是剩余部分自动初始化为0吗,为什么还要弄一部单独初始化 

求每列最大值 

/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:请编一个函数void fun(int tt[M][N],int pp[N]),tt指向一个M行N列
      的二维数组,求出二维数组每列中最大元素,并依次放入pp所指一维数
      组中。二维数组中的数已在主函数中赋予。
------------------------------------------------*/

#include<conio.h>
#include<stdio.h>
#define M 3
#define N 4

void fun(int tt[M][N], int pp[N])
{
    /**********Begin**********/
    int i, j;
   
    pp[0] = tt[0][0];
    pp[1] = tt[0][1];
    pp[2] = tt[0][2];
    pp[3] = tt[0][3];
    for (j = 0; j < 4; j++)
    {
        for (i = 0; i < 3; i++)
        {
            if (tt[i][j] > pp[j])
                pp[j] = tt[i][j];
        }
    }





    /**********  End  **********/
}

void main()
{
    int t[M][N] = { {22,45,56,30},
    {19,33,45,38},
    {20,22,66,40} };
    int p[N], i, j, k;
    printf("The original data is:\n");
    for (i = 0; i < M; i++)
    {
        for (j = 0; j < N; j++)
            printf("%6d", t[i][j]);
        printf("\n");
    }
    fun(t, p);
    printf("\nThe result is:\n");
    for (k = 0; k < N; k++) printf("%4d", p[k]);
    printf("\n");
}

 判断当前这个元素是否最大值时注意是和谁去比,不要把i,j弄混

外围元素和 

/*------------------------------------------------------
【程序改错】:只允许修改错误代码,其他代码不允许修改!
--------------------------------------------------------

功能:求一个3行4列矩阵的外框的元素值之和。                            
注意:矩阵四个角上的元素不能重复加。
例如:矩阵元素为1,2,3,4,5,6,7,8,9,10,11,12时,
      四框元素值之和应为65。
      1 2 3
      4 5 6
      7 8 9
      10 11 12
思路把第一行最后一行第一列最后一列都加起来再减去重复的元素
------------------------------------------------------*/
#include<stdio.h>
int fun(int a[3][4], int m, int n)
{
    int i,j;
    int sum1, sum2, sum3, sum4;
    sum1 = 0; sum2 = 0; sum3 = 0; sum4 = 0;
    for (i = 0; i < 4; i++)
    {
        sum1 += a[0][i];
        sum2 += a[2][i];
    }
    for (j = 0; j < m; j++)
    {
        sum3 += a[j][0];
        sum4 += a[j][3];
    }
    int out;
    out = sum1 + sum2 + sum3 + sum4 - a[0][0] - a[0][3] - a[2][0] - a[2][3];
    return out;
}
void main()
{
    int a[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
    printf("total=%d\n", fun(a, 3, 4));
}

 对所有外围元素描述:(以3*3为例)

矩阵转置 

6.二维数组之字符串以及字符串的copy 

/*    给定程序中,函数fun的功能是:
      在形参ss所指字符串数组中,删除所有串长超过k的字符串,函数返回所剩字符串的个数。
      ss所指字符串数组中共有N个字符串,且串长小于M。
      请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
      注意:不得增行或删行,也不得更改程序的结构!    */
/*思路*/
/*把字符串数组传入函数以后,通过对第一维进行操作遍历数组,这是一个就地改变数组的方式,不建立新数组,把ss改了即可,具体操作如下*/
#define _CRT_SECURE_NO_WARNINGS

#include  <stdio.h>
#include  <string.h>
#define N 5
#define M 10
int fun(char(*ss)[M], int k)
{
    int i, j = 0, len;

    /**********FILL**********/
    for (i = 0; i <N; i++)
    {
        len = strlen(ss[i]);

        /**********FILL**********/
        if (len <= k)

            /**********FILL**********/
            strcpy(ss[j++], ss[i]);
    }
    return j;
}
main()
{
    char x[N][M] = { "Beijing","Shanghai","Tianjing", "Nanjing","Wuhan" };
    int i, f;
    printf("\nThe original string\n\n");
    for (i = 0; i < N; i++) { puts(x[i]); } printf("\n");
    f = fun(x, 7);
    printf("The string which length is less than or equal to 7 :\n");
    for (i = 0; i < f; i++) puts(x[i]); printf("\n");
}

 输出二维数组中的字符串

如果要输出二维数组中的字符串,就把二维数组的行写出来就可以。 实现对二维字符串数组的赋值也是如此

另外用puts函数在这个题中会有自动换行的效果,因为puts只要遇到’\0'就会停止并加上一个\n

删除元素

删除元素如果不能新建数组存放删除后的元素,采取以上方法就地改变数组 

字符串的转移

若要实现一个字符串的转移用字符串copy函数 

遍历二维字符串数组 

和输出二维数组中的字符串一样

字符串间的赋值 

不能用赋值语句将字符串常量或者字符数组直接赋值给字符数组,如str1=“world”;这写法是错误的,必须要用strcpy()函数,用赋值语句将一个字符赋值给字符型变量或者字符数组是可以的。

这里关于用strcpy还是strcat,由于赋值对象每次都是字符数组 中新的一行,原来本来没有数据,所以用strcpy

z

7.鞍点问题

8.统一数组标号

9.字符串输入数组 

输入

遍历

不知道字符串的长度,可以通过strlen以及for循环,循环截止条件是遇到’\0',注意不是‘0’!!!

三.杂

1.完数

#include<stdio.h>
int main() {
	int  i, fator, sum;
	
	for (i = 2; i <= 1000; i++) {
		sum = 1;//1是所有数的因子,所以sum初始值为1
		for (fator = 2; fator < i ; fator++) {//找到数i的所有因子fator并求和得到sum
			if (i % fator == 0)
				sum += fator;
		}
		if (sum == i) {//如果sum和i相等,说明i是完数
			printf("%d its fastors are 1", i);
			for (fator = 2; fator <i ; fator++) {//循环输出所有因子
				if (i % fator == 0)
					printf(",%d", fator);
			}
			printf("\n");
		}
	}
	return 0;
}

2.哥德巴赫猜想  

/*验证哥德巴赫猜想*/
/*思路:输入一个任意偶数,再遍历比这个偶数小的数,但凡遇到一个素数,就看看偶数减去这个数是不是素数,是就输出*/
#include<stdio.h>
//判断素数函数
int insprime_(int n)
{
	int i;
	int insprime = 1;
	for (i = 2; i < n; i++)
	{
		if (n % i == 0)
		{
			insprime = 0;
			break;
		}
	}
	if (insprime == 0)
		return -1;
	else return 1;
}
int main()
{
	int num;
	int i;
	int j,k;
	int out,out2;
	
	printf("请输入大于6的任意偶数");
	scanf_s("%d", &num);
	for (i = 2; i < num; i++)//找小于偶数的所有素数,把小于这个num的所有都遍历,检查每一个书,是素数则储存,不储存这个数本身
	{
		out=insprime_(i);
		if (out > 0)
		{
			k = num - i;
			out2 = insprime_(k);
			if (out2 > 0)
			{
				printf("%d=%d+%d", num, i, k);
				break;//极其重要,找到即可!!!!!!!!!!!!!!!!!!!!!!!!!!!!
			}
		}
		
	}
}

3.数字的乘积与和

/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------

功能:输出1到100之间每位数的乘积大于每位数的和的数。
例如:数字26,数位上数字的乘积12大于数字之和8。

-------------------------------------------------------*/
#include <stdio.h>
void main()
{
    int n, k = 1, s = 0, m;
    for (n = 1; n <= 100; n++)
    {
        k = 1;
        /**********FILL**********/
        s = 0;
        m = n;
        /**********FILL**********/
        while(m > 0)
        {
            k *= m % 10;
            s += m % 10;
            /**********FILL**********/
            m /= 10;
        }
        if (k > s)
            printf("%d ", n);
    }
}

不管是一位数字还是多位总能够找出来每一位数字是多少 

4.pie的近似值

/*------------------------------------------------
【程序设计】
--------------------------------------------------

功能:
 用下面的公式求π的近似值,直到最后一项的绝对值小于指定的数(参数num)为止:
 例如:num为0.0001,则程序输出3.141393
π/4≈1-1/3+1/5-1/7+……
*********Begin**********和**********  End  **********不可删除

------------------------------------------------*/
#include <math.h>
#include <stdio.h>
double fun(double num)
{
    /*********Begin**********/
    double i;
    int bian = 1;
    double x;
    double sum = 0.0;
    for (i = 1; (1 / i) >= num; i=i+2)
    {
        x = bian * 1.0 / i;
        bian = -bian;
        sum += x;

    }
    return (4 * sum);

    /**********  End  **********/
}

main()
{
    double  n1, n2;
    printf("Enter a double number: ");
    scanf_s("%lf", &n1);
    n2 = fun(n1);
    printf("%f\n", n2);
}

总结:这种涉及double的定义时类型全变成double把,另外注意循环条件判断大小的符号要写清楚不要写反了 

4.最大公约数最小公倍数

5.打印菱形

/*打印菱形*/
#include<stdio.h>
int main()
{
	int i, k,j,i2,k2,j2;
	for (i = 1; i <= 5; i++)
	{
		for (j = 1; j <= 5-i; j++) {
			printf(" ");
	}
		for (k = 1; k <= 2 * i - 1; k++)
		{
			printf("*");
		}
		printf("\n");
			
	}
	for (i2 = 1; i2 <= 4; i2++)
	{
		for (j2 = 1; j2 <= i2; j2++) {
			printf(" ");
		}
		for (k2 = 1; k2 <= 9-2*i2; k2++)
		{
			printf("*");
		}
		printf("\n");
	}
}

关键就在于找到行数和*数以及空格数的关系,如:和为定值,乘积后再运算为定值,列出通向表达式解决问题

大体思路就是分上下两个三角来表示

5.阶乘计算

/*阶乘计算
思路:计算每个加数的值最后在求和,每个加数就是一个阶乘的计算,一个个阶乘累加,我们先算小的阶乘
*/
#include<stdio.h>
int main()
{
	int n;
	int t=1;//每个分开的阶乘
	int sum = 0;
	int i;
	scanf_s("%d", &n);
	for (i = 1; i <= n; i++)
	{
		t *= i;
		sum += t;
	}
	printf("%d", sum);
}

 

6.三个数按顺序输出

​
/*输入三个数,并且由小到大输出*/
#include<stdio.h>
int main()
{
	int x, y, z;
	scanf_s("%d %d %d", &x, &y, &z);
	if (x > y) {
		int t; t = x; x = y; y = t;
	}
	if (z < x)
	{
		printf("%d %d %d", z, x, y);
	}
	else if (z > y)
	{
		printf("%d %d %d", x, y, z);
	}
	else    printf("%d %d %d", x, z, y);
}

​

7.闰年判断

 if(year%4==0&&year%100!=0||year%400==0)

8.三角形面积 

/*三角形面积*/
/*先判断能否构成三角形再运用海伦公式*/
#include<stdio.h>
#include<math.h>
int main()
{
	int a, b, c;
	double s;
	double p;
	scanf_s("%d %d %d", &a, &b, &c);
	p = (a + b + c) / 2;
	if (a + b > c && a + c > b && b + c > a)
	{
		s = sqrt(p * (p - a) * (p - b) * (p - c));
		printf("%f", s);
	}
	else    printf("no");
}

9.判断字符串中数据类型个数 

/*------------------------------------------------------
【程序改错】
--------------------------------------------------------

题目:输入一行字符,分别统计出其中英文字母、空
      格、数字和其它字符的个数。
--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程序
      的结构。
------------------------------------------------------*/
#include "stdio.h"

main()
{
    char c;
    int letters = 0, space = 0, digit = 0, others = 0;
    printf("please input some characters\n");
    /**********Error**********/
    while ((c = getchar()) != '\n')
    {
        /**********Error**********/
        if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z')
            letters++;
        /**********Error**********/
        else if (c ==' ')
            space++;
        else if (c >= '0' && c <= '9')
            digit++;
        else
            others++;
    }

    printf("all in all:char=%d space=%d digit=%d others=%d\n", letters,
        space, digit, others);

}

10.字符串连接 

/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------

功能:先将在字符串s中的字符按正序存放到t串中,然后把s中的
      字符按逆序连接到t串的后面。

-------------------------------------------------------*/

#define _CRT_SECURE_NO_WARNINGS 1
#include <conio.h>
#include <stdio.h>
#include <string.h> 

void fun(char* s, char* t)
{
    int i, sl;
    /***********FILL***********/
    sl = strlen(s);
    for (i = 0; i < sl; i++)
        t[i] = s[i];
    for (i = 0; i < sl; i++)
        /***********FILL***********/
        t[sl + i] = s[sl-1-i];
    /***********FILL***********/
    t[sl + i] = '\0';
}

main()
{
    char s[100], t[100];
    
    /***********FILL***********/
    printf("\nPlease enter string s:");
    scanf("%s", s);
    fun(s, t);
    printf("The result is: %s\n", t);
}

易错点:在字符串连接后要再连接完成后的字符串后面加上字符串结束标志'\0' 

字符串连接函数 

/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------

功能:将两个字符串连接为一个字符串,不许使用库函数strcat。

-------------------------------------------------------*/

#include "stdio.h"
#include "string.h"
main()
{
    char str1[80], str2[40];
    void join(s1, s2);
    gets(str1); gets(str2);
    puts(str1); puts(str2);
    /***********FILL***********/
    join(str1, str2);
    puts(str1);
}
void join(s1, s2)
char s1[80], s2[40];
{
    int i, j;
    /***********FILL***********/
    j=strlen(s1);
    /***********FILL***********/
    for (i = 0; s2[i]!='\0'; i++)
       
        s1[i + j] = s2[i];
    /***********FILL***********/
    s1[i + j] = '\0';
}

 11.素数

 int i, k;
 for (i = m + 1;; i++)
 {
     for (k = 2; k < i; k++)
         /**********ERROR**********/
         if (i % k == 0)
             break;
     /**********ERROR**********/
     if (k == i)
         return(i);
 }

除了以前那种方法还可以这样做,如果没有被break即是素数的话,k出来是等于i的 

判断是否是素数函数

如果是1,会进入循环最后出来返回true,如果是2不进入循环直接返回true ,很明显1不是素数,所以我们把1弄成单独情况判读

 

wenti 

/*给定程序中,函数fun的功能是:有N×N矩阵,将矩阵的外围元素顺时针旋转。
    操作顺序是:首先将第一行元素的值存入临时数组r,然后使第一列成为第一行,
最后一行成为第一列,最后一列成为最后一行,临时数组中的元素成为最后一列。
    例如,若N=3,有下列矩阵:
        1    2    3
        4    5    6
        7    8    9
    计算结果为
        7    4    1
        8    5    2
        9    6    3
    请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!*/


#include    <stdio.h>
#define    N    3
void fun(int(*t)[N])
{
    int  j, r[N];
    for (j = 0; j < N; j++)  r[j] = t[0][j];
    for(j=0;j<3;j++)
        {
            t[0][2-j]=t[j][0];
        }
    for (j = 0; j < N; j++) {
        t[j][0] = t[2][j];
    }
    for (j = 0; j < N; j++)
    {
        t[2][2-j] = t[j][2];
    }
    for (j = 0; j < N; j++)
    {
        t[j][2] = r[j];
    }

}
main()
{
    int t[][N] = { 1,2,3,4,5,6,7,8,9 }, i, j;
    printf("\nThe original array:\n");
    for (i = 0; i < N; i++)
    {
        for (j = 0; j < N; j++)  printf("%2d  ", t[i][j]);
        printf("\n");
    }
    fun(t);
    printf("\nThe result is:\n");
    for (i = 0; i < N; i++)
    {
        for (j = 0; j < N; j++)  printf("%2d  ", t[i][j]);
        printf("\n");
    }
}

12.关于函数要return两个值

这种情况可以通过设置全局变量实现,如下面这个题目:

貌似不知道到底会返回有几个值时可以设置全局数组

/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------

功能:给定程序的功能是:分别统计字符串中大写字母和小写
字母的个数。
例如,给字符串ss输入:
AaaaBBbl23CCccccd(字符串中不要有空格),则输出结果应为:
upper=5,lower=9
-------------------------------------------------------*/

#include  <stdio.h>
int upper, lower;
void ss(char x[])
{
    int i = 0;
    while (x[i])
        /**********FILL************/
    {
        if (x[i] >= 'A'&&x[i] <= 'Z')
            upper++;
        else  if (x[i] >= 'a' && x[i] <= 'z')
            /**********FILL************/
            lower++;
        /**********FILL************/
        i++;
    }
}
main()
{
    char s[100];
    printf("\nPlease a string:");
    scanf("%s", s);
    ss(s);
    printf("\nupper=%d,lower=%d", upper, lower);
}

13.仅仅知识点:函数库中是有三角函数的 

14.判断星期几问题------解决getchar 缓冲区

这里之所以用getch就是因为用getchar后会给缓冲区留下\n不利于下一次再使用此函数。

 15.二分查找(调用函数)

#define _CRT_SECURE_NO_WARNINGS
/*题目描述:将n个从小到大排序的整数(n<1000000)从1~n进行编号,并一个待查找的整数m,请使用二分法进行查找。*/
#include<stdio.h>
int search(int a[], int n, int x)
{
	int low, high, mid;
	low = 0;
	high = n - 1;
	
	while (low <= high)
	{
		mid = (high + low) / 2;
		if (a[mid] == x) { return mid; }
		else if (x >= a[mid]) {
			low = mid + 1;
		}
		else {
			high = mid - 1;
		}
	}
	return -1;//没有找到
}
int main()
{
	int x,k;
	int a[10] = { 1,4,5,6,7,8,9,44,66,88 };
	scanf("%d", &x);
	k=search(a, 10, x);
	printf("%d", k);

}
​

15.注意

求平均值相关的记得小数点,适当运用float 

求平均值时用这种方法也可以哦!只不过拆分开来了

若要保留六位小数点可以强制转换为float类型输出

16.数的倒序以及重新组合

涉及到此类问题,要进行一个*10一步步累加,涉及个位数十位数的问题

涉及其他整形类型

都是什么就统一成什么比如下面这个s1

非数组数据的地址传递 

17.字符串大小写字母改变(一个字符一个传入函数)

/*------------------------------------------------------
【程序改错】:只允许修改错误代码,其他代码不允许修改!
--------------------------------------------------------

功能:将一个字符串中的大写字母转换成小写字母。
例如:输入aSdFG输出为asdfg。
对于改变大小写的新思路
字符串结合指针
如果字符串没到结尾就进入循环
用指针把字符串首字符地址传到函数里面转换
转换完成后指针后移一位
------------------------------------------------------*/

#include<stdio.h>
/**********ERROR**********/
void fun(char* c)
{
    if (*c <= 'Z' && *c >= 'A')*c -= 'A' - 'a';
    /**********ERROR**********/
    
}

void main()
{
    /**********ERROR**********/
    char s[81], *p = s;
    gets(s);
    while (*p)
    {
         fun(p);
        /**********ERROR**********/
        
        p++;
    }
    puts(s);
    putchar('\n');
}

17.数学函数

开根号:sqrt

取绝对值:fabs

18.产生随机数

  • 28
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值