湖北专升本c语言习题二

100到200之间的素数

int i= 1, p = 0;
    for (i = 1; i <= 2000; i++) {
        int sum = i + 100;
        p = sqrt(sum);
        if (p * p == sum) {
            sum += 168;
            p = sqrt(sum);
            if (p * p == sum) {
                printf("%d\n",i);
            }
        }
    }

 

99乘法表

voidninenine() {
    int i;
    for ( i = 0; i < 9; i++)
    {       int j;
        for (j =1; j <=i; j++)
            printf("%d*%d=%2d\t",i,j,i*j);
        printf("\n");       
 }
}

 

判断1000年---2000年之间的闰年

int checkThousand() {
    int year;
    for ( year = 1000; year <=2000 ; year++)
        if ((year%4==0&&year%100!=0)||(year%400==0)) 
            printf("%d\t",year);
​
}

 

两个值的内容进行交换。

int change() {
    int a = 10,b = 20;
    int temp = a;   a = b;      b = temp;
    printf("a=%d,b=%d",a,b);
    return 0;
}
/*a1 = 0x01;    //0000 0001
a2 = 0x00;    //0000 0000
a3 = 0x03;    //0000 0011
a4 = 0x02;    //0000 0010
​
b1 = a1 ^ a2; //0000 0001
b2 = a1 ^ a3; //0000 0010
b3 = a1 ^ a4; //0000 0011
*/
int change2() {
    int a = 10;
    int b = 20;
    //^位异或
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
    printf("a=%d,b=%d",a,b);
    return 0;
}

 

求10个整数中最大值

int max() {
    int arr[10] = { 0,1,23,21,20,88,29,3 };int i, max = arr[0];
    for ( i = 0; i <10; i++)
        if (arr[i]>max) 
            max = arr[i];
    printf("max=%d\n",max);
    return 0;
}

 

将三个数按从大到小输出

