一些杂乱的C语言算法

将字符串从小写转换为大写

在下面的程序中,将要求用户输入小写的String,然后程序会将其转换为大写的String。程序中遵循的逻辑:所有小写字母(a-z)的ASCII值均在97至122之间,而其相应的大写字母(A-Z)的ASCII值均比其小32。例如,“ a”的ASCII值为97,而“ A”的ASCII值为65(97-32)。其他字母也一样。基于此逻辑,编写了以下C程序进行转换。

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

int main(int argc, char const *argv[])
{
	char str[128];
	int i;

	printf("Enter the string:");
	scanf("%s",str);

	for (i = 0; i <= strlen(str);i++){
		if(str[i] >= 97 && str[i] <= 122)
			str[i] = str[i] - 32;
	}
	
	printf("\nUpper Case String is : %s",str);
	printf("\n");

	return 0;
}

编译输出:

在这里插入图片描述
显示用户输入的字符的ASCII的值

ASCII值将英文字符表示为数字,每个字母分配有一个0到127之间的数字。例如:

#include <stdio.h>

int main(int argc, char const *argv[]){

    char ch;
    printf("Enter any character:");

    scanf("%c", &ch);

    /*
    
     使用格式说明符,我们可以获得ASCII码
     个字符。当我们将%d格式说明符用于
     char变量,然后显示char的ASCII值
     
     */ 
    
    printf("ASCII value of character %c is: %d", ch, ch);
    printf("\n");
    return 0;
}

编译输出:
在这里插入图片描述

使用指针查找最大数量

在下面的程序中,我们有三个整数num1,num2和num3。我们已分配这三个数字的地址,以三分p1,p2和p3分别。我们使用if else语句对存储在指针所指向的地址处的值进行了比较。

#include <stdio.h>

int main(int argc, char const *argv[]){

    int num1, num2, num3;
    int *p1, *p2, *p3;

    printf("Enter First Number: ");
    scanf("%d",&num1);
    printf("Enter Second Number: ");
    scanf("%d",&num2);
    printf("Enter Third Number: ");
    scanf("%d",&num3);

    //将输入数字的地址分配给指针
    p1 = &num1;
    p2 = &num2;
    p3 = &num3;
    if(*p1 > *p2){
        if(*p1 > *p3){
            printf("%d is the largest number", *p1);
        }
        else{
            printf("%d is the largest number", *p3);
        }
    }

    else{
        if(*p2 > *p3){
            printf("%d is the largest number", *p2);
        }
        else{
            printf("%d is the largest number", *p3);
        }
    }

    printf("\n");

    return 0;
}

编译输出:

在这里插入图片描述

检查数字是否为回文

如果数字保持不变,即使我们反转其数字,该数字也称为回文数。例如12321是回文数,因为如果我们反转其数字,它将保持不变。

#include<stdio.h>

int check_palindrome(int num){

   static int reverse_num=0,rem;

   if(num!=0){

      rem=num%10;
      reverse_num=reverse_num*10+rem;
      check_palindrome(num/10);
   }

   return reverse_num;
}
int main(){
   
   int num, reverse_num;

   printf("Enter a number: ");
   scanf("%d",&num);

   reverse_num = check_palindrome(num);

   if(num==reverse_num)
      printf("%d is a palindrome number",num);
   else
      printf("%d is not a palindrome number",num);


   printf("\n");

   return 0;
}

编译输出:

在这里插入图片描述
检查元音或辅音

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

int main(){


    char ch;
    bool isVowel = false;

    printf("Enter an alphabet: ");
    scanf("%c",&ch);

    if(ch=='a'||ch=='A'||ch=='e'||ch=='E'||ch=='i'||ch=='I'
         ||ch=='o'||ch=='O'||ch=='u'||ch=='U')
    {
      isVowel = true;

    }
    if (isVowel == true)
        printf("%c is a Vowel", ch);
    else
        printf("%c is a Consonant", ch);

    printf("\n");
    return 0;
}

