一.
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