int arraythree() {
    int a, b, c, temp;
    printf("please enter values:");
    scanf_s("%d %d %d",&a,&b,&c);
    if (a<b) {exchange(a, b);
    if (a<c) {exchange(a, c);
    if (b<c) exchange(b, c);
    printf("the order is:%d,%d,%d\n",a,b,c);
    return 0;
}
int  exchange(int *x,int *y) {
    int temp = x;
    x = y;
    y = temp;
    return 0;
}

 

求两个数的最大公约数

1.辗转相除法
​
void maxPublic() {
    int a, b;
    printf_s("please enter values:");
    scanf_s("%d %d",&a,&b);
    while (a%b) {
        int temp = a % b;
        a = b;
        b = temp;
    }
    printf_s("the max common divisor is %d\n",b);
}
​
2.短除法
​
int a, b;
    printf("input a,b(a>b):");
    scanf("%d %d",&a,&b);
    if (a < b) {
        int t = a; a = b; b = t;
    }
    int k = b;
    for (; k >=1; k--) {
        if (a % k == 0 && b % k == 0)break;
    }
    printf("最大公约数:%d,最小公倍数:%d",a*b/k,k);
​
3.递归
​
int dig(int a,int b) {
    if (b == 0)return a;
    while (b) {
        return dig(b,a%b);
    }
}
​
int main() {
​
int a, b;
printf("input a,b(a>b):");  scanf("%d %d",&a,&b);
if (a < b) {
    int t = a; a = b; b = t;
}
printf("最大公约数:%d,最小公倍数:%d",(a*b)/ dig(a, b),dig(a, b));
    return 0;
​
}

 

计算Fibonacci数列(斐波那契)

// 1 1 2 3 5 ................ 数列40个数
//递归
int fn(int n) {
    if (n < 3)return 1;
    else return fn(n - 1) + fn(n - 2);
}
void fns() {
    int i;
    for (i = 1; i <= 40; i++) {
        printf("%12d", fn(i));
        if (i % 5 == 0)printf("\n");
    }
}
​
//2.迭代
    int f1 = 1, f2 = 1;
    int i;
    for (int i = 1; i <= 20; i++) { //结束条件
        printf("%12d %12d", f1, f2);
        if (i % 2 == 0) printf("\n");   //if语句作用是使输出4个数后换行
        f1 = f1 + f2;
        f2 = f2 + f1;
    }
​
//3.数组
int i;
    int f[20] = { 1,1 };
    for (i = 2; i < 40; i++) {
        f[i] = f[i - 2] + f[i - 1];
    }
    for (i = 0; i < 40;i++) {
        if (i % 5 == 0)printf("\n");
        printf("%12d", f[i]);
    }
​
    double f[50];
    f[1] = 1; f[2] = 1;
    for (int i = 3; i <= 49; i++) {
        f[i] = f[i - 1] + f[i - 2];
    }
    for (int i = 1; i < 50; i++) {
        printf("%.lf\n",f[i]);
    }
​

 

 

回文检查

int checkClicy() {
	int n, reverse = 0, rem, temp;
	printf("Enter an interger");
	scanf_s("%d",&n);
	temp = n;
	while (temp!=0)
	{
		rem = temp % 10;
		reverse = reverse * 10 + rem;
		temp /= 10;
	}
	if (reverse==n) {
		printf("%d is a palindrome.",n);
	}
	else
	{
		printf("%d is not a palindrome.",n);
	}
	return 0;
}

检查一个数能不能表示成两个质数之和

int prime(int n) {
	int i, flag = 1;
	if (n == 1)flag = 0;
	for (i = 2; i < n; i++) //或者 i<=sqrt(n)
	{
		if (n % i == 0) { flag = 0; break; }
	}
	return flag;
}
//检查一个数能不能表示成两个质数之和
void checksum() {
	int n, i, flag = 0;
	printf_s("Enter a positive integer:");
	scanf_s("%d",&n);
	for ( i = 2; i < n/2; i++)
	{
		if (prime(i)!=0) {
			if (prime(n-i)!=0) {
				printf("%d=%d+%d\n",n,i,n-i);
				flag = 1;
			}
		}
	}
	if (flag==0) {
		printf("%d cant't be sum of two prime numbers.",n);
	}
}

打印金字塔和三角形

void triangle() {
	int i, j, rows;
	printf(" Enter the number of rows:");
	scanf_s("%d", &rows);
		for (i = 1; i <= rows; i++)
		{
			for (j = 1; j <= i; j++)
			{
				printf("*");
			}
			printf("\n");
		}
}
//倒金字塔三角形
void invertedTriangle() {
	int i, j, rows;
	printf_s("Enter the number of rows:");
	scanf_s("%d",&rows);
	for (i =rows; i>=1; i--)
	{
		for (j =1; j<=i ; j++)
		{
			printf("*");
		}
		printf("\n");
	}
}
//用 * 打印金字塔
void trigon() {
	int i, space, rows, k = 0;
	printf_s("Enter the number of rows:");
	scanf_s("%d",&rows);
	for ( i = 1; i <=rows ; ++i)
	{
		for (space = 1; space <= rows-i;space++) {
			printf(" ");
		}
		while (k!=2*i-1)
		{
			printf("*");
			k++;
		}
		k = 0;
		printf("\n");
	}
}
//用 * 打印倒金字塔
void delta() {
	int rows, i, j, space;
	printf("Enter  number of rows:");
	scanf_s("%d",&rows);
	for ( i =rows; i>=1;i--)
	{
		for (space=0;space<=rows-i;space++)
		{
			printf(" ");
		}
		for (j = i; j <= 2 * i - 1; ++j)
		{
			printf("*");
		}
		for (j = 0; j <i-1; j++)
		{
			printf("*");
		}
	printf("\n");
}

简单的加减乘除计算器

void counter() {
	char o;
	float num1, num2;
	printf_s("Enter operator either + or - or * or divide:");
	scanf_s("%c", &o);
	printf_s("Enter two operands:");
	scanf_s("%f%f", &num1, &num2);
	switch (o)
	{
	case '+':
		printf("%.1f+%.1f=%.1f",num1,num2,num1+num2);
		break;
	case '-':
		printf("%.1f-%.1f=%.1f", num1, num2, num1 - num2);
		break;
	case '*':
		printf("%.1f*%.1f=%.1f", num1, num2, num1 * num2);
		break;
	case '/':
		printf("%.1f/%.1f=%.1f", num1, num2, num1 / num2);
		break;
	default:
		printf("Error! operator is not correct");
		break;
	}
}

颠倒字符串(递归)

void Reverse() {
	char c;
	scanf_s("%c", &c);
	if (c != '\n') {
		Reverse();
		printf_s("%c",c);
	}
}
int main() {
	printf_s("Enter a sentence:");
		Reverse();
	return 0;
}

实现二进制与十进制之间的相互转换

int decimal_binary(int n) {
	int rem, i = 1, binary = 0;
	while (n!=0) {
		rem = n % 2;
		n / 2;
		binary += rem * i;
		i *= 10;
	}
	return binary;
}
int binary_deciaml(int n) {
	int decimal = 0, i = 0, rem;
	while (n!=0)
	{
		rem = n % 10;
		n / 10;
		decimal += rem * pow(2, i);
		++i;
	}
	return decimal;
}

使用多维数组实现两个矩阵的相加

int TwoRectangleAdd() {
	int r, c, a[100][100], b[100][100], sum[100][100], i, j;
	printf("Enter number of rows(between 1 and 100):");
	scanf_s("%d",&c);
	printf("\n Enter elements of lst martix:\n");
    
	for ( i = 0; i < r; i++)
	{
		for (j == 0; j < c;j++) {
			printf("Enter element a%d%d",i+1,j+1);
			scanf_s("%d",&a[i][j]);
		}
}
printf("Enter elements of 2nd matrix:\n");
for ( i = 0; i < r; i++)
{
	for (j = 0; j < c; j++) {
		printf("Enter element a%d%d",i+1,j+1);
		scanf_s("%d",&b[i][j]);
	}

}
/*Adding Two matrices*/
for ( i = 0; i < r; i++)
{
	for (j = 0; j < c; j++) {
		sum[i][j] = a[i][j] + b[i][j];
	}

}
/*Displaying th resultant sum matrix.*/
printf("\nSum of two matrix is:\n\n");
for ( i = 0; i < r; i++)
{
	for ( j = 0; j < c; j++)
	{
		printf("%d",sum[i][j]);
		if (j==c-1) {
			printf("\n\n");
		}
	}
}
}

数组[N]排序

#define N 10
	int main() {

	int a[N], i,j,t;
	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]) {
				t = a[i]; a[i] = a[j]; a[j] = t;
			}
		}
	}
  /*冒泡排序
     for (i = 0; i < N; i++) {
		for (j =0; j < N-1-i; j++) {
			if (a[j] > a[j+1]) {
				t = a[j]; a[j] = a[j+1]; a[j+1] = t;
			}
		}
	}
 */
	for (i = 0; i < N; i++)printf("%d\t",a[i]);
	return 0;
}

