练习1:
#include<stdio.h>
/*
#include <string.h>
加了这一行:报错原因系统里根本就没有软件需要的运行库。
具体错误为:debug library
*/
/*
键盘输入一行字符;统计字母、空格、数字、其他字符的个数
注意:用get()只能得到7个字符元素,末尾会自动补上'\0';
输入8个数字后,会出现Stack around the variable 'xxx' was corrupted 的错误,后来发现是数组越界造成的
只能输7个元素
*/
void main(){
int i=0;
char array[8]; //数组类型的定义
int countNum=0; //数字字符计数
int countChart=0;//字母字符计数
int countKG=0; //空格字符计数
int countOther=0;//其他字符计数
//键盘输出字符串
/*
/格式化输入字符串,由于数组名就代表着数组的首地址
不需要再对数组名array取地址:
正确方式:scanf("%s",array);//字符串
C语言规定了'\0'作为字符串常量在内存中的结束标志
字符串(后续会提到)
思考:
for(i=0;i<8;i++){
scanf("%c",&array[i]);
if(i==7){
printf("输入数组的元素个数已经够50个了\n");
}
}
*/
gets(array);//键盘输入字符串
printf("%s\n",array);//输出字符串
//计数
for(i=0;i<8;i++){
if('0'<=array[i]&&array[i]<='9'){
countNum++;//数字字符计数
continue;
}else if(array[i]==' '){
countKG++;//空格字符计数
continue;
}else if(('a'<=array[i]&&array[i]<='z')||('A'<=array[i]&&array[i]<='Z')){
countChart++;//字母字符计数
continue;
}else{
countOther++;//其他字符计数
continue;
}
}
printf("数字个数:%d\n",countNum);
printf("空格个数:%d\n",countKG);
printf("字母个数:%d\n",countChart);
printf("其它字符个数:%d\n",countOther);
}
练习2:
/*
题目要求:
计算1-1/2+1/3-1/4+...+1/99-1/100
分析:加减是循环交替的,联想到奇偶交替
用i%2判断此时是“+”还是“-”
*/
//头文件
#include<stdio.h>
//主函数
void main(){
int MAX;
int i;
double sum=0;
scanf_s("%d",&MAX);//键盘输入
for(i=0;i<MAX;i++){
if(i%2==0){
sum=sum+1.0/(i+1);
continue;
}else{
sum=sum-1.0/(i+1);
continue;
}
}
printf("1-1/2+1/3-1/4+...+1/99-1/100=%f\n",sum);
}
练习3:
/*
矩阵转置:m*n转置成n*m的
分析:涉及到二维数组的定义:
以整型为例:int array[3][4];
键盘输入数组时:每一行的元素要以空格结束,一行输完后,回车输入下一行或者输入一行每个元素以空格隔开
*/
#include<stdio.h>
//主函数
void main(){
int array[3][4];
int i;
int j;
//键盘循环输入
for(i=0;i<3;i++){
for(j=0;j<4;j++){
scanf("%d",&array[i][j]);
}
}
//为了与反转后的做对比
printf("翻转前的数组:\n");
for(i=0;i<3;i++){
for(j=0;j<4;j++){
printf("%d\t",array[i][j]);//制表符
}
printf("\n");//换行
}
int arrayInv[4][3];//保存翻转后的数组
//数组每一个元素翻转
for(i=0;i<4;i++){
for(j=0;j<3;j++){
arrayInv[i][j]=array[j][i];
}
}
printf("翻转后的数组:\n");
for(i=0;i<4;i++){
for(j=0;j<3;j++){
printf("%d\t",arrayInv[i][j]);//制表符
}
printf("\n");//换行
}
}