如有错误,请多多指教
文章目录
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);
}