输入一行小写字母后,将字母变成其下一字母(a->b,b->c,y->a)

(a变成b、b变成c、c变成d、…、x变成y、y变成z、z变成a)输出。
//第一种
    char s[100];	int i;
	printf("input a string:");
	for (i = 0; (s[i]=getchar())!= '\n'; i++) {
		s[i] = s[i] == 'z' ? 'a' : ++s[i];
	}
	s[i] = '\0';
	puts(s);
//第二种
char s[100];	int i;
	printf("input a string:");	gets(s);
	for (i = 0;s[i]; i++) {
		s[i] = s[i] == 'z' ? 'a' : ++s[i];
	}
	s[i] = '\0';
	puts(s);

完数( 一个数恰好等于它的真因子之和 )

真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身
6 its factor are1 ,2 ,3
28 its factor are1 ,2 ,4 ,7 ,14
496 its factor are1 ,2 ,4 ,8 ,16 ,31 ,62 ,124 ,248

int sum, i, j;
	for (i = 2; i < 1000; i++) {
		sum = 0;
		for (j = 1; j <=i/2; j++) {
			if (i % j == 0)sum += j;
		}
		if (sum == i) {
			printf("%d its factor are",i);
			for (j = 1; j <= i / 2; j++) {
				if (i % j == 0 && j != 1) {
					printf(",");
				}
				if (i % j == 0) {
					printf("%d ", j);
				}
			}
			printf("\n");
		}
	}

水仙花数

int digit, k, m, s;
	for (k = 1; k <= 1000; k++) {
		s = 0; m = k;
		while (m != 0) {
			digit = m % 10;
			s += digit * digit * digit;
			m /= 10;
		}
		if (s == k) {
			printf("%d\n", s);
		}
	}

	int i, g, s, b;
	for (i = 1; i <1000; i++) {
		g = i % 10;
		s = i / 10 % 10;
		b = i / 100;
		if (i == (g * g * g + s * s * s + b * b * b)) {
			printf("%d\n",i);
		}

	}

2568 sum=2+5+6+8

int n;
	scanf("%d", &n);
	int a[10], j = 0, sum = 0;
	while (n) {
		a[j] = n % 10;
		sum += a[j];
		n /= 10;
		j++;
	}
	printf("%d=", sum);
	for (j--; j >= 0; j--) {
		printf("%d", a[j]);
		if (j != 0)printf("+");
	}

回文字符串

char str[50], * p = str;
	int i = 0, j;
	gets(str);
	while (*p++)i++;
	for (j = 0; j < i; j++, i--)
		if (str[j] != str[i - 1])
			break;
	if (i == j || j - i == 1) printf("%s是回文字符串\n", str);
	else printf("%s不是回文字符串\n", str);
//2种
char s[256];
	gets(s);
	int i, j, flag =1;
	for (i = 0, j = strlen(j) - 1; i < j; i++, j--) {
		if (s[i] != s[j]) {
			flag =0; break;
		}
	}
	if (flag)printf("%s是回文字符串\n", s);
	else printf("%s不是回文字符串\n", s);

若干字符串,从大到小排序

int n,i,j;
	char* str[4] = { "adsadsa","weqw","gfg","czxcc" };
	for (i = 0; i <3; i++) {
		for (j = i + 1; j < 4; j++) {
			if (strcmp(str[i], str[j]) < 0) {
				char* temp = str[i];
				str[i] = str[j];
				str[j] = temp;
			}
		}
	}
	for (i = 0; i < 4; i++)puts(str[i]);