编译输出:

在这里插入图片描述
使用递归反转字符串

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

void reverse_string(char*, int, int);

int main(){

    char string_array[150]; //此数组最多可容纳150个
    printf("Enter any string:");
    scanf("%s", &string_array);
 
    //调用我们用户定义的函数
    reverse_string(string_array, 0, strlen(string_array)-1);
    printf("\nReversed String is: %s",string_array);

    printf("\n");
 
    return 0;
}
 
void reverse_string(char *x, int start, int end)
{
    char ch;
    if (start >= end)
       return;
 
    ch = *(x+start);
    *(x+start) = *(x+end);
    *(x+end) = ch;
 
    reverse_string(x, ++start, --end);
}

编译输出:
在这里插入图片描述
使用递归的数组元素的总和

#include<stdio.h>

int sum_array_elements( int arr[], int n );

int main(){

   int array[] = {1,2,3,4,5,6,7};
   int sum;
   sum = sum_array_elements(array,6);
   printf("\nSum of array elements is:%d",sum);
   printf("\n");

   return 0;
}


int sum_array_elements( int arr[], int n ) {
   if (n < 0) {

     return 0;
   } else{

     return arr[n] + sum_array_elements(arr, n-1);
    }
}


编译输出:

在这里插入图片描述

使用指针的数组元素的总和

#include<stdio.h>

int main(){

   int array[5];
   int i,sum=0;
   int *ptr;

   printf("\nEnter array elements (5 integer values):");

   for(i=0;i<5;i++)
      scanf("%d",&array[i]);

   /* 
     array = &array[0] */
   ptr = array;

   for(i=0;i<5;i++) 
   {
      //*ptr 指地址
      sum = sum + *ptr;
      ptr++;
   }

   printf("\nThe sum is: %d",sum);
   printf("\n");

   return 0;
}

编译输出:

在这里插入图片描述
以升序排列数字

下面的程序提示用户输入n个数字,一旦用户输入完这些数字,该程序将对其进行排序并以升序显示。

#include<stdio.h>

void sort_numbers_ascending(int number[], int count){
   int temp, i, j, k;
   for (j = 0; j < count; ++j){
      for (k = j + 1; k < count; ++k){
         if (number[j] > number[k]){
            temp = number[j];
            number[j] = number[k];
            number[k] = temp;
         }
      }
   }

   printf("Numbers in ascending order:\n");
   for (i = 0; i < count; ++i)
      printf("%d\n", number[i]);
}


int main(){
  
   int i, count, number[20];
 
   printf("How many numbers you are gonna enter:");
   scanf("%d", &count);
   printf("\nEnter the numbers one by one:");
   
   for (i = 0; i < count; ++i)
      scanf("%d", &number[i]);
 
   sort_numbers_ascending(number, count);

   return 0;
}


编译输出:

在这里插入图片描述

二进制转换为十进制

创建了一个用户定义的函数,binaryToDecimal()用于从二进制到十进制的转换。该程序将二进制数(由用户输入)作为输入,并使用函数将其转换为十进制数。

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

int binaryToDecimal(long binarynum){
    int decimalnum = 0, temp = 0, remainder;

    while (binarynum!=0){
        remainder = binarynum % 10;
        binarynum = binarynum / 10;
        decimalnum = decimalnum + remainder*pow(2,temp);
        temp++;
    }
    return decimalnum;
}

int main(){

    long binarynum;
    printf("Enter a binary number: ");
    scanf("%ld", &binarynum);

    printf("Equivalent decimal number is: %d", binaryToDecimal(binarynum));

    printf("\n");
    return 0;
};

编译输出:

在这里插入图片描述

在这里插入图片描述

欢迎关注公众号【程序猿编码】,添加本人微信号(17865354792),回复:领取学习资料。进入技术交流群。网盘资料有如下:

在这里插入图片描述

发布了131 篇原创文章 · 获赞 115 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/chen1415886044/article/details/105306498