题目一:计算一个整数的位数。
输入在一行中给出一个绝对值不超过109的整数N,输出N的位数。



#include <stdio.h>
#include <math.h>
int main()
{
int n,i;
scanf("%d",&n);
int m = abs(n);
if(n==0)
{
printf("%d",1);}
else{
for(i=0;m>0;i++)
{
m=m/10;
}
printf("%d",i);
}
return 0;
}
题目二:计算平均成绩并统计不及格人数


#include <stdio.h>
int main()
{
int a[205],n=0,i=0,h=0;//i需要初始化
double sum=0;
while(~scanf("%d",&a[i])){
if(a[i]>=0){
n++;
sum=sum+a[i];
i++;//这一步超级关键!!!
//没有的话 数组只在a[0]处有数据 往后都是随机值
}
else{
break;
}
}
double t=sum*1.0/n;
printf("Average = %.2f\n",t);
for(i=0;i<n;i++)
{
if(a[i]<60){
h++;
}
}
printf("Count = %d",h);
return 0;
}
👆 这样写的话少考虑 (1)没有不及格(2)输入的第一个数是负数时 只输出Average

题目三:查找整数
题目要求:


**因为查找需要使用循环一一比对,那么在比对之后发现没有这个数如何输出Not Found呢??**
#include <stdio.h>
int main()
{
int x,y;
scanf("%d%d",&x,&y);
int a[25]={0};
for(int i=0;i<x;i++){
scanf("%d",&a[i]);
}
int t=1,f=1;
for(int i=0;i<x;i++){
if(a[i]==y){
f=0;
break; //一定要写break!!不然循环会走else
}
else{
t++;
}
}
if(f==0){
printf("%d",t);
}
else{
printf("Not Found");
}
return 0;
}
but!!

实际上是我没有审清楚题目,要求输出的是该数组的数组序号,所以11行把t的初始值定为0即可
题目四:计算矩阵两个对角线之和

题目要求也不难 我写了一个这样的函数
#include <stdio.h>
int main()
{
int a[15][15]={0},n;
int t=0;
scanf("%d",&n);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
scanf("%d",&a[i][j]);
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if((j==i)||j+i==n-1){//主要就是这一步!!右上角到左下角的这一条对角线满足行数和列数求和是n-1!!!
t=t+a[i][j];
}
}
}
printf("sum = %d",t);
return 0;
}
题目五:交换最小值和最大值(PTA 7-5)

这题需要注意的就是只把最大值和最小值放在首位,其他的顺序是不能改变的
#include <stdio.h>
int main()
{
int n,i,j,x;
scanf("%d",&n);
int a[15];
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
int max,min;
min=a[0];
//找最小值
for(i=1;i<n;i++){
if(min>a[i])
{
min=a[i];
j=i;
}
}
a[j]=a[0];
a[0]=min;//有了这一步就可以保证数据的顺序不改变了
//而不是我之前想的遇到比min小的就交换 顺序会发生改变
max=a[0];
for(int i=1;i<n;i++){
if(max<a[i]){
max=a[i];
j=i;
}
}
a[j]=a[n-1];
a[n-1]=max;
for(i=0;i<n;i++)
printf("%d ",a[i]);
}
题目六:矩阵顺时针旋转90度

#include <stdio.h>
int main()
{
int n,m;
scanf("%d%d",&n,&m);
int a[105][105],b[105][105];
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
scanf("%d",&a[i][j]);
}
}
//行列交换
for(int j=0;j<m;j++){
for(int i=0;i<n;i++){
int t=a[i][j];
a[i][j]=b[j][i];
b[j][i]=t;
}
}
//行不变 列交换
for(int j=0;j<m;j++){
for(int i=0;i<n/2;i++){
int t=b[j][i];
b[j][i]=b[j][n-i-1];
b[j][n-1-i]=t;
}
}
for(int j=0;j<m;j++){
for(int i=0;i<n;i++){
printf("%d ",b[j][i]);
}
printf("\n");
}
return 0;
}
注意好for循环的条件就好啦!!!(自己写出来咯!!奖励一个大拇指👍)