一个长度N的字符串从K个字符起,删去M个字符,组成长度N-M(N,M<=80,k<=N)

//We are poor students->We are students
void removeStr(char* str, int k, int m) {
	char* s = str;
	while (m) {
		s[k] = 0;
		k++, m--;
	}
	strcat(str, &s[k]);
}

写一个函数,使给定的一个3X3的二维整型数组转置,即行列互换。

#include<stdio.h>

void PrintArray(int ar[3][3])
{
	for(int i=0; i<3; ++i)
	{
		for(int j=0; j<3; ++j)
		{
			printf("%d ", ar[i][j]);
		}
		printf("\n");
	}
}

void ReverseArray(int ar[3][3])
{
	int tmp;
	for(int i=0; i<3; ++i)
	{
		for(int j=0; j<i; ++j)
		{
			if(i != j) //中间数不发生变化
			{
				//交换两个数
				tmp = ar[i][j];
				ar[i][j] = ar[j][i];
				ar[j][i] = tmp;
			}
			
		}
	}
}

int main()
{
	int array[3][3] = 
	{
		{1,2,3},
		{4,5,6},
		{7,8,9}
	};

	printf("转置前:\n");
	PrintArray(array);

	//进行数组转置
	ReverseArray(array);

	printf("转置后:\n");
	PrintArray(array);

	return 0;
}

如输人1990,应输出“1 9 9 0”。

//写一个函数,输人一个4位数字, 要求输出这4个数字字符,但每两个数字间空一个空格。
void OutString(char str[])
{
	int i = 0;
	while (str[i] != '\0')
	{
		printf("%c", str[i]);
		if (str[i + 1] == '\0') //清除最后一个空格不输出
			break;
		putchar(' ');
		i++;
	}
	printf("\n");
}

写一个函数,输人一行字符,将此字符串中最长的单词输出。

void LongestWord(char str[], char word[])
{
	int max_len = 0;
	int len = 0;
	int i = 0;
	while (str[i] != '\0')
	{
		if (str[i] == ' ')
		{
			str[i] = '\0';
			len = strlen(str);
			if (len > max_len)
			{
				max_len = len;
				strcpy(word, str);
				str = str + len + 1;
			}
		}
		i++;
	}
}

起泡法(冒泡排序)

#include<stdio.h>
#include<string.h>

void BubbleSort(char str[])
{
	int i, j;
	char tmp;
	int len = strlen(str);
	for(i=0; i<len-1; ++i)
	{
		for(j=0; j<len-i-1; ++j)
		{
			if(str[j] > str[j+1])
			{
				tmp = str[j];str[j] = str[j+1]; str[j+1] = tmp;
			}
		}
	}
}

int main()
{
	int i;
	char str[11] = {0};
	printf("请输入10个字符:>");
	for(i=0; i<10; ++i)
		scanf("%c", &str[i]);
	BubbleSort(str);
	printf("string sorted: %s\n", str);
	return 0;
}

二分查找 (折半查找法)

①输人10个职工的姓名和职工号;
②按职工号由小到大顺序排序,姓名顺序也随之调整;
③要求输人一个职工号,用折半查找法找出该职工的姓名,从主函数输人要查找的职工号,输出该职工姓名。
#include<stdio.h>

#define N 10

void input(int num[], char name[N][8])
{
	int i;
	for (i = 0; i < N; i++)
	{
		printf("input NO.: ");
		scanf("%d", &num[i]);
		printf("input name: ");
		getchar();
		gets(name[i]);
	}
}

void sort(int num[], char name[N][8])
{
	int i, j, min, templ;
	char temp2[8];
	for (i = 0; i < N - 1; i++)
	{
		min = i;
		for (j = i; j<N; j++)
		if (num[min]>num[j])  min = j;
		templ = num[i];
		strcpy(temp2, name[i]);
		num[i] = num[min];
		strcpy(name[i], name[min]);
		num[min] = templ;
		strcpy(name[min], temp2);
	}
	printf("\n result:\n");
	for (i = 0; i < N; i++)
		printf("\n %5d%10s", num[i], name[i]);
}

void search(int n, int num[], char name[N][8])
{
	int top, bott, mid, loca, sign;
	top = 0;
	bott = N - 1;
	loca = 0;
	sign = 1;
	if ((n<num[0]) || (n>num[N - 1]))
		loca = -1;
	while ((sign == 1) && (top <= bott))
	{
		mid = (bott + top) / 2;
		if (n == num[mid])
		{
			loca = mid;
			printf("NO. %d , his name is %s.\n", n, name[loca]);
			sign = -1;
		}
		else if (n < num[mid])
			bott = mid - 1;
		else
			top = mid + 1;
	}
	if (sign == 1 || loca == -1)
		printf("%d not been found.\n", n);
}

