1.倒序输出自己学号后四位,要求用到变量a, b, c, d, xuehao; 2.已知"int x=10, y=12;”将×和y值互换后输出;C语言程序设计
时间: 2024-09-22 18:04:49 浏览: 62
首先,关于1.在C语言中,为了实现倒序输出学号后四位的变量,我们可以创建四个临时变量a、b、c和d,并通过ASCII转换将整数学号分割存储。假设xuehao是以字符串形式存在的:
```c
#include <stdio.h>
#include <string.h>
void reverse(int xuehao[]) {
char a = xuehao[3]; // 存储最后一位
char b = xuehao[2];
char c = xuehao[1];
char d = xuehao[0];
printf("倒序后的后四位: %c%c%c%c\n", d, c, b, a);
}
int main() {
int xuehao[] = {'1', '2', '3', '4', '5678'}; // 假设学号为"5678"
reverse(xuehao + 4); // 只处理后四位
return 0;
}
```
对于2. 将两个整数x和y的值互换,可以利用一个临时变量t来完成:
```c
#include <stdio.h>
int main() {
int x = 10, y = 12;
int t = x; // 创建临时变量存储x的值
x = y; // 将y的值赋给x
y = t; // 将临时变量t的值赋给y
printf("交换后的值: x=%d, y=%d\n", x, y);
return 0;
}
```
相关问题
#include<stdio.h> #include<string.h> int main() { char xuehao[46];int p[46]={0};char xingming[46],compare[46]; for(int i=1;i<=45;i++) { scanf("%s",&xuehao[i]); } for(int i=1;i<=45;i++) { scanf("%s",&xingming[i]); } //读取录入姓名学号,未重复的为p==0 //读取做完的学生信息,姓名和学号串 int n=0; while(scanf("%s",&compare[n])!=EOF) { n++; } int s=45-n;//s为未完成的人数量 int i=0; for(i=1;i<=n;i++) { if(11==str.lenth(compare[i])) { for(int j=1;j<=45;j++) { if(compare[i]==xuehao[j]){p[j]=1;} } } } return 0; }
这段代码存在一些问题:
1. 在读取学号和姓名时,应该使用"%s"格式化符,而不是"&"。
2. 在比较字符串长度时,应该使用strlen函数,而不是str.lenth。
3. 在循环比较学号和姓名时,应该从0开始,而不是从1开始。
下面是修改后的代码:
```
#include <stdio.h>
#include <string.h>
int main() {
char xuehao[46];
int p[46] = {0};
char xingming[46], compare[46];
for (int i = 1; i <= 45; i++) {
scanf("%s", xuehao + i);
}
for (int i = 1; i <= 45; i++) {
scanf("%s", xingming + i);
}
//读取录入姓名学号,未重复的为p==0
//读取做完的学生信息,姓名和学号串
int n = 0;
while (scanf("%s", compare + n) != EOF) {
n++;
}
int s = 45 - n; //s为未完成的人数量
int i = 0;
for (i = 0; i < n; i++) {
if (11 == strlen(compare + i)) {
for (int j = 1; j <= 45; j++) {
if (strcmp(compare + i, xuehao + j) == 0) {
p[j] = 1;
}
}
}
}
return 0;
}
```
#include<stdio.h> #include<string.h> typedef struct student { char xuehao[9]; char name[11]; char phone[12]; char email[21]; }STU; int main() { int m,n; scanf("%d",&m); STU stu[m]; for(int i=1;i<=m;i++) { scanf("%s %s %s %s",stu[i].xuehao,stu[i].name,stu[i].phone,stu[i].email); } scanf("%d",&n); for(int j=1;j<=n;j++) { char key[21]; int op=0; STU stu[m]; int found=0; scanf("%d",&op); switch(op) { case 1: scanf("%s",key); for(int k=1;k<=m;k++) { if(strcmp(stu[k].xuehao,key) ==0) { printf("%d\n",k); found=1; } } case 2: scanf("%s",key); for(int k=1;k<=m;k++) { if(strcmp(stu[k].xuehao,key) ==0) { printf("%d\n",k); found=1; } } case 3: scanf("%s",key); for(int k=1;k<=m;k++) { if(strcmp(stu[k].xuehao,key) ==0) { printf("%d\n",k); found=1; } } if(found == 0) { printf("Not Found\n"); } } } }
这段代码有一些问题。
首先,在定义结构体数组 `STU stu[m]` 时,`m` 是一个变量,需要使用动态内存分配。可以使用 `malloc()` 函数来实现:
```
STU *stu = (STU*) malloc(m * sizeof(STU));
```
其次,在 `case` 语句中,虽然分别对应不同的操作,但是三个 `case` 语句的内容都是一样的,这是错误的。应该分别对应不同的操作,例如:
```
case 1:
scanf("%s",key);
for(int k=0;k<m;k++)
{
if(strcmp(stu[k].xuehao,key) ==0)
{
printf("%d\n",k+1);
found=1;
break;
}
}
if(found == 0)
{
printf("Not Found\n");
}
break;
case 2:
scanf("%s",key);
for(int k=0;k<m;k++)
{
if(strcmp(stu[k].name,key) ==0)
{
printf("%d\n",k+1);
found=1;
break;
}
}
if(found == 0)
{
printf("Not Found\n");
}
break;
case 3:
scanf("%s",key);
for(int k=0;k<m;k++)
{
if(strcmp(stu[k].phone,key) ==0)
{
printf("%d\n",k+1);
found=1;
break;
}
}
if(found == 0)
{
printf("Not Found\n");
}
break;
```
最后,在循环中,每次输入一个操作后,又重新定义了一个 `STU stu[m]`,这样会使之前输入的信息全部丢失。应该将 `STU stu[m]` 的定义放在循环外面,而每次进行查找操作时,只需要使用之前输入的信息即可。
阅读全文