C语言练习记录

如有错误,请多多指教

1.编写一个交换变量值的C函数,交换数组a和数组b中的对应元素。
1.编写一个交换变量值的C函数,交换数组a和数组b中的对应元素。
a[5]={1,2,3,4,5}
b[5]={10,20,30,40,50}
**输出格式要求:"a[%d]=%2d, "   "b[%d]=%2d, "
程序运行示例如下:
a[0]=10, a[1]=20, a[2]=30, a[3]=40, a[4]=50, 
b[0]= 1, b[1]= 2, b[2]= 3, b[3]= 4, b[4]= 5,
#include<stdio.h>
void change(int *p,int *q);
int  main()
{	
	int a[5]={1,2,3,4,5};
	int b[5]={10,20,30,40,50};
	change(a,b);	
	
	for(int i=0;i<5;i++)
	{
		printf("a[%d]=%2d, ",i,a[i]);	
	}
	
	printf("\n");
	for(int j=0;j<5;j++)
	{
		printf("b[%d]=%2d, ",j,b[j]);
	}

	return 0;
}
void change(int *p,int *q)
{
	int a[5];
	int *temp=a;
	int i=0;
	while(i<5)
	{
		*temp=*p;
		*p=*q;
		*q=*temp;
		temp++;
		p++;
		q++;
		i++;
	}
	
	
	
	
}
2.从键盘任意输入两个整数,编程实现将其交换后再重新输出。
#include  <stdio.h>
void  Swap(int *x, int *y);
int main()
{
    int  a, b;
    printf("Please enter a,b:");
    scanf("%d,%d", &a, &b);              
    printf("Before swap: a = %d, b = %d\n", a, b);
    Swap(&a, &b);                                      
    printf("After swap: a = %d, b = %d\n", a, b);
    return 0;
}
void Swap(int *x, int *y)             
{
    int  temp;
    temp = *x;                          
    *x = *y;               
    *y = temp;           
}
3.写一个rtrim()函数消除字符串后面的空格字符。编main函数调用测试它。
写一个rtrim()函数消除字符串后面的空格字符。编main函数调用测试它。

**提示信息:"请输入一个字符串:"
**输出格式要求:"去掉右边的空格后为%s!\n"

程序运行示例:
请输入一个字符串:hkhnk
去掉右边的空格后为hkhnk!
#include <stdio.h>
#include <string.h>

int rtrim(char *s)
{		 	      
    int  i = strlen(s) - 1;

    for ( ; i >= 0; i--)
        if (s[i] != '\t' && s[i] != ' ' && s[i] != '\n')
            break;
    s[i + 1] = '\0';

    return  i;
}		 	      

int main()
{		 	      
    char str[100];

    printf("请输入一个字符串:");
    gets(str);

    rtrim(str);
    printf("去掉右边的空格后为%s!\n", str);
}		 	      
4.从键盘输入某年某月(包括闰年),编程输出该年的该月拥有的天数。
#include<stdio.h>
#define MONTHS 12
int main(){
    int days[2][MONTHS]={{31,28,31,30,31,30,31,31,30,31,30,31},
    {31,29,31,30,31,30,31,31,30,31,30,31}};
    int year,month;
    do{
    printf("Input year,month:");
    scanf("%d,%d",&year,&month);
    }while(month<1||month>12);
    if(((year%4==0)&&(year%100 !=0))||(year%400==0))
        printf("The number of days is %d\n",days[1][month-1]);
    else
        printf("The number of days is %d\n",days[0][month-1]);

    return 0;
}
5.输入字符串,包含:字母、数字、标点符号,以及空格字符,并将其逆序输出。
输入字符串,包含:字母、数字、标点符号,以及空格字符,并将其逆序输出。
例如,当输入字符串为“I am a student.”,输出为“.tneduts a ma I”,假设字符数组最大长度为30。
输入提示信息:"Please Enter String1:\n"
输入格式:gets()
输出格式:"Result is:\n%s\n"
#include <string.h>
#include <stdio.h>
#define N 30
int main()
{		     	 	  
    char string1[N], string2[N];
    int i = 0, j;
    printf("Please Enter String1:\n");
    gets(string1);                  //1
    while (string1[i] != '\0')      //1
    {		     	 	  
        string2[i] = string1[i];    //1
        i++;                        //1
    }
    for (j = 0; j < i; j++)         //1
    {		     	 	  
        string1[j] = string2[i - 1 - j]; //2
    }
    printf("Result is:\n%s\n", string1);
    return 0;
}		     	 	  

6.按如下函数原型编写程序,输入n×n阶矩阵,用函数编程计算并输出其两条对角线上的各元素之和。
void InputMatrix(int a[N][N], int n);
int AddDiagonal(int a[N][N], int n);

输入提示信息:
"Input n:"
"Input %d*%d matrix:\n"
输入格式:"%d"
输出提示信息和输出格式:"sum = %d\n"
#include<stdio.h>
#define N 10
void InputMatrix(int a[N][N], int n);
int AddDiagonal(int a[N][N], int n);
int main()
{
	int sum;
	int a[N][N];
	int n;
	
	printf("Input n:");
	scanf("%d",&n);
	printf("Input %d*%d matrix:\n",n,n);
	
	InputMatrix(a, n);
	sum=AddDiagonal(a, n);
	
	printf("sum = %d\n",sum); 

	return 0;
}
void InputMatrix(int a[N][N], int n)
{
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			scanf("%d",&a[i][j]);
		
		}
	}
	
}
int AddDiagonal(int a[N][N], int n)
{
	int sum=0;
	for(int i=0;i<n;i++)
	{    
		sum+=a[i][i];
	}
	for(int j=0;j<n;j++)
	{
		sum+=a[j][n-j-1];
	}
	if(n%2==0)
	{
		
		return sum;
	}
	else
	{
		for(int p=0,q=n-1;p<n&&q>=0;p++,q--)
		{
			if(q==p)
			{
				sum-=a[q][q];
			}
		}
		return sum;
	}
}
7.输入一行字符,统计其中的英文字符、数字字符、空格字符,以及其他字符的个数。
#include <stdio.h> 
#include <string.h> 
  
#define ARR_SIZE  80
  
main() 
{ 
    char str[ARR_SIZE]; 
    long long unsigned int  len, i; 
    int  letter=0,digit=0,space=0,other=0; 
  
    printf("请输入一个字符串:"); 
    gets(str); 
  
    len = strlen(str);     
  
    for (i=0; i<len; i++) 
    { 
        if (('a'<=str[i]&&str[i]<='z') || ('A'<=str[i]&&str[i]<='Z')) 
        { 
            letter ++;    
        }                 
        else if ('0'<=str[i]&&str[i]<='9')  
        { 
            digit ++;       
        }             
        else if (str[i]==' ' )    
        {                    
            space ++;      
        }         
        else 
            other ++;              
    } 
  
    printf("英文字符数:%d\n", letter); 
    printf("数字字符数:%d\n", digit); 
    printf("空格数:%d\n", space); 
    printf("其他字符数:%d\n", other); 
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值