int main()
{
	int num[N], number, flag = 1, c;
	char name[N][8];

	input(num, name);
	sort(num, name);

	while (flag == 1)
	{
		printf("\ninput number to look for:");
		scanf("%d", &number);
		search(number, num, name);
		printf("continue ot not(Y/N)?");
		getchar();
		c = getchar();
		if (c == 'N' || c == 'n')
			flag = 0;
	}
	return 0;
}

写一个函数,输人一个十六进制数,输出相应的十进制数。

#include<stdio.h>

size_t HextoDec(char s[])
{
	size_t i, n;
	n = 0;
	for (i = 0; s[i] != '\0'; i++)
	{
		if (s[i] >= '0'&& s[i] <= '9')
			n = n * 16 + s[i] - '0';
		if (s[i] >= 'a' && s[i] <= 'f')
			n = n * 16 + s[i] - 'a' + 10;
		if (s[i] >= 'A' && s[i] <= 'F')
			n = n * 16 + s[i] - 'A' + 10;
	}
	return n;
}
int main()
{
	size_t result = 0;
	char hex[9] = {0}; 
	printf("input a HEX number:");
	scanf("%s", hex);
	result = HextoDec(hex);
	printf("0x%s = %u\n", hex, result);
	return 0;
}

用递归法将一个整数n转换成字符串。例如,输人483,应输出字符串”483”。n的位数不确定,可以是任意位数的整数。

#include<stdio.h>

void Convert(int n)
{
	int i;
	if ((i = n / 10) != 0)
		Convert(i);
	putchar(n % 10 + '0');
}

int main()
{
	int number;
	printf("input an integer: ");
	scanf("%d", &number);
	printf("output: ");
	if (number < 0)
	{
		putchar('-');   //先输出一个负号'-'
		number = -number;
	}
	Convert(number);
	printf("\n");
	return 0;
}

给出年、月、日,计算该日是该年的第几天。

#include <stdio.h>
#include<stdio.h>

/* 函数sum_day:计算日期 */
int sum_day(int month, int day)        
{
	int day_tab[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
	int i;
	for (i = 1; i < month; i++)
		day += day_tab[i];      /* 累加所在月之前天数 */
	return day;
}                         

/* 函数leap:判断是否为闰年 */
int leap(int year)
{
	int leap;
	leap = year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
	return leap;
}

int main()
{
	int year, month, day, days;
	printf("input date(year,month,day):");
	scanf("%d %d %d", &year, &month, &day);
	printf("%d/%d/%d ", year, month, day);
	days = sum_day(month, day);                  /* 调用函数sum_day */
	if (leap(year) && month >= 3)                  /* 调用函数leap */
		days = days + 1;
	printf("is the %dth day in this year.\n", days);
	return 0;
}

1234->9876,四位数+5,再%10,交换(1-3,2-4)

int a[10],n,m,count=0;
	scanf("%d", &n);
	while (n) {
		m = n % 10 + 5;
		a[count++] = m % 10;
		n /= 10;
	}
	for(int i=0; i< count; i++) {
		printf("%d",a[i]);
	}
//2.种
	int a, i, aa[4], t;
	scanf("%d", &a);
	aa[0] = a % 10;
	aa[1] = a/10%10;
	aa[2] = a/100%10;
	aa[3] = a/1000;

	for (i = 0; i <= 3; i++) {
		aa[i] += 5;
		aa[i] %= 10;
	}
	for (i = 0; i <= 3/2; i++) {
		t = aa[i];
		aa[i] = aa[3 - i];
		aa[3 - i] = t;
	}
	for (i = 3; i >= 0; i--)printf("%d", aa[i]);

252=2×5×2, 202=2×0×2

long int num, k=1;
	printf("please enter a number:\n");
	scanf("%ld", &num);
	while (num) {
		k *= num % 10;
		num /= 10;
	};
	printf("\n%ld\n", k);

99=3×3×11(因式分解)

	int n, i;
	printf("请输入整数:");
	scanf("%d", &n);
	printf("%d=", n);

	for (i = 2; i <= n; i++) {
		while (n % i == 0) {
			printf("%d", i);
			n /= i;
			if (n != 1)printf("*");
		}
	}
//2种
	int a[20], count = 0,n;
	scanf("%d", &n);
	printf("%d=", n);
	for (int i = 2; i <= n; i++) {
		while (n % i == 0) {
			a[count++] = i;
			n = n / i;
		}
	}
	for (int i=0; i<count; i++) {
		printf("%d", a[i]);
		if (i!=count-1)printf("*");
	}

10-16进制 ,16进制转10进制

#include<stdio.h>
int main()
{
	int n,i=0,j;
	char a[100];
	scanf("%d",&n);
    if(n==0)printf("%d",n);
	else 
    {
        while(n!=0)
        {
            
            switch(n%16)
            {	
                case 0:a[i]='0';break;
                case 1:a[i]='1';break;
                case 2:a[i]='2';break;
                case 3:a[i]='3';break;
                case 4:a[i]='4';break;
                case 5:a[i]='5';break;
                case 6:a[i]='6';break;
                case 7:a[i]='7';break;
                case 8:a[i]='8';break;
                case 9:a[i]='9';break;
                case 10:a[i]='A';break;
                case 11:a[i]='B';break;
                case 12:a[i]='C';break;
                case 13:a[i]='D';break;
                case 14:a[i]='E';break;
                case 15:a[i]='F';break;
            }
            n=n/16;
            i++;
        }
        for(j=i-1;j>=0;j--)printf("%c",a[j]);
    }
	return 0;
}

#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
	char a[100];
    int i;
    long long n=0;
    scanf("%s",&a);
    for (i=0;a[i]!='\0';i++)
    {
        if(a[i]>='A' && a[i]<='F')
        a[i]=(a[i]-'A')+10+'0';
        n+=((a[i]-'0')*(pow(16,strlen(a)-1-i)));
    }
    printf("%lld",n);
	return 0;
}

获取字符串数组里,最长的一串字符串

char* ff(char p[][10], int n) {
	static char t[20];
	int i, max = 0;
	for (i = 0; i < n; i++) {
		if (strlen(p[i]) > max) {
			max = strlen(p[i]);
			strcpy(t, p[i]);
		}
	}
	return t;
}
int main()
{
	char p[][10] = { "abc","aavsd","avvd","cd","asdasdasd"};
	printf("%s", ff(p, 5));
	return 0;
}

1234567890,每个数字和

long fs(long n) {
	if (n != 0)
		return (n % 10 + fs(n / 10));
	else return 0;
}

插入排序

	
//插入排序,从大到小
int main(){
int a[10] = { 99,32,11,22,8,9,4,6,-22,5 };
	int i,j;
	for (i = 1; i < 10; i++) {
		for (j = i; i >0; j--) {
			if (a[j]>a[j - 1])
				swaps(&a[j],&a[j-1]);
			else break;
		}
	}
	for (i = 0; i < 10; i++) {
		printf("%d\t", a[i]);
	}
	return 0;
}
//2种
int a[10] = { 99,32,11,22,8,9,4,6,-22,5 };
	int i,j;
	for (i =0; i <9; i++) {
		for (j =i+1; i<10; j++) {
			if (a[i]<a[j])
				swaps(&a[i],&a[j]);
			else break;
		}
	}
	for (i = 0; i < 10; i++) {
		printf("%d\t", a[i]);
	}

 

冒泡排序

int i, j, c = 0, a[10] = {12,44,66,-23,44,55,66,212,-99,88};

for (i = 0; i <10; i++) {
	for (j = 0; j < 9 - i; j++) {
		if (a[j]>a[j + 1]) {
			swaps(&a[j], &a[j + 1]);
			c = 1;
		}
	}
	if (c==0)break;
}
for (i = 0; i < 10; i++)printf("%d\t", a[i]);

 

 

C语言 在海军节开幕式上,有A、B、C三艘军舰要同时开始鸣放礼炮各21响。

在海军节开幕式上,有A、B、C三艘军舰要同时开始鸣放礼炮各21响。
已知A舰每隔5秒放1次,B舰每隔6秒放1次,C舰每隔7秒放1次。
假设各炮手对时间的掌握非常准确,请编程计算观众总共可以听到几次礼炮声
    
//计算重复的炮声
int cf(int n,int m,int m2) {
	//n=n*m,m=5;
	int i,j,count=0;
	for (i = m; i<= n * m; i +=m) {
		for (j = m2; j <= n* m2; j += m2) {
			if (i == j) {
				count++;
			}
		}
	}
	return count;
}
int main()
{
	int sum = 21 * 3;
	//炮声:56重复,57重复,67重复
	sum -= cf(21, 5, 6) + cf(21, 5, 7) + cf(21, 6, 7);
	printf("%d",sum);	
	return 0;
}
    

'A',4-->BCDE(26个字母循首尾相连了)

void fun(char c, int d) {
	int i;
	char A[26], a[26], * ptr;
	for (i = 0; i < 26; i++) {
		A[i] = 'A' + i;
		a[i] = 'a' + i;
	}
	if (c >= 'a' && c <= 'z')	ptr = a;
	else	ptr = A;
	//重点是这里,字符-字符第一个,算出差
	for (i =1; i <= d; i++) {
		printf("%c",ptr[(c-ptr[0]+i)%26]);
	}
}

1+x+x^2/2! +x^3/3! +x^4/4!+......

double funS(double x, int n) {
	double f = 1, t=1;
	int i;
	for (i = 0; i < n; i++) {
		t *= x /(i + 1);
		f += t;
	}
	return f;
}

1234 ->4123->3412->2341

4123
3412
2341
1234
#define S 4
void fs(int *a) {
	int i, j, k, m;
	printf("input 4 number:");
	for (i = 0; i < S; i++)scanf("%d",a+i);
	printf("the result:\n");
	for (i = S; i >0; i--) {
		k = a[S - 1];//截取最后一位
		for (j = S - 1; j > 0; j--) {
			a[j] = a[j - 1];
		}
		a[0] = k;//最后一位放到第一位
		for (m = 0; m < S; m++)printf("%d", a[m]);
		printf("\n");
	}
}

123987-->1397

int n = 123987;
	int t,s=1,m=0;
	while (n) {
        if(n%2){
         t = n % 10;
		m+= t* s;
		s = s * 10;   
        }
		n /= 10;
	}
	printf("%d", m);

123987--->789321

int n = 123987;
	int t,s=0;
	while (n) {
		t = n % 10;
		s = s * 10 + t;
		n /= 10;
	}
	printf("%d", s);

abcdabssswwabdd 最后子串ab -- 99,替换 返回abcdabsssww99dd

void kk(char* s, char* t1, char* t2, char* w) {
	char* p, * r, * a = s;
	strcpy(w, s);

	//找到最后ab的位置
	while (*w) {
		p = w, r = t1;
		while (*r) {
			if (*r == *p)	r++, p++;
			else break;
			if (*r == '\0')a = w;
		}
		w++;
	}
	//99->ab
	r= t2;
	while (*r) {
		*a = *r; 
		a++, r++;
	}
}
int main()
{
	char s[100] = { 0 }, t1[100] = { 0 }, t2[100] = {0}, w[100];
	gets(s);	gets(t1);	gets(t2);
	if (strlen(t1)==strlen(t2)) {
		kk(s,t1,t2,w);
		puts(w);
	}
	else	printf("strlen(t1)!=strlen(t2)\n");
	return 0;
}

计算字符串里的单词,空格为分隔符

char string[81];
	int i, num = 0, word = 0;
	char c;
	gets(string);
	for (i = 0; (c = string[i])!='\0'; i++)
		if (c ==' ') word = 0;
		else if (word == 0)
		{
			word = 1;
			num++;
		}
	printf("There are % d words in this line\n", num);

幻方,魔法阵

int funL(int(*a)[N]) {
	int i, j, m1, m2, row, colum;
	m1 = m2 = 0;
	for (i = 0; i < N; i++) {
		j = N - i - 1;
		m1 += a[i][i];
		m2 += a[i][j];
	}
	if (m1 != m2)return 0;
	for (i = 0; i < N; i++) {
		row = colum = 0;
		for (j = 0; j < N; j++) {
			row += a[i][j];
			colum += a[j][i];
		}
		if ((row != colum) || (row != m1))return 0;
	}
	return 1;
}
int main(){
	int x[N][N], i, j;
	for (i = 0; i < N; i++)
		for (j = 0; j < N; j++)
			scanf("%d", &x[i][j]);
	printf("\nArray:\n");
	for (i = 0; i < N; i++) {
		for (j = 0; j < N; j++)
			printf("%d", x[i][j]);
		printf("\n");
	}
	if (funL(x))printf("the Array is a magic square\n");
	else printf("not");
	return 0;
}

1 4 2 3 9 6 5 8 7-->9 1 8 2 7 3 6 4 5

//最大,最小,次大,次小
void funM(int a[]) {
	int i, j, max, min, px, pn, t;
	for (i = 0; i < 9 - 1; i += 2) {
		max = min = a[i];
		px = pn = i;
		for (j = i + 1; j < 9; j++) {
			if (max < a[j]) {
				max = a[j]; px = j;
			}
			if (min > a[j]) {
				min = a[j]; pn = j;
			}
		}
		if (px != i) {
			t = a[i];
			a[i] = max;
			a[px] = t;
			if (pn == i)pn = px;
		}
		if (pn!=i+1) {
			t = a[i+1];
			a[i+1] = min;
			a[pn] = t;
		}
	}
}

ABCDE -->EDCBAABCDE

void funB(char* s, char* t) {
	int i, s1;
	s1 = strlen(s);
	for (i = 0; i < s1; i++) {
		t[i] = s[s1 - i-1];
	}
	for (i = 0; i < s1; i++) {
		t[s1+i] = s[i];
	}
	t[2 * s1] = '\0';
}

int main(){
	char s[100], t[100];
	gets(s);
	funB(s, t);
	puts(t);
	return 0;
}
//指针法
void funB(char* s, char* t) {
	while (*s)s++;
	s--;
	for (int i = 0; i <strlen(s); i++, t++, s--) {
		*t = *s;
	}
	s++;
	while (*t++ = *s++);
}

ababsdaabdwq中ab的个数:3

int opq(char* s, char* t) {
	char* p, * r;
	int n = 0;
	while (*s) {
		p = s, r = t;
		while (*r) {
			if (*p == *r) {
				p++, r++;
			}
			else break;
		}
		if (*r =='\0')n++;
		s++;
	}
	return n;
}

字符串转数字(包含负数)

long fnhh(char* p) {
	int i,flag, len = strlen(p);
	flag = 1, i = 0;
	long x = 0;
	if (*p == '-') {
		p++;
		i++;
		flag = -1;
	}else if (*p == '+') {
		p++;
		i++;
	}

	for (; i < len; i++, p++) {
		x = x * 10 + *p - '0';
	}
	x*=flag;
	return x;
}

一个字符串末尾,超过n个,就除去多余的

void funuu(char* a, int n) {
	int i=0, k = 0;
	char* p, * t;
	p = t = a;
	while (*t)t++;
	t--;
	while (*t == '*') {
		k++;
		t--;
	}
	//*的个数>n的话就删除掉超过n的*
	if (k > n) {
		while (*p && p < t + n + 1) {
			a[i] = *p;
			i++;
			p++;
		}
		a[i] = '\0';
	}
}

abcde 指定删除下标3 -->abce

void jj(char a[], int n) {
	int i, k = 0;
	char* b = a;
	for (i = 0; a[i]!='\0'; i++) {
		if (i != n)b[k++] = a[i];
	}
	b[k] = '\0';
}

插入一个数,按原先的排序输出

int a[11] = { 0 };
	int i, j, temp;
	printf("请输入10个整数:\n");
	for (i = 0; i < 10; i++)
		scanf("%d", &a[i]);
	for (i = 0; i < 9; i++) {
		for (j = 0; j < 9 - i; j++) {
			if (a[j]<a[j + 1]) {
				temp = a[j], a[j] = a[j + 1], a[j + 1] = temp;
			}
		}
	}
printf("\ninput anumber:");
	scanf("%d",&temp);

	for (i = 0; i < 10; i++) {
		if (temp > a[i]) {
			break;
		}
	}
	//往后移
	for(j = 9; j >=i; j--) {
		a[j + 1] = a[j];
	}
	a[i] = temp;
	printf("\n插入后从大到小排序后:\n");
	for (i = 0; i < 11; i++)
		printf("%d\t",a[i]);

从大到小,双向插入排序

	int i, j, k, t;
	int a[] = { 40,23,45,66,21,440 };
	int len = sizeof(a) / sizeof(a[0]);
	int flag;

	for (k = 0; k < len / 2; k++) {
		flag = 0;
		for (i = 0; i <= k; i++) {
			for (j = i; j > 0 && a[j] < a[j + 1]; j++) {
				flag = 1;
				t = a[j], a[j] = a[j + 1], a[j + 1] = t;
			}
		}
		for (i = len; i > k; i--) {
			for (j = i; j<len && a[j]>a[j - 1]; j++) {
				flag = 1;
				t = a[j], a[j] = a[j-1], a[j-1] = t;
			}
		}
		if (flag == 0)break;
	}

	for (i = 0; i < len; i++)
		printf("%d\t", a[i]);c

对半查找

char a[12] = "adfgikmnprs", c;
	puts(a);
	int i, left=0, right=11, mid;
	printf("input a character:\n");
	scanf("%c", &c);
	while (left <=right) {
		mid = (left + right) / 2;
		if (c == a[mid]) {
			printf("the position is :%d\n", mid + 1);
			break;
		}else if (c > a[mid]) left = mid + 1;
		else right = mid - 1;
	}	
	if (left > right)printf("不在a字符串里\n");

输入若干个数,统计0-4,统计统同一的整数个数

	int a[50], c[5] = {0}, i, n = 0, x;
	printf("enter 1-4,to end with -1\n");
	scanf("%d", &x);
	while (x != -1) {
		if (x >= 0 && x <= 4) {
			a[n++] = x;
			scanf("%d", &x);
		}else scanf("%d", &x);
	}
	for (i = 0; i < n; i++) {
		c[a[i]]++;
	}
	printf("the result is:\n");
	for (i = 0; i <5; i++) {
		printf("%d:%d\n", i, c[i]);
	}

两个数组(a,b)分别依次把小的数加入第三个数组里(c)

int a[8] = { 3,6,7,9,11,14,18,20 };
	int b[5] = { 1,2,13,15,17 };
	int c[13];
	int i = 0, j = 0, k = 0;
	while (i < 8 && j < 5) {
		if (a[i] < b[j])c[k++] = a[i++];
		else c[k++] = b[j++];
	}
	while (i < 8)
	c[k++] = a[i++];
	while (j< 5)
	c[k++] = a[j++];
	for (i = 0; i < 13; i++)
		printf("%d\t", c[i]);

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值